tivohmo 0.3.0 → 0.3.1

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 (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