tivohmo 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG +30 -0
  4. data/Gemfile +2 -0
  5. data/README.md +4 -6
  6. data/TODO +1 -0
  7. data/contrib/tivohmo.conf +2 -2
  8. data/contrib/tivohmo.plist +1 -1
  9. data/contrib/tivohmo.yml +60 -0
  10. data/lib/tivohmo/adapters/filesystem/file_item.rb +2 -3
  11. data/lib/tivohmo/adapters/plex/category.rb +87 -6
  12. data/lib/tivohmo/adapters/plex/episode.rb +30 -11
  13. data/lib/tivohmo/adapters/plex/group.rb +20 -0
  14. data/lib/tivohmo/adapters/plex/movie.rb +15 -3
  15. data/lib/tivohmo/adapters/plex/qualified_category.rb +14 -3
  16. data/lib/tivohmo/adapters/plex/season.rb +2 -2
  17. data/lib/tivohmo/adapters/plex/section.rb +5 -5
  18. data/lib/tivohmo/adapters/plex/transcoder.rb +5 -1
  19. data/lib/tivohmo/adapters/plex.rb +1 -0
  20. data/lib/tivohmo/adapters/settings/application.rb +37 -0
  21. data/lib/tivohmo/adapters/settings/display_item.rb +35 -0
  22. data/lib/tivohmo/adapters/settings/key_container.rb +35 -0
  23. data/lib/tivohmo/adapters/settings/metadata.rb +26 -0
  24. data/lib/tivohmo/adapters/settings/reset_defaults_item.rb +39 -0
  25. data/lib/tivohmo/adapters/settings/set_value_item.rb +38 -0
  26. data/lib/tivohmo/adapters/settings/transcoder.rb +23 -0
  27. data/lib/tivohmo/adapters/settings.rb +7 -0
  28. data/lib/tivohmo/adapters/streamio/transcoder.rb +39 -1
  29. data/lib/tivohmo/api/container.rb +5 -1
  30. data/lib/tivohmo/api/item.rb +2 -0
  31. data/lib/tivohmo/api/subtitle.rb +13 -0
  32. data/lib/tivohmo/api/transcoder.rb +1 -3
  33. data/lib/tivohmo/api.rb +1 -0
  34. data/lib/tivohmo/beacon.rb +3 -3
  35. data/lib/tivohmo/cli.rb +175 -48
  36. data/lib/tivohmo/config.rb +157 -0
  37. data/lib/tivohmo/server/views/_container.builder +1 -1
  38. data/lib/tivohmo/server.rb +6 -3
  39. data/lib/tivohmo/version.rb +1 -1
  40. data/lib/tivohmo.rb +1 -0
  41. data/spec/adapters/filesystem/file_item_spec.rb +1 -1
  42. data/spec/adapters/plex/application_spec.rb +10 -1
  43. data/spec/adapters/plex/category_spec.rb +93 -20
  44. data/spec/adapters/plex/episode_spec.rb +34 -15
  45. data/spec/adapters/plex/metadata_spec.rb +5 -7
  46. data/spec/adapters/plex/movie_spec.rb +10 -7
  47. data/spec/adapters/plex/qualified_category_spec.rb +17 -17
  48. data/spec/adapters/plex/season_spec.rb +23 -4
  49. data/spec/adapters/plex/section_spec.rb +4 -4
  50. data/spec/adapters/plex/show_spec.rb +19 -4
  51. data/spec/adapters/plex/transcoder_spec.rb +2 -8
  52. data/spec/adapters/settings/application_spec.rb +25 -0
  53. data/spec/adapters/settings/display_item_spec.rb +29 -0
  54. data/spec/adapters/settings/key_container_spec.rb +33 -0
  55. data/spec/adapters/settings/metadata_spec.rb +33 -0
  56. data/spec/adapters/settings/reset_defaults_item_spec.rb +54 -0
  57. data/spec/adapters/settings/set_value_item_spec.rb +54 -0
  58. data/spec/api/container_spec.rb +12 -0
  59. data/spec/api/item_spec.rb +2 -0
  60. data/spec/api/transcoder_spec.rb +0 -1
  61. data/spec/beacon_spec.rb +3 -1
  62. data/spec/cli_spec.rb +57 -19
  63. data/spec/config_spec.rb +224 -0
  64. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Application/_children/should_get_children.yml +61 -0
  65. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_allow_disabling_subtitles.yml +424 -0
  66. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_display_non-zero_child_count_once_children_fetched.yml +653 -0
  67. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children.yml +599 -0
  68. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children_with_embedded_subtitles.yml +595 -0
  69. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children_with_subtitles.yml +482 -0
  70. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_memoize.yml +478 -0
  71. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_refresh_children_when_config_changes.yml +1245 -0
  72. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_use_category_value_for_children.yml +395 -0
  73. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_instantiate.yml +61 -0
  74. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_set_presorted_if_present.yml +61 -0
  75. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_use_category_value_for_title_if_present.yml +61 -0
  76. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate.yml +444 -0
  77. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_allow_disabling_series_id_in_metadata.yml +444 -0
  78. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_populate_metadata.yml +579 -0
  79. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Metadata/_initialize/should_instantiate.yml +296 -0
  80. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate.yml +296 -0
  81. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_metadata/should_populate_metadata.yml +296 -0
  82. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_display_non-zero_child_count_once_children_fetched.yml +220 -0
  83. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_have_children.yml +393 -0
  84. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_memoize.yml +219 -0
  85. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_initialize/should_instantiate.yml +61 -0
  86. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Season/_children/should_have_children.yml +444 -0
  87. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Season/_children/should_memoize.yml +444 -0
  88. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Season/_initialize/should_instantiate.yml +250 -0
  89. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Section/_children/should_have_category_children.yml +61 -0
  90. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Section/_children/should_memoize.yml +61 -0
  91. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Section/_initialize/should_instantiate.yml +61 -0
  92. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Show/_children/should_have_children.yml +250 -0
  93. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Show/_children/should_memoize.yml +250 -0
  94. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Show/_initialize/should_instantiate.yml +166 -0
  95. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Transcoder/_initialize/should_instantiate.yml +296 -0
  96. data/spec/server_spec.rb +31 -2
  97. data/spec/spec_helper.rb +24 -36
  98. data/tivohmo.gemspec +2 -2
  99. metadata +109 -3
