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.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +13 -0
  3. data/exe/ehbrs +6 -0
  4. data/lib/ehbrs.rb +7 -0
  5. data/lib/ehbrs/executables.rb +28 -0
  6. data/lib/ehbrs/tools.rb +9 -0
  7. data/lib/ehbrs/tools/runner.rb +35 -0
  8. data/lib/ehbrs/tools/runner/vg.rb +26 -0
  9. data/lib/ehbrs/tools/runner/vg/ips.rb +90 -0
  10. data/lib/ehbrs/tools/runner/videos.rb +25 -0
  11. data/lib/ehbrs/tools/runner/videos/unsupported.rb +65 -0
  12. data/lib/ehbrs/tools/version.rb +7 -0
  13. data/lib/ehbrs/videos.rb +9 -0
  14. data/lib/ehbrs/videos/convert_job.rb +99 -0
  15. data/lib/ehbrs/videos/file.rb +70 -0
  16. data/lib/ehbrs/videos/profiles/base.rb +35 -0
  17. data/lib/ehbrs/videos/profiles/same_quality.rb +21 -0
  18. data/lib/ehbrs/videos/track.rb +27 -0
  19. data/lib/ehbrs/videos/unsupported/check_result.rb +24 -0
  20. data/lib/ehbrs/videos/unsupported/check_set.rb +43 -0
  21. data/lib/ehbrs/videos/unsupported/check_support.rb +68 -0
  22. data/lib/ehbrs/videos/unsupported/checks.rb +13 -0
  23. data/lib/ehbrs/videos/unsupported/checks/codec_extra_unlisted.rb +27 -0
  24. data/lib/ehbrs/videos/unsupported/checks/codec_extra_unsupported.rb +26 -0
  25. data/lib/ehbrs/videos/unsupported/checks/codec_unlisted.rb +23 -0
  26. data/lib/ehbrs/videos/unsupported/checks/codec_unsupported.rb +25 -0
  27. data/lib/ehbrs/videos/unsupported/checks/invalid_extension.rb +25 -0
  28. data/lib/ehbrs/videos/unsupported/file.rb +50 -0
  29. data/lib/ehbrs/videos/unsupported/file/fix.rb +45 -0
  30. data/lib/ehbrs/videos/unsupported/fix_profile.rb +56 -0
  31. data/lib/ehbrs/videos/unsupported/fixes/supported_codec.rb +36 -0
  32. data/lib/ehbrs/videos/unsupported/fixes/supported_container.rb +17 -0
  33. data/lib/ehbrs/videos/unsupported/profiles.rb +13 -0
  34. data/lib/ehbrs/videos/unsupported/profiles/base.rb +102 -0
  35. data/lib/ehbrs/videos/unsupported/profiles/philco.rb +27 -0
  36. data/lib/ehbrs/videos/unsupported/profiles/samsung.rb +32 -0
  37. data/lib/ehbrs/videos/unsupported/search.rb +72 -0
  38. data/lib/ehbrs/videos/unsupported/track.rb +32 -0
  39. data/vendor/eac_cli/Gemfile +5 -0
  40. data/vendor/eac_cli/eac_cli.gemspec +18 -0
  41. data/vendor/eac_cli/lib/eac_cli.rb +7 -0
  42. data/vendor/eac_cli/lib/eac_cli/default_runner.rb +22 -0
  43. data/vendor/eac_cli/lib/eac_cli/runner.rb +30 -0
  44. data/vendor/eac_cli/lib/eac_cli/runner/argument_option.rb +13 -0
  45. data/vendor/eac_cli/lib/eac_cli/runner/base_option.rb +22 -0
  46. data/vendor/eac_cli/lib/eac_cli/runner/boolean_option.rb +13 -0
  47. data/vendor/eac_cli/lib/eac_cli/runner/definition.rb +60 -0
  48. data/vendor/eac_cli/lib/eac_cli/runner/docopt_doc.rb +65 -0
  49. data/vendor/eac_cli/lib/eac_cli/runner/positional_argument.rb +15 -0
  50. data/vendor/eac_cli/lib/eac_cli/version.rb +5 -0
  51. data/vendor/eac_cli/spec/rubocop_spec.rb +7 -0
  52. data/vendor/eac_cli/spec/spec_helper.rb +100 -0
  53. data/vendor/eac_ruby_utils/Gemfile +16 -0
  54. data/vendor/eac_ruby_utils/MIT-LICENCE +16 -0
  55. data/vendor/eac_ruby_utils/README.rdoc +3 -0
  56. data/vendor/eac_ruby_utils/eac_ruby_utils.gemspec +25 -0
  57. data/vendor/eac_ruby_utils/lib/eac_ruby_utils.rb +23 -0
  58. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/arguments_consumer.rb +81 -0
  59. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/common_constructor.rb +133 -0
  60. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs.rb +82 -0
  61. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/configs/file.rb +66 -0
  62. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console.rb +5 -0
  63. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/configs.rb +135 -0
  64. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner.rb +39 -0
  65. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_class_methods.rb +18 -0
  66. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_doc.rb +25 -0
  67. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_settings.rb +19 -0
  68. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/docopt_runner/_subcommands.rb +139 -0
  69. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker.rb +134 -0
  70. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/_class_methods.rb +39 -0
  71. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/list.rb +63 -0
  72. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/console/speaker/node.rb +25 -0
  73. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/contextualizable.rb +16 -0
  74. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/core_ext.rb +5 -0
  75. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs.rb +23 -0
  76. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/base_env.rb +28 -0
  77. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command.rb +155 -0
  78. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/command/extra_options.rb +46 -0
  79. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb +51 -0
  80. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/file.rb +22 -0
  81. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/local_env.rb +17 -0
  82. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/process.rb +19 -0
  83. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/envs/ssh_env.rb +72 -0
  84. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_cache.rb +53 -0
  85. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/filesystem_traverser.rb +56 -0
  86. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/fs_cache.rb +11 -0
  87. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable.rb +17 -0
  88. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/class_methods.rb +14 -0
  89. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/instance_methods.rb +30 -0
  90. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/integer_list.rb +23 -0
  91. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/list.rb +89 -0
  92. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/lists.rb +61 -0
  93. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/string_list.rb +19 -0
  94. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/listable/value.rb +38 -0
  95. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/on_clean_ruby_environment.rb +23 -0
  96. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/options_consumer.rb +62 -0
  97. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patch.rb +11 -0
  98. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches.rb +4 -0
  99. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class.rb +4 -0
  100. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/class/common_constructor.rb +9 -0
  101. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash.rb +5 -0
  102. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/options_consumer.rb +10 -0
  103. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/hash/sym_keys_hash.rb +10 -0
  104. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module.rb +4 -0
  105. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/console_speaker.rb +10 -0
  106. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/listable.rb +10 -0
  107. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/patch.rb +9 -0
  108. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/require_sub.rb +9 -0
  109. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/module/simple_cache.rb +10 -0
  110. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object.rb +5 -0
  111. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/asserts.rb +14 -0
  112. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/if_present.rb +12 -0
  113. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/patches/object/template.rb +16 -0
  114. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/paths_hash.rb +95 -0
  115. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/require_sub.rb +11 -0
  116. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec.rb +9 -0
  117. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/conditional.rb +38 -0
  118. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/rspec/stubbed_ssh.rb +44 -0
  119. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/settings_provider.rb +65 -0
  120. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/simple_cache.rb +42 -0
  121. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates.rb +9 -0
  122. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/directory.rb +104 -0
  123. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/file.rb +101 -0
  124. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/templates/searcher.rb +55 -0
  125. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/version.rb +5 -0
  126. data/vendor/eac_ruby_utils/lib/eac_ruby_utils/yaml.rb +13 -0
  127. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/arguments_consumer_spec.rb +17 -0
  128. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/common_constructor_spec.rb +36 -0
  129. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/configs_spec.rb +31 -0
  130. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/configs_spec.rb +14 -0
  131. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/docopt_runner_spec.rb +136 -0
  132. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/console/speaker_spec.rb +36 -0
  133. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/executable_spec.rb +33 -0
  134. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/envs/ssh_env_spec.rb +25 -0
  135. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/filesystem_cache_spec.rb +32 -0
  136. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/listable_spec.rb +180 -0
  137. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/options_consumer_spec.rb +45 -0
  138. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/options_consumer_spec.rb +17 -0
  139. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/hash/sym_keys_hash_spec.rb +13 -0
  140. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/console_speaker_spec.rb +13 -0
  141. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/listable_spec.rb +13 -0
  142. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/module/simple_cache_spec.rb +13 -0
  143. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/if_present_spec.rb +13 -0
  144. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec.rb +23 -0
  145. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/patches/object/template_spec_files/path/my_stub_with_template +1 -0
  146. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/paths_hash_spec.rb +49 -0
  147. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/settings_provider_spec.rb +46 -0
  148. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/simple_cache_spec.rb +102 -0
  149. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec.rb +34 -0
  150. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/expected_content +2 -0
  151. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/file_spec_files/source.template +2 -0
  152. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec.rb +30 -0
  153. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file1.template +1 -0
  154. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path1/subdir1/file2 +1 -0
  155. data/vendor/eac_ruby_utils/spec/lib/eac_ruby_utils/templates/searcher_spec_files/path2/subdir1/file3.template +1 -0
  156. data/vendor/eac_ruby_utils/spec/locales/pt-BR.yml +38 -0
  157. data/vendor/eac_ruby_utils/spec/spec_helper.rb +12 -0
  158. 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,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ module Videos
7
+ module Unsupported
8
+ module Checks
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ 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