ehbrs-tools 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +13 -0
- data/exe/ehbrs +6 -0
- data/lib/ehbrs.rb +7 -0
- data/lib/ehbrs/executables.rb +28 -0
- data/lib/ehbrs/tools.rb +9 -0
- data/lib/ehbrs/tools/runner.rb +35 -0
- data/lib/ehbrs/tools/runner/vg.rb +26 -0
- data/lib/ehbrs/tools/runner/vg/ips.rb +90 -0
- data/lib/ehbrs/tools/runner/videos.rb +25 -0
- data/lib/ehbrs/tools/runner/videos/unsupported.rb +65 -0
- data/lib/ehbrs/tools/version.rb +7 -0
- data/lib/ehbrs/videos.rb +9 -0
- data/lib/ehbrs/videos/convert_job.rb +99 -0
- data/lib/ehbrs/videos/file.rb +70 -0
- data/lib/ehbrs/videos/profiles/base.rb +35 -0
- data/lib/ehbrs/videos/profiles/same_quality.rb +21 -0
- data/lib/ehbrs/videos/track.rb +27 -0
- data/lib/ehbrs/videos/unsupported/check_result.rb +24 -0
- data/lib/ehbrs/videos/unsupported/check_set.rb +43 -0
- data/lib/ehbrs/videos/unsupported/check_support.rb +68 -0
- data/lib/ehbrs/videos/unsupported/checks.rb +13 -0
- data/lib/ehbrs/videos/unsupported/checks/codec_extra_unlisted.rb +27 -0
- data/lib/ehbrs/videos/unsupported/checks/codec_extra_unsupported.rb +26 -0
- data/lib/ehbrs/videos/unsupported/checks/codec_unlisted.rb +23 -0
- data/lib/ehbrs/videos/unsupported/checks/codec_unsupported.rb +25 -0
- data/lib/ehbrs/videos/unsupported/checks/invalid_extension.rb +25 -0
- data/lib/ehbrs/videos/unsupported/file.rb +50 -0
- data/lib/ehbrs/videos/unsupported/file/fix.rb +45 -0
- data/lib/ehbrs/videos/unsupported/fix_profile.rb +56 -0
- data/lib/ehbrs/videos/unsupported/fixes/supported_codec.rb +36 -0
- data/lib/ehbrs/videos/unsupported/fixes/supported_container.rb +17 -0
- data/lib/ehbrs/videos/unsupported/profiles.rb +13 -0
- data/lib/ehbrs/videos/unsupported/profiles/base.rb +102 -0
- data/lib/ehbrs/videos/unsupported/profiles/philco.rb +27 -0
- data/lib/ehbrs/videos/unsupported/profiles/samsung.rb +32 -0
- data/lib/ehbrs/videos/unsupported/search.rb +72 -0
- data/lib/ehbrs/videos/unsupported/track.rb +32 -0
- data/vendor/eac_cli/Gemfile +5 -0
- data/vendor/eac_cli/eac_cli.gemspec +18 -0
- data/vendor/eac_cli/lib/eac_cli.rb +7 -0
- data/vendor/eac_cli/lib/eac_cli/default_runner.rb +22 -0
- data/vendor/eac_cli/lib/eac_cli/runner.rb +30 -0
- data/vendor/eac_cli/lib/eac_cli/runner/argument_option.rb +13 -0
- data/vendor/eac_cli/lib/eac_cli/runner/base_option.rb +22 -0
- data/vendor/eac_cli/lib/eac_cli/runner/boolean_option.rb +13 -0
- data/vendor/eac_cli/lib/eac_cli/runner/definition.rb +60 -0
- data/vendor/eac_cli/lib/eac_cli/runner/docopt_doc.rb +65 -0
- data/vendor/eac_cli/lib/eac_cli/runner/positional_argument.rb +15 -0
- data/vendor/eac_cli/lib/eac_cli/version.rb +5 -0
- data/vendor/eac_cli/spec/rubocop_spec.rb +7 -0
- data/vendor/eac_cli/spec/spec_helper.rb +100 -0
- data/vendor/eac_ruby_utils/Gemfile +16 -0
- data/vendor/eac_ruby_utils/MIT-LICENCE +16 -0
- data/vendor/eac_ruby_utils/README.rdoc +3 -0
- data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +25 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils.rb +23 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/arguments_consumer.rb +81 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb +133 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs.rb +82 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb +66 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console.rb +5 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +135 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner.rb +39 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +18 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +25 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +19 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +139 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker.rb +134 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_class_methods.rb +39 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb +63 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/node.rb +25 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/contextualizable.rb +16 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/core_ext.rb +5 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs.rb +23 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/base_env.rb +28 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +155 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command/extra_options.rb +46 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +51 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/file.rb +22 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/local_env.rb +17 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/process.rb +19 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env.rb +72 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_cache.rb +53 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_traverser.rb +56 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs_cache.rb +11 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable.rb +17 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/class_methods.rb +14 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/instance_methods.rb +30 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/integer_list.rb +23 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +89 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/lists.rb +61 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/string_list.rb +19 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/value.rb +38 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/on_clean_ruby_environment.rb +23 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/options_consumer.rb +62 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patch.rb +11 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches.rb +4 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class.rb +4 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class/common_constructor.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash.rb +5 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/options_consumer.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module.rb +4 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/console_speaker.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/listable.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/patch.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/require_sub.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/simple_cache.rb +10 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object.rb +5 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/asserts.rb +14 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb +12 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/template.rb +16 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +95 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +11 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +38 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/stubbed_ssh.rb +44 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +65 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +42 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates.rb +9 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/directory.rb +104 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/file.rb +101 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/searcher.rb +55 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +5 -0
- data/vendor/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/arguments_consumer_spec.rb +17 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +36 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb +31 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/configs_spec.rb +14 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/docopt_runner_spec.rb +136 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/speaker_spec.rb +36 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb +33 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/ssh_env_spec.rb +25 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/filesystem_cache_spec.rb +32 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +180 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb +45 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/options_consumer_spec.rb +17 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/console_speaker_spec.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/listable_spec.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/simple_cache_spec.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/if_present_spec.rb +13 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec.rb +23 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec_files/path/my_stub_with_template +1 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/paths_hash_spec.rb +49 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +46 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +102 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec.rb +34 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/expected_content +2 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/source.template +2 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec.rb +30 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file1.template +1 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file2 +1 -0
- data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path2/subdir1/file3.template +1 -0
- data/vendor/eac_ruby_utils/spec/locales/pt-BR.yml +38 -0
- data/vendor/eac_ruby_utils/spec/spec_helper.rb +12 -0
- metadata +227 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
require 'ehbrs/videos/track'
|
|
5
|
+
|
|
6
|
+
module Ehbrs
|
|
7
|
+
module Videos
|
|
8
|
+
class File
|
|
9
|
+
enable_simple_cache
|
|
10
|
+
|
|
11
|
+
TIME_PATTERN = /(\d+):(\d{2}):(\d{2})(?:\.(\d+))/.freeze
|
|
12
|
+
|
|
13
|
+
class << self
|
|
14
|
+
def seconds_to_time(seconds)
|
|
15
|
+
t = seconds.floor
|
|
16
|
+
hmsf_to_time((t / 3600), ((t / 60) % 60), (t % 60), (seconds - t).round(3))
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def time_to_seconds(time)
|
|
20
|
+
m = TIME_PATTERN.match(time)
|
|
21
|
+
raise "Time pattern not find in \"#{time}\"" unless m
|
|
22
|
+
|
|
23
|
+
hmsf_to_seconds(m[1], m[2], m[3], m[4])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
private
|
|
27
|
+
|
|
28
|
+
def hmsf_to_time(hour, minute, second, float_part)
|
|
29
|
+
r = [hour, minute, second].map { |y| y.to_s.rjust(2, '0') }
|
|
30
|
+
r += float_part > 0.0 ? ".#{float_part.to_s.gsub(/\A(0|[^\d])+/, '')}" : '.0'
|
|
31
|
+
r
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def hmsf_to_seconds(hour, minute, second, float_part)
|
|
35
|
+
r = hour.to_f * 3600 + minute.to_f * 60 + second.to_f
|
|
36
|
+
r += float_part.to_f / (10**float_part.length) if float_part
|
|
37
|
+
r
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
common_constructor :path
|
|
42
|
+
|
|
43
|
+
private
|
|
44
|
+
|
|
45
|
+
def tracks_uncached
|
|
46
|
+
r = []
|
|
47
|
+
content.each_line do |line|
|
|
48
|
+
t = ::Ehbrs::Videos::Track.create_from_string(line)
|
|
49
|
+
r << t if t && t.type != 'Data'
|
|
50
|
+
end
|
|
51
|
+
r
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def content_uncached
|
|
55
|
+
EacRubyUtils::Envs.local.command('ffprobe', path).execute!(output: :stderr).scrub
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def duration_uncached
|
|
59
|
+
m = /Duration\:\s*(#{TIME_PATTERN})/.match(content)
|
|
60
|
+
raise 'Duration pattern not find in content' unless m
|
|
61
|
+
|
|
62
|
+
self.class.time_to_seconds(m[1])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def duration_s_uncached
|
|
66
|
+
self.class.seconds_to_time(duration)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ehbrs
|
|
4
|
+
module Videos
|
|
5
|
+
module Profiles
|
|
6
|
+
module Base
|
|
7
|
+
extend ::ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
attr_reader :convert_job
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
include ActiveSupport::Callbacks
|
|
13
|
+
define_callbacks :convert, :swap
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def ffmpeg_args
|
|
17
|
+
[]
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def on_convert_job
|
|
21
|
+
old_value = convert_job
|
|
22
|
+
begin
|
|
23
|
+
yield
|
|
24
|
+
ensure
|
|
25
|
+
self.convert_job = old_value
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
attr_writer :convert_job
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/profiles/base'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Profiles
|
|
8
|
+
module SameQuality
|
|
9
|
+
extend ::ActiveSupport::Concern
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
include ::Ehbrs::Videos::Profiles::Base
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def ffmpeg_args
|
|
16
|
+
super + ['-q:a', '0', '-q:v', '0']
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
class Track
|
|
8
|
+
FFPROBE_PATTERN = /\A\s*Stream\s\#(\d+:\d+)(?:\(([^\)]+)\))?:\s*([^:]+):\s*([a-z0-9]+)(.*)/
|
|
9
|
+
.freeze
|
|
10
|
+
class << self
|
|
11
|
+
def create_from_string(string)
|
|
12
|
+
m = FFPROBE_PATTERN.match(string)
|
|
13
|
+
return nil unless m
|
|
14
|
+
|
|
15
|
+
new(m[1].to_i, m[3], m[2], m[4], m[5].strip)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
common_constructor :number, :type, :language, :codec, :extra
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
"[#{type}(#{number}): #{codec}/#{language || '-'}" +
|
|
23
|
+
extra.if_present('') { |v| " | #{v}" } + ']'
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
class CheckResult
|
|
9
|
+
enable_simple_cache
|
|
10
|
+
common_constructor :source, :check
|
|
11
|
+
|
|
12
|
+
def passed?
|
|
13
|
+
message.blank?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
def message_uncached
|
|
19
|
+
check.check(source)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/unsupported/checks'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
class CheckSet
|
|
9
|
+
enable_simple_cache
|
|
10
|
+
common_constructor :checks
|
|
11
|
+
|
|
12
|
+
class << self
|
|
13
|
+
# type: "file" or "track"
|
|
14
|
+
def build(profiles, type)
|
|
15
|
+
r = {}
|
|
16
|
+
profiles.each do |profile|
|
|
17
|
+
profile.send("#{type}_checks").each do |check|
|
|
18
|
+
r[check] ||= CheckWithProfiles.new(check)
|
|
19
|
+
r[check].add_profile(profile)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
new(r.values)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class CheckWithProfiles < ::SimpleDelegator
|
|
27
|
+
def initialize(check)
|
|
28
|
+
super(check)
|
|
29
|
+
@profiles = []
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def check_name
|
|
33
|
+
__getobj__.class.name.demodulize
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def add_profile(profile)
|
|
37
|
+
@profiles << profile
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/unsupported/check_result'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
module CheckSupport
|
|
9
|
+
extend ::ActiveSupport::Concern
|
|
10
|
+
|
|
11
|
+
included do
|
|
12
|
+
include ::EacRubyUtils::Console::Speaker
|
|
13
|
+
include ::EacRubyUtils::SimpleCache
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def aggressions_banner(title)
|
|
17
|
+
return if passed?
|
|
18
|
+
|
|
19
|
+
info title
|
|
20
|
+
pad_speaker do
|
|
21
|
+
unpassed_checks.each do |u|
|
|
22
|
+
info "* #{u.message}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def ffmpeg_fix_args
|
|
28
|
+
unpassed_checks.flat_map do |check|
|
|
29
|
+
check.check.fix.ffmpeg_args(self)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def passed?
|
|
34
|
+
unpassed_checks.none?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def unpassed_checks_uncached
|
|
40
|
+
checks.reject(&:passed?)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def checks_uncached
|
|
44
|
+
options.fetch(check_set_key).checks.map do |check|
|
|
45
|
+
::Ehbrs::Videos::Unsupported::CheckResult.new(self, check)
|
|
46
|
+
end
|
|
47
|
+
rescue StandardError => e
|
|
48
|
+
raise "#{e.message} (Source: #{self})"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def fix_blocks_uncached
|
|
52
|
+
checks.reject(&:passed?).select { |c| c.check.fix.blank? }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def fixes_uncached
|
|
56
|
+
checks.reject(&:passed?).map { |c| c.check.fix }.reject(&:blank?)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def pad_speaker
|
|
60
|
+
on_speaker_node do |node|
|
|
61
|
+
node.stderr_line_prefix = node.stderr_line_prefix.to_s + ' '
|
|
62
|
+
yield
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ehbrs
|
|
4
|
+
module Videos
|
|
5
|
+
module Unsupported
|
|
6
|
+
module Checks
|
|
7
|
+
class CodecExtraUnlisted
|
|
8
|
+
common_constructor :codec, :listed_extras
|
|
9
|
+
|
|
10
|
+
def check(track)
|
|
11
|
+
return nil unless track.codec == codec
|
|
12
|
+
return nil if listed_extras.any? do |extra|
|
|
13
|
+
track.extra.downcase.include?(extra.downcase)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
"Not listed extra for codec \"#{codec}\" (Track: #{track}" \
|
|
17
|
+
", listed extra: #{listed_extras})"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def fix
|
|
21
|
+
nil
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/unsupported/fixes/supported_codec'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
module Checks
|
|
9
|
+
class CodecExtraUnsupported
|
|
10
|
+
common_constructor :codec, :extra
|
|
11
|
+
|
|
12
|
+
def check(track)
|
|
13
|
+
return nil unless track.codec == codec
|
|
14
|
+
return nil unless track.extra.downcase.include?(extra.downcase)
|
|
15
|
+
|
|
16
|
+
"Unsupported extra \"#{extra}\" for codec \"#{codec}\" and track #{track}"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def fix
|
|
20
|
+
::Ehbrs::Videos::Unsupported::Fixes::SupportedCodec.new
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ehbrs
|
|
4
|
+
module Videos
|
|
5
|
+
module Unsupported
|
|
6
|
+
module Checks
|
|
7
|
+
class CodecUnlisted
|
|
8
|
+
common_constructor :listed_codecs
|
|
9
|
+
|
|
10
|
+
def check(track)
|
|
11
|
+
return nil if listed_codecs.include?(track.codec)
|
|
12
|
+
|
|
13
|
+
"Not listed codec \"#{track.codec}\" (Track: #{track}, listed: #{listed_codecs})"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def fix
|
|
17
|
+
nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/unsupported/fixes/supported_codec'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
module Checks
|
|
9
|
+
class CodecUnsupported
|
|
10
|
+
common_constructor :codec
|
|
11
|
+
|
|
12
|
+
def check(track)
|
|
13
|
+
return nil unless track.codec == codec
|
|
14
|
+
|
|
15
|
+
"Unsupported codec \"#{codec}\" for track #{track}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fix
|
|
19
|
+
::Ehbrs::Videos::Unsupported::Fixes::SupportedCodec.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'ehbrs/videos/unsupported/fixes/supported_container'
|
|
4
|
+
|
|
5
|
+
module Ehbrs
|
|
6
|
+
module Videos
|
|
7
|
+
module Unsupported
|
|
8
|
+
module Checks
|
|
9
|
+
class InvalidExtension
|
|
10
|
+
common_constructor :extension
|
|
11
|
+
|
|
12
|
+
def check(video)
|
|
13
|
+
return nil unless ::File.extname(video.path) == extension
|
|
14
|
+
|
|
15
|
+
"File has invalid extension: #{extension}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def fix
|
|
19
|
+
::Ehbrs::Videos::Unsupported::Fixes::SupportedContainer.new
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|