@@ -0,0 +1,166 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:32400/library/sections
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - text/xml;charset=utf-8
23
+ Connection:
24
+ - close
25
+ X-Plex-Protocol:
26
+ - '1.0'
27
+ X-Plex-Content-Original-Length:
28
+ - '2991'
29
+ X-Plex-Content-Compressed-Length:
30
+ - '805'
31
+ Content-Length:
32
+ - '805'
33
+ Cache-Control:
34
+ - no-cache
35
+ body:
36
+ encoding: UTF-8
37
+ string: |
38
+ <?xml version="1.0" encoding="UTF-8"?>
39
+ <MediaContainer size="6" allowSync="0" identifier="com.plexapp.plugins.library" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1420767545" title1="Plex Library">
40
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/movie.png" key="1" type="movie" title="Adult Movies" composite="/library/sections/1/composite/1423777283" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="9113e43dc6c547eede809f9439c8e80498b4a610" updatedAt="1423777283" createdAt="1332713366">
41
+ <Location id="4" path="/Users/mconway/Movies/Adult Movies" />
42
+ </Directory>
43
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="2" type="show" title="Adult TV Shows" composite="/library/sections/2/composite/1423932892" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="af8295a272d545681d462eed8025113d09195007" updatedAt="1423932892" createdAt="1332713366">
44
+ <Location id="6" path="/Users/mconway/Movies/Adult TV Shows" />
45
+ </Directory>
46
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/movie.png" key="5" type="movie" title="Kid Movies" composite="/library/sections/5/composite/1423777310" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="340479de-6015-4e6c-9ec0-c74f936f4013" updatedAt="1423777310" createdAt="1411071543">
47
+ <Location id="9" path="/Users/mconway/Movies/Kid Movies" />
48
+ </Directory>
49
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="4" type="show" title="Kid TV Shows" composite="/library/sections/4/composite/1423777311" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="fa1dde48-f6dd-44f7-91f3-9283160dc953" updatedAt="1423777311" createdAt="1411071497">
50
+ <Location id="8" path="/Users/mconway/Movies/Kid TV Shows" />
51
+ </Directory>
52
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="1" thumb="/:/resources/movie.png" key="6" type="movie" title="Test Movies" composite="/library/sections/6/composite/1423936036" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="fbc810b7-6b51-40ba-a3c5-9a2c391e5a3d" updatedAt="1423936036" createdAt="1423935251">
53
+ <Location id="10" path="/Users/mconway/Movies/TivoHMOTest/Movies" />
54
+ </Directory>
55
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="7" type="show" title="Test TV Shows" composite="/library/sections/7/composite/1423935290" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="4c37cd05-86d7-4a34-8d5b-aa2fb261a136" updatedAt="1423935290" createdAt="1423935290">
56
+ <Location id="11" path="/Users/mconway/Movies/TivoHMOTest/TV Shows" />
57
+ </Directory>
58
+ </MediaContainer>
59
+ http_version:
60
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
61
+ - request:
62
+ method: get
63
+ uri: http://localhost:32400/library/sections/7/all
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ''
67
+ headers:
68
+ Accept-Encoding:
69
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
70
+ Accept:
71
+ - "*/*"
72
+ User-Agent:
73
+ - Ruby
74
+ response:
75
+ status:
76
+ code: 200
77
+ message: OK
78
+ headers:
79
+ Content-Type:
80
+ - text/xml;charset=utf-8
81
+ Connection:
82
+ - close
83
+ X-Plex-Protocol:
84
+ - '1.0'
85
+ X-Plex-Content-Original-Length:
86
+ - '1631'
87
+ X-Plex-Content-Compressed-Length:
88
+ - '901'
89
+ Content-Length:
90
+ - '901'
91
+ Cache-Control:
92
+ - no-cache
93
+ body:
94
+ encoding: UTF-8
95
+ string: |
96
+ <?xml version="1.0" encoding="UTF-8"?>
97
+ <MediaContainer size="1" allowSync="1" art="/:/resources/show-fanart.jpg" identifier="com.plexapp.plugins.library" librarySectionID="7" librarySectionTitle="Test TV Shows" librarySectionUUID="4c37cd05-86d7-4a34-8d5b-aa2fb261a136" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1420767545" nocache="1" thumb="/:/resources/show.png" title1="Test TV Shows" title2="All Shows" viewGroup="show" viewMode="65592">
98
+ <Directory ratingKey="1170" key="/library/metadata/1170/children" studio="NBC" type="show" title="Grimm" contentRating="TV-14" summary="Nick Burkhardt thought he prepared himself for the realities of working as a homicide detective until he started seeing things he couldn&apos;t explain. Nick&apos;s life turns upside down when his Aunt Marie reveals they are descendants of an elite group of hunters, known as &quot;Grimms,&quot; who fight to keep humanity safe from supernatural creatures. As Nick digs deeper into her past, he realizes that he will have to shoulder the responsibility of his ancestors." index="1" rating="8.3999996185302699" year="2011" thumb="/library/metadata/1170/thumb/1423935406" art="/library/metadata/1170/art/1423935406" banner="/library/metadata/1170/banner/1423935406" theme="/library/metadata/1170/theme/1423935406" duration="3600000" originallyAvailableAt="2011-10-28" leafCount="1" viewedLeafCount="0" childCount="1" addedAt="1423935401" updatedAt="1423935406">
99
+ <Genre tag="Drama" />
100
+ <Genre tag="Fantasy" />
101
+ <Role tag="David Giuntoli" />
102
+ <Role tag="Silas Weir Mitchell" />
103
+ <Role tag="Bitsie Tulloch" />
104
+ </Directory>
105
+ </MediaContainer>
106
+ http_version:
107
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
108
+ - request:
109
+ method: get
110
+ uri: http://localhost:32400/library/metadata/1170
111
+ body:
112
+ encoding: US-ASCII
113
+ string: ''
114
+ headers:
115
+ Accept-Encoding:
116
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
117
+ Accept:
118
+ - "*/*"
119
+ User-Agent:
120
+ - Ruby
121
+ response:
122
+ status:
123
+ code: 200
124
+ message: OK
125
+ headers:
126
+ Content-Type:
127
+ - text/xml;charset=utf-8
128
+ Connection:
129
+ - close
130
+ X-Plex-Protocol:
131
+ - '1.0'
132
+ X-Plex-Content-Original-Length:
133
+ - '2330'
134
+ X-Plex-Content-Compressed-Length:
135
+ - '1197'
136
+ Content-Length:
137
+ - '1197'
138
+ Cache-Control:
139
+ - no-cache
140
+ body:
141
+ encoding: UTF-8
142
+ string: |
143
+ <?xml version="1.0" encoding="UTF-8"?>
144
+ <MediaContainer size="1" allowSync="1" identifier="com.plexapp.plugins.library" librarySectionID="7" librarySectionTitle="Test TV Shows" librarySectionUUID="4c37cd05-86d7-4a34-8d5b-aa2fb261a136" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1420767545">
145
+ <Directory ratingKey="1170" key="/library/metadata/1170/children" guid="com.plexapp.agents.thetvdb://248736?lang=en" studio="NBC" type="show" title="Grimm" contentRating="TV-14" summary="Nick Burkhardt thought he prepared himself for the realities of working as a homicide detective until he started seeing things he couldn&apos;t explain. Nick&apos;s life turns upside down when his Aunt Marie reveals they are descendants of an elite group of hunters, known as &quot;Grimms,&quot; who fight to keep humanity safe from supernatural creatures. As Nick digs deeper into her past, he realizes that he will have to shoulder the responsibility of his ancestors." index="1" rating="8.3999996185302699" year="2011" thumb="/library/metadata/1170/thumb/1423935406" art="/library/metadata/1170/art/1423935406" banner="/library/metadata/1170/banner/1423935406" theme="/library/metadata/1170/theme/1423935406" duration="3600000" originallyAvailableAt="2011-10-28" leafCount="1" viewedLeafCount="0" childCount="1" addedAt="1423935401" updatedAt="1423935406">
146
+ <Genre id="88" tag="Drama" />
147
+ <Genre id="65" tag="Fantasy" />
148
+ <Genre id="1859" tag="Horror" />
149
+ <Role id="7617" tag="David Giuntoli" role="Det. Nick Burkhardt" />
150
+ <Role id="7618" tag="Silas Weir Mitchell" role="Eddie Monroe" />
151
+ <Role id="7619" tag="Bitsie Tulloch" role="Juliette Silverton" />
152
+ <Role id="2559" tag="Bree Turner" role="Rosalee Calvert" />
153
+ <Role id="7620" tag="Russell Hornsby" role="Lt. Hank Griffin" />
154
+ <Role id="7621" tag="Sasha Roiz" role="Captain Renard" />
155
+ <Role id="7622" tag="Claire Coffee" role="Adalind Schade" />
156
+ <Role id="7623" tag="Jacqueline Toboni" role="Theresa &quot;Trubel&quot; Rubel" />
157
+ <Role id="7624" tag="Mary Elizabeth Mastrantonio" role="Woman in Black / Kelly Burkhardt" />
158
+ <Role id="2924" tag="Reggie Lee" role="Sgt. Wu" />
159
+ <Role id="7625" tag="Kate Burton" role="Marie" />
160
+ <Role id="7626" tag="Elizabeth Rodriguez" role="Chavez" />
161
+ <Location path="/Users/mconway/Movies/TivoHMOTest/TV Shows/Grimm" />
162
+ </Directory>
163
+ </MediaContainer>
164
+ http_version:
165
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
166
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,296 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://localhost:32400/library/sections
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - "*/*"
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ Content-Type:
22
+ - text/xml;charset=utf-8
23
+ Connection:
24
+ - close
25
+ X-Plex-Protocol:
26
+ - '1.0'
27
+ X-Plex-Content-Original-Length:
28
+ - '2991'
29
+ X-Plex-Content-Compressed-Length:
30
+ - '805'
31
+ Content-Length:
32
+ - '805'
33
+ Cache-Control:
34
+ - no-cache
35
+ body:
36
+ encoding: UTF-8
37
+ string: |
38
+ <?xml version="1.0" encoding="UTF-8"?>
39
+ <MediaContainer size="6" allowSync="0" identifier="com.plexapp.plugins.library" mediaTagPrefix="/system/bundle/media/flags/" mediaTagVersion="1420767545" title1="Plex Library">
40
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/movie.png" key="1" type="movie" title="Adult Movies" composite="/library/sections/1/composite/1423777283" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="9113e43dc6c547eede809f9439c8e80498b4a610" updatedAt="1423777283" createdAt="1332713366">
41
+ <Location id="4" path="/Users/mconway/Movies/Adult Movies" />
42
+ </Directory>
43
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="2" type="show" title="Adult TV Shows" composite="/library/sections/2/composite/1423932892" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="af8295a272d545681d462eed8025113d09195007" updatedAt="1423932892" createdAt="1332713366">
44
+ <Location id="6" path="/Users/mconway/Movies/Adult TV Shows" />
45
+ </Directory>
46
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/movie.png" key="5" type="movie" title="Kid Movies" composite="/library/sections/5/composite/1423777310" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="340479de-6015-4e6c-9ec0-c74f936f4013" updatedAt="1423777310" createdAt="1411071543">
47
+ <Location id="9" path="/Users/mconway/Movies/Kid Movies" />
48
+ </Directory>
49
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="4" type="show" title="Kid TV Shows" composite="/library/sections/4/composite/1423777311" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="fa1dde48-f6dd-44f7-91f3-9283160dc953" updatedAt="1423777311" createdAt="1411071497">
50
+ <Location id="8" path="/Users/mconway/Movies/Kid TV Shows" />
51
+ </Directory>
52
+ <Directory allowSync="0" art="/:/resources/movie-fanart.jpg" filters="1" refreshing="1" thumb="/:/resources/movie.png" key="6" type="movie" title="Test Movies" composite="/library/sections/6/composite/1423936036" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="fbc810b7-6b51-40ba-a3c5-9a2c391e5a3d" updatedAt="1423936036" createdAt="1423935251">
53
+ <Location id="10" path="/Users/mconway/Movies/TivoHMOTest/Movies" />
54
+ </Directory>
55
+ <Directory allowSync="0" art="/:/resources/show-fanart.jpg" filters="1" refreshing="0" thumb="/:/resources/show.png" key="7" type="show" title="Test TV Shows" composite="/library/sections/7/composite/1423935290" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="4c37cd05-86d7-4a34-8d5b-aa2fb261a136" updatedAt="1423935290" createdAt="1423935290">
56
+ <Location id="11" path="/Users/mconway/Movies/TivoHMOTest/TV Shows" />
57
+ </Directory>
58
+ </MediaContainer>
59
+ http_version:
60
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
61
+ - request:
62
+ method: get
63
+ uri: http://localhost:32400/library/sections/6/all
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ''
67
+ headers:
68
+ Accept-Encoding:
69
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
70
+ Accept:
71
+ - "*/*"
72
+ User-Agent:
73
+ - Ruby
74
+ response:
75
+ status:
76
+ code: 200
77
+ message: OK
78
+ headers:
79
+ Content-Type:
80
+ - text/xml;charset=utf-8
81
+ Connection:
82
+ - close
83
+ X-Plex-Protocol:
84
+ - '1.0'
85
+ X-Plex-Content-Original-Length:
86
+ - '3651'
87
+ X-Plex-Content-Compressed-Length:
88
+ - '1713'
89
+ Content-Length:
90
+ - '1713'
91
+ Cache-Control:
92
+ - no-cache
93
+ body:
94
+ encoding: ASCII-8BIT
95
+ string: !binary |-
96
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPE1lZGlh
97
+ Q29udGFpbmVyIHNpemU9IjIiIGFsbG93U3luYz0iMSIgYXJ0PSIvOi9yZXNv
98
+ dXJjZXMvbW92aWUtZmFuYXJ0LmpwZyIgaWRlbnRpZmllcj0iY29tLnBsZXhh
99
+ cHAucGx1Z2lucy5saWJyYXJ5IiBsaWJyYXJ5U2VjdGlvbklEPSI2IiBsaWJy
100
+ YXJ5U2VjdGlvblRpdGxlPSJUZXN0IE1vdmllcyIgbGlicmFyeVNlY3Rpb25V
101
+ VUlEPSJmYmM4MTBiNy02YjUxLTQwYmEtYTNjNS05YTJjMzkxZTVhM2QiIG1l
102
+ ZGlhVGFnUHJlZml4PSIvc3lzdGVtL2J1bmRsZS9tZWRpYS9mbGFncy8iIG1l
103
+ ZGlhVGFnVmVyc2lvbj0iMTQyMDc2NzU0NSIgdGh1bWI9Ii86L3Jlc291cmNl
104
+ cy9tb3ZpZS5wbmciIHRpdGxlMT0iVGVzdCBNb3ZpZXMiIHRpdGxlMj0iQWxs
105
+ IFRlc3QgTW92aWVzIiB2aWV3R3JvdXA9Im1vdmllIiB2aWV3TW9kZT0iNjU1
106
+ OTIiPgo8VmlkZW8gcmF0aW5nS2V5PSIxMTY5IiBrZXk9Ii9saWJyYXJ5L21l
107
+ dGFkYXRhLzExNjkiIHN0dWRpbz0iVmlkaHUgVmlub2QgQ2hvcHJhIFByb2R1
108
+ Y3Rpb25zIiB0eXBlPSJtb3ZpZSIgdGl0bGU9IjMgSWRpb3RzIiBjb250ZW50
109
+ UmF0aW5nPSJQRyIgc3VtbWFyeT0iSW4gdGhlIHRyYWRpdGlvbiBvZiDigJxG
110
+ ZXJyaXMgQnVlbGxlcuKAmXMgRGF5IE9mZuKAnSBjb21lcyB0aGlzIHJlZnJl
111
+ c2hpbmcgY29tZWR5IGFib3V0IGEgcmViZWxsaW91cyBwcmFua3N0ZXIgd2l0
112
+ aCBhIGNyYWZ0eSBtaW5kIGFuZCBhIGhlYXJ0IG9mIGdvbGQuIFJhc2NhbC4g
113
+ Sm9rZXIuIERyZWFtZXIuIEdlbml1cy4uLiBZb3UmYXBvczt2ZSBuZXZlciBt
114
+ ZXQgYSBjb2xsZWdlIHN0dWRlbnQgcXVpdGUgbGlrZSAmcXVvdDtSYW5jaG8u
115
+ JnF1b3Q7IEZyb20gdGhlIG1vbWVudCBoZSBhcnJpdmVzIGF0IEluZGlhJmFw
116
+ b3M7cyBtb3N0IHByZXN0aWdpb3VzIHVuaXZlcnNpdHksIFJhbmNobyZhcG9z
117
+ O3Mgb3V0bGFuZGlzaCBzY2hlbWVzIHR1cm4gdGhlIGNhbXB1cyB1cHNpZGUg
118
+ ZG93buKAlGFsb25nIHdpdGggdGhlIGxpdmVzIG9mIGhpcyB0d28gbmV3Zm91
119
+ bmQgYmVzdCBmcmllbmRzLiBUb2dldGhlciwgdGhleSBtYWtlIGxpZmUgbWlz
120
+ ZXJhYmxlIGZvciAmcXVvdDtWaXJ1cywmcXVvdDsgdGhlIHNjaG9vbOKAmXMg
121
+ dXB0aWdodCBhbmQgaGVhcnRsZXNzIGRlYW4uIEJ1dCB3aGVuIFJhbmNobyBj
122
+ YXRjaGVzIHRoZSBleWUgb2YgdGhlIGRlYW4mYXBvcztzIHNleHkgZGF1Z2h0
123
+ ZXIsIFZpcnVzIHNldHMgaGlzIHNpZ2h0cyBvbiBmbHVua2luZyBvdXQgdGhl
124
+ ICZxdW90OzMgaWRpb3RzJnF1b3Q7IG9uY2UgYW5kIGZvciBhbGwuIiByYXRp
125
+ bmc9IjcuNjk5OTk5ODA5MjY1MTQwMyIgeWVhcj0iMjAwOSIgdGh1bWI9Ii9s
126
+ aWJyYXJ5L21ldGFkYXRhLzExNjkvdGh1bWIvMTQyMzkzNjA1NSIgYXJ0PSIv
127
+ bGlicmFyeS9tZXRhZGF0YS8xMTY5L2FydC8xNDIzOTM2MDU1IiBkdXJhdGlv
128
+ bj0iOTg1NTQ0MCIgb3JpZ2luYWxseUF2YWlsYWJsZUF0PSIyMDA5LTEyLTI1
129
+ IiBhZGRlZEF0PSIxNDIzOTM1MzUyIiB1cGRhdGVkQXQ9IjE0MjM5MzYwNTUi
130
+ Pgo8TWVkaWEgdmlkZW9SZXNvbHV0aW9uPSJzZCIgaWQ9IjEzOTkiIGR1cmF0
131
+ aW9uPSI5ODU1NDQwIiBiaXRyYXRlPSI4MDgiIHdpZHRoPSI2NDAiIGhlaWdo
132
+ dD0iMjcyIiBhc3BlY3RSYXRpbz0iMi4zNSIgYXVkaW9DaGFubmVscz0iNiIg
133
+ YXVkaW9Db2RlYz0iYWMzIiB2aWRlb0NvZGVjPSJtcGVnNCIgY29udGFpbmVy
134
+ PSJhdmkiIHZpZGVvRnJhbWVSYXRlPSJQQUwiPgo8UGFydCBpZD0iMTk1NCIg
135
+ a2V5PSIvbGlicmFyeS9wYXJ0cy8xOTU0L2ZpbGUuYXZpIiBkdXJhdGlvbj0i
136
+ OTg1NTQ0MCIgZmlsZT0iL1VzZXJzL21jb253YXkvTW92aWVzL1Rpdm9ITU9U
137
+ ZXN0L01vdmllcy8zIElkaW90cyAoMjAwOSkuYXZpIiBzaXplPSI5OTU0NDM3
138
+ ODQiIGNvbnRhaW5lcj0iYXZpIiAvPgo8L01lZGlhPgo8R2VucmUgdGFnPSJD
139
+ b21lZHkiIC8+CjxHZW5yZSB0YWc9IkRyYW1hIiAvPgo8V3JpdGVyIHRhZz0i
140
+ UmFqa3VtYXIgSGlyYW5pIiAvPgo8RGlyZWN0b3IgdGFnPSJSYWprdW1hciBI
141
+ aXJhbmkiIC8+CjxDb3VudHJ5IHRhZz0iSW5kaWEiIC8+CjxSb2xlIHRhZz0i
142
+ QWFtaXIgS2hhbiIgLz4KPFJvbGUgdGFnPSJLYXJlZW5hIEthcG9vciIgLz4K
143
+ PFJvbGUgdGFnPSJNYWRoYXZhbiIgLz4KPC9WaWRlbz4KPFZpZGVvIHJhdGlu
144
+ Z0tleT0iMTE3NSIga2V5PSIvbGlicmFyeS9tZXRhZGF0YS8xMTc1IiBzdHVk
145
+ aW89Ikd1ZXJpbGxhIEZpbG1zIiB0eXBlPSJtb3ZpZSIgdGl0bGU9Ild5cm13
146
+ b29kIiBzdW1tYXJ5PSJCYXJyeSBpcyBhIHRhbGVudGVkIG1lY2hhbmljIGFu
147
+ ZCBmYW1pbHkgbWFuIHdob3NlIGxpZmUgaXMgdG9ybiBhcGFydCBvbiB0aGUg
148
+ ZXZlIG9mIGEgem9tYmllIGFwb2NhbHlwc2UuIEhpcyBzaXN0ZXIsIEJyb29r
149
+ ZSwgaXMga2lkbmFwcGVkIGJ5IGEgc2luaXN0ZXIgdGVhbSBvZiBnYXMtbWFz
150
+ ayB3ZWFyaW5nIHNvbGRpZXJzICZhbXA7YW1wOyBleHBlcmltZW50ZWQgb24g
151
+ YnkgYSBwc3ljaG90aWMgZG9jdG9yLiBXaGlsZSBCcm9va2UgcGxhbnMgaGVy
152
+ IGVzY2FwZSBCYXJyeSBnb2VzIG91dCBvbiB0aGUgcm9hZCB0byBmaW5kIGhl
153
+ ciAmYW1wO2FtcDsgdGVhbXMgdXAgd2l0aCBCZW5ueSwgYSBmZWxsb3cgc3Vy
154
+ dml2b3IgLSB0b2dldGhlciB0aGV5IG11c3QgYXJtIHRoZW1zZWx2ZXMgYW5k
155
+ IHByZXBhcmUgdG8gYmF0dGxlIHRoZWlyIHdheSB0aHJvdWdoIGhvcmRlcyBv
156
+ ZiBmbGVzaC1lYXRpbmcgbW9uc3RlcnMgaW4gYSBoYXJzaCBBdXN0cmFsaWFu
157
+ IGJ1c2hsYW5kLiIgeWVhcj0iMjAxNSIgdGh1bWI9Ii9saWJyYXJ5L21ldGFk
158
+ YXRhLzExNzUvdGh1bWIvMTQyMzkzNjA1MSIgYXJ0PSIvbGlicmFyeS9tZXRh
159
+ ZGF0YS8xMTc1L2FydC8xNDIzOTM2MDUxIiBkdXJhdGlvbj0iNTkxNDY1OSIg
160
+ b3JpZ2luYWxseUF2YWlsYWJsZUF0PSIyMDE1LTAyLTEzIiBhZGRlZEF0PSIx
161
+ NDIzOTM2MDM2IiB1cGRhdGVkQXQ9IjE0MjM5MzYwNTEiPgo8TWVkaWEgdmlk
162
+ ZW9SZXNvbHV0aW9uPSJzZCIgaWQ9IjE0MDIiIGR1cmF0aW9uPSI1OTE0NjU5
163
+ IiBiaXRyYXRlPSI5ODkiIHdpZHRoPSI2NDAiIGhlaWdodD0iMzUyIiBhc3Bl
164
+ Y3RSYXRpbz0iMS44NSIgYXVkaW9DaGFubmVscz0iMiIgYXVkaW9Db2RlYz0i
165
+ bXAzIiB2aWRlb0NvZGVjPSJtcGVnNCIgY29udGFpbmVyPSJhdmkiIHZpZGVv
166
+ RnJhbWVSYXRlPSIyNHAiPgo8UGFydCBpZD0iMTk1NyIga2V5PSIvbGlicmFy
167
+ eS9wYXJ0cy8xOTU3L2ZpbGUuYXZpIiBkdXJhdGlvbj0iNTkxNDY1OSIgZmls
168
+ ZT0iL1VzZXJzL21jb253YXkvTW92aWVzL1Rpdm9ITU9UZXN0L01vdmllcy9X
169
+ eXJtd29vZCAoMjAxNCkuYXZpIiBzaXplPSI3MzEwMzM5MTgiIGNvbnRhaW5l
170
+ cj0iYXZpIiAvPgo8L01lZGlhPgo8R2VucmUgdGFnPSJBY3Rpb24iIC8+CjxH
171
+ ZW5yZSB0YWc9IkhvcnJvciIgLz4KPFdyaXRlciB0YWc9IktpYWggUm9hY2hl
172
+ LVR1cm5lciIgLz4KPFdyaXRlciB0YWc9IlRyaXN0YW4gUm9hY2hlLVR1cm5l
173
+ ciIgLz4KPERpcmVjdG9yIHRhZz0iS2lhaCBSb2FjaGUtVHVybmVyIiAvPgo8
174
+ Q291bnRyeSB0YWc9IkF1c3RyYWxpYSIgLz4KPFJvbGUgdGFnPSJKYXkgR2Fs
175
+ bGFnaGVyIiAvPgo8Um9sZSB0YWc9IkJpYW5jYSBCcmFkZXkiIC8+CjxSb2xl
176
+ IHRhZz0iTGVvbiBCdXJjaGlsbCIgLz4KPC9WaWRlbz4KPC9NZWRpYUNvbnRh
177
+ aW5lcj4K
178
+ http_version:
179
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
180
+ - request:
181
+ method: get
182
+ uri: http://localhost:32400/library/metadata/1169
183
+ body:
184
+ encoding: US-ASCII
185
+ string: ''
186
+ headers:
187
+ Accept-Encoding:
188
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
189
+ Accept:
190
+ - "*/*"
191
+ User-Agent:
192
+ - Ruby
193
+ response:
194
+ status:
195
+ code: 200
196
+ message: OK
197
+ headers:
198
+ Content-Type:
199
+ - text/xml;charset=utf-8
200
+ Connection:
201
+ - close
202
+ X-Plex-Protocol:
203
+ - '1.0'
204
+ X-Plex-Content-Original-Length:
205
+ - '3512'
206
+ X-Plex-Content-Compressed-Length:
207
+ - '1751'
208
+ Content-Length:
209
+ - '1751'
210
+ Cache-Control:
211
+ - no-cache
212
+ body:
213
+ encoding: ASCII-8BIT
214
+ string: !binary |-
215
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPE1lZGlh
216
+ Q29udGFpbmVyIHNpemU9IjEiIGFsbG93U3luYz0iMSIgaWRlbnRpZmllcj0i
217
+ Y29tLnBsZXhhcHAucGx1Z2lucy5saWJyYXJ5IiBsaWJyYXJ5U2VjdGlvbklE
218
+ PSI2IiBsaWJyYXJ5U2VjdGlvblRpdGxlPSJUZXN0IE1vdmllcyIgbGlicmFy
219
+ eVNlY3Rpb25VVUlEPSJmYmM4MTBiNy02YjUxLTQwYmEtYTNjNS05YTJjMzkx
220
+ ZTVhM2QiIG1lZGlhVGFnUHJlZml4PSIvc3lzdGVtL2J1bmRsZS9tZWRpYS9m
221
+ bGFncy8iIG1lZGlhVGFnVmVyc2lvbj0iMTQyMDc2NzU0NSI+CjxWaWRlbyBy
222
+ YXRpbmdLZXk9IjExNjkiIGtleT0iL2xpYnJhcnkvbWV0YWRhdGEvMTE2OSIg
223
+ Z3VpZD0iY29tLnBsZXhhcHAuYWdlbnRzLmltZGI6Ly90dDExODcwNDM/bGFu
224
+ Zz1lbiIgc3R1ZGlvPSJWaWRodSBWaW5vZCBDaG9wcmEgUHJvZHVjdGlvbnMi
225
+ IHR5cGU9Im1vdmllIiB0aXRsZT0iMyBJZGlvdHMiIGNvbnRlbnRSYXRpbmc9
226
+ IlBHIiBzdW1tYXJ5PSJJbiB0aGUgdHJhZGl0aW9uIG9mIOKAnEZlcnJpcyBC
227
+ dWVsbGVy4oCZcyBEYXkgT2Zm4oCdIGNvbWVzIHRoaXMgcmVmcmVzaGluZyBj
228
+ b21lZHkgYWJvdXQgYSByZWJlbGxpb3VzIHByYW5rc3RlciB3aXRoIGEgY3Jh
229
+ ZnR5IG1pbmQgYW5kIGEgaGVhcnQgb2YgZ29sZC4gUmFzY2FsLiBKb2tlci4g
230
+ RHJlYW1lci4gR2VuaXVzLi4uIFlvdSZhcG9zO3ZlIG5ldmVyIG1ldCBhIGNv
231
+ bGxlZ2Ugc3R1ZGVudCBxdWl0ZSBsaWtlICZxdW90O1JhbmNoby4mcXVvdDsg
232
+ RnJvbSB0aGUgbW9tZW50IGhlIGFycml2ZXMgYXQgSW5kaWEmYXBvcztzIG1v
233
+ c3QgcHJlc3RpZ2lvdXMgdW5pdmVyc2l0eSwgUmFuY2hvJmFwb3M7cyBvdXRs
234
+ YW5kaXNoIHNjaGVtZXMgdHVybiB0aGUgY2FtcHVzIHVwc2lkZSBkb3du4oCU
235
+ YWxvbmcgd2l0aCB0aGUgbGl2ZXMgb2YgaGlzIHR3byBuZXdmb3VuZCBiZXN0
236
+ IGZyaWVuZHMuIFRvZ2V0aGVyLCB0aGV5IG1ha2UgbGlmZSBtaXNlcmFibGUg
237
+ Zm9yICZxdW90O1ZpcnVzLCZxdW90OyB0aGUgc2Nob29s4oCZcyB1cHRpZ2h0
238
+ IGFuZCBoZWFydGxlc3MgZGVhbi4gQnV0IHdoZW4gUmFuY2hvIGNhdGNoZXMg
239
+ dGhlIGV5ZSBvZiB0aGUgZGVhbiZhcG9zO3Mgc2V4eSBkYXVnaHRlciwgVmly
240
+ dXMgc2V0cyBoaXMgc2lnaHRzIG9uIGZsdW5raW5nIG91dCB0aGUgJnF1b3Q7
241
+ MyBpZGlvdHMmcXVvdDsgb25jZSBhbmQgZm9yIGFsbC4iIHJhdGluZz0iNy42
242
+ OTk5OTk4MDkyNjUxNDAzIiB5ZWFyPSIyMDA5IiB0aHVtYj0iL2xpYnJhcnkv
243
+ bWV0YWRhdGEvMTE2OS90aHVtYi8xNDIzOTM2MDU1IiBhcnQ9Ii9saWJyYXJ5
244
+ L21ldGFkYXRhLzExNjkvYXJ0LzE0MjM5MzYwNTUiIGR1cmF0aW9uPSI5ODU1
245
+ NDQwIiBvcmlnaW5hbGx5QXZhaWxhYmxlQXQ9IjIwMDktMTItMjUiIGFkZGVk
246
+ QXQ9IjE0MjM5MzUzNTIiIHVwZGF0ZWRBdD0iMTQyMzkzNjA1NSI+CjxNZWRp
247
+ YSB2aWRlb1Jlc29sdXRpb249InNkIiBpZD0iMTM5OSIgZHVyYXRpb249Ijk4
248
+ NTU0NDAiIGJpdHJhdGU9IjgwOCIgd2lkdGg9IjY0MCIgaGVpZ2h0PSIyNzIi
249
+ IGFzcGVjdFJhdGlvPSIyLjM1IiBhdWRpb0NoYW5uZWxzPSI2IiBhdWRpb0Nv
250
+ ZGVjPSJhYzMiIHZpZGVvQ29kZWM9Im1wZWc0IiBjb250YWluZXI9ImF2aSIg
251
+ dmlkZW9GcmFtZVJhdGU9IlBBTCI+CjxQYXJ0IGlkPSIxOTU0IiBrZXk9Ii9s
252
+ aWJyYXJ5L3BhcnRzLzE5NTQvZmlsZS5hdmkiIGR1cmF0aW9uPSI5ODU1NDQw
253
+ IiBmaWxlPSIvVXNlcnMvbWNvbndheS9Nb3ZpZXMvVGl2b0hNT1Rlc3QvTW92
254
+ aWVzLzMgSWRpb3RzICgyMDA5KS5hdmkiIHNpemU9Ijk5NTQ0Mzc4NCIgY29u
255
+ dGFpbmVyPSJhdmkiPgo8U3RyZWFtIGlkPSI1NzMyIiBzdHJlYW1UeXBlPSIx
256
+ IiBjb2RlYz0ibXBlZzQiIGluZGV4PSIwIiBiaXRyYXRlPSI2MTEiIGJpdERl
257
+ cHRoPSI4IiBjaHJvbWFTdWJzYW1wbGluZz0iNDoyOjAiIGNvZGVjSUQ9IlhW
258
+ SUQiIGNvbG9yU3BhY2U9Inl1diIgZHVyYXRpb249Ijk4NTU0NDAiIGZyYW1l
259
+ UmF0ZT0iMjUuMDAwIiBnbWM9IjAiIGhlaWdodD0iMjcyIiBsZXZlbD0iNSIg
260
+ cHJvZmlsZT0iYXNwIiBxcGVsPSIwIiBzY2FuVHlwZT0icHJvZ3Jlc3NpdmUi
261
+ IHRpdGxlPSIiIHdpZHRoPSI2NDAiIC8+CjxTdHJlYW0gaWQ9IjU3MzMiIHN0
262
+ cmVhbVR5cGU9IjIiIHNlbGVjdGVkPSIxIiBjb2RlYz0iYWMzIiBpbmRleD0i
263
+ MSIgY2hhbm5lbHM9IjYiIGJpdHJhdGU9IjE5MiIgYml0RGVwdGg9IjE2IiBi
264
+ aXRyYXRlTW9kZT0iY2JyIiBjb2RlY0lEPSIyMDAwIiBkaWFsb2dOb3JtPSIt
265
+ MzEiIGR1cmF0aW9uPSI5ODU1MzYwIiBzYW1wbGluZ1JhdGU9IjQ4MDAwIiB0
266
+ aXRsZT0iIiAvPgo8L1BhcnQ+CjwvTWVkaWE+CjxHZW5yZSBpZD0iNDQiIHRh
267
+ Zz0iQ29tZWR5IiAvPgo8R2VucmUgaWQ9Ijg4IiB0YWc9IkRyYW1hIiAvPgo8
268
+ R2VucmUgaWQ9IjM2ODEiIHRhZz0iUm9tYW5jZSIgLz4KPFdyaXRlciBpZD0i
269
+ NjkwNSIgdGFnPSJSYWprdW1hciBIaXJhbmkiIC8+CjxEaXJlY3RvciBpZD0i
270
+ NjkwMiIgdGFnPSJSYWprdW1hciBIaXJhbmkiIC8+CjxQcm9kdWNlciBpZD0i
271
+ NjkyOSIgdGFnPSJWaWRodSBWaW5vZCBDaG9wcmEiIC8+CjxDb3VudHJ5IGlk
272
+ PSI2MDkiIHRhZz0iSW5kaWEiIC8+CjxSb2xlIGlkPSI2OTEzIiB0YWc9IkFh
273
+ bWlyIEtoYW4iIHJvbGU9IlJhbmNobyIgdGh1bWI9Imh0dHA6Ly9pbWFnZS50
274
+ bWRiLm9yZy90L3Avb3JpZ2luYWwvallvaGxVVmtMUEZkbkRyeVo4VjFIWmtK
275
+ ekR0LmpwZyIgLz4KPFJvbGUgaWQ9IjcyNDciIHRhZz0iS2FyZWVuYSBLYXBv
276
+ b3IiIHJvbGU9IlBpYSIgdGh1bWI9Imh0dHA6Ly9pbWFnZS50bWRiLm9yZy90
277
+ L3Avb3JpZ2luYWwva0RZZUJFTlhjVktmSEpqU0hsY2lOQ0xtdHJHLmpwZyIg
278
+ Lz4KPFJvbGUgaWQ9IjcyNDgiIHRhZz0iTWFkaGF2YW4iIHJvbGU9IkZhcmhh
279
+ biIgdGh1bWI9Imh0dHA6Ly9pbWFnZS50bWRiLm9yZy90L3Avb3JpZ2luYWwv
280
+ anhxRXg0SWk5YVl4N2tra3oxTXg3RldyakN0LmpwZyIgLz4KPFJvbGUgaWQ9
281
+ IjY5MTUiIHRhZz0iU2hhcm1hbiBKb3NoaSIgcm9sZT0iUmFqdSIgdGh1bWI9
282
+ Imh0dHA6Ly9pbWFnZS50bWRiLm9yZy90L3Avb3JpZ2luYWwvbGFzbWVpMVNv
283
+ V2tTWnhXUXROaDJiSTEwVDJILmpwZyIgLz4KPFJvbGUgaWQ9IjY5MTQiIHRh
284
+ Zz0iQm9tYW4gSXJhbmkiIHJvbGU9IlZpcnUgU2FoYXN0cmFidWRoaGUiIHRo
285
+ dW1iPSJodHRwOi8vaW1hZ2UudG1kYi5vcmcvdC9wL29yaWdpbmFsL3liaEZh
286
+ bThhZFVwV3ozUmU0OVQ4dURtOERjVC5qcGciIC8+CjxSb2xlIGlkPSI2OTA4
287
+ IiB0YWc9Ik1vbmEgU2luZ2giIHJvbGU9Ik1vbmEiIHRodW1iPSJodHRwOi8v
288
+ aW1hZ2UudG1kYi5vcmcvdC9wL29yaWdpbmFsLzdUd0VOSElNaktaTzZ3WVRW
289
+ R3k5bnFoVllMWi5qcGciIC8+CjxSb2xlIGlkPSI2OTE3IiB0YWc9Ik9taSBW
290
+ YWlkeWEiIHJvbGU9IkNoYXR1ciBSYW1hbGluZ2FtIiB0aHVtYj0iaHR0cDov
291
+ L2ltYWdlLnRtZGIub3JnL3QvcC9vcmlnaW5hbC9qTXNIcWxyejQxWnBEN1JF
292
+ eXM3OFphQ1RNM1UuanBnIiAvPgo8L1ZpZGVvPgo8L01lZGlhQ29udGFpbmVy
293
+ Pgo=
294
+ http_version:
295
+ recorded_at: Sat, 14 Feb 2015 17:47:37 GMT
296
+ recorded_with: VCR 2.9.3
data/spec/server_spec.rb CHANGED
@@ -327,13 +327,20 @@ describe TivoHMO::Server do
327
327
  end
