sindex 0.1.0 → 0.1.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.
- data/lib/sindex/series.rb +37 -1
- data/lib/sindex/series_index.rb +25 -3
- data/lib/sindex/version.rb +1 -1
- data/res/seriesindex.dtd +2 -0
- data/test/seriesindex_example.xml +8 -0
- data/test/test_series_index.rb +15 -0
- metadata +4 -4
data/lib/sindex/series.rb
CHANGED
@@ -22,13 +22,21 @@ module Sindex
|
|
22
22
|
# :filename - the filename to the episode
|
23
23
|
# :language - language in which the episode was watched :de/:en
|
24
24
|
#
|
25
|
-
def add_episode(filename, language=:de)
|
25
|
+
def add_episode(filename, language=:de, all_before=false)
|
26
26
|
if id = SeriesIndex.extract_episode_identifier(filename)
|
27
27
|
|
28
28
|
if @episodes[language].nil?
|
29
29
|
@episodes[language] = {}
|
30
30
|
end
|
31
31
|
|
32
|
+
# mark all previous episodes as watched if `all_before`
|
33
|
+
if all_before
|
34
|
+
ids = build_up_ids_before_another_id(id)
|
35
|
+
for virtual_id in ids
|
36
|
+
@episodes[language][virtual_id] = :virtual
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
32
40
|
@episodes[language][id] = filename
|
33
41
|
end
|
34
42
|
end
|
@@ -52,5 +60,33 @@ module Sindex
|
|
52
60
|
false
|
53
61
|
end
|
54
62
|
|
63
|
+
private
|
64
|
+
|
65
|
+
# Private: buils up a list of strings that are IDs [season]_[episode]
|
66
|
+
# smaller than the supplied id
|
67
|
+
#
|
68
|
+
# Returns list of strings in the structure above
|
69
|
+
def build_up_ids_before_another_id(id)
|
70
|
+
if md = id.match(/^(\d+)_(\d+)$/)
|
71
|
+
season = md[1].to_i
|
72
|
+
episode = md[2].to_i
|
73
|
+
virtual_ids= []
|
74
|
+
|
75
|
+
1.upto(season).each do |s|
|
76
|
+
episode_range = (1..50).to_a
|
77
|
+
if s == season
|
78
|
+
episode_range = (1...episode).to_a
|
79
|
+
end
|
80
|
+
|
81
|
+
episode_range.each do |e|
|
82
|
+
virtual_ids << "%d_%d" % [s, e]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
return virtual_ids
|
87
|
+
else
|
88
|
+
raise AttributeError, "the supplied id was not an id"
|
89
|
+
end
|
90
|
+
end
|
55
91
|
end
|
56
92
|
end
|
data/lib/sindex/series_index.rb
CHANGED
@@ -163,9 +163,25 @@ module Sindex
|
|
163
163
|
|
164
164
|
# write the different episodes
|
165
165
|
data.episodes.each do |language, episodes|
|
166
|
+
add_all_before_flag=false
|
167
|
+
|
166
168
|
xml.episodes(:lang => language) {
|
167
169
|
episodes.each do |episode_id, filename|
|
168
|
-
|
170
|
+
|
171
|
+
# only dump real episodes not virtual episodes that are
|
172
|
+
# added because of the `all_before`-flag
|
173
|
+
if filename == :virtual
|
174
|
+
add_all_before_flag=true
|
175
|
+
next
|
176
|
+
end
|
177
|
+
|
178
|
+
args = {:name => filename}
|
179
|
+
if add_all_before_flag
|
180
|
+
args[:all_before] = true
|
181
|
+
add_all_before_flag=false
|
182
|
+
end
|
183
|
+
|
184
|
+
xml.episode(args)
|
169
185
|
end
|
170
186
|
}
|
171
187
|
end
|
@@ -217,12 +233,18 @@ module Sindex
|
|
217
233
|
s.receive_updates = false if series[:receive_updates].match(/false/i)
|
218
234
|
|
219
235
|
series.css('episodes').each do |episodes|
|
220
|
-
language = episodes['lang'].
|
236
|
+
language = episodes['lang'].to_sym
|
221
237
|
|
222
238
|
episodes.css('episode').each do |episode|
|
223
239
|
episode['name'] || next
|
224
240
|
|
225
|
-
|
241
|
+
# process `all_before` flag
|
242
|
+
all_before=false
|
243
|
+
if episode['all_before'] && episode['all_before'].match(/true/i)
|
244
|
+
all_before=true
|
245
|
+
end
|
246
|
+
|
247
|
+
s.add_episode(episode['name'], language, all_before)
|
226
248
|
end
|
227
249
|
end
|
228
250
|
|
data/lib/sindex/version.rb
CHANGED
data/res/seriesindex.dtd
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
|
10
10
|
<!ELEMENT episode EMPTY>
|
11
11
|
<!ATTLIST episode name CDATA #REQUIRED>
|
12
|
+
<!ATTLIST episode all_before (true|false) "false">
|
13
|
+
<!-- set this on an episode and all episodes before has also been watched -->
|
12
14
|
|
13
15
|
<!ELEMENT alias EMPTY>
|
14
16
|
<!ATTLIST alias to CDATA #REQUIRED>
|
@@ -73,4 +73,12 @@
|
|
73
73
|
<episode name="S01E04 - Bitte warten.avi" />
|
74
74
|
</episodes>
|
75
75
|
</series>
|
76
|
+
<series name="The Big Bang Theory">
|
77
|
+
<episodes>
|
78
|
+
<episode name="S06E01 - do not change.avi" all_before="true"/>
|
79
|
+
<episode name="S06E02 - Grundkurs Spanisch.avi" />
|
80
|
+
<episode name="S06E03 - Carpe Diem.avi" />
|
81
|
+
<episode name="S06E04 - Bitte warten.avi" />
|
82
|
+
</episodes>
|
83
|
+
</series>
|
76
84
|
</seriesindex>
|
data/test/test_series_index.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require File.dirname(__FILE__) + '/test_helper.rb'
|
3
3
|
require 'fileutils'
|
4
|
+
require 'nokogiri'
|
4
5
|
|
5
6
|
class TestIndex < Test::Unit::TestCase
|
6
7
|
|
@@ -89,6 +90,20 @@ class TestIndex < Test::Unit::TestCase
|
|
89
90
|
"Prison.Break.S01E31.Bankgeheimnis.DL.German.HDTV.XviD-GDR")
|
90
91
|
end
|
91
92
|
|
93
|
+
def test_that_the_all_before_flag_is_interpreted
|
94
|
+
assert_equal true, @series_index.episode_existing?("The Big Bang Theory",
|
95
|
+
"Thee.Big.Bang.Theory.S01E31.Bankgeheimnis.DL.German.HDTV.XviD-GDR")
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_that_the_all_before_flag_is_also_written_to_dumped_index
|
99
|
+
filename = @tmp_directory + 'dumped_index.xml'
|
100
|
+
@series_index.dump_index_to_file(filename)
|
101
|
+
|
102
|
+
doc = Nokogiri::XML(File.read(filename))
|
103
|
+
elems = doc.css('series[name="The Big Bang Theory"] > episodes > episode[all_before="true"]')
|
104
|
+
assert_equal false, elems.empty?
|
105
|
+
end
|
106
|
+
|
92
107
|
def test_that_you_can_add_new_episodes_to_the_index
|
93
108
|
assert_equal @series_index.episode_existing?("Shameless US",
|
94
109
|
"Shameless.US.S01E09.German"), false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sindex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: -599233288800797893
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
version: '0'
|
141
141
|
segments:
|
142
142
|
- 0
|
143
|
-
hash:
|
143
|
+
hash: -599233288800797893
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
146
|
rubygems_version: 1.8.24
|