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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9af2ce37dd4cc830a1e3cf86a117060b96d44c0cd9c67c32ec8b6672f506d8cf
4
+ data.tar.gz: 1c90f51587a235ce9a6005f0f71cf0a7ef9a8f22bb60fec12e1d2d1d580ac16c
5
+ SHA512:
6
+ metadata.gz: 5f6743375b6859c817d3f30c9462d72c734fe152a1f3c2ff271c6a14c6308c71eda14edc28186a0257a7b7cdf5f4ab3a5261a139b24325d0142f35006f58c900
7
+ data.tar.gz: b6086fe017cfe6cd127dbf60c8f87a7f8abfce7eb8014d6cb0e7c45a46161e3bc07b49f5c3b312d063b6fad0d528c67645b8e7bd33852961108c0c1ebd9d4ba6
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gems_subdir = ::File.join(__dir__, 'vendor')
8
+ Dir["#{gems_subdir}/*"].each do |dir|
9
+ next unless ::File.directory?(dir)
10
+
11
+ basename = ::File.basename(dir)
12
+ gem basename, path: "#{gems_subdir}/#{basename}"
13
+ end
data/exe/ehbrs ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ $LOAD_PATH.unshift("#{__dir__}/../lib")
5
+ require 'ehbrs/tools/runner'
6
+ ::Ehbrs::Tools::Runner.run
data/lib/ehbrs.rb ADDED
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ require_sub __FILE__
7
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/envs'
4
+ require 'eac_ruby_utils/simple_cache'
5
+
6
+ module Ehbrs
7
+ module Executables
8
+ class << self
9
+ include ::EacRubyUtils::SimpleCache
10
+
11
+ def env
12
+ ::EacRubyUtils::Envs.local
13
+ end
14
+
15
+ def floating_ips
16
+ @floating_ips ||= env.executable('flips-linux', '--version')
17
+ end
18
+
19
+ private
20
+
21
+ %w[ffmpeg ffprobe].each do |command|
22
+ define_method("#{command}_uncached") do
23
+ env.executable(command, '-version')
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ module Tools
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+ require 'ehbrs/tools/version'
6
+
7
+ module Ehbrs
8
+ module Tools
9
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
10
+ require_sub __FILE__
11
+ enable_console_speaker
12
+
13
+ DOC = <<~DOCOPT
14
+ Tools for EHB/RS.
15
+
16
+ Usage:
17
+ __PROGRAM__ [options] __SUBCOMMANDS__
18
+ __PROGRAM__ --version
19
+ __PROGRAM__ -h | --help
20
+
21
+ Options:
22
+ -h --help Show this screen.
23
+ -V --version Show version.
24
+ DOCOPT
25
+
26
+ def run
27
+ if options.fetch('--version')
28
+ out(::Ehbrs::Tools::VERSION + "\n")
29
+ else
30
+ run_with_subcommand
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+
6
+ module Ehbrs
7
+ module Tools
8
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ class Vg < ::EacRubyUtils::Console::DocoptRunner
10
+ require_sub __FILE__
11
+ enable_console_speaker
12
+
13
+ DOC = <<~DOCOPT
14
+ Videogame tools.
15
+
16
+ Usage:
17
+ __PROGRAM__ [options] __SUBCOMMANDS__
18
+ __PROGRAM__ -h | --help
19
+
20
+ Options:
21
+ -h --help Show this screen.
22
+ DOCOPT
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/runner'
4
+ require 'eac_cli/default_runner'
5
+ require 'eac_ruby_utils/core_ext'
6
+ require 'eac_ruby_utils/console/docopt_runner'
7
+ require 'ehbrs/executables'
8
+
9
+ module Ehbrs
10
+ module Tools
11
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
12
+ class Vg < ::EacRubyUtils::Console::DocoptRunner
13
+ class Ips < ::EacRubyUtils::Console::DocoptRunner
14
+ include ::EacCli::DefaultRunner
15
+
16
+ runner_definition do
17
+ desc 'Aplica patches IPS em roms.'
18
+ arg_opt '-o', '--output-file', ' Saída no arquivo <output-file>.'
19
+ bool_opt '-w', '--overwrite', 'Sobrescreve o arquivo de saída se existente.'
20
+ pos_arg 'source-file'
21
+ pos_arg 'ips-file'
22
+ end
23
+
24
+ def run
25
+ validate
26
+ end
27
+
28
+ private
29
+
30
+ def run_patch
31
+ ::Ehbrs::Executables.floating_ips.command
32
+ .append(['--apply', ips_file, source_file, output_file]).system!
33
+ end
34
+
35
+ def source_file
36
+ options.fetch('<source-file>')
37
+ end
38
+
39
+ def start_banner
40
+ infov 'Source file', source_file
41
+ infov 'IPS file', ips_file
42
+ infov 'Output file', output_file
43
+ end
44
+
45
+ def ips_file
46
+ options.fetch('<ips-file>')
47
+ end
48
+
49
+ def output_file
50
+ options.fetch('--output-file') || default_output_file
51
+ end
52
+
53
+ def default_output_file
54
+ ::File.join(
55
+ ::File.dirname(ips_file),
56
+ ::File.basename(ips_file, '.*') + ::File.extname(source_file)
57
+ )
58
+ end
59
+
60
+ def validate
61
+ validate_source_file
62
+ validate_ips_file
63
+ validate_output_file
64
+ start_banner
65
+ run_patch
66
+ end
67
+
68
+ def validate_source_file
69
+ return if ::File.exist?(source_file)
70
+
71
+ fatal_error("Arquivo fonte \"#{source_file}\" não existe")
72
+ end
73
+
74
+ def validate_ips_file
75
+ return if ::File.exist?(ips_file)
76
+
77
+ fatal_error("Arquivo IPS \"#{ips_file}\" não existe")
78
+ end
79
+
80
+ def validate_output_file
81
+ return unless ::File.exist?(output_file)
82
+ return if options.fetch('--overwrite')
83
+
84
+ fatal_error("Arquivo de saída \"#{output_file}\" já existe")
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'eac_ruby_utils/console/docopt_runner'
5
+
6
+ module Ehbrs
7
+ module Tools
8
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
9
+ class Videos < ::EacRubyUtils::Console::DocoptRunner
10
+ require_sub __FILE__
11
+
12
+ DOC = <<~DOCOPT
13
+ Video tools for EHB/RS.
14
+
15
+ Usage:
16
+ __PROGRAM__ [options] __SUBCOMMANDS__
17
+ __PROGRAM__ -h | --help
18
+
19
+ Options:
20
+ -h --help Show this screen.
21
+ DOCOPT
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/default_runner'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/console/docopt_runner'
6
+ require 'ehbrs/videos/unsupported/check_set'
7
+ require 'ehbrs/videos/unsupported/search'
8
+ require 'ehbrs/videos/unsupported/profiles'
9
+
10
+ module Ehbrs
11
+ module Tools
12
+ class Runner < ::EacRubyUtils::Console::DocoptRunner
13
+ class Videos < ::EacRubyUtils::Console::DocoptRunner
14
+ class Unsupported < ::EacRubyUtils::Console::DocoptRunner
15
+ include ::EacCli::DefaultRunner
16
+
17
+ PROFILES = %w[philco samsung].freeze
18
+
19
+ runner_definition do
20
+ desc 'Procura e converte vídeos não suportados pelas TVs de EHB/RS.'
21
+ bool_opt '-f', '--fix', 'Converte vídeos para o formato apropriado.'
22
+ arg_opt '-p', '--profiles', "Seleciona os perfis (#{PROFILES.join(', ')})."
23
+ pos_arg 'paths', repeat: true
24
+ end
25
+
26
+ def run
27
+ infov 'Profiles', profiles.join(', ')
28
+ infov 'Paths', paths
29
+ paths.each do |d|
30
+ ::Ehbrs::Videos::Unsupported::Search.new(d, file_options)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def file_check_set_uncached
37
+ ::Ehbrs::Videos::Unsupported::CheckSet.build(profiles, :file)
38
+ end
39
+
40
+ def track_check_set_uncached
41
+ ::Ehbrs::Videos::Unsupported::CheckSet.build(profiles, :track)
42
+ end
43
+
44
+ def paths
45
+ options.fetch('<paths>')
46
+ end
47
+
48
+ def file_options
49
+ { file_check_set: file_check_set, track_check_set: track_check_set,
50
+ fix: options.fetch('--fix') }
51
+ end
52
+
53
+ def profiles_uncached
54
+ options.fetch('--profiles').if_present(PROFILES) { |v| v.split(',').map(&:strip) }
55
+ .map { |name| profile_class(name).instance }
56
+ end
57
+
58
+ def profile_class(profile_name)
59
+ ::Ehbrs::Videos::Unsupported::Profiles.const_get(profile_name.camelize)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ehbrs
4
+ module Tools
5
+ VERSION = '0.3.0'
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Ehbrs
6
+ module Videos
7
+ require_sub __FILE__
8
+ end
9
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'ehbrs/executables'
5
+ require 'fileutils'
6
+
7
+ module Ehbrs
8
+ module Videos
9
+ class ConvertJob
10
+ enable_console_speaker
11
+ enable_simple_cache
12
+
13
+ FORMATS_TO_EXTENSIONS = {
14
+ 'matroska' => '.mkv'
15
+ }.freeze
16
+
17
+ attr_reader :input, :profile
18
+
19
+ def initialize(input, profile)
20
+ raise "Input file \"#{input}\" does not exist" unless ::File.exist?(input.to_s)
21
+
22
+ @input = input
23
+ @profile = profile
24
+ end
25
+
26
+ def run
27
+ if ::File.exist?(converted)
28
+ warn("Converted file already exist: \"#{converted}\"")
29
+ else
30
+ profile.run_callbacks(:convert) { convert }
31
+ profile.run_callbacks(:swap) { swap }
32
+ end
33
+ end
34
+
35
+ def target
36
+ ::File.join(::File.dirname(input), "#{::File.basename(input, '.*')}#{target_extension}")
37
+ end
38
+
39
+ private
40
+
41
+ def command_args_uncached
42
+ r = ['-i', input] + profile_ffmpeg_args
43
+ r += ['-f', format_by_input] if format_by_args.blank?
44
+ r + [converting]
45
+ end
46
+
47
+ def convert
48
+ infov 'Convert args', command_args.shelljoin
49
+ ::Ehbrs::Executables.ffmpeg.command.append(command_args).system!
50
+ end
51
+
52
+ def format_by_args_uncached
53
+ profile_ffmpeg_args.rindex('-f').if_present do |option_index|
54
+ profile_ffmpeg_args[option_index + 1]
55
+ end
56
+ end
57
+
58
+ def format_by_input
59
+ r = FORMATS_TO_EXTENSIONS.invert[target_extension_by_input]
60
+ return if r.present?
61
+
62
+ target_extension_by_input.gsub(/\A\./, '')
63
+ end
64
+
65
+ def format_to_extension(format)
66
+ FORMATS_TO_EXTENSIONS[format].if_present(".#{format}")
67
+ end
68
+
69
+ def profile_ffmpeg_args_uncached
70
+ profile.ffmpeg_args
71
+ end
72
+
73
+ def swap
74
+ ::FileUtils.mv(input, converted)
75
+ ::FileUtils.mv(converting, target)
76
+ end
77
+
78
+ def converting
79
+ target + '.converting'
80
+ end
81
+
82
+ def converted
83
+ input + '.converted'
84
+ end
85
+
86
+ def target_extension
87
+ target_extension_by_args || target_extension_by_input
88
+ end
89
+
90
+ def target_extension_by_args
91
+ format_by_args.if_present { |v| format_to_extension(v) }
92
+ end
93
+
94
+ def target_extension_by_input
95
+ ::File.extname(input)
96
+ end
97
+ end
98
+ end
99
+ end