328
328
  end
329
329
 
330
- it "recurses all items uniquely" do
331
- skip "recurse disabled because tivo forces it on initially (no memory)"
330
+ it "recurses all items uniquely depending on force_grouping config" do
331
+ described_class.config_set(:force_grouping, false)
332
332
  get "/TiVoConnect?Command=QueryContainer&Container=/a1/c1&Recurse=Yes"
333
333
  expect(last_response.status).to eq(200)
334
334
  doc = Nokogiri::XML(last_response.body)
335
335
  child_titles = doc.xpath("/TiVoContainer/Item/Details/Title").collect(&:content)
336
336
  expect(child_titles).to eq(["i1", "i2", "i3", "i4", "i98", "i99"])
337
+
338
+ described_class.config_set(:force_grouping, true)
339
+ get "/TiVoConnect?Command=QueryContainer&Container=/a1/c1&Recurse=Yes"
340
+ expect(last_response.status).to eq(200)
341
+ doc = Nokogiri::XML(last_response.body)
342
+ child_titles = doc.xpath("/TiVoContainer/Item/Details/Title").collect(&:content)
343
+ expect(child_titles).to eq(["i1", "c2", "i2", "i3", "i4"])
337
344
  end
338
345
 
339
346
  end
@@ -355,6 +362,17 @@ describe TivoHMO::Server do
355
362
  expect(child_titles).to eq(["i1", "i2", "i3", "i4"])
