mediafile 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 119b0a54c4c60f5422faa73912fefbcfd97390ec
4
- data.tar.gz: b7d0d780c5a49fe57b7adbd9125723316d8bfa3b
3
+ metadata.gz: 1fc4745ca61d0c560a088540bdc2c915883595f8
4
+ data.tar.gz: 6513da12413d7191bf965d6221ba262ef21f9498
5
5
  SHA512:
6
- metadata.gz: 9995f98f87546a394e5d26494442d1ecd3109a297d8e7596f36494ff41ff3b7eff4484fc23a17984a7ebdb42d65989271d4b5c6d702411632234b407ee72902d
7
- data.tar.gz: 99e25a1163b071e326826a490b26e145b68fd67522b40ba591d2b8b1ff921fd37dc0fa856a3ad7d9d1d6cb51cc18a98d989f9fa85897924bc4c25cbc6c25c628
6
+ metadata.gz: 9ccbebb876f2dfa7335dddb456635475cc725614be46e8a351eb7c086122d087104eec53bd3e68ed17096dc20f07e99eb11b580adb9b7523c594c2af966e7e40
7
+ data.tar.gz: b3922fbb97e6fc38d076dc89a337e2d1a2a969f3eb2ee0847fb99f5a5ddf9911de08cd38d1a91ddc7c7ea79e8049fcd4eba426095b2599f6bb6da47f34124971
data/bin/music_cp CHANGED
@@ -2,10 +2,7 @@
2
2
  # vim:et sw=2 ts=2
3
3
  #
4
4
 
5
- require 'fileutils'
6
5
  require 'optparse'
7
- require 'digest/md5'
8
- require 'timeout'
9
6
  require 'mediafile'
10
7
 
11
8
  PROGNAME = File.basename($0)
@@ -16,6 +13,10 @@ end
16
13
 
17
14
  kill = me = now = false
18
15
  files = []
16
+ opt_files = {
17
+ flat: [],
18
+ recurse: []
19
+ }
19
20
  dest = "."
20
21
  verbose = false
21
22
  progress = true
@@ -23,23 +24,15 @@ count = `grep -c '^processor' /proc/cpuinfo`.strip.to_i/2|1
23
24
  transcode = { flac: :mp3, wav: :mp3 }
24
25
  exclude_patterns = []
25
26
  file_types = "{flac,mp3,MP3,FLAC,wav,WAV,m4a,M4A}"
27
+
26
28
  opts = OptionParser.new do |opt|
27
29
 
28
30
  opt.on("-f", "--file FILE|DIR", "File or directory to copy.",
29
31
  "If given a directory, will grab all files within non-recursively") do |e|
30
- e.split(",").each do |f|
31
- if File.file? f
32
- files << f
33
- elsif File.directory? f
34
- files.concat Dir.glob( f + "/*.#{file_types}")
35
- else
36
- warn "#{f} is not a file or a directory!"
37
- end
38
- end
32
+ opt_files[:flat].concat e.split(',')
39
33
  end
40
34
  opt.on("-r", "--recursive DIR", "Directory to recursively scan and copy") do |r|
41
- raise "Directory '#{r}' does not exist" unless File.directory? r
42
- files.concat Dir.glob( r + "/**/*.#{file_types}")
35
+ opt_files[:recurse].concat r.split(',')
43
36
  end
44
37
  opt.on("-d", "--destination PATH", "Where to copy file to. Default: '#{dest}'",
45
38
  "Will be created if it doesn't exist.") do |d|
@@ -59,7 +52,7 @@ opts = OptionParser.new do |opt|
59
52
  end
60
53
  opt.on("--exclude PATTERN", "-x PATTERN", String, "Exclude files that match the given pattern.",
61
54
  "Can specify more than once, file is excluded if any pattern matches") do |p|
62
- exclude_patterns << p
55
+ exclude_patterns.concat p.split(',')
63
56
  end
64
57
  opt.on("-v", "--[no-]verbose", "Be verbose") do |v|
65
58
  verbose = v
@@ -83,13 +76,46 @@ opts = OptionParser.new do |opt|
83
76
  end
84
77
  end
85
78
 
79
+ # resolve flat dirs
80
+ opt_files[:flat].each do |f|
81
+ if File.file? f
82
+ files << f
83
+ elsif File.directory? f
84
+ files.concat Dir.glob( f + "/*.#{file_types}")
85
+ else
86
+ warn "#{f} is not a file or a directory!"
87
+ end
88
+ end
89
+
90
+ # resolve recurse dirs
91
+ opt_files[:recurse].each do |r|
92
+ if File.directory? r
93
+ files.concat Dir.glob( r + "/**/*.#{file_types}")
94
+ else
95
+ warn "#{r} is not a file or a directory!"
96
+ end
97
+ end
98
+
86
99
  files = files.uniq.sort
87
100
  if exclude_patterns.any?
88
- pattern = Regexp.new(exclude_patterns.join("|"))
101
+ is_a_regexp = /\/?(.+?)(?:\/([imxouesn]*))?$/
102
+ pattern = Regexp.union(
103
+ exclude_patterns.map{ |pat|
104
+ m = pat.match(is_a_regexp)
105
+ if m
106
+ Regexp.new(*m.captures)
107
+ else
108
+ raise "Bag pattern: '#{pat}'"
109
+ end
110
+ }.compact
111
+ )
112
+ puts "Using exclude pattern: #{pattern}" if verbose
89
113
  files.delete_if { |el| pattern.match el }
90
114
  end
115
+
91
116
  if files.empty?
92
117
  warn "No file specified, exiting"
118
+ warn "Perhaps you excluded too many? '#{pattern}'" if exclude_patterns.any?
93
119
  warn opts
94
120
  exit
95
121
  end
@@ -98,14 +124,20 @@ files.each { |l| puts "\t"+l }
98
124
  puts "#{files.count} files total"
99
125
  puts "The following transcode table will be used:"
100
126
  puts transcode.any? ? transcode : 'none'
101
- puts "Do you wish procede? (Y/n)"
127
+ puts "Do you wish proceed? (Y/n)"
102
128
  y = gets
103
129
  if /n/i.match(y)
104
130
  puts "User cancel."
105
131
  exit
106
132
  end
107
133
  puts "Begin copy to #{dest}"
108
- copier = MediaFile::BulkMediaCopy.new(files, destination_root: dest, verbose: verbose, transcode: transcode, progress: progress)
134
+ copier = MediaFile::BulkMediaCopy.new(
135
+ files,
136
+ destination_root: dest,
137
+ verbose: verbose,
138
+ transcode: transcode,
139
+ progress: progress
140
+ )
109
141
 
110
142
  copier.run count
111
143
 
@@ -63,7 +63,9 @@ module MediaFile; class MediaFile
63
63
  end
64
64
  end
65
65
 
66
- tags :album, :artist, :album_artist, :title, :genre, :year, :track, :comment, :disc_number, :disc_total
66
+ tags :album, :artist, :album_artist,
67
+ :title, :genre, :year, :track,
68
+ :comment, :disc_number, :disc_total
67
69
 
68
70
  private
69
71
 
@@ -1,3 +1,3 @@
1
1
  module MediaFile
2
- VERSION = "0.0.3" unless defined?(::MediaFile::VERSION)
2
+ VERSION = "0.1.0" unless defined?(::MediaFile::VERSION)
3
3
  end
metadata CHANGED
@@ -1,33 +1,33 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mediafile
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
  - Jeff Harvey-Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-07 00:00:00.000000000 Z
11
+ date: 2014-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: taglib-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.6'
20
- - - '>='
20
+ - - ">="
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.6.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.6'
30
- - - '>='
30
+ - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 0.6.0
33
33
  description: Parse media file metadata, copy or transcode mediafiles.
@@ -38,11 +38,11 @@ executables:
38
38
  extensions: []
39
39
  extra_rdoc_files: []
40
40
  files:
41
- - ./bin/music_cp
42
- - ./lib/mediafile.rb
43
- - ./lib/mediafile/bulkmediacopy.rb
44
- - ./lib/mediafile/mediafile.rb
45
- - ./lib/mediafile/version.rb
41
+ - "./lib/mediafile/mediafile.rb"
42
+ - "./lib/mediafile/version.rb"
43
+ - "./lib/mediafile/bulkmediacopy.rb"
44
+ - "./lib/mediafile.rb"
45
+ - "./bin/music_cp"
46
46
  - bin/music_cp
47
47
  homepage: https://github.com/seginoviax/mediafile
48
48
  licenses:
@@ -54,17 +54,17 @@ require_paths:
54
54
  - lib
55
55
  required_ruby_version: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - ~>
57
+ - - "~>"
58
58
  - !ruby/object:Gem::Version
59
59
  version: '2'
60
60
  required_rubygems_version: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
66
  rubyforge_project:
67
- rubygems_version: 2.2.2
67
+ rubygems_version: 2.0.14
68
68
  signing_key:
69
69
  specification_version: 4
70
70
  summary: Parse media file metadata.