Class: Transcode::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/transcode/configurator.rb

Overview

Handles input parameters.

Constant Summary collapse

DIC =
[
  ['-a', '--act', 'Real encoding.', nil, :act],
  ['-s', '--sca', 'Scans files at the directory.', nil, :sca],
  ['-m', '--mp3', 'Converts files to mp3.', nil, :mp3],
  ['-d', '--dir dir', 'Directory to transcode.', String, :dir],
  ['-i', '--tit tit', 'Specific title by number.', Array, :tit],
  ['-o', '--out out', 'Directory to output.', String, :out],
  ['-u', '--aud aud', 'Audio stream numbers.', Array, :aud],
  ['-t', '--sub sub', 'Subtitle stream numbers.', Array, :sub],
  ['-w', '--wid wid', 'Width of the table.', Integer, :wid]
].freeze
EXT =
%i[
  avi flv m4v mkv mp4 mpg mpeg ts webm vob wmv
].map(&:to_s).join(',').freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



27
28
29
30
31
32
33
34
35
36
# File 'lib/transcode/configurator.rb', line 27

def initialize
  @options = {}
  OptionParser.new do |o|
    o.banner = "Usage: #{File.basename($PROGRAM_NAME)} [options]."
    DIC.each { |f, p, d, t, k| o.on(f, p, t, d) { |i| @options[k] = i } }
  end.parse!
  find_dir
  find_fil
  validate
end

Instance Attribute Details

#filesObject (readonly)

rubocop:disable Metrics/ClassLength



11
12
13
# File 'lib/transcode/configurator.rb', line 11

def files
  @files
end

Instance Method Details

#act?Boolean

Returns:

  • (Boolean)


95
96
97
# File 'lib/transcode/configurator.rb', line 95

def act?
  @options[:act]
end

#audObject



119
120
121
# File 'lib/transcode/configurator.rb', line 119

def aud
  @options[:aud]
end

#dirObject



107
108
109
# File 'lib/transcode/configurator.rb', line 107

def dir
  @options[:dir]
end

#find_dirObject



38
39
40
41
42
43
44
45
46
47
# File 'lib/transcode/configurator.rb', line 38

def find_dir
  if dir.nil?
    @options[:dir] = Dir.pwd
  else
    raise "No such directory: #{dir}." unless File.directory?(dir)

    @options[:dir] = File.expand_path(dir)
  end
  @options[:out] = File.expand_path(out.nil? ? '~' : out)
end

#find_filObject



49
50
51
52
53
54
55
# File 'lib/transcode/configurator.rb', line 49

def find_fil
  @files = Dir.glob("#{dir}/*.{#{EXT}}").select { |f| File.file? f }
  sub = !mp3?
  @files += Dir.glob("#{dir}/*").select { |f| File.directory? f } if sub
  @files.sort_by!(&:naturalized)
  @files.sort_by!(&:swapcase)
end

#mp3?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/transcode/configurator.rb', line 103

def mp3?
  @options[:mp3]
end

#outObject



115
116
117
# File 'lib/transcode/configurator.rb', line 115

def out
  @options[:out]
end

#sca?Boolean

Returns:

  • (Boolean)


99
100
101
# File 'lib/transcode/configurator.rb', line 99

def sca?
  @options[:sca]
end

#subObject



123
124
125
# File 'lib/transcode/configurator.rb', line 123

def sub
  @options[:sub]
end

#titObject



111
112
113
# File 'lib/transcode/configurator.rb', line 111

def tit
  @options[:tit]
end

#validateObject



57
58
59
60
61
62
63
# File 'lib/transcode/configurator.rb', line 57

def validate
  validate_files
  validate_tit
  validate_val(aud, :aud)
  validate_val(sub, :sub)
  raise "Width of the table should exeeds 14 symbols: #{wid}." if wid < 15
end

#validate_filesObject



65
66
67
68
69
70
# File 'lib/transcode/configurator.rb', line 65

def validate_files
  raise "#{dir} doesn't have #{EXT} files or directories." if files.empty?

  bad = files.reject { |f| File.readable?(f) }
  raise "Unable to read #{bad} files." unless bad.empty?
end

#validate_titObject

rubocop:disable Metrics/AbcSize



72
73
74
75
76
77
78
79
80
81
82
# File 'lib/transcode/configurator.rb', line 72

def validate_tit # rubocop:disable Metrics/AbcSize
  if tit.nil?
    @options[:tit] = Array.new(files.size, '0')
    return
  end
  if files.size == 1
    @files = Array.new(tit.size, files.first)
    return
  end
  raise "Title feature doesn't support #{files.size} files."
end

#validate_val(val, tag) ⇒ Object



84
85
86
87
88
89
90
91
92
93
# File 'lib/transcode/configurator.rb', line 84

def validate_val(val, tag)
  f = files.size
  (@options[tag] = Array.new(f, '0')).nil? || return if val.nil?
  s = val.size
  if s == 1
    @options[tag] = Array.new(f, val.first)
  else
    raise "#{tag} and files do not suit #{s} != #{f}." unless s == f
  end
end

#widObject



127
128
129
130
131
132
133
134
135
# File 'lib/transcode/configurator.rb', line 127

def wid
  if @options[:wid].nil?
    # Reads current terminal width.
    wid = `tput cols`
    wid.to_s.empty? ? 79 : wid.to_i
  else
    @options[:wid].to_i
  end
end