tvshow_renamer 0.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +1 -1
- data/lib/tvshow_renamer/cli.rb +3 -3
- data/lib/tvshow_renamer/renamer.rb +66 -5
- data/lib/tvshow_renamer/version.rb +1 -1
- data/test/test_tvshow_renamer.rb +16 -8
- metadata +1 -1
data/README.md
CHANGED
data/lib/tvshow_renamer/cli.rb
CHANGED
@@ -7,9 +7,9 @@ module TVShowRenamer
|
|
7
7
|
opts = OptionParser.new do |opts|
|
8
8
|
opts.banner = "Usage: tvshow_renamer [options] <tvshow_name> file|directory ..."
|
9
9
|
|
10
|
-
opts.on("-v", "--verbose", "Run verbosely") do |v|
|
11
|
-
|
12
|
-
end
|
10
|
+
# opts.on("-v", "--verbose", "Run verbosely") do |v|
|
11
|
+
# options[:verbose] = v
|
12
|
+
# end
|
13
13
|
|
14
14
|
opts.on_tail("-h", "--help", "Show this message") do
|
15
15
|
puts opts
|
@@ -27,7 +27,7 @@ module TVShowRenamer
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def rename_dir(dirname)
|
30
|
-
puts "
|
30
|
+
puts "Renaming files in directory \"#{dirname}\""
|
31
31
|
Dir.glob(dirname + '/**').each do |filename|
|
32
32
|
rename_file(filename)
|
33
33
|
end
|
@@ -38,17 +38,78 @@ module TVShowRenamer
|
|
38
38
|
extension = File.extname(filename)
|
39
39
|
|
40
40
|
if EXTENSIONS.include?(extension.downcase)
|
41
|
-
dirname = File.dirname(filename)
|
42
41
|
basename = File.basename(filename)
|
42
|
+
detected_season, detected_episode = get_season_and_episode(basename)
|
43
43
|
|
44
|
-
|
44
|
+
season = detected_season
|
45
|
+
episode = detected_episode
|
46
|
+
|
47
|
+
rename_ok = false
|
48
|
+
until rename_ok
|
49
|
+
new_basename = format_filename(@tvshow_name, season, episode, extension)
|
50
|
+
print "Rename \"#{basename}\" to \"#{new_basename}\" ? (yneh) "
|
51
|
+
$stdout.flush
|
52
|
+
rename_value = $stdin.gets.chomp.strip
|
53
|
+
case rename_value.downcase
|
54
|
+
when 'y'
|
55
|
+
new_filename = File.join(File.dirname(filename), new_basename)
|
56
|
+
if File.exists?(new_filename)
|
57
|
+
override_ok = false
|
58
|
+
until override_ok
|
59
|
+
print "File \"#{new_basename}\" already exists. Override ? (yn) "
|
60
|
+
$stdout.flush
|
61
|
+
override_value = $stdin.gets.chomp.strip
|
62
|
+
case override_value
|
63
|
+
when 'y'
|
64
|
+
FileUtils.mv filename, new_filename
|
65
|
+
override_ok = true
|
66
|
+
rename_ok = true
|
67
|
+
when 'n'
|
68
|
+
override_ok = true
|
69
|
+
end
|
70
|
+
end
|
71
|
+
else
|
72
|
+
FileUtils.mv filename, new_filename
|
73
|
+
rename_ok = true
|
74
|
+
end
|
75
|
+
when 'n'
|
76
|
+
rename_ok = true
|
77
|
+
when 'e'
|
78
|
+
season = edit_value "Season", detected_season
|
79
|
+
episode = edit_value "Episode", detected_episode
|
80
|
+
when '?', 'h'
|
81
|
+
puts "y: Yes, n: No, e: Edit"
|
82
|
+
end
|
83
|
+
end
|
45
84
|
end
|
46
85
|
end
|
47
86
|
|
48
|
-
def
|
87
|
+
def get_season_and_episode(basename)
|
49
88
|
regex = /(?<season>\d{1,2})(e|x|\.)?(?<episode>\d{2,})/i
|
50
89
|
match = regex.match basename
|
51
|
-
|
90
|
+
[match[:season].to_i, match[:episode].to_i]
|
91
|
+
end
|
92
|
+
|
93
|
+
def format_filename(tvshow_name, season, episode, extension)
|
94
|
+
"#{tvshow_name} - %02ix%02i#{extension}" % [season, episode]
|
95
|
+
end
|
96
|
+
|
97
|
+
def edit_value(prompt, value)
|
98
|
+
ok = false
|
99
|
+
until ok
|
100
|
+
print "#{prompt} (#{value}) : "
|
101
|
+
$stdout.flush
|
102
|
+
str = $stdin.gets.chomp.strip
|
103
|
+
if str.empty?
|
104
|
+
ok = true
|
105
|
+
else
|
106
|
+
if str =~ /0{1,}/ || str.to_i > 0
|
107
|
+
value = str.to_i
|
108
|
+
ok = true
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
value
|
52
113
|
end
|
53
114
|
end
|
54
115
|
end
|
data/test/test_tvshow_renamer.rb
CHANGED
@@ -8,15 +8,23 @@ class TVShowRenamerTest < Test::Unit::TestCase
|
|
8
8
|
@renamer = TVShowRenamer::Renamer.new(TVSHOW_NAME)
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
13
|
-
'FamousShow.S05E01.DVDRip.XviD-BLAH.avi' =>
|
14
|
-
'FamousShow.12x03.DVDRip.XviD-BLAH.avi' =>
|
15
|
-
'FamousShow.0103.720p.mkv' =>
|
16
|
-
'FS.503.avi' =>
|
17
|
-
'Famous.Show.03.04.avi' =>
|
11
|
+
def test_get_season_and_episode
|
12
|
+
{
|
13
|
+
'FamousShow.S05E01.DVDRip.XviD-BLAH.avi' => [5, 1],
|
14
|
+
'FamousShow.12x03.DVDRip.XviD-BLAH.avi' => [12,3],
|
15
|
+
'FamousShow.0103.720p.mkv' => [1, 3],
|
16
|
+
'FS.503.avi' => [5, 3],
|
17
|
+
'Famous.Show.03.04.avi' => [3, 4],
|
18
|
+
'Famous-Show.04x00.srt' => [4, 0],
|
18
19
|
}.each do |k,v|
|
19
|
-
assert_equal v, @renamer.
|
20
|
+
assert_equal v, @renamer.get_season_and_episode(k)
|
20
21
|
end
|
21
22
|
end
|
23
|
+
|
24
|
+
def test_format_filename
|
25
|
+
assert_equal 'Famous Show - 01x02.mkv',
|
26
|
+
@renamer.format_filename(TVSHOW_NAME, 1, 2, '.mkv')
|
27
|
+
assert_equal 'Famous Show - 01x101.mkv',
|
28
|
+
@renamer.format_filename(TVSHOW_NAME, 1, 101, '.mkv')
|
29
|
+
end
|
22
30
|
end
|