royw-dvdprofiler2xbmc 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/Rakefile +3 -3
  2. data/VERSION.yml +1 -1
  3. data/lib/dvdprofiler2xbmc/app_config.rb +8 -8
  4. data/lib/dvdprofiler2xbmc/controllers/app.rb +8 -8
  5. data/lib/dvdprofiler2xbmc/controllers/nfo_controller.rb +12 -6
  6. data/lib/dvdprofiler2xbmc/models/dvdprofiler_info.rb +15 -1
  7. data/lib/dvdprofiler2xbmc/models/media.rb +2 -1
  8. data/spec/dvdprofiler2xbmc_spec.rb +10 -8
  9. data/spec/nfo_controller_spec.rb +48 -6
  10. data/spec/samples/Collection.xml +374 -177
  11. data/spec/samples/api.themoviedb.org/2.0/{Movie.imdbLookup?imdb_id=tt0060934&api_key=7a2f6eb9b6aa01651000f0a9324db835 → Movie.imdbLookup?imdb_id=tt0028390&api_key=7a2f6eb9b6aa01651000f0a9324db835} +2 -2
  12. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0035958&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  13. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0047437&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  14. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0048445&api_key=7a2f6eb9b6aa01651000f0a9324db835 +22 -0
  15. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0048937&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  16. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0050562&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  17. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0053580&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  18. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0073636&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  19. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0084296&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  20. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0092494&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  21. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0102059&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  22. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0108171&api_key=7a2f6eb9b6aa01651000f0a9324db835 +1 -1
  23. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0114319&api_key=7a2f6eb9b6aa01651000f0a9324db835 +22 -0
  24. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0114437&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  25. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0114924&api_key=7a2f6eb9b6aa01651000f0a9324db835 +1 -1
  26. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0118617&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  27. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0213149&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  28. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0238112&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  29. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0276751&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  30. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0318974&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  31. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0368891&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  32. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0388976&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  33. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0407511&api_key=7a2f6eb9b6aa01651000f0a9324db835 +8 -0
  34. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0454824&api_key=7a2f6eb9b6aa01651000f0a9324db835 +26 -0
  35. data/spec/samples/api.themoviedb.org/2.0/Movie.imdbLookup?imdb_id=tt0465234&api_key=7a2f6eb9b6aa01651000f0a9324db835 +1 -1
  36. data/spec/samples/www.imdb.com/find?q=%2Abatteries+not+included;s=tt +16 -11
  37. data/spec/samples/www.imdb.com/find?q=About+a+Boy;s=tt +16 -11
  38. data/spec/samples/www.imdb.com/find?q=Alexander+the+Great;s=tt +15 -10
  39. data/spec/samples/www.imdb.com/find?q=Anastasia;s=tt +16 -11
  40. data/spec/samples/www.imdb.com/find?q=Call+Me%3A+The+Rise+and+Fall+of+Heidi+Fleiss;s=tt +21 -16
  41. data/spec/samples/www.imdb.com/find?q=Call+Me+The+Rise+and+Fall+of+Heidi+Fleiss;s=tt +835 -0
  42. data/spec/samples/www.imdb.com/find?q=Captain+Corelli%27s+Mandolin;s=tt +21 -16
  43. data/spec/samples/www.imdb.com/find?q=Captain+Corelli+s+Mandolin;s=tt +522 -0
  44. data/spec/samples/www.imdb.com/find?q=Flyboys;s=tt +21 -16
  45. data/spec/samples/www.imdb.com/find?q=Gung+Ho%21;s=tt +15 -10
  46. data/spec/samples/www.imdb.com/find?q=Gung+Ho;s=tt +509 -0
  47. data/spec/samples/www.imdb.com/find?q=Hot+Shots%21;s=tt +15 -10
  48. data/spec/samples/www.imdb.com/find?q=Hot+Shots;s=tt +522 -0
  49. data/spec/samples/www.imdb.com/find?q=Jet+Pilot;s=tt +505 -0
  50. data/spec/samples/www.imdb.com/find?q=Meltdown;s=tt +15 -10
  51. data/spec/samples/www.imdb.com/find?q=Mexico+Whitetails;s=tt +461 -0
  52. data/spec/samples/www.imdb.com/{find?q=National+Treasure+2;s=tt → find?q=National+Treasure+2%3A+Book+of+Secrets;s=tt} +36 -40
  53. data/spec/samples/www.imdb.com/{find?q=National+Treasure%3A+Book+of+Secrets;s=tt → find?q=National+Treasure+2+Book+of+Secrets;s=tt} +65 -74
  54. data/spec/samples/www.imdb.com/find?q=National+Treasure;s=tt +527 -0
  55. data/spec/samples/www.imdb.com/find?q=Oklahoma%21;s=tt +16 -11
  56. data/spec/samples/www.imdb.com/find?q=Oklahoma;s=tt +522 -0
  57. data/spec/samples/www.imdb.com/find?q=Pearl+Harbor+Payback+%2F+Appointment+in+Tokyo;s=tt +461 -0
  58. data/spec/samples/www.imdb.com/find?q=Pearl+Harbor+Payback+Appointment+in+Tokyo;s=tt +461 -0
  59. data/spec/samples/www.imdb.com/find?q=Pearl+Harbor;s=tt +527 -0
  60. data/spec/samples/www.imdb.com/find?q=Rodeo+Racketeers%3A+John+Wayne+Young+Duke+Series;s=tt +461 -0
  61. data/spec/samples/www.imdb.com/find?q=Rodeo+Racketeers+John+Wayne+Young+Duke+Series;s=tt +461 -0
  62. data/spec/samples/www.imdb.com/find?q=Rooster+Cogburn+%28+and+the+Lady%29;s=tt +503 -0
  63. data/spec/samples/www.imdb.com/find?q=Rooster+Cogburn+%28...and+the+Lady%29;s=tt +15 -10
  64. data/spec/samples/www.imdb.com/{find?q=rooster+cogburn;s=tt → find?q=Rooster+Cogburn;s=tt} +41 -52
  65. data/spec/samples/www.imdb.com/find?q=Sabrina;s=tt +510 -0
  66. data/spec/samples/www.imdb.com/find?q=The+Adventures+of+Indiana+Jones%3A+The+Complete+DVD+Movie+Collection;s=tt +452 -0
  67. data/spec/samples/www.imdb.com/find?q=The+Adventures+of+Indiana+Jones+The+Complete+DVD+Movie+Collection;s=tt +452 -0
  68. data/spec/samples/www.imdb.com/find?q=The+Alamo+Documentary;s=tt +501 -0
  69. data/spec/samples/www.imdb.com/find?q=The+Alamo;s=tt +22 -26
  70. data/spec/samples/www.imdb.com/find?q=The+Egg+and+I;s=tt +23 -18
  71. data/spec/samples/www.imdb.com/find?q=The+Great+American+Western%3A+Volume+6;s=tt +452 -0
  72. data/spec/samples/www.imdb.com/find?q=The+Great+American+Western+Volume+6;s=tt +452 -0
  73. data/spec/samples/www.imdb.com/find?q=The+Man+from+Snowy+River;s=tt +15 -10
  74. data/spec/samples/www.imdb.com/find?q=The+Mummy+Collector%27s+Set;s=tt +452 -0
  75. data/spec/samples/www.imdb.com/find?q=The+Mummy+Collector+s+Set;s=tt +452 -0
  76. data/spec/samples/www.imdb.com/find?q=Topper+Topper+%26+Topper+Returns;s=tt +508 -0
  77. data/spec/samples/www.imdb.com/find?q=batteries+not+included;s=tt +522 -0
  78. metadata +54 -9