356
363
  end
357
364
 
365
+ it "honors presorted flag" do
366
+ container.presorted = true
367
+ container.children.reverse!
368
+ get "/TiVoConnect?Command=QueryContainer&Container=/a1/c1&SortOrder=Title"
369
+ expect(last_response.status).to eq(200)
370
+ doc = Nokogiri::XML(last_response.body)
371
+
372
+ child_titles = doc.xpath("/TiVoContainer/Item/Details/Title").collect(&:content)
373
+ expect(child_titles).to eq(["i4", "i3", "i2", "i1"])
374
+ end
375
+
358
376
  it "displays sorted by date" do
359
377
  server.find("/a1/c1/i4").created_at = 4.hours.ago
360
378
  server.find("/a1/c1/i3").created_at = 3.hours.ago
@@ -498,6 +516,17 @@ describe TivoHMO::Server do
498
516
  child_titles = doc.xpath("/TiVoContainer/Item/Details/Title").collect(&:content)
499
517
  expect(child_titles).to match_array(["i1", "i2", "i3", "i4", "i5", "i6", "i7", "i8"])
500
518
  end
519
+
520
+ # [2014-12-07 21:23:00] INFO TivoHMO::Server Request from 192.168.1.12 "GET http:
521
+ # //192.168.1.188:9033/TiVoConnect?Command=QueryContainer&Container=%2FMatts%20Lap
522
+ # top%20(Plex)&Recurse=Yes&SortOrder=Title&ItemCount=8&AnchorItem=%2FMatts%20Lapto
523
+ # p%20(Plex)%2FAdult%20TV%20Shows%2FAll%2FMarvel's%20Agents%20of%20S.H.I.E.L.D.%2F
524
+ # Season%201%2FEye%20Spy&AnchorOffset=-5&Filter=x-tivo-container%2Ftivo-videos,x-t
525
+ # ivo-container%2Ffolder,video%2Fx-tivo-mpeg,video%2F*&SerialNum=848000190292CC9"
526
+ # [2014-12-07 21:23:00] DEBUG TivoHMO::Server Headers: {"Content-Type"=>nil}
527
+ # [2014-12-07 21:23:00] WARN TivoHMO::Server Anchor not in container: <TivoHMO::Adapters::Plex::Application: Plex[localhost:32400]>, /Matts Laptop (Plex)/Adult TV Shows/All/Marvel's Agents of S.H.I.E.L.D./Season 1/Eye Spy
528
+ # [2014-12-07 21:23:00] INFO TivoHMO::Server Response to 192.168.1.12 for "GET http://192.168.1.188:9033/TiVoConnect?Command=QueryContainer&Container=%2FMatts%20Laptop%20(Plex)&Recurse=Yes&SortOrder=Title&ItemCount=8&AnchorItem=%2FMatts%20Laptop%20(Plex)%2FAdult%20TV%20Shows%2FAll%2FMarvel's%20Agents%20of%20S.H.I.E.L.D.%2FSeason%201%2FEye%20Spy&AnchorOffset=-5&Filter=x-tivo-container%2Ftivo-videos,x-tivo-container%2Ffolder,video%2Fx-tivo-mpeg,video%2F*&SerialNum=848000190292CC9" [200]
529
+
501
530
 
