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 CHANGED
@@ -12,6 +12,6 @@ Installation
12
12
  Usage
13
13
  -----
14
14
 
15
- `tvshow_renamer [options] file ...`
15
+ `tvshow_renamer [options] <tvshow_name> file|directory ...`
16
16
 
17
17
  You can specify many files to rename.
@@ -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
- options[:verbose] = v
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 "Processing directory #{dirname}" if @options[:verbose]
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
- FileUtils.mv filename, File.join(dirname, new_basename(basename))
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 new_basename(basename)
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
- "#{@tvshow_name} - %02ix%02i#{File.extname(basename)}" % [match[:season], match[:episode]]
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
@@ -1,3 +1,3 @@
1
1
  module TVShowRenamer
2
- Version = VERSION = '0.1'
2
+ Version = VERSION = '0.2'
3
3
  end
@@ -8,15 +8,23 @@ class TVShowRenamerTest < Test::Unit::TestCase
8
8
  @renamer = TVShowRenamer::Renamer.new(TVSHOW_NAME)
9
9
  end
10
10
 
11
- def test_new_basename
12
- tests = {
13
- 'FamousShow.S05E01.DVDRip.XviD-BLAH.avi' => 'Famous Show - 05x01.avi',
14
- 'FamousShow.12x03.DVDRip.XviD-BLAH.avi' => 'Famous Show - 12x03.avi',
15
- 'FamousShow.0103.720p.mkv' => 'Famous Show - 01x03.mkv',
16
- 'FS.503.avi' => 'Famous Show - 05x03.avi',
17
- 'Famous.Show.03.04.avi' => 'Famous Show - 03x04.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.new_basename(k)
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tvshow_renamer
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: