autogg 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,10 +4,29 @@ h2. Summary
4
4
 
5
5
  Encodes all flac files in a given directory to ogg in another given directory while preserving the directory structure.
6
6
 
7
+ h2. Installation
8
+
9
+ bc. $ gem install autogg
10
+
11
+ h2. Usage
12
+
13
+ bc. man autogg
14
+
15
+ h2. Logfile utilization
16
+
17
+ The top of each autogg.log (in oggpath) should read:
18
+ "This is the log of excluded files for the most recently run autogg".
19
+
20
+ Each line follows the pattern:
21
+ @"#{parent(path)} -- #{File.basename(path)}"@
22
+
23
+ For optimal viewing pleasure, I recommend doing:
24
+ @$ cat autogg.log | sort | less@
25
+
7
26
  h2. Adding as a cronjob
8
27
 
9
28
  *Example:*
10
29
 
11
30
  bc. $ echo '@hourly ID=autogg autogg /media/tb/rt/wt/ /media/tb/ogg/ -o -q8' | crontab -
12
31
 
13
- _keep in mind this replaces the current crontab_
32
+ _keep in mind this replaces your current crontab_
Binary file
@@ -2,7 +2,7 @@ spec = Gem::Specification.new do |s|
2
2
  s.name = 'autogg'
3
3
  s.summary = 'converts a folder of flacs to ogg, preserving directory structure'
4
4
  s.requirements << 'oggenc must be installed on the base system'
5
- s.version = "0.2.4"
5
+ s.version = "0.2.5"
6
6
  s.author = 'Evan Simmons'
7
7
  s.email = 'esims89@gmail.com'
8
8
  s.homepage = 'https://github.com/estk/autogg'
@@ -7,13 +7,13 @@ module OggEncode
7
7
 
8
8
  def oggencdir
9
9
  @pbar = ProgressBar.new( "Progress", ( count_flacs - count_oggs ) )
10
- Find.find( @paths.flac ) do |path|
10
+ Find.find( @options.paths.flac ) do |path|
11
11
  if FileTest.directory?( path )
12
12
  Find.prune if File.basename( path )[0] == ?.
13
13
  elsif Flac.exists?( path ) and not Ogg.exists?( getoutpath(path) )
14
14
  encfile( path )
15
15
  else
16
- @log << [ File.basename(path), path ]
16
+ @log << path
17
17
  end
18
18
  end
19
19
  Process.waitall ; @ps_hash = {} ; @pbar.finish
@@ -22,25 +22,25 @@ module OggEncode
22
22
  def encfile( inpath )
23
23
  outpath = getoutpath( inpath )
24
24
  @ps_hash.store( nil, outpath ) do