502
531
  end
503
532
 
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'rspec'
3
+
3
4
  RSpec.configure do |config|
4
5
  end
5
6
 
@@ -17,25 +18,16 @@ require 'open-uri'
17
18
  require 'webmock/rspec'
18
19
  WebMock.disable_net_connect!(allow: 'samples.mplayerhq.hu')
19
20
 
20
- # require 'vcr'
21
- # VCR.configure do |c|
22
- # c.cassette_library_dir = File.expand_path('../fixtures/vcr', __FILE__)
23
- # c.hook_into :webmock
24
- # c.default_cassette_options = { :record => :none, :allow_playback_repeats => true }
25
- # # Uncomment this line to see more information about VCR when running tests
26
- # #c.debug_logger = $stderr
27
- # end
28
- #
29
- # def setup_vcr
30
- # fixture_name = self.to_s.gsub(/[:#]+/, '-').gsub(/\s+/, '_').gsub(/^[_-]*/, '')
31
- # fixture_location = __FILE__.gsub(/.*\/test\//, '').gsub(/\.[^\/]*/, '')
32
- # @cassette_name = "#{fixture_location}/#{fixture_name}"
33
- # VCR.insert_cassette(@cassette_name, :record => :once)
34
- # end
35
- #
36
- # def teardown_vcr
37
- # VCR.eject_cassette(@cassette_name)
38
- # end
21
+ require 'vcr'
22
+ VCR.configure do |c|
23
+ c.cassette_library_dir = File.expand_path('../fixtures/vcr', __FILE__)
24
+ c.hook_into :webmock
25
+ c.configure_rspec_metadata!
26
+ c.default_cassette_options = { :record => :once }
27
+ c.ignore_hosts 'samples.mplayerhq.hu'
28
+ # Uncomment this line to see more information about VCR when running tests
29
+ #c.debug_logger = $stderr
30
+ end
39
31
 
