tivohmo 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +5 -0
  3. data/README.md +8 -0
  4. data/TODO +4 -0
  5. data/lib/tivohmo/adapters/filesystem/application.rb +37 -0
  6. data/lib/tivohmo/adapters/filesystem/file_item.rb +3 -1
  7. data/lib/tivohmo/adapters/filesystem/folder_container.rb +33 -29
  8. data/lib/tivohmo/adapters/filesystem/group.rb +22 -0
  9. data/lib/tivohmo/adapters/filesystem.rb +1 -0
  10. data/lib/tivohmo/adapters/plex/category.rb +20 -13
  11. data/lib/tivohmo/adapters/plex/episode.rb +2 -2
  12. data/lib/tivohmo/adapters/plex/movie.rb +2 -2
  13. data/lib/tivohmo/adapters/streamio/transcoder.rb +4 -13
  14. data/lib/tivohmo/api/container.rb +4 -1
  15. data/lib/tivohmo/subtitles_util.rb +109 -0
  16. data/lib/tivohmo/version.rb +1 -1
  17. data/spec/adapters/filesystem/application_spec.rb +66 -0
  18. data/spec/adapters/filesystem/file_item_spec.rb +12 -0
  19. data/spec/adapters/filesystem/folder_container_spec.rb +23 -21
  20. data/spec/adapters/plex/category_spec.rb +15 -5
  21. data/spec/adapters/plex/episode_spec.rb +11 -0
  22. data/spec/adapters/plex/movie_spec.rb +11 -0
  23. data/spec/adapters/streamio/transcoder_spec.rb +24 -0
  24. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children.yml +698 -168
  25. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children_with_embedded_subtitles.yml +22 -22
  26. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_children/should_have_children_with_subtitles.yml +262 -91
  27. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate_with_subtitle.yml +444 -0
  28. data/spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate_with_subtitle.yml +334 -0
  29. data/spec/spec_helper.rb +21 -0
  30. data/spec/subtitles_util_spec.rb +68 -0
  31. data/tivohmo.gemspec +1 -0
  32. metadata +24 -3
