1
0
mirror of https://github.com/schollz/croc.git synced 2024-11-30 23:52:07 +03:00

add spinner

This commit is contained in:
Zack Scholl 2018-06-26 07:43:22 -07:00
parent 3e5aa91f34
commit 6d7911ab24

View File

@ -18,6 +18,7 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/briandowns/spinner"
"github.com/dustin/go-humanize" "github.com/dustin/go-humanize"
homedir "github.com/mitchellh/go-homedir" homedir "github.com/mitchellh/go-homedir"
"github.com/schollz/croc/keypair" "github.com/schollz/croc/keypair"
@ -49,6 +50,7 @@ type Connection struct {
rate int rate int
keypair keypair.KeyPair keypair keypair.KeyPair
encryptedPassword string encryptedPassword string
spinner *spinner.Spinner
} }
type FileMetaData struct { type FileMetaData struct {
@ -144,7 +146,9 @@ func NewConnection(config *AppConfig) (*Connection, error) {
} }
if info.Mode().IsDir() { // if our file is a dir if info.Mode().IsDir() { // if our file is a dir
fmt.Println("Compressing folder...") c.spinner = spinner.New(spinner.CharSets[24], 100*time.Millisecond) // Build our new spinner
c.spinner.Suffix = " Compressing folder.."
c.spinner.Start()
// we "tarify" the file // we "tarify" the file
log.Debugf("compressing %s to %s", config.File, path.Base(config.File)+".tar") log.Debugf("compressing %s to %s", config.File, path.Base(config.File)+".tar")
@ -157,6 +161,7 @@ func NewConnection(config *AppConfig) (*Connection, error) {
config.File = path.Base(config.File) + ".tar" config.File = path.Base(config.File) + ".tar"
// we set the value IsDir to true // we set the value IsDir to true
c.File.IsDir = true c.File.IsDir = true
c.spinner.Stop()
} }
c.File.Name = path.Base(config.File) c.File.Name = path.Base(config.File)
c.File.Path = path.Dir(config.File) c.File.Path = path.Dir(config.File)
@ -225,7 +230,10 @@ func (c *Connection) Run() error {
} else { } else {
fmt.Fprintf(os.Stderr, "Sending %s file named '%s'\n", humanize.Bytes(uint64(c.File.Size)), c.File.Name) fmt.Fprintf(os.Stderr, "Sending %s file named '%s'\n", humanize.Bytes(uint64(c.File.Size)), c.File.Name)
} }
fmt.Fprintf(os.Stderr, "Code is: %s\n", c.Code) fmt.Fprintf(os.Stderr, "Code is: %s\n\n", c.Code)
c.spinner = spinner.New(spinner.CharSets[24], 100*time.Millisecond) // Build our new spinner
c.spinner.Suffix = " Waiting for recipient.."
c.spinner.Start()
log.Debug("starting relay in case local connections") log.Debug("starting relay in case local connections")
relay := NewRelay(&AppConfig{ relay := NewRelay(&AppConfig{
@ -261,7 +269,6 @@ func (c *Connection) Run() error {
}() }()
} }
} }
fmt.Fprintf(os.Stderr, "Your public key: %s\n", c.keypair.Public)
log.Debug("checking code validity") log.Debug("checking code validity")
if len(c.Code) == 0 && !c.IsSender { if len(c.Code) == 0 && !c.IsSender {
@ -399,7 +406,9 @@ func (c *Connection) runClient(serverName string) error {
publicKeyRecipient := receiveMessage(connection) publicKeyRecipient := receiveMessage(connection)
// check if okay again // check if okay again
if id == 0 { if id == 0 {
fmt.Fprintf(os.Stderr, "Send to public key: %s\n", publicKeyRecipient) c.spinner.Stop()
fmt.Fprintf(os.Stderr, "Your public key: %s\n", c.keypair.Public)
fmt.Fprintf(os.Stderr, "Recipient public key: %s\n", publicKeyRecipient)
getOK := "y" getOK := "y"
if !c.Yes { if !c.Yes {
getOK = getInput("ok? (y/n): ") getOK = getInput("ok? (y/n): ")
@ -446,11 +455,15 @@ func (c *Connection) runClient(serverName string) error {
c.File.IsEncrypted = false c.File.IsEncrypted = false
} else { } else {
// encrypt // encrypt
c.spinner = spinner.New(spinner.CharSets[24], 100*time.Millisecond) // Build our new spinner
c.spinner.Suffix = " Encrypting..."
c.spinner.Start()
log.Debugf("encrypting %s with passphrase [%s]", path.Join(c.File.Path, c.File.Name), passphraseString) log.Debugf("encrypting %s with passphrase [%s]", path.Join(c.File.Path, c.File.Name), passphraseString)
if err := EncryptFile(path.Join(c.File.Path, c.File.Name), c.File.Name+".enc", passphraseString); err != nil { if err := EncryptFile(path.Join(c.File.Path, c.File.Name), c.File.Name+".enc", passphraseString); err != nil {
panic(err) panic(err)
} }
c.File.IsEncrypted = true c.File.IsEncrypted = true
c.spinner.Stop()
} }
// split file into pieces to send // split file into pieces to send
if err := SplitFile(c.File.Name+".enc", c.NumberOfConnections); err != nil { if err := SplitFile(c.File.Name+".enc", c.NumberOfConnections); err != nil {
@ -541,6 +554,7 @@ func (c *Connection) runClient(serverName string) error {
} }
log.Debugf("meta data received: %v", c.File) log.Debugf("meta data received: %v", c.File)
fType := "file" fType := "file"
c.Path = "."
fName := path.Join(c.Path, c.File.Name) fName := path.Join(c.Path, c.File.Name)
if c.File.IsDir { if c.File.IsDir {
fType = "folder" fType = "folder"
@ -551,7 +565,6 @@ func (c *Connection) runClient(serverName string) error {
} else { } else {
fmt.Fprintf(os.Stderr, "Overwriting %s %s (%s)\n", fType, fName, humanize.Bytes(uint64(c.File.Size))) fmt.Fprintf(os.Stderr, "Overwriting %s %s (%s)\n", fType, fName, humanize.Bytes(uint64(c.File.Size)))
} }
fmt.Fprintf(os.Stderr, "from public key: "+publicKeySender+"\n")
var sentFileNames []string var sentFileNames []string
if c.AskPath { if c.AskPath {
@ -564,6 +577,8 @@ func (c *Connection) runClient(serverName string) error {
fmt.Fprintf(os.Stderr, "Will not overwrite file!") fmt.Fprintf(os.Stderr, "Will not overwrite file!")
os.Exit(1) os.Exit(1)
} }
fmt.Fprintf(os.Stderr, "Your public key: %s\n", c.keypair.Public)
fmt.Fprintf(os.Stderr, "Sender public key: %s\n", publicKeySender)
getOK := "y" getOK := "y"
if !c.Yes { if !c.Yes {
getOK = getInput("ok? (y/n): ") getOK = getInput("ok? (y/n): ")
@ -692,8 +707,13 @@ func (c *Connection) runClient(serverName string) error {
} else { } else {
log.Debugf("is encrypted: %+v", c.File.IsEncrypted) log.Debugf("is encrypted: %+v", c.File.IsEncrypted)
if c.File.IsEncrypted { if c.File.IsEncrypted {
c.spinner = spinner.New(spinner.CharSets[24], 100*time.Millisecond) // Build our new spinner
c.spinner.Suffix = " Decrypting file.."
c.spinner.Start()
log.Debugf("decrypting file with [%s]", c.encryptedPassword) log.Debugf("decrypting file with [%s]", c.encryptedPassword)
if err := DecryptFile(path.Join(c.Path, c.File.Name+".enc"), path.Join(c.Path, c.File.Name), c.encryptedPassword); err != nil { err := DecryptFile(path.Join(c.Path, c.File.Name+".enc"), path.Join(c.Path, c.File.Name), c.encryptedPassword)
c.spinner.Stop()
if err != nil {
log.Error(err) log.Error(err)
return errors.Wrap(err, "Problem decrypting file") return errors.Wrap(err, "Problem decrypting file")
} }