ehbrs_ruby_utils 0.16.1 → 0.17.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 +4 -4
- data/lib/ehbrs_ruby_utils/spreader_t1/base_level.rb +1 -1
- data/lib/ehbrs_ruby_utils/version.rb +1 -1
- data/lib/ehbrs_ruby_utils/videos/series/rename/directory_group.rb +28 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/file/basename_parser.rb +44 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/file/options.rb +20 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/file/renamer.rb +51 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/file.rb +102 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/line_result.rb +26 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/line_result_group.rb +39 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/results_builder.rb +32 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename/season_group.rb +39 -0
- data/lib/ehbrs_ruby_utils/videos/series/rename.rb +13 -0
- data/lib/ehbrs_ruby_utils/videos/series.rb +11 -0
- metadata +13 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 678c73f950762bef38a405dc8000777e7be1801e1f5b2269bb2650d960d85054
|
4
|
+
data.tar.gz: 617b5092066e951579b0f3d72777d52dfc1947cd0d6e0868f43fbfef49d39a6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c20bd80670e01c298019d4249e6c7cc47fcb9652ad1f8fb2a56d46fd603ae819c6ddf9f4d8528b6fe777d66145ad4533495ccb5045fda1c07a13e3495a1fed1
|
7
|
+
data.tar.gz: c80de348a43e2203c3f604701baa71b90735988aad3f9efde8ed1a82e1f998872f58eaf8ed2cbd66cead96c29f13e7e13e743fa5845b23a6c74c54f48abd7c9b
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ehbrs_ruby_utils/videos/series/rename/line_result_group'
|
4
|
+
require 'ehbrs_ruby_utils/videos/series/rename/season_group'
|
5
|
+
|
6
|
+
module EhbrsRubyUtils
|
7
|
+
module Videos
|
8
|
+
module Series
|
9
|
+
module Rename
|
10
|
+
class DirectoryGroup < LineResultGroup
|
11
|
+
def line_out
|
12
|
+
name.to_s.colorize(:light_yellow)
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def child_key
|
18
|
+
:season
|
19
|
+
end
|
20
|
+
|
21
|
+
def child_class
|
22
|
+
::EhbrsRubyUtils::Videos::Series::Rename::SeasonGroup
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ehbrs_ruby_utils/videos/series/rename/line_result'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Videos
|
7
|
+
module Series
|
8
|
+
module Rename
|
9
|
+
class File < ::EhbrsRubyUtils::Videos::Series::Rename::LineResult
|
10
|
+
module BasenameParser
|
11
|
+
FORMATS = [{
|
12
|
+
format: /(\d+)(\d{2})(\d{2})/i,
|
13
|
+
build: ->(m) { { s: padding(m[1]), e: padding(m[2]) + '-' + padding(m[3]) } }
|
14
|
+
}, {
|
15
|
+
format: /s(\d+)e(\d+)-(\d+)/i,
|
16
|
+
build: ->(m) { { s: padding(m[1]), e: padding(m[2]) + '-' + padding(m[3]) } }
|
17
|
+
}, {
|
18
|
+
format: /(\d{1,2})\s*[^\d]\s*(\d{2})/i,
|
19
|
+
build: ->(m) { { s: padding(m[1]), e: padding(m[2]) } }
|
20
|
+
}, {
|
21
|
+
format: /(\d+)(\d{2})/i,
|
22
|
+
build: ->(m) { { s: padding(m[1]), e: padding(m[2]) } }
|
23
|
+
}, {
|
24
|
+
format: /(\d{2})/i,
|
25
|
+
build: ->(m) { { s: padding(1), e: padding(m[1]) } }
|
26
|
+
}].freeze
|
27
|
+
|
28
|
+
def self.padding(string)
|
29
|
+
string.to_s.rjust(2, '0')
|
30
|
+
end
|
31
|
+
|
32
|
+
def parse_uncached
|
33
|
+
FORMATS.each do |format|
|
34
|
+
m = format.fetch(:format).match(current_name)
|
35
|
+
return format.fetch(:build).call(m) if m
|
36
|
+
end
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EhbrsRubyUtils
|
4
|
+
module Videos
|
5
|
+
module Series
|
6
|
+
module Rename
|
7
|
+
class File
|
8
|
+
class Options
|
9
|
+
common_constructor :options
|
10
|
+
delegate :kernel, :confirm, :recursive, :extension, to: :options
|
11
|
+
|
12
|
+
def episode_increment
|
13
|
+
options.episode_increment.if_present(0, &:to_i)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Videos
|
7
|
+
module Series
|
8
|
+
module Rename
|
9
|
+
class File
|
10
|
+
class Renamer
|
11
|
+
enable_speaker
|
12
|
+
common_constructor :owner
|
13
|
+
delegate :current_name, :dirname, :file, :new_name, to: :owner
|
14
|
+
|
15
|
+
def perform
|
16
|
+
return unless rename?
|
17
|
+
|
18
|
+
version_number = 0
|
19
|
+
loop do
|
20
|
+
target_path = dirname.join(build_target_name(version_number))
|
21
|
+
break perform_rename(target_path) unless target_path.exist?
|
22
|
+
|
23
|
+
version_number += 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def build_target_name(version_number)
|
30
|
+
return new_name unless version_number.positive?
|
31
|
+
|
32
|
+
extname = ::File.extname(new_name)
|
33
|
+
"#{::File.basename(new_name, extname)}.v#{version_number}#{extname}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def perform_rename(target_path)
|
37
|
+
infov 'Renaming', file.to_path
|
38
|
+
::FileUtils.mv(file.to_path, target_path.to_path)
|
39
|
+
end
|
40
|
+
|
41
|
+
def rename?
|
42
|
+
return false unless new_name
|
43
|
+
|
44
|
+
current_name != new_name
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/fs/extname'
|
4
|
+
require 'ehbrs_ruby_utils/videos/series/rename/line_result'
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
module EhbrsRubyUtils
|
8
|
+
module Videos
|
9
|
+
module Series
|
10
|
+
module Rename
|
11
|
+
class File < ::EhbrsRubyUtils::Videos::Series::Rename::LineResult
|
12
|
+
require_sub __FILE__, include_modules: true
|
13
|
+
|
14
|
+
common_constructor :file, :options do
|
15
|
+
self.file = file.to_pathname.expand_path
|
16
|
+
self.options = ::OpenStruct.new(options) if options.is_a?(::Hash)
|
17
|
+
end
|
18
|
+
|
19
|
+
# @return [String]
|
20
|
+
def current_name
|
21
|
+
file.basename.to_path
|
22
|
+
end
|
23
|
+
|
24
|
+
def rename
|
25
|
+
EhbrsRubyUtils::Videos::Series::Rename::File::Renamer.new(self).perform
|
26
|
+
end
|
27
|
+
|
28
|
+
def season
|
29
|
+
return '??' if parse.blank?
|
30
|
+
|
31
|
+
parse.fetch(:s)
|
32
|
+
end
|
33
|
+
|
34
|
+
def episode
|
35
|
+
return '??' if parse.blank?
|
36
|
+
|
37
|
+
parse.fetch(:e)
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Pathname]
|
41
|
+
def dirname
|
42
|
+
d = file
|
43
|
+
until d.root?
|
44
|
+
d = d.dirname
|
45
|
+
return d unless d.basename.to_path.starts_with?('_')
|
46
|
+
end
|
47
|
+
raise "series_dirname not found for #{file.to_path}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def line_out
|
51
|
+
"#{episode.green}: " + if new_name == current_name
|
52
|
+
current_name.light_black
|
53
|
+
else
|
54
|
+
"#{new_name} <= #{current_name}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def new_name
|
59
|
+
return "#{kernel}-s#{parse[:s]}e#{new_name_episodes}#{extension}" if parse.present?
|
60
|
+
|
61
|
+
current_name
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def kernel
|
67
|
+
options.kernel || kernel_from_directory_name ||
|
68
|
+
raise("Kernel undefined (File: #{file.to_path})")
|
69
|
+
end
|
70
|
+
|
71
|
+
def kernel_from_directory_name
|
72
|
+
dir = dirname.basename.to_path.sub(/\([0-9]+\)/, '')
|
73
|
+
dir.split(/\W+/).select { |w| /\A[a-z0-9]/.match(w) }.map { |p| p[0].downcase }.join('')
|
74
|
+
end
|
75
|
+
|
76
|
+
def extension
|
77
|
+
return options.extension if options.extension
|
78
|
+
|
79
|
+
extension_by_directory || ::EacRubyUtils::Fs.extname2(current_name)
|
80
|
+
end
|
81
|
+
|
82
|
+
def extension_by_directory
|
83
|
+
r = ::File.dirname(current_name)
|
84
|
+
return nil if r == '.'
|
85
|
+
|
86
|
+
r.gsub(/\A_/, '.')
|
87
|
+
end
|
88
|
+
|
89
|
+
def source_episodes
|
90
|
+
parse[:e].split('-').map(&:to_i)
|
91
|
+
end
|
92
|
+
|
93
|
+
def new_name_episodes
|
94
|
+
source_episodes.map do |i|
|
95
|
+
(i + options.episode_increment).to_s.rjust(2, '0')
|
96
|
+
end.join('-')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'eac_ruby_utils/core_ext'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Videos
|
7
|
+
module Series
|
8
|
+
module Rename
|
9
|
+
class LineResult
|
10
|
+
enable_simple_cache
|
11
|
+
enable_speaker
|
12
|
+
|
13
|
+
def show(level)
|
14
|
+
out(padding_level(level) + line_out + "\n")
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def padding_level(level)
|
20
|
+
(' ' * level.to_i) + '* '
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'line_result'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Videos
|
7
|
+
module Series
|
8
|
+
module Rename
|
9
|
+
class LineResultGroup < ::EhbrsRubyUtils::Videos::Series::Rename::LineResult
|
10
|
+
attr_reader :name, :children
|
11
|
+
|
12
|
+
def initialize(name, files)
|
13
|
+
@name = name
|
14
|
+
@children = build_children(files)
|
15
|
+
end
|
16
|
+
|
17
|
+
def show(level)
|
18
|
+
super(level)
|
19
|
+
children.each do |child|
|
20
|
+
child.show(level + 1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def build_children(files)
|
27
|
+
r = {}
|
28
|
+
files.each do |file|
|
29
|
+
key = file.send(child_key)
|
30
|
+
r[key] ||= []
|
31
|
+
r[key] << file
|
32
|
+
end
|
33
|
+
r.sort.map { |v| child_class.new(v[0], v[1]) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ehbrs_ruby_utils/videos/series/rename/directory_group'
|
4
|
+
require 'ehbrs_ruby_utils/videos/series/rename/line_result_group'
|
5
|
+
|
6
|
+
module EhbrsRubyUtils
|
7
|
+
module Videos
|
8
|
+
module Series
|
9
|
+
module Rename
|
10
|
+
class ResultsBuilder < LineResultGroup
|
11
|
+
def initialize(files)
|
12
|
+
super '', files
|
13
|
+
end
|
14
|
+
|
15
|
+
def line_out
|
16
|
+
'Groups: '.cyan + children.count.to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def child_key
|
22
|
+
:dirname
|
23
|
+
end
|
24
|
+
|
25
|
+
def child_class
|
26
|
+
::EhbrsRubyUtils::Videos::Series::Rename::DirectoryGroup
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'line_result'
|
4
|
+
|
5
|
+
module EhbrsRubyUtils
|
6
|
+
module Videos
|
7
|
+
module Series
|
8
|
+
module Rename
|
9
|
+
class SeasonGroup < ::EhbrsRubyUtils::Videos::Series::Rename::LineResult
|
10
|
+
attr_reader :season, :files
|
11
|
+
|
12
|
+
def initialize(season, files)
|
13
|
+
@season = season
|
14
|
+
@files = files.sort_by { |f| [f.episode] }
|
15
|
+
end
|
16
|
+
|
17
|
+
def line_out
|
18
|
+
'Season: '.cyan + "#{season} (#{first_episode} - #{last_episode})"
|
19
|
+
end
|
20
|
+
|
21
|
+
def show(level)
|
22
|
+
super
|
23
|
+
files.each { |file| file.show(level + 1) }
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def first_episode
|
29
|
+
files.first.episode
|
30
|
+
end
|
31
|
+
|
32
|
+
def last_episode
|
33
|
+
files.last.episode
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ehbrs_ruby_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo H. Bogoni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aranha-parsers
|
@@ -193,6 +193,17 @@ files:
|
|
193
193
|
- lib/ehbrs_ruby_utils/videos/convert_job.rb
|
194
194
|
- lib/ehbrs_ruby_utils/videos/quality.rb
|
195
195
|
- lib/ehbrs_ruby_utils/videos/resolution.rb
|
196
|
+
- lib/ehbrs_ruby_utils/videos/series.rb
|
197
|
+
- lib/ehbrs_ruby_utils/videos/series/rename.rb
|
198
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/directory_group.rb
|
199
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/file.rb
|
200
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/file/basename_parser.rb
|
201
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/file/options.rb
|
202
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/file/renamer.rb
|
203
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/line_result.rb
|
204
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/line_result_group.rb
|
205
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/results_builder.rb
|
206
|
+
- lib/ehbrs_ruby_utils/videos/series/rename/season_group.rb
|
196
207
|
- lib/ehbrs_ruby_utils/videos/stream.rb
|
197
208
|
- lib/ehbrs_ruby_utils/web_utils.rb
|
198
209
|
- lib/ehbrs_ruby_utils/web_utils/instance.rb
|