mirror of
https://github.com/schollz/croc.git
synced 2025-10-11 13:21:00 +02:00
move file info stuff
This commit is contained in:
parent
e8f465060f
commit
a1e5a283f9
1 changed files with 75 additions and 73 deletions
148
src/croc/croc.go
148
src/croc/croc.go
|
@ -153,13 +153,87 @@ type TransferOptions struct {
|
||||||
|
|
||||||
// Send will send the specified file
|
// Send will send the specified file
|
||||||
func (c *Client) Send(options TransferOptions) (err error) {
|
func (c *Client) Send(options TransferOptions) (err error) {
|
||||||
|
c.FilesToTransfer = make([]FileInfo, len(options.PathToFiles))
|
||||||
|
totalFilesSize := int64(0)
|
||||||
|
for i, pathToFile := range options.PathToFiles {
|
||||||
|
var fstats os.FileInfo
|
||||||
|
var fullPath string
|
||||||
|
fullPath, err = filepath.Abs(pathToFile)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fullPath = filepath.Clean(fullPath)
|
||||||
|
var folderName string
|
||||||
|
folderName, _ = filepath.Split(fullPath)
|
||||||
|
|
||||||
|
fstats, err = os.Stat(fullPath)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.FilesToTransfer[i] = FileInfo{
|
||||||
|
Name: fstats.Name(),
|
||||||
|
FolderRemote: ".",
|
||||||
|
FolderSource: folderName,
|
||||||
|
Size: fstats.Size(),
|
||||||
|
ModTime: fstats.ModTime(),
|
||||||
|
}
|
||||||
|
c.FilesToTransfer[i].Hash, err = utils.HashFile(fullPath)
|
||||||
|
totalFilesSize += fstats.Size()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if options.KeepPathInRemote {
|
||||||
|
var curFolder string
|
||||||
|
curFolder, err = os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
curFolder, err = filepath.Abs(curFolder)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !strings.HasPrefix(folderName, curFolder) {
|
||||||
|
err = fmt.Errorf("remote directory must be relative to current")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.FilesToTransfer[i].FolderRemote = strings.TrimPrefix(folderName, curFolder)
|
||||||
|
c.FilesToTransfer[i].FolderRemote = filepath.ToSlash(c.FilesToTransfer[i].FolderRemote)
|
||||||
|
c.FilesToTransfer[i].FolderRemote = strings.TrimPrefix(c.FilesToTransfer[i].FolderRemote, "/")
|
||||||
|
if c.FilesToTransfer[i].FolderRemote == "" {
|
||||||
|
c.FilesToTransfer[i].FolderRemote = "."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.Debugf("file %d info: %+v", i, c.FilesToTransfer[i])
|
||||||
|
}
|
||||||
|
fname := fmt.Sprintf("%d files", len(c.FilesToTransfer))
|
||||||
|
if len(c.FilesToTransfer) == 1 {
|
||||||
|
fname = fmt.Sprintf("'%s'", c.FilesToTransfer[0].Name)
|
||||||
|
}
|
||||||
|
machID, macIDerr := machineid.ID()
|
||||||
|
if macIDerr != nil {
|
||||||
|
log.Error(macIDerr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(machID) > 6 {
|
||||||
|
machID = machID[:6]
|
||||||
|
}
|
||||||
|
c.machineID = machID
|
||||||
|
fmt.Fprintf(os.Stderr, "Sending %s (%s) from your machine, '%s'\n", fname, utils.ByteCountDecimal(totalFilesSize), machID)
|
||||||
|
fmt.Fprintf(os.Stderr, "Code is: %s\nOn the other computer run\n\ncroc %s\n", c.Options.SharedSecret, c.Options.SharedSecret)
|
||||||
|
// // c.spinner.Suffix = " waiting for recipient..."
|
||||||
|
// c.spinner.Start()
|
||||||
|
// create channel for quitting
|
||||||
// connect to the relay for messaging
|
// connect to the relay for messaging
|
||||||
errchan := make(chan error, 1)
|
errchan := make(chan error, 1)
|
||||||
|
|
||||||
// setup the relay locally
|
// setup the relay locally
|
||||||
for _, port := range c.Options.RelayPorts {
|
for _, port := range c.Options.RelayPorts {
|
||||||
go func(portStr string) {
|
go func(portStr string) {
|
||||||
err = tcp.Run("debug", portStr)
|
debugString := "warn"
|
||||||
|
if c.Options.Debug {
|
||||||
|
debugString = "debug"
|
||||||
|
}
|
||||||
|
err = tcp.Run(debugString, portStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -250,78 +324,6 @@ func (c *Client) Receive() (err error) {
|
||||||
func (c *Client) transfer(options TransferOptions) (err error) {
|
func (c *Client) transfer(options TransferOptions) (err error) {
|
||||||
// connect to the server
|
// connect to the server
|
||||||
|
|
||||||
if c.Options.IsSender {
|
|
||||||
c.FilesToTransfer = make([]FileInfo, len(options.PathToFiles))
|
|
||||||
totalFilesSize := int64(0)
|
|
||||||
for i, pathToFile := range options.PathToFiles {
|
|
||||||
var fstats os.FileInfo
|
|
||||||
var fullPath string
|
|
||||||
fullPath, err = filepath.Abs(pathToFile)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
fullPath = filepath.Clean(fullPath)
|
|
||||||
var folderName string
|
|
||||||
folderName, _ = filepath.Split(fullPath)
|
|
||||||
|
|
||||||
fstats, err = os.Stat(fullPath)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.FilesToTransfer[i] = FileInfo{
|
|
||||||
Name: fstats.Name(),
|
|
||||||
FolderRemote: ".",
|
|
||||||
FolderSource: folderName,
|
|
||||||
Size: fstats.Size(),
|
|
||||||
ModTime: fstats.ModTime(),
|
|
||||||
}
|
|
||||||
c.FilesToTransfer[i].Hash, err = utils.HashFile(fullPath)
|
|
||||||
totalFilesSize += fstats.Size()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if options.KeepPathInRemote {
|
|
||||||
var curFolder string
|
|
||||||
curFolder, err = os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
curFolder, err = filepath.Abs(curFolder)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !strings.HasPrefix(folderName, curFolder) {
|
|
||||||
err = fmt.Errorf("remote directory must be relative to current")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
c.FilesToTransfer[i].FolderRemote = strings.TrimPrefix(folderName, curFolder)
|
|
||||||
c.FilesToTransfer[i].FolderRemote = filepath.ToSlash(c.FilesToTransfer[i].FolderRemote)
|
|
||||||
c.FilesToTransfer[i].FolderRemote = strings.TrimPrefix(c.FilesToTransfer[i].FolderRemote, "/")
|
|
||||||
if c.FilesToTransfer[i].FolderRemote == "" {
|
|
||||||
c.FilesToTransfer[i].FolderRemote = "."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Debugf("file %d info: %+v", i, c.FilesToTransfer[i])
|
|
||||||
}
|
|
||||||
fname := fmt.Sprintf("%d files", len(c.FilesToTransfer))
|
|
||||||
if len(c.FilesToTransfer) == 1 {
|
|
||||||
fname = fmt.Sprintf("'%s'", c.FilesToTransfer[0].Name)
|
|
||||||
}
|
|
||||||
machID, macIDerr := machineid.ID()
|
|
||||||
if macIDerr != nil {
|
|
||||||
log.Error(macIDerr)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if len(machID) > 6 {
|
|
||||||
machID = machID[:6]
|
|
||||||
}
|
|
||||||
c.machineID = machID
|
|
||||||
fmt.Fprintf(os.Stderr, "Sending %s (%s) from your machine, '%s'\n", fname, utils.ByteCountDecimal(totalFilesSize), machID)
|
|
||||||
fmt.Fprintf(os.Stderr, "Code is: %s\nOn the other computer run\n\ncroc %s\n", c.Options.SharedSecret, c.Options.SharedSecret)
|
|
||||||
// // c.spinner.Suffix = " waiting for recipient..."
|
|
||||||
}
|
|
||||||
// c.spinner.Start()
|
|
||||||
// create channel for quitting
|
|
||||||
// quit with c.quit <- true
|
// quit with c.quit <- true
|
||||||
c.quit = make(chan bool)
|
c.quit = make(chan bool)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue