tagomatic 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,5 +19,8 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
- .idea/workspace.xml
23
- tagomatic.gemspec
22
+ /.idea/workspace.xml
23
+ /tagomatic.gemspec
24
+ *.mp3
25
+ *.jpg
26
+ album.id
@@ -1,8 +1,7 @@
1
1
  <component name="InspectionProjectProfileManager">
2
2
  <settings>
3
3
  <option name="PROJECT_PROFILE" value="Project Default" />
4
- <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
5
- <scopes />
6
- <list size="0" />
4
+ <option name="USE_PROJECT_PROFILE" value="false" />
5
+ <version value="1.0" />
7
6
  </settings>
8
7
  </component>
data/Rakefile CHANGED
@@ -52,3 +52,6 @@ Rake::RDocTask.new do |rdoc|
52
52
  rdoc.rdoc_files.include('README*')
53
53
  rdoc.rdoc_files.include('lib/**/*.rb')
54
54
  end
55
+
56
+ $:.unshift File.join(File.dirname(__FILE__), 'lib')
57
+ Dir['lib/tasks/*.rb'].each {|t| load t}
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.1.0
data/lib/monkey/string.rb CHANGED
@@ -2,9 +2,12 @@ class String
2
2
 
3
3
  def starts_with?(prefix)
4
4
  pattern = Regexp.new "^#{Regexp.escape(prefix)}"
5
- ( pattern =~ self ) == MATCHED_AT_CHAR_POSITION_ZERO
5
+ not ( pattern =~ self ).nil?
6
6
  end
7
7
 
8
- MATCHED_AT_CHAR_POSITION_ZERO = 0
8
+ def ends_with?(suffix)
9
+ pattern = Regexp.new "#{Regexp.escape(suffix)}$"
10
+ not ( pattern =~ self ).nil?
11
+ end
9
12
 
10
13
  end
@@ -13,6 +13,7 @@ module Tagomatic
13
13
  self[:list] = false
14
14
  self[:recurse] = false
15
15
  self[:showtags] = false
16
+ self[:underscores] = false
16
17
  self[:verbose] = false
17
18
  end
18
19
 
@@ -71,6 +71,9 @@ module Tagomatic
71
71
  opts.on("-w", "--showtags", "Show the resulting tags.") do |showtags|
72
72
  @options[:showtags] = showtags
73
73
  end
74
+ opts.on("-u", "--underscores", "Replace underscores with spaces before processing a file name.") do |underscores|
75
+ @options[:underscores] = underscores
76
+ end
74
77
 
75
78
  opts.separator ""
76
79
  opts.separator "Common options:"
@@ -33,10 +33,13 @@ module Tagomatic
33
33
  end
34
34
 
35
35
  def enter_scannable_folder(&block)
36
+ folder_path = @file_path
37
+ @logger.verbose "entering #{folder_path}"
36
38
  save_current_options
37
39
  apply_local_options if has_local_options?
38
- do_scan_folder(@file_path, &block)
40
+ do_scan_folder(folder_path, &block)
39
41
  pop_local_options
42
+ @logger.verbose "leaving #{folder_path}"
40
43
  end
41
44
 
42
45
  def save_current_options
@@ -55,6 +58,7 @@ module Tagomatic
55
58
 
56
59
  def apply_local_options
57
60
  local_options = read_local_options
61
+ @logger.verbose "applying local options: #{local_options}"
58
62
  @parser.parse!(local_options)
59
63
  end
60
64
 
@@ -71,7 +75,7 @@ module Tagomatic
71
75
 
72
76
  def do_scan_folder(folder_path, &block)
73
77
  @logger.verbose "scanning #{folder_path}"
74
- entries = Dir.entries(folder_path)
78
+ entries = Dir.entries(folder_path).sort
75
79
 
76
80
  local_formats = entries.select { |entry| entry.starts_with?('.format=') }
77
81
  apply_local_formats(local_formats)
@@ -83,6 +87,7 @@ module Tagomatic
83
87
  end
84
88
 
85
89
  def apply_local_formats(list_of_local_format_file_names)
90
+ @logger.verbose "applying local formats: #{list_of_local_format_file_names}"
86
91
  local_formats = list_of_local_format_file_names.map do |file_name|
87
92
  format = file_name.sub('.format=', '')
88
93
  format.gsub!('|', '/')
@@ -14,25 +14,24 @@ module Tagomatic
14
14
  FORMAT_ID_YEAR = 'y'
15
15
 
16
16
  KNOWN_FORMATS = [
17
- "%g/%a/%y %b/%n_-_%t.mp3",
18
- "%g/%a/%y %b/%n_%t.mp3",
19
- "%g/%a/%y %b/%n-%t.mp3",
17
+ "%g/%a/%b [%y]/%n - %t.mp3",
20
18
  "%g/%a/%b [%y]/%n-%t.mp3",
19
+ "%g/%a/%b [%y]/%n %t.mp3",
20
+
21
+ "%g/%a/%b (%y)/%n - %t.mp3",
22
+ "%g/%a/%b (%y)/%n-%t.mp3",
23
+ "%g/%a/%b (%y)/%n %t.mp3",
24
+
25
+ "%g/%a/(%y) %b/%n - %t.mp3",
26
+ "%g/%a/(%y) %b/%n %t.mp3",
27
+ "%g/%a/(%y) %b/%n-%t.mp3",
21
28
 
22
- "%g/%a/%a_%b_%y/%n_%t.mp3",
23
- "%g/%a/%b [%y]/%n - %t.mp3",
24
- "%g/%a/%b/%a - %n - %t.mp3",
25
29
  "%g/%a/%b/%n - %t.mp3",
26
- "%g/%a/%b/%n-%t.mp3",
27
- "%g/%a/%b/%n_%t.mp3",
28
30
  "%g/%a/%b/%n %t.mp3",
29
- "%g/%a/%a- %b/%n %t.mp3",
30
- "%g/%a/%b/%a - %t.mp3",
31
- "%g/%a/(%y) %b/%n - %t.mp3",
32
- "%g/%a/%y %b/%n - %t.mp3",
33
- "%a/%b/%n - %t.mp3",
34
- "%a - %y - %b/%n - %t.mp3",
35
- "%a - %b/%n - %t.mp3",
31
+ "%g/%a/%b/%n-%t.mp3",
32
+
33
+ "%a - %n - %t.mp3",
34
+ "%n - %a - %t.mp3",
36
35
  ]
