vidload 0.5.2 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3092d67b3046f5a255710845e166ab47d2c4d6eadc9a603001771363227fc3b9
4
- data.tar.gz: bc42d9546184abcc2637d41a05e94f3f8f581b517f7fbc81df08932607ebc931
3
+ metadata.gz: 47e4c88a97883f9828eea9e9f5a627dfeb7c7a00756d619aaee0d47e71d8353b
4
+ data.tar.gz: a9c92831cdead5e013f53ee28e87f5c9df7a0b239477812d5b997a8da96897a5
5
5
  SHA512:
6
- metadata.gz: b32af013de67e432e82eb8251f832c1b4b20987e7d18f53c9266be2b07cfb1c8e5874c3995a69c8aa10d086e29041fc0b7ae4c3b8c50a4a3248ede8e6f522ec6
7
- data.tar.gz: 896e071941553db10572c8ccbd40b0972bfdf50b61dacd00e363a51f33f212d055c01cfa790cd615dbef5dea7f0be95e5530283972a81926e6633d7b21ef8f95
6
+ metadata.gz: c11973da27be9d043bea25af2f4914ac677234e02bc8cab7922582c4b9de4fe998494e549bf371b98217ca4103096d8f17d43234edd738c8caeffe8a6bc6eebc
7
+ data.tar.gz: 21e5aee5d19c9e7327400ebeb0f278f7d0722a80771f8de65085b3530336d88bd9d5e362b27ed5b9fdc8c64a129a3bb25c284017ddedf9aed6e2a6af27867c0a
@@ -0,0 +1,113 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'playwright'
4
+ require 'tty-spinner'
5
+ require 'open3'
6
+ require 'io/console'
7
+
8
+ module Vidload
9
+ module Custom
10
+ module Api
11
+ class DownloaderBuilder
12
+ REQUIRED_ARGS = %i[service_url video_url playwright_cli_path].freeze
13
+
14
+ def initialize
15
+ @kwargs = {}
16
+ end
17
+
18
+ def with_kwargs(**kwargs)
19
+ @kwargs = kwargs
20
+ self
21
+ end
22
+
23
+ def with_service_url(service_url)
24
+ @kwargs[:service_url] = service_url
25
+ self
26
+ end
27
+
28
+ def with_video_url(video_url)
29
+ @kwargs[:video_url] = video_url
30
+ self
31
+ end
32
+
33
+ def with_title(title)
34
+ @kwargs[:title] = title
35
+ self
36
+ end
37
+
38
+ def with_author_name(author_name)
39
+ @kwargs[:author_name] = author_name
40
+ self
41
+ end
42
+
43
+ def with_playwright_cli_path(playwright_cli_path)
44
+ @kwargs[:playwright_cli_path] = playwright_cli_path
45
+ self
46
+ end
47
+
48
+ def is_headless?(headless)
49
+ @kwargs[:headless] = headless
50
+ self
51
+ end
52
+
53
+ def build
54
+ REQUIRED_ARGS.each do |required_arg|
55
+ raise ArgumentError, "#{required_arg} must be provided" unless @kwargs[required_arg]
56
+ end
57
+
58
+ Downloader.new(**@kwargs)
59
+ end
60
+ end
61
+
62
+ class Downloader
63
+ def initialize(**kwargs)
64
+ @kwargs = kwargs
65
+ end
66
+
67
+ def self.builder
68
+ DownloaderBuilder.new
69
+ end
70
+
71
+ def self.from_hash(hash)
72
+ builder.with_kwargs(**hash).build
73
+ end
74
+
75
+ # main func to be called in your own scripts defined under web/
76
+ def download_video(video_starter_callbacks: [])
77
+ Playwright.create(playwright_cli_executable_path: @kwargs[:playwright_cli_path]) do |playwright|
78
+ browser = playwright.chromium.launch(headless: @kwargs['headless'])
79
+ page = browser.new_page
80
+
81
+ manage_video_download(page, *video_starter_callbacks)
82
+
83
+ browser.close
84
+ end
85
+ end
86
+
87
+ def display_calling_args
88
+ puts 'Called with:'
89
+ @kwargs.each do |key, value|
90
+ puts "\t#{key}=#{value}"
91
+ end
92
+ end
93
+
94
+ def self.display_with_spinner(loading_msg = 'Loading...')
95
+ spinner = TTY::Spinner.new("[:spinner] #{loading_msg}")
96
+ spinner.auto_spin
97
+ yield
98
+ spinner.success('(done)')
99
+ end
100
+
101
+ private
102
+
103
+ def manage_video_download(page, *video_starter_callbacks)
104
+ video_starter_callbacks.each do |callback|
105
+ res = callback.call(page, @kwargs)
106
+ @kwargs[:title] = res[:title] if !@kwargs[:title] && res[:title]
107
+ @kwargs[:author_name] = res[:author_name] if !@kwargs[:author_name] && res[:author_name]
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+
5
+ module Vidload
6
+ module Custom
7
+ class Cli < Thor
8
+ desc 'custom VIDEO_URLS...', 'download one ore more mp4 videos'
9
+ method_option :title, type: :string, required: false
10
+ method_option :author_name, type: :string, required: false
11
+ method_option :playwright_cli_path, type: :string, required: true
12
+ method_option :headless, type: :boolean, default: true
13
+ method_option :service_url, type: :string, required: true
14
+ def custom(*video_urls)
15
+ video_urls.each do |video_url|
16
+ params = {
17
+ video_url: video_url,
18
+ **options
19
+ }
20
+
21
+ process_custom(params)
22
+ sleep 1
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ def process_custom(params)
29
+ raise NotImplementedError
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Vidload
4
+ module Custom
5
+ require_relative 'custom/api'
6
+ require_relative 'custom/cli'
7
+ end
8
+ end
@@ -52,8 +52,8 @@ module Vidload
52
52
  self
