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 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: