serienmover 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/README.md +20 -1
- data/bin/serienmover +39 -12
- data/lib/serienmover/series_store.rb +7 -0
- data/lib/serienmover/version.rb +1 -1
- data/spec/series_store_spec.rb +7 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -8,7 +8,26 @@ to rename these files.
|
|
8
8
|
|
9
9
|
$ gem install serienmover
|
10
10
|
|
11
|
+
That installs an executable named `serienmover` that is used to
|
12
|
+
process the files.
|
13
|
+
|
14
|
+
## Features
|
15
|
+
|
16
|
+
* searches for a possible target in your series directories
|
17
|
+
* can read a Yaml file from `serienrenamer` which holds the series names
|
18
|
+
from the renamed files, indexed by md5sum
|
19
|
+
* creates a new season directory if episode is the first of a new season
|
20
|
+
by detecting the pattern from former seasons
|
21
|
+
* has some metrics to find mostly the right target
|
22
|
+
* can process the series automatic by file
|
23
|
+
|
11
24
|
## Usage
|
12
25
|
|
13
|
-
|
26
|
+
$ serienmover
|
27
|
+
|
28
|
+
## Configuration
|
29
|
+
|
30
|
+
You can change the behaviour of `serienmover` with commandline arguments
|
31
|
+
(`serienmover --help` for an overview) or by editing the config file
|
32
|
+
under `~/.serienmover/config.yml`.
|
14
33
|
|
data/bin/serienmover
CHANGED
@@ -21,12 +21,14 @@ FileUtils.mkdir(CONFIG_DIR) unless File.directory?(CONFIG_DIR)
|
|
21
21
|
###
|
22
22
|
# configuration
|
23
23
|
STANDARD_CONFIG = {
|
24
|
-
:default_directory
|
25
|
-
:series_directories
|
26
|
-
:read_episode_info
|
27
|
-
:store_path
|
28
|
-
:byte_count_for_md5
|
29
|
-
:collective_directory
|
24
|
+
:default_directory => File.join(File.expand_path("~"), "Downloads"),
|
25
|
+
:series_directories => [],
|
26
|
+
:read_episode_info => false,
|
27
|
+
:store_path => '',
|
28
|
+
:byte_count_for_md5 => 2048,
|
29
|
+
:collective_directory => '',
|
30
|
+
:auto_process_list => false,
|
31
|
+
:auto_process_list_file => File.join(CONFIG_DIR, "autoprocess.yml")
|
30
32
|
}
|
31
33
|
|
32
34
|
config = STANDARD_CONFIG.merge_with_serialized(CONFIG_FILE)
|
@@ -59,6 +61,11 @@ OptionParser.new do |opts|
|
|
59
61
|
config[:read_episode_info] = false
|
60
62
|
end
|
61
63
|
|
64
|
+
opts.on( "-n", "--[no]-autoprocess",
|
65
|
+
"use a file to select between copying and moving") do |opt|
|
66
|
+
config[:auto_process_list] = opt
|
67
|
+
end
|
68
|
+
|
62
69
|
opts.on( "-v", "--version",
|
63
70
|
"Outputs the version number.") do |opt|
|
64
71
|
puts Serienmover::VERSION
|
@@ -86,6 +93,16 @@ Dir.chdir(episode_directory)
|
|
86
93
|
# instantiate the series_store
|
87
94
|
store = Serienmover::SeriesStore.new(config[:series_directories])
|
88
95
|
|
96
|
+
###
|
97
|
+
# build up and load autoprocess list
|
98
|
+
autoprocess_list = {}
|
99
|
+
|
100
|
+
if config[:auto_process_list] && config[:auto_process_list] == true
|
101
|
+
exisiting_series = Hash[store.series_list.map{ |s| [s, "n"] }]
|
102
|
+
autoprocess_list =
|
103
|
+
exisiting_series.merge_with_serialized(config[:auto_process_list_file])
|
104
|
+
end
|
105
|
+
|
89
106
|
###
|
90
107
|
# instantiate information store
|
91
108
|
info_store = Serienrenamer::InformationStore.new(
|
@@ -147,18 +164,28 @@ Dir.new('.').to_a.sort.each do |file|
|
|
147
164
|
puts ">> '%s'" % selected_target
|
148
165
|
episode.target = selected_target
|
149
166
|
|
167
|
+
# get the choice from the autoprocess
|
168
|
+
choice = autoprocess_list[episode.target.series]
|
169
|
+
copy = nil
|
170
|
+
copy = true if choice && choice.match(/[ck]/i)
|
171
|
+
copy = false if choice && choice.match(/[vm]/i)
|
172
|
+
|
150
173
|
###
|
151
174
|
# ask for the action (copy/move)
|
152
175
|
print "What should be done ( [c]opy (*) , [m]ove ): "
|
153
|
-
char =
|
154
|
-
print char.chr unless char.chr.match(/\r/)
|
176
|
+
char = nil
|
155
177
|
|
156
|
-
|
157
|
-
|
158
|
-
|
178
|
+
if copy.nil?
|
179
|
+
char = get_character
|
180
|
+
print char.chr unless char.chr.match(/\r/)
|
181
|
+
|
182
|
+
unless char.chr.match(/[kcmv\r]/i)
|
183
|
+
puts "\nwill be skipped ...\n\n"
|
184
|
+
next
|
185
|
+
end
|
159
186
|
end
|
160
187
|
|
161
|
-
if char.chr.match(/[kc\r]/i)
|
188
|
+
if copy == true || char && char.chr.match(/[kc\r]/i)
|
162
189
|
episode.set_action(copy: true)
|
163
190
|
print " ... copy"
|
164
191
|
else
|
@@ -147,6 +147,13 @@ module Serienmover
|
|
147
147
|
File.join(target.targetdir, episode.to_s)
|
148
148
|
end
|
149
149
|
|
150
|
+
# Public: list of all series in the store
|
151
|
+
#
|
152
|
+
# Returns an array of all exisiting series
|
153
|
+
def series_list
|
154
|
+
@series_data.keys
|
155
|
+
end
|
156
|
+
|
150
157
|
class << self
|
151
158
|
|
152
159
|
# Public: tries to match the suppplied seriesname pattern
|
data/lib/serienmover/version.rb
CHANGED
data/spec/series_store_spec.rb
CHANGED
@@ -107,4 +107,11 @@ describe Serienmover::SeriesStore do
|
|
107
107
|
less_results = @store.find_suitable_target(episode)
|
108
108
|
less_results.size.should be 1
|
109
109
|
end
|
110
|
+
|
111
|
+
it "should return a list with all seriesnames" do
|
112
|
+
series = @store.series_list()
|
113
|
+
|
114
|
+
series.is_a?(Array).should be_true
|
115
|
+
series.include?("Criminal Minds").should be_true
|
116
|
+
end
|
110
117
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serienmover
|
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-04-
|
12
|
+
date: 2012-04-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: serienrenamer
|