53
53
  end
54
54
 
55
- def non_headless?(non_headless)
56
- @kwargs[:non_headless] = non_headless
55
+ def is_headless?(headless)
56
+ @kwargs[:headless] = headless
57
57
  self
58
58
  end
59
59
 
@@ -120,7 +120,7 @@ module Vidload
120
120
  # main func to be called in your own scripts defined under web/
121
121
  def download_video(video_starter_callbacks: [])
122
122
  Playwright.create(playwright_cli_executable_path: @kwargs[:playwright_cli_path]) do |playwright|
123
- browser = playwright.chromium.launch(headless: !@kwargs[:non_headless])
123
+ browser = playwright.chromium.launch(headless: @kwargs[:headless])
124
124
  page = browser.new_page
125
125
 
126
126
  manage_video_download(page, *video_starter_callbacks)
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+
5
+ module Vidload
6
+ module Mp2t
7
+ class Cli < Thor
8
+ desc 'mp2t VIDEO_URLS...', 'download one ore more mp2t containerized videos'
9
+ method_option :video_name, type: :string, required: false
10
+ method_option :author_name, type: :string, required: false
11
+ method_option :output_dir, type: :string, required: false
12
+ method_option :headless, type: :boolean, default: true
13
+ method_option :author_dir, type: :boolean, default: false
14
+ method_option :hls_url, type: :string, required: true
15
+ method_option :master_playlist_name, type: :string, required: true
16
+ method_option :playwright_cli_path, type: :string, required: true
17
+ method_option :video_referer, type: :string, required: true
18
+ method_option :ts_seg_pattern, type: :string, required: true
19
+ method_option :hls_index_pattern, type: :string, required: true
20
+ def mp2t(*video_urls)
21
+ video_urls.each do |video_url|
22
+ params = {
23
+ video_url: video_url,
24
+ **options
25
+ }
26
+
27
+ process_mp2t(params)
28
+ sleep 1
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
data/lib/vidload/mp2t.rb CHANGED
@@ -3,5 +3,6 @@
3
3
  module Vidload
4
4
  module Mp2t
5
5
  require_relative 'mp2t/api'
6
+ require_relative 'mp2t/cli'
6
7
  end
7
8
  end
@@ -42,8 +42,8 @@ module Vidload
42
42
  self
43
43
  end
44
44
 
45
- def non_headless?(non_headless)
46
- @kwargs[:non_headless] = non_headless
45
+ def is_headless?(headless)
46
+ @kwargs[:headless] = headless
47
47
  self
48
48
  end
49
49
 
@@ -74,7 +74,7 @@ module Vidload
74
74
  # main func to be called in your own scripts defined under web/
75
75
  def download_video
76
76
  Playwright.create(playwright_cli_executable_path: @kwargs[:playwright_cli_path]) do |playwright|
