royw-dvdprofiler2xbmc 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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