data/Rakefile CHANGED
@@ -18,10 +18,10 @@ begin
18
18
  gem.add_dependency('activesupport','>= 2.0.2')
19
19
  gem.add_dependency('xml-simple','>= 1.0.12')
20
20
  gem.add_dependency('royw-read_page_cache','>= 0.0.2')
21
- gem.add_dependency('royw-roys_extensions','>= 0.0.2')
22
- gem.add_dependency('royw-imdb','>= 0.1.3')
21
+ gem.add_dependency('royw-roys_extensions','>= 0.0.3')
22
+ gem.add_dependency('royw-imdb','>= 0.1.5')
23
23
  gem.add_dependency('royw-tmdb','>= 0.1.6')
24
- gem.add_dependency('royw-dvdprofiler_collection','>= 0.1.3')
24
+ gem.add_dependency('royw-dvdprofiler_collection','>= 0.1.4')
25
25
  gem.add_dependency('log4r','>= 1.0.5')
26
26
  gem.add_dependency('commandline','>= 0.7.10')
27
27
  gem.add_dependency('mash','>= 0.0.3')
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 0
2
+ :patch: 2
3
3
  :major: 0
4
4
  :minor: 1
@@ -401,11 +401,11 @@ module AppConfig
401
401
  ].join("\n")
402
402
  @initial.media_parsers = [
403
403
  # "movie title - yyyy[res].partN.ext"
404
- {:regex => /^\s*(.*\S)\s*\-\s*(\d{4})\s*\[(\S*)\]\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
404
+ {:regex => /^\s*(.*\S)\s*\-\s*(0|\d{4})\s*\[(\S*)\]\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
405
405
  :tokens => [:title, :year, :resolution, :part, :extension]
406
406
  },
407
407
  # "movie title (yyyy)[res].partN.ext"
408
- {:regex => /^\s*(.*\S)\s*\(\s*(\d{4})\s*\)\s*\[(\S*)\]\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
408
+ {:regex => /^\s*(.*\S)\s*\(\s*(0|\d{4})\s*\)\s*\[(\S*)\]\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
409
409
  :tokens => [:title, :year, :resolution, :part, :extension]
410
410
  },
411
411
  # "movie title[res].partN.ext"
@@ -413,11 +413,11 @@ module AppConfig
413
413
  :tokens => [:title, :resolution, :part, :extension]
414
414
  },
415
415
  # "movie title - yyyy[res].ext"
416
- {:regex => /^\s*(.*\S)\s*\-\s*(\d{4})\s*\[(\S*)\]\s*\.([^.]+)\s*$/,
416
+ {:regex => /^\s*(.*\S)\s*\-\s*(0|\d{4})\s*\[(\S*)\]\s*\.([^.]+)\s*$/,
417
417
  :tokens => [:title, :year, :resolution, :extension]
418
418
  },
419
419
  # "movie title (yyyy)[res].ext"
420
- {:regex => /^\s*(.*\S)\s*\(\s*(\d{4})\s*\)\s*\[(\S*)\]\s*\.([^.]+)\s*$/,
420
+ {:regex => /^\s*(.*\S)\s*\(\s*(0|\d{4})\s*\)\s*\[(\S*)\]\s*\.([^.]+)\s*$/,
421
421
  :tokens => [:title, :year, :resolution, :extension]
422
422
  },
423
423
  # "movie title[res].ext"
@@ -425,11 +425,11 @@ module AppConfig
425
425
  :tokens => [:title, :resolution, :extension]
426
426
  },
427
427
  # "movie title - yyyy.partN.ext"
428
- {:regex => /^\s*(.*\S)\s*\-\s*(\d{4})\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
428
+ {:regex => /^\s*(.*\S)\s*\-\s*(0|\d{4})\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
429
429
  :tokens => [:title, :year, :part, :extension]
430
430
  },
431
431
  # "movie title (yyyy).partN.ext"
432
- {:regex => /^\s*(.*\S)\s*\(\s*(\d{4})\s*\)\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
432
+ {:regex => /^\s*(.*\S)\s*\(\s*(0|\d{4})\s*\)\s*\.(cd\d+|pt\d+|disk\d+|disc\d+)\.([^.]+)\s*$/,
433
433
  :tokens => [:title, :year, :part, :extension]
434
434
  },
435
435
  # "movie title.partN.ext"
@@ -437,11 +437,11 @@ module AppConfig
437
437
  :tokens => [:title, :part, :extension]
438
438
  },
439
439
  # "movie title - yyyy.ext"
440
- {:regex => /^\s*(.*\S)\s*\-\s*(\d{4})\s*\.([^.]+)\s*$/,
440
+ {:regex => /^\s*(.*\S)\s*\-\s*(0|\d{4})\s*\.([^.]+)\s*$/,
441
441
  :tokens => [:title, :year, :extension]
442
442
  },
443
443
  # "movie title (yyyy).ext"
444
- {:regex => /^\s*(.*\S)\s*\(\s*(\d{4})\s*\)\s*\.([^.]+)\s*$/,
444
+ {:regex => /^\s*(.*\S)\s*\(\s*(0|\d{4})\s*\)\s*\.([^.]+)\s*$/,
445
445
  :tokens => [:title, :year, :extension]
446
446
  },
447
447
  # "movie title.ext"
@@ -14,25 +14,25 @@ class DvdProfiler2Xbmc
14
14
  # protected initializer because it is a Singleton class
15
15
  def initialize
16
16
  @media_files = nil
17
- @multiple_profiles = []
18
17
  end
19
18
 
20
19
  public
21
20
 
22
- # == Synopsis
23
- # An Array of Strings that the external processing my write to to
24
- # indicate that a given title has multiple ISBNs.
25
- # HACK, this is a hack because I didn't see a way to cleanly pass
26
- # the data up from the processing.
27
- attr_accessor :multiple_profiles
28
-
29
21
  @interrupted = false
30
22
  @interrupt_message = "control-C detected, finishing current task"
23
+ @multiple_profiles = []
31
24
 
32
25
  class << self
33
26
  # == Synopsis
34
27
  # When ^C is pressed, this message is sent to stdout
35
28
  attr_accessor :interrupt_message
29
+
30
+ # == Synopsis
31
+ # An Array of Strings that the external processing my write to to
32
+ # indicate that a given title has multiple ISBNs.
33
+ # HACK, this is a hack because I didn't see a way to cleanly pass
34
+ # the data up from the processing.
35
+ attr_accessor :multiple_profiles
36
36
  end
37
37
 
38
38
  # == Synopsis
@@ -17,6 +17,8 @@
17
17
  # NfoController.update(media)
18
18
  class NfoController
19
19
 
20
+ attr_reader :info
21
+
20
22
  # == Synopsis
21
23
  def self.update(media)
22
24
  NfoController.new(media).update
@@ -44,18 +46,22 @@ class NfoController
44
46
  self.isbn ||= load_isbn_id
45
47
  self.imdb_id ||= load_imdb_id
46
48
 
47
- box_set_parent_titles = []
49
+ extra_titles = []
48
50
  production_years = []
49
51
  released_years = []
50
52
 
51
53
  dvdprofiler_info = load_dvdprofiler_info
52
54
  unless dvdprofiler_info.nil?
55
+ original_titles = dvdprofiler_info.original_titles
53
56
  box_set_parent_titles = dvdprofiler_info.box_set_parent_titles
57
+ extra_titles << dvdprofiler_info.title unless dvdprofiler_info.title.blank?
58
+ extra_titles += original_titles unless original_titles.blank?
59
+ extra_titles += box_set_parent_titles unless box_set_parent_titles.blank?
54
60
  production_years = dvdprofiler_info.production_years
55
61
  released_years = dvdprofiler_info.released_years
56
62
  end
57
63
 
58
- imdb_info = load_imdb_info(box_set_parent_titles, production_years, released_years)
64
+ imdb_info = load_imdb_info(extra_titles, production_years, released_years)
59
65
  unless imdb_info.nil?
60
66
  self.imdb_id ||= imdb_info.imdb_id
61
67
  end
@@ -134,10 +140,10 @@ class NfoController
134
140
  dvdprofiler_info
135
141
  end
136
142
 
137
- def load_imdb_info(box_set_parent_titles, production_years, released_years)
143
+ def load_imdb_info(extra_titles, production_years, released_years)
138
144
  imdb_info = nil
139
145
  unless File.exist?(@media.path_to(:no_imdb_lookup))
140
- possible_imdb_titles = get_imdb_titles(box_set_parent_titles)
146
+ possible_imdb_titles = get_imdb_titles(extra_titles)
141
147
  imdb_info = ImdbInfo.find(:imdb_id => self.imdb_id,
142
148
  :titles => possible_imdb_titles,
143
149
  :media_years => [@media.year.to_i],
@@ -206,11 +212,11 @@ class NfoController
206
212
 
207
213
  # == Synopsis
208
214
  # get an Array of String titles
209
- def get_imdb_titles(box_set_parent_titles)
215
+ def get_imdb_titles(extra_titles)
210
216
  titles = []
211
217
  titles << @info['title'] unless @info['title'].blank?
212
218
  titles << @media.title unless @media.title.blank?
213
- titles += box_set_parent_titles
219
+ titles += extra_titles
214
220
  titles.uniq.compact
215
221
  end
216
222
 
@@ -9,11 +9,13 @@ class DvdprofilerInfo
9
9
  # really should include at least: :title, :year, :isbn, :filespec
10
10
  def self.find(options)
11
11
  dvdprofiler_info = nil
12
+ # replace options[:year] => 0 with nil
13
+ options[:year] = (options[:year].to_i > 0 ? options[:year] : nil) unless options[:year].blank?
12
14
  # find ISBN for each title and assign to the media
13
15
  profiles = DvdprofilerProfile.all(options)
14
16
  if profiles.length > 1
15
17
  media_title = "#{options[:title]}#{options[:year].blank? ? '' : ' (' + options[:year] + ')'}"
16
- Dvdprofiler2Xbmc.multiple_profiles << "#{media_title} #{profiles.collect{|prof| prof.isbn}.join(", ")}"
18
+ DvdProfiler2Xbmc.multiple_profiles << "#{media_title} #{profiles.collect{|prof| prof.isbn}.join(", ")}"
17
19
  AppConfig[:logger].warn { "Multiple profiles found for #{media_title}" }
18
20
  else
19
21
  profile = profiles.first
@@ -105,4 +107,16 @@ class DvdprofilerInfo
105
107
  def released_years
106
108
  @profile.dvd_hash[:released] rescue []
107
109
  end
110
+
111
+ def original_titles
112
+ titles = []
113
+ originaltitle = @profile.dvd_hash[:originaltitle]
114
+ titles = [originaltitle].flatten.uniq.compact unless originaltitle.blank?
115
+ titles = titles.collect{|t| t.blank? ? nil : t}.compact
116
+ titles
117
+ end
118
+
119
+ def title
120
+ @profile.dvd_hash[:title] rescue nil
121
+ end
108
122
  end
@@ -69,6 +69,7 @@ class Media
69
69
  components = Media.parse(@media_path)
70
70
  unless components.nil?
71
71
  @year = components[:year]
72
+ @year = (@year.to_i > 0 ? @year : nil) unless @year.blank?
72
73
  @title = components[:title]
73
74
  @part = components[:part]
74
75
  @extension = components[:extension]
@@ -140,7 +141,7 @@ class Media
140
141
  # return the media's title but with the (year) appended
141
142
  def find_title_with_year(title, year)
142
143
  name = title
143
- name = "#{name} (#{year})" unless year.nil?
144
+ name = "#{name} (#{year})" unless year.blank?
144
145
  name
145
146
  end
146
147
 
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper.rb'
2
2
 
3
3
  require 'tempfile'
4
4
 
5
- FULL_REGRESSION = false
5
+ FULL_REGRESSION = true
6
6
 
7
7
  # Time to add your specs!
8
8
  # http://rspec.info/
@@ -46,7 +46,7 @@ describe "Dvdprofiler2xbmc" do
46
46
  'Meltdown',
47
47
  'Oklahoma!',
48
48
  'The Man From Snowy River',
49
- 'Rooster Cogburn',
49
+ 'Rooster Cogburn (...and the Lady)',
50
50
  'Call Me The Rise And Fall of Heidi Fleiss',
51
51
  'batteries not included',
52
52
  'Flyboys',
@@ -58,11 +58,13 @@ describe "Dvdprofiler2xbmc" do
58
58
  end
59
59
 
60
60
  if FULL_REGRESSION
61
- it "should find all Collection titles (full regression)" do
62
- profiles = Dvdprofiler.all
63
- titles = profiles.collect{|profile| profile.title}
64
- buf = regression(titles.sort)
65
- buf.should be_empty
61
+ DvdprofilerProfile.collection_filespec = File.join(SAMPLES_DIR, 'Collection.xml')
62
+ profiles = DvdprofilerProfile.all
63
+ titles = profiles.collect{|profile| profile.title}
64
+ titles.sort.each do |title|
65
+ it "should find all Collection titles (full regression) title=>#{title}" do
66
+ regression([title]).should == []
67
+ end
66
68
  end
67
69
  end
68
70
 
@@ -82,7 +84,7 @@ describe "Dvdprofiler2xbmc" do
82
84
  dvd_hash = dvdprofiler_profile.dvd_hash
83
85
  unless dvd_hash[:genres].include?('Television')
84
86
  count += 1
85
- imdb_profile = ImdbProfile.first(:titles => [dvd_hash[:title], title],
87
+ imdb_profile = ImdbProfile.first(:titles => [dvd_hash[:title], title, dvd_hash[:originaltitle]].uniq.compact,
86
88
  :production_years => dvd_hash[:productionyear],
87
89
  :released_years => dvd_hash[:released],
88
90
  :logger => AppConfig[:logger])
@@ -32,8 +32,12 @@ describe "NfoController" do
32
32
  # AppConfig[:logger].info { "media path => " + @media.media_path }
33
33
  end
34
34
 
35
- after(:all) do
35
+ after(:each) do
36
36
  Dir.glob(File.join(TMPDIR, "nfo_controller_spec*")).each { |filename| File.delete(filename) }
37
+ Dir.glob(File.join(TMPDIR, "*.m4v")).each { |filename| File.delete(filename) }
38
+ Dir.glob(File.join(TMPDIR, "*.nfo")).each { |filename| File.delete(filename) }
39
+ Dir.glob(File.join(TMPDIR, "*.xml")).each { |filename| File.delete(filename) }
40
+ Dir.glob(File.join(TMPDIR, "*.dummy")).each { |filename| File.delete(filename) }
37
41
  [:imdb_xml, :tmdb_xml, :nfo].each do |extension|
38
42
  filespec = File.join(File.dirname(__FILE__), "samples/The Egg and I.#{AppConfig[:extensions][extension]}")
39
43
  File.delete(filespec) if File.exist?(filespec)
@@ -77,9 +81,47 @@ describe "NfoController" do
77
81
  hash.should be_empty
78
82
  end
79
83
 
80
- # it "should handle different movies with the same title" do
81
- # media1 = Media.new('Sabrina - 1954')
82
- # media2 = Media.new('Sabrina - 1995')
83
- # end
84
+ it "should handle different movies with the same title" do
85
+ FileUtils.touch(File.join(TMPDIR, 'Sabrina - 1954.dummy'))
86
+ media1 = Media.new(TMPDIR, 'Sabrina - 1954.dummy')
87
+ controller1 = NfoController.new(media1)
88
+ controller1.update
89
+ FileUtils.touch(File.join(TMPDIR, 'Sabrina - 1995.dummy'))
90
+ media2 = Media.new(TMPDIR, 'Sabrina - 1995.dummy')
91
+ controller2 = NfoController.new(media2)
92
+ controller2.update
93
+ controller1.imdb_id.should_not == controller2.imdb_id
94
+ end
95
+
96
+ it "should handle all movies in Collection.xml" do
97
+ imdb_exceptions = [
98
+ 'Pearl Harbor Payback Appointment in Tokyo',
99
+ 'Rodeo Racketeers John Wayne Young Duke Series',
100
+ 'The Adventures of Indiana Jones The Complete DVD Movie Collection',
101
+ 'The Great American Western Volume 6',
102
+ 'The Mummy Collector s Set',
103
+ 'Mexico Whitetails'
104
+ ]
105
+ profiles = DvdprofilerProfile.all
106
+ titles = profiles.collect do |profile|
107
+ info = DvdprofilerInfo.new(profile)
108
+ "#{profile.title.remove_punctuation} - #{info.year}"
109
+ end
110
+ buf = []
111
+ titles.sort.each do |title|
112
+ filename = "#{title}.m4v"
113
+ FileUtils.touch(File.join(TMPDIR, filename))
114
+ media = Media.new(TMPDIR, filename)
115
+ controller = NfoController.new(media)
116
+ # debugger if title =~ /Mexico/
117
+ controller.update
118
+ buf << "Missing ISBN for #{title}" if controller.isbn.blank?
119
+ buf << "Missing IMDB ID for #{controller.info['title']}" if controller.imdb_id.blank? && !imdb_exceptions.include?(media.title)
120
+ buf << "Unexpected IMDB ID for #{controller.info['title']}" if !controller.imdb_id.blank? && imdb_exceptions.include?(media.title)
121
+ end
122
+ puts buf.join("\n") unless buf.empty?
123
+ buf.empty?.should be_true
124
+ end
125
+
126
+ end
84
127
 
85
- end