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.



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

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



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

def files
  @files
end

Instance Method Details

#act?Boolean

Returns:

  • (Boolean)


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

def act?
  @options[:act]
end

#add(opt) ⇒ Object



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

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

#audObject



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

def aud
  @options[:aud]
end

#dirObject



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

def dir
  @options[:dir]
end

#find_dirObject



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

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



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

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)


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

def mp3?
  @options[:mp3]
end

#outObject



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

def out
  @options[:out]
end

#sca?Boolean

Returns:

  • (Boolean)


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

def sca?
  @options[:sca]
end

#subObject



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

def sub
  @options[:sub]
end

#titObject



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

def tit
  @options[:tit]
end

#validateObject



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

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 exeeds 14 symbols: #{wid}." if wid < 15
end

#validate_dir(dir, isw) ⇒ Object



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

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



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

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



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

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



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

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



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

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