@@ -0,0 +1,334 @@
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
+ - '2988'
29
+ X-Plex-Content-Compressed-Length:
30
+ - '788'
31
+ Content-Length:
32
+ - '788'
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="8" type="movie" title="Adult Movies" composite="/library/sections/8/composite/1425683728" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="608ca2bb-e5f2-49ab-b040-dbb95ac5631e" updatedAt="1425683728" createdAt="1424196765">
41
+ <Location id="12" 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/1425683755" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="af8295a272d545681d462eed8025113d09195007" updatedAt="1425683755" 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/1425683756" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="340479de-6015-4e6c-9ec0-c74f936f4013" updatedAt="1425683756" 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/1425683757" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="fa1dde48-f6dd-44f7-91f3-9283160dc953" updatedAt="1425683757" 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="0" thumb="/:/resources/movie.png" key="6" type="movie" title="Test Movies" composite="/library/sections/6/composite/1425683758" agent="com.plexapp.agents.imdb" scanner="Plex Movie Scanner" language="en" uuid="fbc810b7-6b51-40ba-a3c5-9a2c391e5a3d" updatedAt="1425683758" 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/1425683759" agent="com.plexapp.agents.thetvdb" scanner="Plex Series Scanner" language="en" uuid="4c37cd05-86d7-4a34-8d5b-aa2fb261a136" updatedAt="1425683759" createdAt="1423935290">
56
+ <Location id="11" path="/Users/mconway/Movies/TivoHMOTest/TV Shows" />
57
+ </Directory>
58
+ </MediaContainer>
59
+ http_version:
60
+ recorded_at: Sun, 08 Mar 2015 14:54: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
+ - '5272'
87
+ X-Plex-Content-Compressed-Length:
88
+ - '2312'
89
+ Content-Length:
90
+ - '2312'
91
+ Cache-Control:
92
+ - no-cache
93
+ body:
94
+ encoding: ASCII-8BIT
95
+ string: !binary |-
96
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPE1lZGlh
97
+ Q29udGFpbmVyIHNpemU9IjMiIGFsbG93U3luYz0iMSIgYXJ0PSIvOi9yZXNv
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
+ aWJyYXJ5L21ldGFkYXRhLzExNjkvdGh1bWIvMTQyNDQ2NDg0NiIgYXJ0PSIv
127
+ bGlicmFyeS9tZXRhZGF0YS8xMTY5L2FydC8xNDI0NDY0ODQ2IiBkdXJhdGlv
128
+ bj0iOTg1NTQ0MCIgb3JpZ2luYWxseUF2YWlsYWJsZUF0PSIyMDA5LTEyLTI1
129
+ IiBhZGRlZEF0PSIxNDIzOTM1MzUyIiB1cGRhdGVkQXQ9IjE0MjQ0NjQ4NDYi
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
+ Z0tleT0iMTIwMSIga2V5PSIvbGlicmFyeS9tZXRhZGF0YS8xMjAxIiBzdHVk
145
+ aW89Ildhcm5lciBCcm9zLiIgdHlwZT0ibW92aWUiIHRpdGxlPSJSdXJvdW5p
146
+ IEtlbnNoaW46IEt5b3RvIEluZmVybm8iIG9yaWdpbmFsVGl0bGU9IlJ1cm91
147
+ bmkgS2Vuc2hpbiAyIDogS3lvdG8gSW5mZXJubyDguKPguLnguYLguKPguJng
148
+ uLTguJkg4LmA4LiE4LiZ4LiK4Li04LiZIOC5gOC4geC4teC4ouC4p+C5guC4
149
+ leC4l+C4sOC5gOC4pSIgY29udGVudFJhdGluZz0iUEctMTMiIHN1bW1hcnk9
150
+ IktlbnNoaW4gaGFzIHNldHRsZWQgaW50byBoaXMgbmV3IGxpZmUgd2l0aCBL
151
+ YW9ydSBhbmQgaGlzIG90aGVyIGZyaWVuZHMgd2hlbiBoZSBpcyBhcHByb2Fj
152
+ aGVkIHdpdGggYSByZXF1ZXN0IGZyb20gdGhlIE1laWppIGdvdmVybm1lbnQu
153
+ IE1ha290byBTaGlzaGlvLCBhIGZvcm1lciBhc3Nhc3NpbiBsaWtlIEtlbnNo
154
+ aW4sIHdhcyBiZXRyYXllZCwgc2V0IG9uIGZpcmUgYW5kIGxlZnQgZm9yIGRl
155
+ YWQuIEhlIHN1cnZpdmVkLCBhbmQgaXMgbm93IGluIEt5b3RvLCBwbG90dGlu
156
+ ZyB3aXRoIGhpcyBnYXRoZXJlZCB3YXJyaW9ycyB0byBvdmVydGhyb3cgdGhl
157
+ IG5ldyBnb3Zlcm5tZW50LiBBZ2FpbnN0IEthb3J1JmFwb3M7cyB3aXNoZXMs
158
+ IEtlbnNoaW4gcmVsdWN0YW50bHkgYWdyZWVzIHRvIGdvIHRvIEt5b3RvIGFu
159
+ ZCBoZWxwIGtlZXAgaGlzIGNvdW50cnkgZnJvbSBmYWxsaW5nIGJhY2sgaW50
160
+ byBjaXZpbCB3YXIuIiByYXRpbmc9IjcuNjk5OTk5ODA5MjY1MTQwMyIgeWVh
161
+ cj0iMjAxNCIgdGFnbGluZT0iRmF0ZSBIYW5ncyBPbiBIaXMgU3dvcmQiIHRo
162
+ dW1iPSIvbGlicmFyeS9tZXRhZGF0YS8xMjAxL3RodW1iLzE0MjQ0NjQ0ODMi
163
+ IGFydD0iL2xpYnJhcnkvbWV0YWRhdGEvMTIwMS9hcnQvMTQyNDQ2NDQ4MyIg
164
+ ZHVyYXRpb249IjgzMjEzMzUiIG9yaWdpbmFsbHlBdmFpbGFibGVBdD0iMjAx
165
+ NC0wOC0wMSIgYWRkZWRBdD0iMTQyNDQ2NDQ3NSIgdXBkYXRlZEF0PSIxNDI0
166
+ NDY0NDgzIj4KPE1lZGlhIHZpZGVvUmVzb2x1dGlvbj0iNzIwIiBpZD0iMTQy
167
+ NiIgZHVyYXRpb249IjgzMjEzMzUiIGJpdHJhdGU9IjExMDkiIHdpZHRoPSIx
168
+ MjgwIiBoZWlnaHQ9IjUzNiIgYXNwZWN0UmF0aW89IjIuMzUiIGF1ZGlvQ2hh
169
+ bm5lbHM9IjIiIGF1ZGlvQ29kZWM9ImFhYyIgdmlkZW9Db2RlYz0iaDI2NCIg
170
+ Y29udGFpbmVyPSJta3YiIHZpZGVvRnJhbWVSYXRlPSIyNHAiPgo8UGFydCBp
171
+ ZD0iMTk4MSIga2V5PSIvbGlicmFyeS9wYXJ0cy8xOTgxL2ZpbGUubWt2IiBk
172
+ dXJhdGlvbj0iODMyMTMzNSIgZmlsZT0iL1VzZXJzL21jb253YXkvTW92aWVz
173
+ L1Rpdm9ITU9UZXN0L01vdmllcy9SdXJvdW5pIEtlbnNoaW4gS3lvdG8gSW5m
174
+ ZXJubyAoMjAxNCkubWt2IiBzaXplPSIxMTUzODMzMTM5IiBjb250YWluZXI9
175
+ Im1rdiIgLz4KPC9NZWRpYT4KPEdlbnJlIHRhZz0iQWN0aW9uIiAvPgo8R2Vu
176
+ cmUgdGFnPSJBZHZlbnR1cmUiIC8+CjxEaXJlY3RvciB0YWc9IktlaXNoaSBP
177
+ aHRvbW8iIC8+CjxDb3VudHJ5IHRhZz0iSmFwYW4iIC8+CjxSb2xlIHRhZz0i
178
+ VGFrZXJ1IFNhdG8iIC8+CjxSb2xlIHRhZz0iWXUgQW9pIiAvPgo8Um9sZSB0
179
+ YWc9IlRhdHN1eWEgRnVqaXdhcmEiIC8+CjwvVmlkZW8+CjxWaWRlbyByYXRp
180
+ bmdLZXk9IjExNzUiIGtleT0iL2xpYnJhcnkvbWV0YWRhdGEvMTE3NSIgc3R1
181
+ ZGlvPSJHdWVyaWxsYSBGaWxtcyIgdHlwZT0ibW92aWUiIHRpdGxlPSJXeXJt
182
+ d29vZCIgc3VtbWFyeT0iQmFycnkgaXMgYSB0YWxlbnRlZCBtZWNoYW5pYyBh
183
+ bmQgZmFtaWx5IG1hbiB3aG9zZSBsaWZlIGlzIHRvcm4gYXBhcnQgb24gdGhl
184
+ IGV2ZSBvZiBhIHpvbWJpZSBhcG9jYWx5cHNlLiBIaXMgc2lzdGVyLCBCcm9v
185
+ a2UsIGlzIGtpZG5hcHBlZCBieSBhIHNpbmlzdGVyIHRlYW0gb2YgZ2FzLW1h
186
+ c2sgd2VhcmluZyBzb2xkaWVycyAmYW1wO2FtcDsgZXhwZXJpbWVudGVkIG9u
187
+ IGJ5IGEgcHN5Y2hvdGljIGRvY3Rvci4gV2hpbGUgQnJvb2tlIHBsYW5zIGhl
188
+ ciBlc2NhcGUgQmFycnkgZ29lcyBvdXQgb24gdGhlIHJvYWQgdG8gZmluZCBo
189
+ ZXIgJmFtcDthbXA7IHRlYW1zIHVwIHdpdGggQmVubnksIGEgZmVsbG93IHN1
190
+ cnZpdm9yIC0gdG9nZXRoZXIgdGhleSBtdXN0IGFybSB0aGVtc2VsdmVzIGFu
191
+ ZCBwcmVwYXJlIHRvIGJhdHRsZSB0aGVpciB3YXkgdGhyb3VnaCBob3JkZXMg
192
+ b2YgZmxlc2gtZWF0aW5nIG1vbnN0ZXJzIGluIGEgaGFyc2ggQXVzdHJhbGlh
193
+ biBidXNobGFuZC4iIHllYXI9IjIwMTUiIHRodW1iPSIvbGlicmFyeS9tZXRh
194
+ ZGF0YS8xMTc1L3RodW1iLzE0MjQ0NjQ4NDYiIGFydD0iL2xpYnJhcnkvbWV0
195
+ YWRhdGEvMTE3NS9hcnQvMTQyNDQ2NDg0NiIgZHVyYXRpb249IjU5MTQ2NTki
196
+ IG9yaWdpbmFsbHlBdmFpbGFibGVBdD0iMjAxNS0wMi0xMyIgYWRkZWRBdD0i
197
+ MTQyMzkzNjAzNiIgdXBkYXRlZEF0PSIxNDI0NDY0ODQ2Ij4KPE1lZGlhIHZp
198
+ ZGVvUmVzb2x1dGlvbj0ic2QiIGlkPSIxNDAyIiBkdXJhdGlvbj0iNTkxNDY1
199
+ OSIgYml0cmF0ZT0iOTg5IiB3aWR0aD0iNjQwIiBoZWlnaHQ9IjM1MiIgYXNw
200
+ ZWN0UmF0aW89IjEuODUiIGF1ZGlvQ2hhbm5lbHM9IjIiIGF1ZGlvQ29kZWM9
201
+ Im1wMyIgdmlkZW9Db2RlYz0ibXBlZzQiIGNvbnRhaW5lcj0iYXZpIiB2aWRl
202
+ b0ZyYW1lUmF0ZT0iMjRwIj4KPFBhcnQgaWQ9IjE5NTciIGtleT0iL2xpYnJh
203
+ cnkvcGFydHMvMTk1Ny9maWxlLmF2aSIgZHVyYXRpb249IjU5MTQ2NTkiIGZp
204
+ bGU9Ii9Vc2Vycy9tY29ud2F5L01vdmllcy9UaXZvSE1PVGVzdC9Nb3ZpZXMv
205
+ V3lybXdvb2QgKDIwMTQpLmF2aSIgc2l6ZT0iNzMxMDMzOTE4IiBjb250YWlu
206
+ ZXI9ImF2aSIgLz4KPC9NZWRpYT4KPEdlbnJlIHRhZz0iQWN0aW9uIiAvPgo8
207
+ R2VucmUgdGFnPSJIb3Jyb3IiIC8+CjxXcml0ZXIgdGFnPSJLaWFoIFJvYWNo
208
+ ZS1UdXJuZXIiIC8+CjxXcml0ZXIgdGFnPSJUcmlzdGFuIFJvYWNoZS1UdXJu
209
+ ZXIiIC8+CjxEaXJlY3RvciB0YWc9IktpYWggUm9hY2hlLVR1cm5lciIgLz4K
210
+ PENvdW50cnkgdGFnPSJBdXN0cmFsaWEiIC8+CjxSb2xlIHRhZz0iSmF5IEdh
211
+ bGxhZ2hlciIgLz4KPFJvbGUgdGFnPSJCaWFuY2EgQnJhZGV5IiAvPgo8Um9s
212
+ ZSB0YWc9Ikxlb24gQnVyY2hpbGwiIC8+CjwvVmlkZW8+CjwvTWVkaWFDb250
213
+ YWluZXI+Cg==
214
+ http_version:
215
+ recorded_at: Sun, 08 Mar 2015 14:54:37 GMT
216
+ - request:
217
+ method: get
218
+ uri: http://localhost:32400/library/metadata/1169
219
+ body:
220
+ encoding: US-ASCII
221
+ string: ''
222
+ headers:
223
+ Accept-Encoding:
224
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
225
+ Accept:
226
+ - "*/*"
227
+ User-Agent:
228
+ - Ruby
229
+ response:
230
+ status:
231
+ code: 200
232
+ message: OK
233
+ headers:
234
+ Content-Type:
235
+ - text/xml;charset=utf-8
236
+ Connection:
237
+ - close
238
+ X-Plex-Protocol:
239
+ - '1.0'
240
+ X-Plex-Content-Original-Length:
241
+ - '3639'
242
+ X-Plex-Content-Compressed-Length:
243
+ - '1800'
244
+ Content-Length:
245
+ - '1800'
246
+ Cache-Control:
247
+ - no-cache
248
+ body:
249
+ encoding: ASCII-8BIT
250
+ string: !binary |-
251
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPE1lZGlh
252
+ Q29udGFpbmVyIHNpemU9IjEiIGFsbG93U3luYz0iMSIgaWRlbnRpZmllcj0i
253
+ Y29tLnBsZXhhcHAucGx1Z2lucy5saWJyYXJ5IiBsaWJyYXJ5U2VjdGlvbklE
254
+ PSI2IiBsaWJyYXJ5U2VjdGlvblRpdGxlPSJUZXN0IE1vdmllcyIgbGlicmFy
255
+ eVNlY3Rpb25VVUlEPSJmYmM4MTBiNy02YjUxLTQwYmEtYTNjNS05YTJjMzkx
256
+ ZTVhM2QiIG1lZGlhVGFnUHJlZml4PSIvc3lzdGVtL2J1bmRsZS9tZWRpYS9m
257
+ bGFncy8iIG1lZGlhVGFnVmVyc2lvbj0iMTQyMDc2NzU0NSI+CjxWaWRlbyBy
258
+ YXRpbmdLZXk9IjExNjkiIGtleT0iL2xpYnJhcnkvbWV0YWRhdGEvMTE2OSIg
259
+ Z3VpZD0iY29tLnBsZXhhcHAuYWdlbnRzLmltZGI6Ly90dDExODcwNDM/bGFu
260
+ Zz1lbiIgc3R1ZGlvPSJWaWRodSBWaW5vZCBDaG9wcmEgUHJvZHVjdGlvbnMi
261
+ IHR5cGU9Im1vdmllIiB0aXRsZT0iMyBJZGlvdHMiIGNvbnRlbnRSYXRpbmc9
262
+ IlBHIiBzdW1tYXJ5PSJJbiB0aGUgdHJhZGl0aW9uIG9mIOKAnEZlcnJpcyBC
263
+ dWVsbGVy4oCZcyBEYXkgT2Zm4oCdIGNvbWVzIHRoaXMgcmVmcmVzaGluZyBj
264
+ b21lZHkgYWJvdXQgYSByZWJlbGxpb3VzIHByYW5rc3RlciB3aXRoIGEgY3Jh
265
+ ZnR5IG1pbmQgYW5kIGEgaGVhcnQgb2YgZ29sZC4gUmFzY2FsLiBKb2tlci4g
266
+ RHJlYW1lci4gR2VuaXVzLi4uIFlvdSZhcG9zO3ZlIG5ldmVyIG1ldCBhIGNv
267
+ bGxlZ2Ugc3R1ZGVudCBxdWl0ZSBsaWtlICZxdW90O1JhbmNoby4mcXVvdDsg
268
+ RnJvbSB0aGUgbW9tZW50IGhlIGFycml2ZXMgYXQgSW5kaWEmYXBvcztzIG1v
269
+ c3QgcHJlc3RpZ2lvdXMgdW5pdmVyc2l0eSwgUmFuY2hvJmFwb3M7cyBvdXRs
270
+ YW5kaXNoIHNjaGVtZXMgdHVybiB0aGUgY2FtcHVzIHVwc2lkZSBkb3du4oCU
271
+ YWxvbmcgd2l0aCB0aGUgbGl2ZXMgb2YgaGlzIHR3byBuZXdmb3VuZCBiZXN0
272
+ IGZyaWVuZHMuIFRvZ2V0aGVyLCB0aGV5IG1ha2UgbGlmZSBtaXNlcmFibGUg
273
+ Zm9yICZxdW90O1ZpcnVzLCZxdW90OyB0aGUgc2Nob29s4oCZcyB1cHRpZ2h0
274
+ IGFuZCBoZWFydGxlc3MgZGVhbi4gQnV0IHdoZW4gUmFuY2hvIGNhdGNoZXMg
275
+ dGhlIGV5ZSBvZiB0aGUgZGVhbiZhcG9zO3Mgc2V4eSBkYXVnaHRlciwgVmly
276
+ dXMgc2V0cyBoaXMgc2lnaHRzIG9uIGZsdW5raW5nIG91dCB0aGUgJnF1b3Q7
277
+ MyBpZGlvdHMmcXVvdDsgb25jZSBhbmQgZm9yIGFsbC4iIHJhdGluZz0iNy42
278
+ OTk5OTk4MDkyNjUxNDAzIiB5ZWFyPSIyMDA5IiB0aHVtYj0iL2xpYnJhcnkv
279
+ bWV0YWRhdGEvMTE2OS90aHVtYi8xNDI0NDY0ODQ2IiBhcnQ9Ii9saWJyYXJ5
280
+ L21ldGFkYXRhLzExNjkvYXJ0LzE0MjQ0NjQ4NDYiIGR1cmF0aW9uPSI5ODU1
281
+ NDQwIiBvcmlnaW5hbGx5QXZhaWxhYmxlQXQ9IjIwMDktMTItMjUiIGFkZGVk
282
+ QXQ9IjE0MjM5MzUzNTIiIHVwZGF0ZWRBdD0iMTQyNDQ2NDg0NiI+CjxNZWRp
283
+ YSB2aWRlb1Jlc29sdXRpb249InNkIiBpZD0iMTM5OSIgZHVyYXRpb249Ijk4
284
+ NTU0NDAiIGJpdHJhdGU9IjgwOCIgd2lkdGg9IjY0MCIgaGVpZ2h0PSIyNzIi
285
+ IGFzcGVjdFJhdGlvPSIyLjM1IiBhdWRpb0NoYW5uZWxzPSI2IiBhdWRpb0Nv
286
+ ZGVjPSJhYzMiIHZpZGVvQ29kZWM9Im1wZWc0IiBjb250YWluZXI9ImF2aSIg
287
+ dmlkZW9GcmFtZVJhdGU9IlBBTCI+CjxQYXJ0IGlkPSIxOTU0IiBrZXk9Ii9s
288
+ aWJyYXJ5L3BhcnRzLzE5NTQvZmlsZS5hdmkiIGR1cmF0aW9uPSI5ODU1NDQw
289
+ IiBmaWxlPSIvVXNlcnMvbWNvbndheS9Nb3ZpZXMvVGl2b0hNT1Rlc3QvTW92
290
+ aWVzLzMgSWRpb3RzICgyMDA5KS5hdmkiIHNpemU9Ijk5NTQ0Mzc4NCIgY29u
291
+ dGFpbmVyPSJhdmkiPgo8U3RyZWFtIGlkPSI1NzMyIiBzdHJlYW1UeXBlPSIx
292
+ IiBjb2RlYz0ibXBlZzQiIGluZGV4PSIwIiBiaXRyYXRlPSI2MTEiIGJpdERl
293
+ cHRoPSI4IiBjaHJvbWFTdWJzYW1wbGluZz0iNDoyOjAiIGNvZGVjSUQ9IlhW
294
+ SUQiIGNvbG9yU3BhY2U9Inl1diIgZHVyYXRpb249Ijk4NTU0NDAiIGZyYW1l
295
+ UmF0ZT0iMjUuMDAwIiBnbWM9IjAiIGhlaWdodD0iMjcyIiBsZXZlbD0iNSIg
296
+ cHJvZmlsZT0iYXNwIiBxcGVsPSIwIiBzY2FuVHlwZT0icHJvZ3Jlc3NpdmUi
297
+ IHRpdGxlPSIiIHdpZHRoPSI2NDAiIC8+CjxTdHJlYW0gaWQ9IjU3MzMiIHN0
298
+ cmVhbVR5cGU9IjIiIHNlbGVjdGVkPSIxIiBjb2RlYz0iYWMzIiBpbmRleD0i
299
+ MSIgY2hhbm5lbHM9IjYiIGJpdHJhdGU9IjE5MiIgYml0RGVwdGg9IjE2IiBi
300
+ aXRyYXRlTW9kZT0iY2JyIiBjb2RlY0lEPSIyMDAwIiBkaWFsb2dOb3JtPSIt
301
+ MzEiIGR1cmF0aW9uPSI5ODU1MzYwIiBzYW1wbGluZ1JhdGU9IjQ4MDAwIiB0
302
+ aXRsZT0iIiAvPgo8U3RyZWFtIGlkPSI1NzM4IiBrZXk9Ii9saWJyYXJ5L3N0
303
+ cmVhbXMvNTczOCIgc3RyZWFtVHlwZT0iMyIgY29kZWM9InNydCIgbGFuZ3Vh
304
+ Z2U9IkVuZ2xpc2giIGxhbmd1YWdlQ29kZT0iZW5nIiBmb3JtYXQ9InNydCIg
305
+ Lz4KPC9QYXJ0Pgo8L01lZGlhPgo8R2VucmUgaWQ9IjQ0IiB0YWc9IkNvbWVk
306
+ eSIgLz4KPEdlbnJlIGlkPSI4OCIgdGFnPSJEcmFtYSIgLz4KPEdlbnJlIGlk
307
+ PSIzNjgxIiB0YWc9IlJvbWFuY2UiIC8+CjxXcml0ZXIgaWQ9IjY5MDUiIHRh
308
+ Zz0iUmFqa3VtYXIgSGlyYW5pIiAvPgo8RGlyZWN0b3IgaWQ9IjY5MDIiIHRh
309
+ Zz0iUmFqa3VtYXIgSGlyYW5pIiAvPgo8UHJvZHVjZXIgaWQ9IjY5MjkiIHRh
310
+ Zz0iVmlkaHUgVmlub2QgQ2hvcHJhIiAvPgo8Q291bnRyeSBpZD0iNjA5IiB0
311
+ YWc9IkluZGlhIiAvPgo8Um9sZSBpZD0iNjkxMyIgdGFnPSJBYW1pciBLaGFu
312
+ IiByb2xlPSJSYW5jaG8iIHRodW1iPSJodHRwOi8vaW1hZ2UudG1kYi5vcmcv
313
+ dC9wL29yaWdpbmFsL2pZb2hsVVZrTFBGZG5EcnlaOFYxSFprSnpEdC5qcGci
314
+ IC8+CjxSb2xlIGlkPSI3MjQ3IiB0YWc9IkthcmVlbmEgS2Fwb29yIiByb2xl
315
+ PSJQaWEiIHRodW1iPSJodHRwOi8vaW1hZ2UudG1kYi5vcmcvdC9wL29yaWdp
316
+ bmFsL2tEWWVCRU5YY1ZLZkhKalNIbGNpTkNMbXRyRy5qcGciIC8+CjxSb2xl
317
+ IGlkPSI3MjQ4IiB0YWc9Ik1hZGhhdmFuIiByb2xlPSJGYXJoYW4iIHRodW1i
318
+ PSJodHRwOi8vaW1hZ2UudG1kYi5vcmcvdC9wL29yaWdpbmFsL2p4cUV4NElp
319
+ OWFZeDdra2t6MU14N0ZXcmpDdC5qcGciIC8+CjxSb2xlIGlkPSI2OTE1IiB0
320
+ YWc9IlNoYXJtYW4gSm9zaGkiIHJvbGU9IlJhanUiIHRodW1iPSJodHRwOi8v
321
+ aW1hZ2UudG1kYi5vcmcvdC9wL29yaWdpbmFsL2xhc21laTFTb1drU1p4V1F0
322
+ TmgyYkkxMFQySC5qcGciIC8+CjxSb2xlIGlkPSI2OTE0IiB0YWc9IkJvbWFu
323
+ IElyYW5pIiByb2xlPSJWaXJ1IFNhaGFzdHJhYnVkaGhlIiB0aHVtYj0iaHR0
324
+ cDovL2ltYWdlLnRtZGIub3JnL3QvcC9vcmlnaW5hbC95YmhGYW04YWRVcFd6
325
+ M1JlNDlUOHVEbThEY1QuanBnIiAvPgo8Um9sZSBpZD0iNjkwOCIgdGFnPSJN
326
+ b25hIFNpbmdoIiByb2xlPSJNb25hIiB0aHVtYj0iaHR0cDovL2ltYWdlLnRt
327
+ ZGIub3JnL3QvcC9vcmlnaW5hbC83VHdFTkhJTWpLWk82d1lUVkd5OW5xaFZZ
328
+ TFouanBnIiAvPgo8Um9sZSBpZD0iNjkxNyIgdGFnPSJPbWkgVmFpZHlhIiBy
329
+ b2xlPSJDaGF0dXIgUmFtYWxpbmdhbSIgdGh1bWI9Imh0dHA6Ly9pbWFnZS50
330
+ bWRiLm9yZy90L3Avb3JpZ2luYWwvak1zSHFscno0MVpwRDdSRXlzNzhaYUNU
331
+ TTNVLmpwZyIgLz4KPC9WaWRlbz4KPC9NZWRpYUNvbnRhaW5lcj4K
332
+ http_version:
333
+ recorded_at: Sun, 08 Mar 2015 14:54:37 GMT
334
+ recorded_with: VCR 2.9.3
data/spec/spec_helper.rb CHANGED
@@ -4,6 +4,8 @@ require 'rspec'
4
4
  RSpec.configure do |config|
5
5
  end
6
6
 
7
+ require 'awesome_print'
8
+
7
9
  require 'timecop'
8
10
 
9
11
  require 'coveralls'
@@ -136,4 +138,23 @@ end
136
138
 
137
139
  def plex_tv_section
138
140
  plex_server.library.sections.find {|s| s.type == 'show' && s.title == 'Test TV Shows'}
141
+ end
142
+
143
+ def stub_subtitles(media_path, language_code: 'en', type: :file, format: 'srt')
144
+ require 'iso-639'
145
+
146
+ allow(TivoHMO::SubtitlesUtil.instance).to receive(:subtitles_for_media_file).with(media_path) do |path|
147
+ subs = []
148
+ if language_code
149
+ st = TivoHMO::API::Subtitle.new
150
+ st.type = type
151
+ st.format = format
152
+ st.language_code = language_code
153
+ st.language = ISO_639.find_by_code(language_code.downcase).english_name
154
+ st.location = "#{path.chomp(File.extname(path))}.en.srt"
155
+ subs << st
156
+ end
157
+ subs
158
+ end
159
+
139
160
  end
@@ -0,0 +1,68 @@
1
+ require_relative "spec_helper"
2
+ require 'tivohmo/subtitles_util'
3
+
4
+ describe TivoHMO::SubtitlesUtil do
5
+
6
+ let(:subject) do
7
+ TivoHMO::SubtitlesUtil.instance_variable_set(:@singleton__instance__, nil)
8
+ TivoHMO::SubtitlesUtil.instance
9
+ end
10
+
11
+ describe "subtitles_for_media_file" do
12
+
13
+ it "finds subtitles if present" do
14
+ with_file_tree('1.avi', '1.en.srt', '2.avi', '3.avi', '3.en.srt', '3.fr.srt') do |dir|
15
+
16
+ subs = subject.subtitles_for_media_file("#{dir}/1.avi")
17
+ expect(subs.size).to eq(1)
18
+ subs.all? {|s| expect(s).to be_instance_of(TivoHMO::API::Subtitle) }
19
+ expect(subs.first.language_code).to eq('en')
20
+ expect(subs.first.language).to eq('English')
21
+ expect(subs.first.type).to eq(:file)
22
+ expect(subs.first.format).to eq('srt')
23
+ expect(subs.first.location).to eq("#{File.realdirpath(dir)}/1.en.srt")
24
+
25
+ subs = subject.subtitles_for_media_file("#{dir}/2.avi")
26
+ expect(subs.size).to eq(0)
27
+
28
+ subs = subject.subtitles_for_media_file("#{dir}/3.avi")
29
+ expect(subs.size).to eq(2)
30
+ expect(subs.collect(&:language_code)).to match_array(['en', 'fr'])
31
+ end
32
+ end
33
+
34
+ end
35
+
36
+ describe "change listener" do
37
+
38
+ it "watches for filesystem addition" do
39
+ with_file_tree('1.avi') do |dir|
40
+
41
+ subs = subject.subtitles_for_media_file("#{dir}/1.avi")
42
+ expect(subs.size).to eq(0)
43
+
44
+ FileUtils.touch("#{dir}/1.en.srt")
45
+ sleep 0.5
46
+
47
+ subs = subject.subtitles_for_media_file("#{dir}/1.avi")
48
+ expect(subs.size).to eq(1)
49
+ end
50
+ end
51
+
52
+ it "watches for filesystem deletion" do
53
+ with_file_tree('1.avi', '1.en.srt') do |dir|
54
+
55
+ subs = subject.subtitles_for_media_file("#{dir}/1.avi")
56
+ expect(subs.size).to eq(1)
57
+
58
+ FileUtils.rm("#{dir}/1.en.srt")
59
+ sleep 0.5
60
+
61
+ subs = subject.subtitles_for_media_file("#{dir}/1.avi")
62
+ expect(subs.size).to eq(0)
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+ end
data/tivohmo.gemspec CHANGED
@@ -41,6 +41,7 @@ Gem::Specification.new do |spec|
41
41
  spec.add_dependency "builder"
42
42
  spec.add_dependency "puma"
43
43
  spec.add_dependency "tvdbr"
44
+ spec.add_dependency "iso-639"
44
45
 
45
46
  # filesystem adapter dependencies, make optional?
46
47
  spec.add_dependency "listen"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tivohmo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Conway
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-01 00:00:00.000000000 Z
11
+ date: 2015-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -304,6 +304,20 @@ dependencies:
304
304
  - - ">="
305
305
  - !ruby/object:Gem::Version
306
306
  version: '0'
307
+ - !ruby/object:Gem::Dependency
308
+ name: iso-639
309
+ requirement: !ruby/object:Gem::Requirement
310
+ requirements:
311
+ - - ">="
312
+ - !ruby/object:Gem::Version
313
+ version: '0'
314
+ type: :runtime
315
+ prerelease: false
316
+ version_requirements: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
307
321
  - !ruby/object:Gem::Dependency
308
322
  name: listen
309
323
  requirement: !ruby/object:Gem::Requirement
@@ -372,6 +386,7 @@ files:
372
386
  - lib/tivohmo/adapters/filesystem/application.rb
373
387
  - lib/tivohmo/adapters/filesystem/file_item.rb
374
388
  - lib/tivohmo/adapters/filesystem/folder_container.rb
389
+ - lib/tivohmo/adapters/filesystem/group.rb
375
390
  - lib/tivohmo/adapters/plex.rb