37
36
 
38
37
  def initialize(options, compiler, mp3info, info_updater_factory, logger)
@@ -44,6 +43,8 @@ module Tagomatic
44
43
  end
45
44
 
46
45
  def process!(file_path)
46
+ file_path.gsub '_', ' ' if @options[:underscores]
47
+
47
48
  @logger.verbose "tagging #{file_path}"
48
49
 
49
50
  prepare_for_current_file(file_path)
@@ -70,11 +71,11 @@ module Tagomatic
70
71
 
71
72
  def apply_custom_formats
72
73
  @tags = guess_tags_using(@options[:formats])
73
- show_error("no custom format matched #{@file_path}") unless @tags
74
+ show_error("no custom format matched #{@file_path} using #{@options[:formats]}") unless @tags
74
75
  end
75
76
 
76
77
  def show_error(message, optional_exception = nil)
77
- @logger.error("failed updating #{@file_path}", optional_exception)
78
+ @logger.error(message, optional_exception)
78
79
  exit 10 if @options[:errorstops]
79
80
  end
80
81
 
@@ -118,7 +119,7 @@ module Tagomatic
118
119
  def try_updating_mp3file
119
120
  update_mp3file
120
121
  rescue
121
- show_error "failed updating #{@file_path}", $1
122
+ show_error "failed updating #{@file_path}", $!
122
123
  end
123
124
 
124
125
  def update_mp3file
@@ -0,0 +1,40 @@
1
+ require 'monkey/string'
2
+
3
+ namespace :test do
4
+
5
+ desc 'Create the test data mp3 files from their album.dat files.'
6
+ task :data do
7
+ Dir.glob('test/data/**/album.dat') do |album_dat_file_path|
8
+ puts "auto-generating album files for #{album_dat_file_path}"
9
+ album_folder = File.dirname(album_dat_file_path)
10
+ album_file_list = File.readlines(album_dat_file_path).map {|l| l.chomp}
11
+ album_file_list.each do |file_name|
12
+ puts "auto-generating album file #{file_name}"
13
+ file_name = file_name.chomp
14
+ file_path = File.join(album_folder, file_name)
15
+ create_fake_file file_path
16
+ end
17
+ end
18
+ end
19
+
20
+ def create_fake_file(file_path)
21
+ if is_mp3_file?(file_path)
22
+ create_mp3_fake_file file_path
23
+ else
24
+ create_empty_fake_file file_path
25
+ end
26
+ end
27
+
28
+ def is_mp3_file?(file_path)
29
+ file_path.ends_with?('.mp3')
30
+ end
31
+
32
+ def create_empty_fake_file(file_path)
33
+ system %Q[touch "#{file_path}"]
34
+ end
35
+
36
+ def create_mp3_fake_file(file_path)
37
+ system %Q[cp test/data/mp3_template_file "#{file_path}"]
38
+ end
39
+
40
+ end
Binary file
@@ -0,0 +1,11 @@
1
+ album.id
2
+ Fehler Im System.jpg
3
+ Peter Schilling - 01 - ...Dann truegt der Schein.mp3
4
+ Peter Schilling - 02 - Fast alles konstruiert.mp3
5
+ Peter Schilling - 03 - Die Wueste lebt.mp3
6
+ Peter Schilling - 04 - Fehler im System.mp3
7
+ Peter Schilling - 05 - Major Tom (Voellig losgeloest).mp3
8
+ Peter Schilling - 06 - Major Tom.mp3
9
+ Peter Schilling - 07 - U.S.A..mp3
10
+ Peter Schilling - 08 - Ich hab keine Lust.mp3
11
+ Peter Schilling - 09 - Stille Nacht, heilige Nacht.mp3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tagomatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lukic
@@ -104,8 +104,9 @@ files:
104
104
  - lib/tagomatic/scanner.rb
105
105
  - lib/tagomatic/system_configuration.rb
106
106
  - lib/tagomatic/tagger.rb
107
- - test/data/sorted/80s/Peter_Schilling/Fast_alles_konstruiert/01-Fast_alles_konstruiert.mp3
108
- - test/data/sorted/80s/Peter_Schilling/Fast_alles_konstruiert/02-Dann_truegt_der_schein.mp3
107
+ - lib/tasks/test_data.rb
108
+ - test/data/mp3_template_file
109
+ - test/data/sorted/80s/Peter_Schilling/1982 Fehler im System/album.dat
109
110
  - test/helper.rb
110
111
  - test/test_tagomatic.rb
111
112
  has_rdoc: true