Class: Transcode::Configurator

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 m2ts m4v mkv mp4 mpg mpeg mov ts webm vob wmv
].map(&:to_s).join(',').freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfigurator

Returns a new instance of Configurator.



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

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 } }
    add(o)
  end.parse!
  find_dir
  find_fil
  validate
end

Instance Attribute Details

#filesObject (readonly)

rubocop:disable Metrics/ClassLength



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

def files
  @files
end

Instance Method Details

#act?Boolean

Returns:

  • (Boolean)


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

def act?
  @options[:act]
end

#add(opt) ⇒ Object



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

def add(opt)
  opt.on('-v', '--version', 'Show version.') do
    puts "#{File.basename($PROGRAM_NAME)} #{VERSION} #{DATE}"
    exit
  end
end

#audObject



132
133
134
# File 'lib/transcode/configurator.rb', line 132

def aud
  @options[:aud]
end

#dirObject



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

def dir
  @options[:dir]
end

#find_dirObject



48
49
50
51
# File 'lib/transcode/configurator.rb', line 48

def find_dir
  @options[:dir] = File.expand_path(dir.nil? ? Dir.pwd : dir)
  @options[:out] = File.expand_path(out.nil? ? Dir.pwd : out)
end

#find_filObject



53
54
55
56
57
58
59
# File 'lib/transcode/configurator.rb', line 53

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)


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

def mp3?
  @options[:mp3]
end

#outObject



128
129
130
# File 'lib/transcode/configurator.rb', line 128

def out
  @options[:out]
end

#sca?Boolean

Returns:

  • (Boolean)


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

def sca?
  @options[:sca]
end

#subObject



136
137
138
# File 'lib/transcode/configurator.rb', line 136

def sub
  @options[:sub]
end

#titObject



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

def tit
  @options[:tit]
end

#validateObject



61
62
63
64
65
66
67
68
69
# File 'lib/transcode/configurator.rb', line 61

def validate
  validate_dir(dir, false)
  validate_dir(out, true)
  validate_fil
  validate_tit
  validate_val(aud, :aud)
  validate_val(sub, :sub)
  raise "Width of the table should exceeds 14 symbols: #{wid}." if wid < 15
end

#validate_dir(dir, isw) ⇒ Object



71
72
73
74
75
76
# File 'lib/transcode/configurator.rb', line 71

def validate_dir(dir, isw)
  raise "#{dir}: No such directory." unless File.directory?(dir)

  err = isw ? File.writable?(dir) : File.readable?(dir)
  raise "#{out}: Permission denied." unless err
end

#validate_filObject



78
79
80
81
82
# File 'lib/transcode/configurator.rb', line 78

def validate_fil
  bad = files.reject { |f| File.readable?(f) }
  raise "#{dir} doesn't have #{EXT} files or directories." if files.empty?
  raise "#{bad.join(',')}: Permission denied." unless bad.empty?
end

#validate_titObject



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

def validate_tit
  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



96
97
98
99
100
101
102
103
104
105
106
# File 'lib/transcode/configurator.rb', line 96

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



140
141
142
143
144
145
146
147
148
# File 'lib/transcode/configurator.rb', line 140

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