376
391
  - lib/tivohmo/adapters/plex/application.rb
377
392
  - lib/tivohmo/adapters/plex/category.rb
@@ -418,6 +433,7 @@ files:
418
433
  - lib/tivohmo/server/views/server_info.builder
419
434
  - lib/tivohmo/server/views/unsupported.builder
420
435
  - lib/tivohmo/server/views/video_formats.builder
436
+ - lib/tivohmo/subtitles_util.rb
421
437
  - lib/tivohmo/tvdb_helper.rb
422
438
  - lib/tivohmo/version.rb
423
439
  - spec/adapters/filesystem/application_spec.rb
@@ -464,10 +480,12 @@ files:
464
480
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_set_presorted_if_present.yml
465
481
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_use_category_value_for_title_if_present.yml
466
482
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate.yml
483
+ - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate_with_subtitle.yml
467
484
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_allow_disabling_series_id_in_metadata.yml
468
485
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_populate_metadata.yml
469
486
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Metadata/_initialize/should_instantiate.yml
470
487
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate.yml
488
+ - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate_with_subtitle.yml
471
489
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_metadata/should_populate_metadata.yml
472
490
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_display_non-zero_child_count_once_children_fetched.yml
473
491
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_have_children.yml
@@ -485,6 +503,7 @@ files:
485
503
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Transcoder/_initialize/should_instantiate.yml
486
504
  - spec/server_spec.rb
487
505
  - spec/spec_helper.rb
506
+ - spec/subtitles_util_spec.rb
488
507
  - tivohmo.gemspec
489
508
  homepage: ''
490
509
  licenses:
@@ -555,10 +574,12 @@ test_files:
555
574
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_set_presorted_if_present.yml
556
575
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Category/_initialize/should_use_category_value_for_title_if_present.yml
557
576
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate.yml
577
+ - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_initialize/should_instantiate_with_subtitle.yml
558
578
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_allow_disabling_series_id_in_metadata.yml
559
579
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Episode/_metadata/should_populate_metadata.yml
560
580
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Metadata/_initialize/should_instantiate.yml
561
581
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate.yml
582
+ - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_initialize/should_instantiate_with_subtitle.yml
562
583
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Movie/_metadata/should_populate_metadata.yml
563
584
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_display_non-zero_child_count_once_children_fetched.yml
564
585
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_QualifiedCategory/_children/should_have_children.yml
@@ -576,4 +597,4 @@ test_files:
576
597
  - spec/fixtures/vcr/TivoHMO_Adapters_Plex_Transcoder/_initialize/should_instantiate.yml
577
598
  - spec/server_spec.rb
578
599
  - spec/spec_helper.rb
579
- has_rdoc:
600
+ - spec/subtitles_util_spec.rb