Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "errors"
  6. "log"
  7. "os"
  8. "time"
  9. "strings"
  10. "path/filepath"
  11. "gopkg.in/fsnotify.v1"
  12. "github.com/mitchellh/go-homedir"
  13. )
  14.  
  15. func isValidFile(filename string) bool {
  16. base := filepath.Base(filename)
  17. ignores := []string {".DS_Store", ".AppleDouble"}
  18. for _, ignore := range(ignores) {
  19. if base == ignore {
  20. return false
  21. }
  22. }
  23. prefixes := []string {"."}
  24. for _, prefix := range(prefixes) {
  25. if strings.HasPrefix(base, prefix) {
  26. return false
  27. }
  28. }
  29. suffixes := []string {".part", ".download", ".crdownload", "~", ".swp", ".partial"}
  30. for _, suffix := range(suffixes) {
  31. if strings.HasSuffix(base, suffix) {
  32. return false
  33. }
  34. }
  35. f, err := os.Open(filename)
  36. if err != nil {
  37. log.Println(err)
  38. return false
  39. }
  40. fi, err := f.Stat()
  41. if err != nil {
  42. log.Println(err)
  43. return false
  44. }
  45. if fi.IsDir() || fi.Size() == 0 {
  46. return false
  47. }
  48. return true
  49. }
  50.  
  51. func exists(filename string) bool {
  52. _, err := os.Stat(filename)
  53. log.Println(err)
  54. return err == nil
  55. }
  56.  
  57. func move(fpath string, destdir string) error {
  58. time.Sleep(100 * time.Millisecond)
  59. if isValidFile(fpath) {
  60. base := filepath.Base(fpath)
  61. i, dest := 0, filepath.Join(destdir, base)
  62. for exists(dest) {
  63. if i == 10 {
  64. log.Println("aaa")
  65. return errors.New("")
  66. }
  67. ext := filepath.Ext(dest)
  68. dest = strings.TrimSuffix(dest, ext) + fmt.Sprintf("-%d", i) + ext
  69. i++
  70. }
  71. if err := os.Rename(fpath, dest); err != nil {
  72. log.Println(err)
  73. return err
  74. }
  75. }
  76. return nil
  77. }
  78.  
  79. func createDir(destdir string) error {
  80. if ! exists(destdir) {
  81. if err := os.Mkdir(destdir, 0700); err != nil {
  82. log.Println(err)
  83. return err
  84. }
  85. return nil
  86. }
  87. return nil
  88. }
  89.  
  90. func main() {
  91. watcher, err := fsnotify.NewWatcher()
  92. if err != nil {
  93. os.Exit(1)
  94. }
  95. defer watcher.Close()
  96.  
  97. done := make(chan bool)
  98. go func() {
  99. for {
  100. select {
  101. case event := <-watcher.Events:
  102. switch {
  103. case event.Op & fsnotify.Create == fsnotify.Create:
  104. fpath := event.Name
  105. destdir := filepath.Join(filepath.Dir(fpath), time.Now().Format("2006-01-02"))
  106. log.Println(filepath.Dir(event.Name))
  107. log.Println(destdir)
  108. if createDir(destdir) == nil {
  109. move(fpath, destdir)
  110. }
  111. case event.Op & fsnotify.Rename == fsnotify.Rename:
  112. if strings.HasSuffix(event.Name, ".part") {
  113. fpath := strings.TrimSuffix(event.Name, ".part")
  114. destdir := filepath.Join(filepath.Dir(fpath), time.Now().Format("2006-01-02"))
  115. log.Println(destdir)
  116. if createDir(destdir) == nil {
  117. move(fpath, destdir)
  118. }
  119. }
  120. }
  121. }
  122. }
  123. }()
  124. dir, err := homedir.Expand("~/Downloads")
  125. if err != nil {
  126. os.Exit(1)
  127. }
  128. if watcher.Add(dir) != nil {
  129. os.Exit(1)
  130. }
  131. <-done
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement