diff --git a/config.go b/config.go index 31bfeeb..a70af89 100644 --- a/config.go +++ b/config.go @@ -117,10 +117,7 @@ func (config *Config) ReadFile(filePath string) { } // Execute action specified in config -func (config *Config) ExecuteAction(srcDir string) { - // Get user's home directory - homeDir, err := os.UserHomeDir() - if err != nil { log.Fatal().Err(err).Msg("Error getting home directory") } +func (config *Config) ExecuteAction(srcDir string, destDir string) { // Use ConsoleWriter logger log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}).Hook(FatalHook{}) // If action is file @@ -131,7 +128,7 @@ func (config *Config) ExecuteAction(srcDir string) { // Close source file at the end of this function defer src.Close() // Create file in user's Downloads directory - dst, err := os.Create(homeDir + "/Downloads/" + config.ActionData) + dst, err := os.Create(filepath.Clean(destDir) + "/" + config.ActionData) if err != nil { log.Fatal().Err(err).Msg("Error creating file") } // Close destination file at the end of this function defer dst.Close() @@ -146,7 +143,7 @@ func (config *Config) ExecuteAction(srcDir string) { // If action is dir } else if config.ActionType == "dir" { // Set destination directory to ~/Downloads/{dir name} - dstDir := homeDir + "/Downloads/" + config.ActionData + dstDir := filepath.Clean(destDir) + "/" + config.ActionData // Try to create destination directory err := os.MkdirAll(dstDir, 0755) if err != nil { log.Fatal().Err(err).Msg("Error creating directory") } @@ -179,7 +176,7 @@ func (config *Config) ExecuteAction(srcDir string) { // If regular file case tar.TypeReg: // Try to create containing folder ignoring errors - _ = os.MkdirAll(strings.TrimSuffix(targetPath, filepath.Base(targetPath)), 0755) + _ = os.MkdirAll(filepath.Dir(targetPath), 0755) // Create file with mode contained in header at target path dstFile, err := os.OpenFile(targetPath, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode)) if err != nil { log.Fatal().Err(err).Msg("Error creating file during unarchiving") } diff --git a/files.go b/files.go index ed7aac4..cd23582 100644 --- a/files.go +++ b/files.go @@ -130,7 +130,7 @@ func RecvFiles(senderAddr string) { response, err = http.Get(serverAddr + "/index") // If no error, set index failed to false if err == nil { indexGetFailed = false } - // Wait 500s + // Wait 500ms time.Sleep(500*time.Millisecond) } } diff --git a/main.go b/main.go index 494e4eb..e978779 100644 --- a/main.go +++ b/main.go @@ -49,12 +49,14 @@ func main() { // Create --send-to flag to send to a specific IP sendTo := flag.String("send-to", "", "Use IP address of receiver instead of mDNS") + // Create --dest-dir flag to save to a specified folder + destDir := flag.String("dest-dir", homeDir + "/Downloads", "Destination directory for files or dirs sent over opensend") + // Create --skip-mdns to skip service registration + skipMdns := flag.Bool("skip-mdns", false, "Skip zeroconf service registration (use if mdns fails)") // Create -t flag for type actionType := flag.String("t", "","Type of data being sent") // Create -d flag for data actionData := flag.String("d", "", "Data to send") - // Create --skip-mdns to skip service registration - skipMdns := flag.Bool("skip-mdns", false, "Skip zeroconf service registration (use if mdns fails)") // Create -s flag for sending sendFlag := flag.Bool("s", false, "Send data") // Create -r flag for receiving @@ -174,7 +176,7 @@ func main() { // Notify user that action is being executed log.Info().Msg("Executing JSON action") // Execute JSON action using files within opensend directory - config.ExecuteAction(opensendDir) + config.ExecuteAction(opensendDir, *destDir) } else { flag.Usage() log.Fatal().Msg("You must choose sender or receiver mode using -s or -r")