77
- browser = playwright.chromium.launch(headless: !@kwargs[:non_headless])
77
+ browser = playwright.chromium.launch(headless: @kwargs[:headless])
78
78
  page = browser.new_page
79
79
 
80
80
  manage_video_download(page)
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+
5
+ module Vidload
6
+ module Mp4
7
+ class Cli < Thor
8
+ desc 'mp4 VIDEO_URLS...', 'download one ore more mp4 videos'
9
+ method_option :video_name, type: :string, required: false
10
+ method_option :video_hub_url, type: :string, required: true
11
+ method_option :playwright_cli_path, type: :string, required: true
12
+ method_option :headless, type: :boolean, default: true
13
+ def mp4(*video_urls)
14
+ video_urls.each do |video_url|
15
+ params = {
16
+ video_url: video_url,
17
+ **options
18
+ }
19
+
20
+ process_mp4(params)
21
+ sleep 1
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def process_mp4(params)
28
+ raise NotImplementedError
29
+ end
30
+ end
31
+ end
32
+ end
data/lib/vidload/mp4.rb CHANGED
@@ -3,5 +3,6 @@
3
3
  module Vidload
4
4
  module Mp4
5
5
  require_relative 'mp4/api'
6
+ require_relative 'mp4/cli'
6
7
  end
7
8
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Vidload
4
- VERSION = '0.5.2'
4
+ VERSION = '0.6.1'
5
5
  end
data/lib/vidload.rb CHANGED
@@ -4,5 +4,5 @@ module Vidload
4
4
  require_relative 'vidload/version'
5
5
  require_relative 'vidload/mp2t'
6
6
  require_relative 'vidload/mp4'
7
- require_relative 'vidload/cli'
7
+ require_relative 'vidload/custom'
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vidload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patacode <pata.codegineer@gmail.com>
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-13 00:00:00.000000000 Z
11
+ date: 2026-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lucky_case
@@ -115,12 +115,16 @@ extensions: []
115
115
  extra_rdoc_files: []
116
116
  files:
117
117
  - lib/vidload.rb
118
- - lib/vidload/cli.rb
118
+ - lib/vidload/custom.rb
119
+ - lib/vidload/custom/api.rb
120
+ - lib/vidload/custom/cli.rb
119
121
  - lib/vidload/mp2t.rb
120
122
  - lib/vidload/mp2t/api.rb
123
+ - lib/vidload/mp2t/cli.rb
121
124
  - lib/vidload/mp2t/remuxer.sh
122
125
  - lib/vidload/mp4.rb
123
126
  - lib/vidload/mp4/api.rb
127
+ - lib/vidload/mp4/cli.rb
124
128
  - lib/vidload/version.rb
125
129
  homepage:
126
130
  licenses: []
data/lib/vidload/cli.rb DELETED
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thor'
4
-
5
- module Vidload
6
- class Cli < Thor
7
- desc 'mp2t VIDEO_URL', 'download a mp2t containerized video'
8
- method_option :video_name, type: :string, required: false
9
- method_option :author_name, type: :string, required: false
10
- method_option :output_dir, type: :string, required: false
11
- method_option :non_headless, type: :boolean, default: false
12
- method_option :author_dir, type: :boolean, default: false
13
- method_option :hls_url, type: :string, required: true
14
- method_option :master_playlist_name, type: :string, required: true
15
- method_option :playwright_cli_path, type: :string, required: true
16
- method_option :video_referer, type: :string, required: true
17
- method_option :ts_seg_pattern, type: :string, required: true
18
- method_option :hls_index_pattern, type: :string, required: true
19
- def mp2t(video_url)
20
- params = {
21
- video_url: video_url,
22
- **options
23
- }
24
-
25
- process_mp2t(params)
26
- end
27
-
28
- desc 'mp4 VIDEO_URL', 'download a mp4 video'
29
- method_option :video_name, type: :string, required: false
30
- method_option :video_hub_url, type: :string, required: true
31
- method_option :playwright_cli_path, type: :string, required: true
32
- method_option :non_headless, type: :boolean, default: false
33
- def mp4(video_url)
34
- params = {
35
- video_url: video_url,
36
- **options
37
- }
38
-
39
- process_mp4(params)
40
- end
41
-
42
- private
43
-
44
- def process_mp2t(params)
45
- raise NotImplementedError
46
- end
47
-
48
- def process_mp4(params)
49
- raise NotImplementedError
50
- end
51
- end
52
- end