Guest User

Untitled

a guest
Jun 20th, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. ##
  2. # This script moves all the TV series I downloaded to its respective directories.
  3. #
  4. # Created by Diogo Santos <diogo@diogosantos.com>
  5. ##
  6.  
  7. class String
  8. def camelize
  9. self.split(/[^a-z0-9]/i).map{|w| "#{w.capitalize} "}.join.chop
  10. end
  11. def contains?(str)
  12. return self.index(str) && self.index(str) > -1
  13. end
  14. def starts_with(str)
  15. return self.index(str) && self.index(str) == 0
  16. end
  17. end
  18.  
  19. class Dir
  20. def video_files
  21. files = []
  22. self.visible_entries.each do |file|
  23. file = self.path + file
  24. if File.directory?( file )
  25. files.concat( Dir.new( file + "/" ).video_files )
  26. else
  27. files << file if TV.valid_video_file?(file)
  28. end
  29. end
  30. return files
  31. end
  32. def visible_entries
  33. self.entries.delete_if {|file_name| file_name.starts_with('.') }
  34. end
  35. end
  36.  
  37. class TV
  38. LOCATION = '$HOME/Movies/TV/'
  39. EXTENSIONS = ['avi', 'mkv']
  40. attr_reader :name
  41. def initialize(name, file)
  42. @name = name
  43. @file = file
  44. end
  45. def move()
  46. %x[mv "#{@file}" "#{LOCATION + @name.camelize}"]
  47. end
  48. def TV.series
  49. Dir.new(LOCATION).visible_entries.collect {|serie_name| serie_name.downcase }
  50. end
  51. def TV.init_from_file( file )
  52. file_name = File.basename( file ).downcase
  53. TV.series.each do |serie_name|
  54. return TV.new(serie_name, file) if TV.valid_video_file?(file_name) && file_name.contains?(serie_name.tr(' ','.'))
  55. end
  56. return nil
  57. end
  58. def TV.valid_video_file?(file)
  59. file = file.downcase
  60. EXTENSIONS.each do |extension|
  61. return true if file.contains?('.' + extension) && !file.contains?("sample")
  62. end
  63. return false
  64. end
  65. end
  66.  
  67. Dir.new('$HOME/Torrents/').video_files.each do |file_name|
  68. serie = TV.init_from_file( file_name )
  69. if serie
  70. puts "#{File.basename(file_name)} identified as #{serie.name.camelize}..."
  71. serie.move
  72. else
  73. puts "#{File.basename(file_name)} not identified"
  74. end
  75. end
Add Comment
Please, Sign In to add comment