tvshow_renamer 0.1 → 0.2
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 +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
|