40
32
  def video_fixture(name)
41
33
  fixture_names = {
@@ -73,6 +65,10 @@ module TestAPI
73
65
 
74
66
  class Item
75
67
  include TivoHMO::API::Item
68
+ def initialize(file)
69
+ super(file)
70
+ self.file = file
71
+ end
76
72
  end
77
73
 
78
74
  class Metadata
@@ -130,22 +126,14 @@ def with_file_tree(*tree)
130
126
  end
131
127
  end
132
128
 
133
- def plex_stub(clazz, method_stubs={})
134
- default_stubs = {
135
- key: '/some/key',
136
- title: 'Title',
137
- summary: 'Summary',
138
- duration: 100,
139
- rating: 1,
140
- updated_at: Time.now.to_i,
141
- added_at: Time.now.to_i,
142
- refresh: nil
143
- }
144
- d = double(clazz, default_stubs.merge(method_stubs))
145
-
146
- allow(d).to receive(:is_a?) do |arg|
147
- arg == clazz
148
- end
129
+ def plex_server
130
+ ::Plex::Server.new('localhost', 32400)
131
+ end
149
132
 
150
- d
133
+ def plex_movie_section
134
+ plex_server.library.sections.find {|s| s.type == 'movie' && s.title == 'Test Movies'}
151
135
  end
136
+
137
+ def plex_tv_section
138
+ plex_server.library.sections.find {|s| s.type == 'show' && s.title == 'Test TV Shows'}
139
+ end
data/tivohmo.gemspec CHANGED
@@ -27,11 +27,11 @@ Gem::Specification.new do |spec|
27
27
  spec.add_development_dependency "rack-test"
28
28
  spec.add_development_dependency "nokogiri"
29
29
  spec.add_development_dependency "timecop"
30
- spec.add_development_dependency "webmock"
31
- # spec.add_development_dependency "vcr"
30
+ spec.add_development_dependency "vcr"
32
31
 
33
32
  # core dependencies
34
33
  spec.add_dependency "activesupport"
34
+ spec.add_dependency "hashie"
35
35
  spec.add_dependency "unidecoder"
36
36
  spec.add_dependency "gem_logger"
37
37
  spec.add_dependency "logging"