payload.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package payload
  2. import (
  3. "os"
  4. "path/filepath"
  5. "github.com/claudiodangelis/qrcp/util"
  6. )
  7. // Payload to transfer
  8. type Payload struct {
  9. Filename string
  10. Path string
  11. DeleteAfterTransfer bool
  12. }
  13. // Delete the payload from disk
  14. func (p Payload) Delete() error {
  15. return os.RemoveAll(p.Path)
  16. }
  17. // FromArgs returns a payload from args
  18. func FromArgs(args []string, zipFlag bool) (Payload, error) {
  19. shouldzip := len(args) > 1 || zipFlag
  20. var files []string
  21. // Check if content exists
  22. for _, arg := range args {
  23. file, err := os.Stat(arg)
  24. if err != nil {
  25. return Payload{}, err
  26. }
  27. // If at least one argument is dir, the content will be zipped
  28. if file.IsDir() {
  29. shouldzip = true
  30. }
  31. files = append(files, arg)
  32. }
  33. // Prepare the content
  34. // TODO: Research cleaner code
  35. var content string
  36. if shouldzip {
  37. zip, err := util.ZipFiles(files)
  38. if err != nil {
  39. return Payload{}, err
  40. }
  41. content = zip
  42. } else {
  43. content = args[0]
  44. }
  45. return Payload{
  46. Path: content,
  47. Filename: filepath.Base(content),
  48. DeleteAfterTransfer: shouldzip,
  49. }, nil
  50. }