mirror of https://github.com/schollz/croc.git
#463 fixed display at receiving end
This commit is contained in:
parent
b316c0159f
commit
2ad8b1f1ce
|
@ -95,6 +95,7 @@ type Client struct {
|
||||||
// send / receive information of all files
|
// send / receive information of all files
|
||||||
FilesToTransfer []FileInfo
|
FilesToTransfer []FileInfo
|
||||||
EmptyFoldersToTransfer []FileInfo
|
EmptyFoldersToTransfer []FileInfo
|
||||||
|
TotalNumberOfContents int
|
||||||
TotalNumberFolders int
|
TotalNumberFolders int
|
||||||
FilesToTransferCurrentNum int
|
FilesToTransferCurrentNum int
|
||||||
FilesHasFinished map[int]struct{}
|
FilesHasFinished map[int]struct{}
|
||||||
|
@ -474,7 +475,7 @@ func (c *Client) transferOverLocalRelay(errchan chan<- error) {
|
||||||
func (c *Client) Send(filesInfo []FileInfo, emptyFoldersToTransfer []FileInfo, totalNumberFolders int) (err error) {
|
func (c *Client) Send(filesInfo []FileInfo, emptyFoldersToTransfer []FileInfo, totalNumberFolders int) (err error) {
|
||||||
c.EmptyFoldersToTransfer = emptyFoldersToTransfer
|
c.EmptyFoldersToTransfer = emptyFoldersToTransfer
|
||||||
c.TotalNumberFolders = totalNumberFolders
|
c.TotalNumberFolders = totalNumberFolders
|
||||||
|
c.TotalNumberOfContents = len(filesInfo)
|
||||||
err = c.sendCollectFiles(filesInfo)
|
err = c.sendCollectFiles(filesInfo)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -892,6 +893,28 @@ func (c *Client) transfer() (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Client) createEmptyFolder(i int) (err error) {
|
||||||
|
err = os.MkdirAll(c.EmptyFoldersToTransfer[i].FolderRemote, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Fprintf(os.Stderr, "%s\n", c.EmptyFoldersToTransfer[i].FolderRemote)
|
||||||
|
c.bar = progressbar.NewOptions64(1,
|
||||||
|
progressbar.OptionOnCompletion(func() {
|
||||||
|
c.fmtPrintUpdate()
|
||||||
|
}),
|
||||||
|
progressbar.OptionSetWidth(20),
|
||||||
|
progressbar.OptionSetDescription(" "),
|
||||||
|
progressbar.OptionSetRenderBlankState(true),
|
||||||
|
progressbar.OptionShowBytes(true),
|
||||||
|
progressbar.OptionShowCount(),
|
||||||
|
progressbar.OptionSetWriter(os.Stderr),
|
||||||
|
progressbar.OptionSetVisibility(!c.Options.SendingText),
|
||||||
|
)
|
||||||
|
c.bar.Finish()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error) {
|
func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error) {
|
||||||
var senderInfo SenderInfo
|
var senderInfo SenderInfo
|
||||||
err = json.Unmarshal(m.Bytes, &senderInfo)
|
err = json.Unmarshal(m.Bytes, &senderInfo)
|
||||||
|
@ -904,6 +927,15 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error
|
||||||
c.Options.HashAlgorithm = senderInfo.HashAlgorithm
|
c.Options.HashAlgorithm = senderInfo.HashAlgorithm
|
||||||
c.EmptyFoldersToTransfer = senderInfo.EmptyFoldersToTransfer
|
c.EmptyFoldersToTransfer = senderInfo.EmptyFoldersToTransfer
|
||||||
c.TotalNumberFolders = senderInfo.TotalNumberFolders
|
c.TotalNumberFolders = senderInfo.TotalNumberFolders
|
||||||
|
c.FilesToTransfer = senderInfo.FilesToTransfer
|
||||||
|
c.TotalNumberOfContents = 0
|
||||||
|
if c.FilesToTransfer != nil {
|
||||||
|
c.TotalNumberOfContents += len(c.FilesToTransfer)
|
||||||
|
}
|
||||||
|
if c.EmptyFoldersToTransfer != nil {
|
||||||
|
c.TotalNumberOfContents += len(c.EmptyFoldersToTransfer)
|
||||||
|
}
|
||||||
|
|
||||||
if c.Options.HashAlgorithm == "" {
|
if c.Options.HashAlgorithm == "" {
|
||||||
c.Options.HashAlgorithm = "xxhash"
|
c.Options.HashAlgorithm = "xxhash"
|
||||||
}
|
}
|
||||||
|
@ -914,7 +946,7 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error
|
||||||
if c.Options.SendingText {
|
if c.Options.SendingText {
|
||||||
c.Options.Stdout = true
|
c.Options.Stdout = true
|
||||||
}
|
}
|
||||||
c.FilesToTransfer = senderInfo.FilesToTransfer
|
|
||||||
fname := fmt.Sprintf("%d files", len(c.FilesToTransfer))
|
fname := fmt.Sprintf("%d files", len(c.FilesToTransfer))
|
||||||
folderName := fmt.Sprintf("%d folders", c.TotalNumberFolders)
|
folderName := fmt.Sprintf("%d folders", c.TotalNumberFolders)
|
||||||
if len(c.FilesToTransfer) == 1 {
|
if len(c.FilesToTransfer) == 1 {
|
||||||
|
@ -963,25 +995,27 @@ func (c *Client) processMessageFileInfo(m message.Message) (done bool, err error
|
||||||
fmt.Fprintf(os.Stderr, "\nReceiving (<-%s)\n", c.ExternalIPConnected)
|
fmt.Fprintf(os.Stderr, "\nReceiving (<-%s)\n", c.ExternalIPConnected)
|
||||||
|
|
||||||
for i := 0; i < len(c.EmptyFoldersToTransfer); i += 1 {
|
for i := 0; i < len(c.EmptyFoldersToTransfer); i += 1 {
|
||||||
errMkDirAll := os.MkdirAll(c.EmptyFoldersToTransfer[i].FolderRemote, os.ModePerm)
|
_, errExists := os.Stat(c.EmptyFoldersToTransfer[i].FolderRemote)
|
||||||
if err != nil {
|
if os.IsNotExist(errExists) {
|
||||||
err = errMkDirAll
|
err = c.createEmptyFolder(i)
|
||||||
return
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
isEmpty, _ := isEmptyFolder(c.EmptyFoldersToTransfer[i].FolderRemote)
|
||||||
|
if !isEmpty {
|
||||||
|
log.Debug("asking to overwrite")
|
||||||
|
prompt := fmt.Sprintf("\n%s already has some content in it. \nDo you want"+
|
||||||
|
" to overwrite it with an empty folder? (y/N) ", c.EmptyFoldersToTransfer[i].FolderRemote)
|
||||||
|
choice := strings.ToLower(utils.GetInput(prompt))
|
||||||
|
if choice == "y" || choice == "yes" {
|
||||||
|
err = c.createEmptyFolder(i)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fmt.Fprintf(os.Stderr, "%s\n", c.EmptyFoldersToTransfer[i].FolderRemote)
|
|
||||||
c.bar = progressbar.NewOptions64(1,
|
|
||||||
progressbar.OptionOnCompletion(func() {
|
|
||||||
c.fmtPrintUpdate()
|
|
||||||
}),
|
|
||||||
progressbar.OptionSetWidth(20),
|
|
||||||
progressbar.OptionSetDescription(" "),
|
|
||||||
progressbar.OptionSetRenderBlankState(true),
|
|
||||||
progressbar.OptionShowBytes(true),
|
|
||||||
progressbar.OptionShowCount(),
|
|
||||||
progressbar.OptionSetWriter(os.Stderr),
|
|
||||||
progressbar.OptionSetVisibility(!c.Options.SendingText),
|
|
||||||
)
|
|
||||||
c.bar.Finish()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no files are to be transfered, then we can end the file transfer process
|
// if no files are to be transfered, then we can end the file transfer process
|
||||||
|
@ -1478,8 +1512,8 @@ func (c *Client) updateIfRecipientHasFileInfo() (err error) {
|
||||||
|
|
||||||
func (c *Client) fmtPrintUpdate() {
|
func (c *Client) fmtPrintUpdate() {
|
||||||
c.finishedNum++
|
c.finishedNum++
|
||||||
if len(c.FilesToTransfer) > 1 {
|
if c.TotalNumberOfContents > 1 {
|
||||||
fmt.Fprintf(os.Stderr, " %d/%d\n", c.finishedNum, len(c.FilesToTransfer))
|
fmt.Fprintf(os.Stderr, " %d/%d\n", c.finishedNum, c.TotalNumberOfContents)
|
||||||
} else {
|
} else {
|
||||||
fmt.Fprintf(os.Stderr, "\n")
|
fmt.Fprintf(os.Stderr, "\n")
|
||||||
}
|
}
|
||||||
|
@ -1554,9 +1588,9 @@ func (c *Client) updateState() (err error) {
|
||||||
func (c *Client) setBar() {
|
func (c *Client) setBar() {
|
||||||
description := fmt.Sprintf("%-*s", c.longestFilename, c.FilesToTransfer[c.FilesToTransferCurrentNum].Name)
|
description := fmt.Sprintf("%-*s", c.longestFilename, c.FilesToTransfer[c.FilesToTransferCurrentNum].Name)
|
||||||
folder, _ := filepath.Split(c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderRemote)
|
folder, _ := filepath.Split(c.FilesToTransfer[c.FilesToTransferCurrentNum].FolderRemote)
|
||||||
if len(c.FilesToTransfer) == 1 {
|
if folder == "./" {
|
||||||
description = c.FilesToTransfer[c.FilesToTransferCurrentNum].Name
|
description = c.FilesToTransfer[c.FilesToTransferCurrentNum].Name
|
||||||
} else if !c.Options.IsSender && folder != "./" {
|
} else if !c.Options.IsSender {
|
||||||
description = " " + description
|
description = " " + description
|
||||||
}
|
}
|
||||||
c.bar = progressbar.NewOptions64(
|
c.bar = progressbar.NewOptions64(
|
||||||
|
|
|
@ -91,6 +91,7 @@ func TestCrocReadme(t *testing.T) {
|
||||||
func TestCrocEmptyFolder(t *testing.T) {
|
func TestCrocEmptyFolder(t *testing.T) {
|
||||||
pathName := "../../testEmpty"
|
pathName := "../../testEmpty"
|
||||||
defer os.RemoveAll(pathName)
|
defer os.RemoveAll(pathName)
|
||||||
|
defer os.RemoveAll("./testEmpty")
|
||||||
os.MkdirAll(pathName, 0755)
|
os.MkdirAll(pathName, 0755)
|
||||||
|
|
||||||
log.Debug("setting up sender")
|
log.Debug("setting up sender")
|
||||||
|
@ -156,6 +157,7 @@ func TestCrocEmptyFolder(t *testing.T) {
|
||||||
func TestCrocSymlink(t *testing.T) {
|
func TestCrocSymlink(t *testing.T) {
|
||||||
pathName := "../link-in-folder"
|
pathName := "../link-in-folder"
|
||||||
defer os.RemoveAll(pathName)
|
defer os.RemoveAll(pathName)
|
||||||
|
defer os.RemoveAll("./link-in-folder")
|
||||||
os.MkdirAll(pathName, 0755)
|
os.MkdirAll(pathName, 0755)
|
||||||
os.Symlink("../../README.md", filepath.Join(pathName, "README.link"))
|
os.Symlink("../../README.md", filepath.Join(pathName, "README.link"))
|
||||||
|
|
||||||
|
@ -353,7 +355,7 @@ func TestCleanUp(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Debugf("Successfuly purged %s", file)
|
log.Debugf("Successfuly purged %s", file)
|
||||||
} else {
|
} else {
|
||||||
log.Debug("%s was already purged.", file)
|
log.Debugf("%s was already purged.", file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, folder := range []string{"./testEmpty", "./link-in-folder"} {
|
for _, folder := range []string{"./testEmpty", "./link-in-folder"} {
|
||||||
|
@ -361,7 +363,7 @@ func TestCleanUp(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
log.Debugf("Successfuly purged %s", folder)
|
log.Debugf("Successfuly purged %s", folder)
|
||||||
} else {
|
} else {
|
||||||
log.Debug("%s was already purged.", folder)
|
log.Debugf("%s was already purged.", folder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue