about summary refs log tree commit homepage
path: root/lib/dtas/source
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-08-26 05:25:22 +0000
committerEric Wong <normalperson@yhbt.net>2013-08-26 05:25:22 +0000
commit2907cc6dd0b0d2d80d44ae292a157651d6e05ee7 (patch)
treeeba4f5253a37039acc8ec16cb0998ac2fe0a64b7 /lib/dtas/source
parent3d96e3d4a3ad7fbf45b38c81478f04cffb329e25 (diff)
downloaddtas-2907cc6dd0b0d2d80d44ae292a157651d6e05ee7.tar.gz
We should be fully-capable of managing any number of options
to try sources in.
Diffstat (limited to 'lib/dtas/source')
-rw-r--r--lib/dtas/source/av.rb8
-rw-r--r--lib/dtas/source/file.rb27
-rw-r--r--lib/dtas/source/sox.rb9
3 files changed, 37 insertions, 7 deletions
diff --git a/lib/dtas/source/av.rb b/lib/dtas/source/av.rb
index a6a0e3a..61d88b2 100644
--- a/lib/dtas/source/av.rb
+++ b/lib/dtas/source/av.rb
@@ -17,6 +17,7 @@ class DTAS::Source::Av # :nodoc:
     "command" =>
       'avconv -v error $SSPOS -i "$INFILE" $AMAP -f sox - |' \
       'sox -p $SOXFMT - $RGFX',
+    "tryorder" => 1,
   )
 
   attr_reader :precision # always 32
@@ -28,8 +29,7 @@ class DTAS::Source::Av # :nodoc:
   end
 
   def try(infile, offset = nil)
-    rv = dup
-    rv.source_file_init(infile, offset)
+    rv = source_file_dup(infile, offset)
     rv.av_ok? or return
     rv
   end
@@ -133,4 +133,8 @@ class DTAS::Source::Av # :nodoc:
   def to_hsh
     to_hash.delete_if { |k,v| v == AV_DEFAULTS[k] }
   end
+
+  def source_defaults
+    AV_DEFAULTS
+  end
 end
diff --git a/lib/dtas/source/file.rb b/lib/dtas/source/file.rb
index a66308b..3663d8d 100644
--- a/lib/dtas/source/file.rb
+++ b/lib/dtas/source/file.rb
@@ -10,6 +10,7 @@ require_relative '../process'
 module DTAS::Source::File # :nodoc:
   attr_reader :infile
   attr_reader :offset
+  attr_accessor :tryorder
   require_relative 'common' # dtas/source/common
   require_relative 'mp3gain'
   include DTAS::Command
@@ -17,9 +18,17 @@ module DTAS::Source::File # :nodoc:
   include DTAS::Source::Common
   include DTAS::Source::Mp3gain
 
-  FILE_SIVS = %w(infile comments command env)
+  FILE_SIVS = %w(infile comments command env) # for the "current" command
+  SRC_SIVS = %w(command env tryorder)
 
-  def source_file_init(infile, offset)
+  def source_file_dup(infile, offset)
+    rv = dup
+    rv.__file_init(infile, offset)
+    rv
+  end
+
+  def __file_init(infile, offset)
+    @env = @env.dup
     @format = nil
     @infile = infile
     @offset = offset
@@ -68,4 +77,18 @@ module DTAS::Source::File # :nodoc:
             DTAS::ReplayGain.new(mp3gain_comments)
   end
 
+  def to_source_cat
+    ivars_to_hash(SRC_SIVS)
+  end
+
+  def load!(src_hsh)
+    SRC_SIVS.each do |field|
+      val = src_hsh[field] and instance_variable_set("@#{field}", val)
+    end
+  end
+
+  def to_state_hash
+    defaults = source_defaults # see dtas/source/{av,sox}.rb
+    to_source_cat.delete_if { |k,v| v == defaults[k] }
+  end
 end
diff --git a/lib/dtas/source/sox.rb b/lib/dtas/source/sox.rb
index fa6192d..e1baee9 100644
--- a/lib/dtas/source/sox.rb
+++ b/lib/dtas/source/sox.rb
@@ -13,6 +13,7 @@ class DTAS::Source::Sox # :nodoc:
 
   SOX_DEFAULTS = COMMAND_DEFAULTS.merge(
     "command" => 'exec sox "$INFILE" $SOXFMT - $TRIMFX $RGFX',
+    "tryorder" => 0,
   )
 
   def initialize
@@ -23,9 +24,7 @@ class DTAS::Source::Sox # :nodoc:
     err = ""
     qx(@env, %W(soxi #{infile}), err_str: err, no_raise: true)
     return if err =~ /soxi FAIL formats:/
-    rv = dup
-    rv.source_file_init(infile, offset)
-    rv
+    source_file_dup(infile, offset)
   end
 
   def precision
@@ -100,4 +99,8 @@ class DTAS::Source::Sox # :nodoc:
   def to_hsh
     to_hash.delete_if { |k,v| v == SOX_DEFAULTS[k] }
   end
+
+  def source_defaults
+    SOX_DEFAULTS
+  end
 end