25
- ps = IO.popen %Q{oggenc #{@oggargs.join(' ')} "#{inpath}" -o "#{outpath}"}
25
+ ps = IO.popen %Q{oggenc #{@options.oggargs.join(' ')} "#{inpath}" -o "#{outpath}"}
26
26
  end
27
27
  @pbar.inc
28
28
  end
29
29
 
30
30
  def getoutpath( inpath )
31
- outpath = inpath.gsub( @paths.flac, @paths.ogg )
31
+ outpath = inpath.gsub( @options.paths.flac, @options.paths.ogg )
32
32
  outpath.gsub!( /\.flac/, '.ogg' )
33
33
  end
34
34
 
35
35
  def count_flacs
36
36
  c = 0
37
- Find.find( @paths.flac ) {|p| c += 1 if Flac.exists?( p ) }
37
+ Find.find( @options.paths.flac ) {|p| c += 1 if Flac.exists?( p ) }
38
38
  c
39
39
  end
40
40
 
41
41
  def count_oggs
42
42
  c = 0
43
- Find.find( @paths.ogg ) {|p| c += 1 if Ogg.exists?( p ) }
43
+ Find.find( @options.paths.ogg ) {|p| c += 1 if Ogg.exists?( p ) }
44
44
  c
45
45
  end
46
46
 
@@ -54,10 +54,8 @@ module OggEncode
54
54
 
55
55
  def encode( options )
56
56
  @options = options
57
- @paths = options.paths
58
- @oggargs = options.oggargs
59
57
  @ps_hash = SizedPsHash.new( options.max_procs )
60
- @log = Logger.new(@paths.ogg)
58
+ @log = Logger.new(@options.paths.ogg)
61
59
  oggencdir
62
60
  ensure
63
61
  @log.close
@@ -3,46 +3,53 @@ require 'ostruct'
3
3
 
4
4
  module OggEncode
5
5
  class Parser
6
- def self.parse(args)
6
+ class << self
7
7
 
8
- script_name = File.basename( $0 )
9
- options = OpenStruct.new
10
- options.max_procs = 4
11
- options.oggargs = ['-Q']
12
-
13
- op = OptionParser.new do |opts|
14
- opts.banner = "Usage: autogg.rb [options] flacpath oggpath [ -o oggenc args ... ]\n" +
15
- "Example: #{script_name} ~/music/flac/ ~/music/ogg/ --oggenc-args -q8\n" +
16
- " Ex2: #{script_name} ~/music/flac/ ~/music/ogg/ -o -q8,-Q,--utf8"
17
-
18
- opts.on( '-m', '--max-processes n', "Maximum number of encoding processes running at once" ) do |n|
19
- options.max_procs = n.to_i
20
- end
8
+ def make_path(folder)
9
+ folder =~ /\/$/ ? folder : folder + '/'
10
+ end
21
11
 
22
- opts.on( '-o', '--oggenc-args arglist', Array,
23
- "Specify arguments to me be passed through to oggenc" ) do |ary|
24
- options.oggargs << ary
25
- options.oggargs.flatten!
12
+ def parse(args)
13
+
14
+ script_name = File.basename( $0 )
15
+ options = OpenStruct.new
16
+ options.max_procs = 4
17
+ options.oggargs = ['-Q']
18
+
19
+ op = OptionParser.new do |opts|
20
+ opts.banner = "Usage: autogg.rb [options] flacpath oggpath [ -o oggenc args ... ]\n" +
21
+ "Example: #{script_name} ~/music/flac/ ~/music/ogg/ --oggenc-args -q8\n" +
22
+ " Ex2: #{script_name} ~/music/flac/ ~/music/ogg/ -o -q8,-Q,--utf8"
23
+
24
+ opts.on( '-m', '--max-processes n', "Maximum number of encoding processes running at once" ) do |n|
25
+ options.max_procs = n.to_i
26
+ end
27
+
28
+ opts.on( '-o', '--oggenc-args arglist', Array,
29
+ "Specify arguments to me be passed through to oggenc" ) do |ary|
30
+ options.oggargs << ary
31
+ options.oggargs.flatten!
32
+ end
33
+
34
+ opts.on( '-h', '--help', 'Display this screen' ) do
35
+ puts opts
36
+ puts dirinfo
37
+ exit
38
+ end
26
39
  end
27
-
28
- opts.on( '-h', '--help', 'Display this screen' ) do
29
- puts opts
30
- puts dirinfo
40
+ op.parse!
41
+
42
+ if ( ARGV.length == 2 ) and ARGV.all? { |a| File.directory?( a )}
43
+ paths = OpenStruct.new
44
+ paths.flac = make_path(ARGV[0]) ; paths.ogg = make_path(ARGV[1])
45
+ options.paths = paths
46
+ else
47
+ puts op
31
48
  exit
32
49
  end
33
- end
34
- op.parse!
35
-
36
- if ( ARGV.length == 2 ) and ARGV.all? { |a| File.directory?( a )}
37
- paths = OpenStruct.new
38
- paths.flac = ARGV[0] ; paths.ogg = ARGV[1]
39
- options.paths = paths
40
- else
41
- puts op
42
- exit
43
- end
44
50
 
45
- options
51
+ options
52
+ end
46
53
  end
47
54
  end
48
55
  end
@@ -1,4 +1,6 @@
1
+ require 'fileutils'
1
2
  module OggEncode
3
+
2
4
  class Flac < File
3
5
  def self.exists?( path )
4
6
  file?( path ) and basename( path ) =~ /\.flac$/
@@ -30,12 +32,27 @@ module OggEncode
30
32
 
31
33
  class Logger
32
34
 
35
+ def parent(path)
36
+ n = 0
37
+ result = ""
38
+ path.reverse.each_char do |c|
39
+ n += 1 if c == '/'
40
+ if n == 1
41
+ result << c
42
+ elsif n >= 2
43
+ break
44
+ end
45
+ end
46
+ return result.reverse
47
+ end
48
+
33
49
  def initialize(location)
34
- @log = File.new("#{location}log.txt", "w+")
50
+ @log = File.new("#{location}autogg.log", "w+")
51
+ @log.puts "This is the log of excluded files for the most recently run autogg \n\n"
35
52
  end
36
53
 
37
- def <<(pushed)
38
- @log.puts "#{pushed[0]} -- #{pushed[1]}"
54
+ def <<(path)
55
+ @log.puts "#{parent(path)} -- #{File.basename(path)}"
39
56
  end
40
57
 
41
58
  def close
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: autogg
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.4
5
+ version: 0.2.5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Evan Simmons
@@ -24,6 +24,7 @@ extra_rdoc_files: []
24
24
  files:
25
25
  - README.textile
26
26
  - autogg.gemspec
27
+ - autogg-0.2.4.gem
27
28
  - LICENCE
28
29
  - autogg-0.2.3.gem
29
30
  - bin/autogg