StreamingCommunity 3.2.1__py3-none-any.whl → 3.2.7__py3-none-any.whl

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.

Potentially problematic release.


This version of StreamingCommunity might be problematic. Click here for more details.

Files changed (67) hide show
  1. StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +4 -0
  2. StreamingCommunity/Api/Player/hdplayer.py +2 -2
  3. StreamingCommunity/Api/Player/mixdrop.py +1 -1
  4. StreamingCommunity/Api/Player/vixcloud.py +4 -5
  5. StreamingCommunity/Api/Site/altadefinizione/film.py +2 -2
  6. StreamingCommunity/Api/Site/altadefinizione/series.py +1 -1
  7. StreamingCommunity/Api/Site/animeunity/serie.py +1 -1
  8. StreamingCommunity/Api/Site/animeworld/film.py +1 -1
  9. StreamingCommunity/Api/Site/animeworld/serie.py +1 -2
  10. StreamingCommunity/Api/Site/cb01new/film.py +1 -1
  11. StreamingCommunity/Api/Site/crunchyroll/__init__.py +103 -0
  12. StreamingCommunity/Api/Site/crunchyroll/film.py +82 -0
  13. StreamingCommunity/Api/Site/crunchyroll/series.py +186 -0
  14. StreamingCommunity/Api/Site/crunchyroll/site.py +113 -0
  15. StreamingCommunity/Api/Site/crunchyroll/util/ScrapeSerie.py +238 -0
  16. StreamingCommunity/Api/Site/crunchyroll/util/get_license.py +227 -0
  17. StreamingCommunity/Api/Site/guardaserie/series.py +1 -2
  18. StreamingCommunity/Api/Site/guardaserie/site.py +1 -2
  19. StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +9 -8
  20. StreamingCommunity/Api/Site/mediasetinfinity/__init__.py +96 -0
  21. StreamingCommunity/Api/Site/mediasetinfinity/film.py +85 -0
  22. StreamingCommunity/Api/Site/mediasetinfinity/series.py +185 -0
  23. StreamingCommunity/Api/Site/mediasetinfinity/site.py +112 -0
  24. StreamingCommunity/Api/Site/mediasetinfinity/util/ScrapeSerie.py +259 -0
  25. StreamingCommunity/Api/Site/mediasetinfinity/util/fix_mpd.py +64 -0
  26. StreamingCommunity/Api/Site/mediasetinfinity/util/get_license.py +214 -0
  27. StreamingCommunity/Api/Site/raiplay/film.py +2 -2
  28. StreamingCommunity/Api/Site/raiplay/series.py +2 -1
  29. StreamingCommunity/Api/Site/streamingcommunity/__init__.py +6 -17
  30. StreamingCommunity/Api/Site/streamingcommunity/film.py +3 -3
  31. StreamingCommunity/Api/Site/streamingcommunity/series.py +11 -11
  32. StreamingCommunity/Api/Site/streamingcommunity/site.py +2 -4
  33. StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +3 -6
  34. StreamingCommunity/Api/Site/streamingwatch/__init__.py +6 -14
  35. StreamingCommunity/Api/Site/streamingwatch/film.py +3 -3
  36. StreamingCommunity/Api/Site/streamingwatch/series.py +9 -9
  37. StreamingCommunity/Api/Site/streamingwatch/site.py +5 -7
  38. StreamingCommunity/Api/Site/streamingwatch/util/ScrapeSerie.py +2 -2
  39. StreamingCommunity/Lib/Downloader/DASH/cdm_helpher.py +131 -0
  40. StreamingCommunity/Lib/Downloader/DASH/decrypt.py +79 -0
  41. StreamingCommunity/Lib/Downloader/DASH/downloader.py +218 -0
  42. StreamingCommunity/Lib/Downloader/DASH/parser.py +249 -0
  43. StreamingCommunity/Lib/Downloader/DASH/segments.py +332 -0
  44. StreamingCommunity/Lib/Downloader/HLS/downloader.py +10 -30
  45. StreamingCommunity/Lib/Downloader/HLS/segments.py +146 -263
  46. StreamingCommunity/Lib/Downloader/MP4/downloader.py +0 -5
  47. StreamingCommunity/Lib/FFmpeg/capture.py +3 -3
  48. StreamingCommunity/Lib/FFmpeg/command.py +1 -1
  49. StreamingCommunity/TelegramHelp/config.json +3 -7
  50. StreamingCommunity/Upload/version.py +1 -1
  51. StreamingCommunity/Util/bento4_installer.py +191 -0
  52. StreamingCommunity/Util/config_json.py +1 -1
  53. StreamingCommunity/Util/headers.py +0 -3
  54. StreamingCommunity/Util/os.py +36 -46
  55. StreamingCommunity/__init__.py +2 -1
  56. StreamingCommunity/run.py +11 -10
  57. {streamingcommunity-3.2.1.dist-info → streamingcommunity-3.2.7.dist-info}/METADATA +7 -9
  58. streamingcommunity-3.2.7.dist-info/RECORD +111 -0
  59. StreamingCommunity/Api/Site/1337xx/__init__.py +0 -72
  60. StreamingCommunity/Api/Site/1337xx/site.py +0 -82
  61. StreamingCommunity/Api/Site/1337xx/title.py +0 -61
  62. StreamingCommunity/Lib/Proxies/proxy.py +0 -72
  63. streamingcommunity-3.2.1.dist-info/RECORD +0 -96
  64. {streamingcommunity-3.2.1.dist-info → streamingcommunity-3.2.7.dist-info}/WHEEL +0 -0
  65. {streamingcommunity-3.2.1.dist-info → streamingcommunity-3.2.7.dist-info}/entry_points.txt +0 -0
  66. {streamingcommunity-3.2.1.dist-info → streamingcommunity-3.2.7.dist-info}/licenses/LICENSE +0 -0
  67. {streamingcommunity-3.2.1.dist-info → streamingcommunity-3.2.7.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,191 @@
1
+ # 18.07.25
2
+
3
+ import os
4
+ import platform
5
+ import logging
6
+ import shutil
7
+ import zipfile
8
+
9
+
10
+ # External library
11
+ import requests
12
+ from rich.console import Console
13
+ from rich.progress import Progress, SpinnerColumn, BarColumn, TextColumn, TimeRemainingColumn
14
+
15
+
16
+ # Variable
17
+ console = Console()
18
+
19
+ BENTO4_CONFIGURATION = {
20
+ 'windows': {
21
+ 'base_dir': lambda home: os.path.join(os.path.splitdrive(home)[0] + os.sep, 'binary'),
22
+ 'download_url': 'https://www.bok.net/Bento4/binaries/Bento4-SDK-{version}.{platform}.zip',
23
+ 'versions': {
24
+ 'x64': 'x86_64-microsoft-win32',
25
+ 'x86': 'x86-microsoft-win32-vs2010',
26
+ },
27
+ 'executables': ['mp4decrypt.exe']
28
+ },
29
+ 'darwin': {
30
+ 'base_dir': lambda home: os.path.join(home, 'Applications', 'binary'),
31
+ 'download_url': 'https://www.bok.net/Bento4/binaries/Bento4-SDK-{version}.{platform}.zip',
32
+ 'versions': {
33
+ 'x64': 'universal-apple-macosx',
34
+ 'arm64': 'universal-apple-macosx'
35
+ },
36
+ 'executables': ['mp4decrypt']
37
+ },
38
+ 'linux': {
39
+ 'base_dir': lambda home: os.path.join(home, '.local', 'bin', 'binary'),
40
+ 'download_url': 'https://www.bok.net/Bento4/binaries/Bento4-SDK-{version}.{platform}.zip',
41
+ 'versions': {
42
+ 'x64': 'x86_64-unknown-linux',
43
+ 'x86': 'x86-unknown-linux',
44
+ 'arm64': 'x86_64-unknown-linux'
45
+ },
46
+ 'executables': ['mp4decrypt']
47
+ }
48
+ }
49
+
50
+
51
+ class Bento4Downloader:
52
+ def __init__(self):
53
+ self.os_name = platform.system().lower()
54
+ self.arch = self._detect_arch()
55
+ self.home_dir = os.path.expanduser('~')
56
+ self.base_dir = BENTO4_CONFIGURATION[self.os_name]['base_dir'](self.home_dir)
57
+ self.version = "1-6-0-641" # Latest stable version as of Nov 2023
58
+ os.makedirs(self.base_dir, exist_ok=True)
59
+
60
+ def _detect_arch(self) -> str:
61
+ machine = platform.machine().lower()
62
+ arch_map = {
63
+ 'amd64': 'x64',
64
+ 'x86_64': 'x64',
65
+ 'x64': 'x64',
66
+ 'arm64': 'arm64',
67
+ 'aarch64': 'arm64',
68
+ 'x86': 'x86',
69
+ 'i386': 'x86',
70
+ 'i686': 'x86'
71
+ }
72
+ return arch_map.get(machine, machine)
73
+
74
+ def _download_file(self, url: str, destination: str) -> bool:
75
+ try:
76
+ response = requests.get(url, stream=True)
77
+ response.raise_for_status()
78
+ total_size = int(response.headers.get('content-length', 0))
79
+
80
+ with open(destination, 'wb') as file, \
81
+ Progress(
82
+ SpinnerColumn(),
83
+ TextColumn("[progress.description]{task.description}"),
84
+ BarColumn(),
85
+ TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
86
+ TimeRemainingColumn()
87
+ ) as progress:
88
+
89
+ download_task = progress.add_task("[green]Downloading Bento4", total=total_size)
90
+ for chunk in response.iter_content(chunk_size=8192):
91
+ size = file.write(chunk)
92
+ progress.update(download_task, advance=size)
93
+
94
+ return True
95
+
96
+ except Exception as e:
97
+ logging.error(f"Download error: {e}")
98
+ return False
99
+
100
+ def _extract_executables(self, zip_path: str) -> list:
101
+ try:
102
+ extracted_files = []
103
+ config = BENTO4_CONFIGURATION[self.os_name]
104
+ executables = config['executables']
105
+
106
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
107
+ for zip_info in zip_ref.filelist:
108
+ for executable in executables:
109
+ if zip_info.filename.endswith(executable):
110
+
111
+ # Extract to base directory
112
+ zip_ref.extract(zip_info, self.base_dir)
113
+ src_path = os.path.join(self.base_dir, zip_info.filename)
114
+ dst_path = os.path.join(self.base_dir, executable)
115
+
116
+ # Move to final location
117
+ shutil.move(src_path, dst_path)
118
+ os.chmod(dst_path, 0o755)
119
+ extracted_files.append(dst_path)
120
+
121
+ # Clean up intermediate directories
122
+ parts = zip_info.filename.split('/')
123
+ if len(parts) > 1:
124
+ shutil.rmtree(os.path.join(self.base_dir, parts[0]))
125
+
126
+ return extracted_files
127
+
128
+ except Exception as e:
129
+ logging.error(f"Extraction error: {e}")
130
+ return []
131
+
132
+ def download(self) -> list:
133
+ try:
134
+ config = BENTO4_CONFIGURATION[self.os_name]
135
+ platform_str = config['versions'].get(self.arch)
136
+
137
+ if not platform_str:
138
+ raise ValueError(f"Unsupported architecture: {self.arch}")
139
+
140
+ download_url = config['download_url'].format(
141
+ version=self.version,
142
+ platform=platform_str
143
+ )
144
+
145
+ zip_path = os.path.join(self.base_dir, "bento4.zip")
146
+ console.print(f"[bold blue]Downloading Bento4 from {download_url}[/]")
147
+
148
+ if self._download_file(download_url, zip_path):
149
+ extracted_files = self._extract_executables(zip_path)
150
+ os.remove(zip_path)
151
+
152
+ if extracted_files:
153
+ console.print("[bold green]Bento4 successfully installed[/]")
154
+ return extracted_files
155
+
156
+ raise Exception("Failed to install Bento4")
157
+
158
+ except Exception as e:
159
+ logging.error(f"Error downloading Bento4: {e}")
160
+ console.print(f"[bold red]Error downloading Bento4: {str(e)}[/]")
161
+ return []
162
+
163
+ def check_mp4decrypt() -> str:
164
+ """Check for mp4decrypt in the system and download if not found."""
165
+ try:
166
+ # First check if mp4decrypt is in PATH
167
+ mp4decrypt = "mp4decrypt.exe" if platform.system().lower() == "windows" else "mp4decrypt"
168
+ mp4decrypt_path = shutil.which(mp4decrypt)
169
+
170
+ if mp4decrypt_path:
171
+ return mp4decrypt_path
172
+
173
+ # If not found, check in binary directory
174
+ downloader = Bento4Downloader()
175
+ base_dir = downloader.base_dir
176
+ local_path = os.path.join(base_dir, mp4decrypt)
177
+
178
+ if os.path.exists(local_path):
179
+ return local_path
180
+
181
+ # Download if not found
182
+ extracted_files = downloader.download()
183
+ return extracted_files[0] if extracted_files else None
184
+
185
+ except Exception as e:
186
+ logging.error(f"Error checking or downloading mp4decrypt: {e}")
187
+ return None
188
+
189
+ except Exception as e:
190
+ logging.error(f"Error checking or downloading mp4decrypt: {e}")
191
+ return None
@@ -568,4 +568,4 @@ def get_use_large_bar():
568
568
 
569
569
 
570
570
  # Initialize the ConfigManager when the module is imported
571
- config_manager = ConfigManager()
571
+ config_manager = ConfigManager()
@@ -1,8 +1,5 @@
1
1
  # 4.04.24
2
2
 
3
- import random
4
-
5
-
6
3
  # External library
7
4
  import ua_generator
8
5
 
@@ -14,16 +14,17 @@ import contextlib
14
14
  import importlib.metadata
15
15
  import socket
16
16
 
17
+
17
18
  # External library
18
19
  from unidecode import unidecode
19
20
  from rich.console import Console
20
21
  from rich.prompt import Prompt
21
22
  from pathvalidate import sanitize_filename, sanitize_filepath
22
- from dns.resolver import dns
23
23
 
24
24
 
25
25
  # Internal utilities
26
26
  from .ffmpeg_installer import check_ffmpeg
27
+ from .bento4_installer import check_mp4decrypt
27
28
 
28
29
 
29
30
  # Variable
@@ -283,43 +284,6 @@ class InternManager():
283
284
  else:
284
285
  return f"{bytes / (1024 * 1024):.2f} MB/s"
285
286
 
286
- # def check_dns_provider(self):
287
- # """
288
- # Check if the system's current DNS server matches any known DNS providers.
289
-
290
- # Returns:
291
- # bool: True if the current DNS server matches a known provider,
292
- # False if no match is found or in case of errors
293
- # """
294
- # dns_providers = {
295
- # "Cloudflare": ["1.1.1.1", "1.0.0.1"],
296
- # "Google": ["8.8.8.8", "8.8.4.4"],
297
- # "OpenDNS": ["208.67.222.222", "208.67.220.220"],
298
- # "Quad9": ["9.9.9.9", "149.112.112.112"],
299
- # "AdGuard": ["94.140.14.14", "94.140.15.15"],
300
- # "Comodo": ["8.26.56.26", "8.20.247.20"],
301
- # "Level3": ["209.244.0.3", "209.244.0.4"],
302
- # "Norton": ["199.85.126.10", "199.85.127.10"],
303
- # "CleanBrowsing": ["185.228.168.9", "185.228.169.9"],
304
- # "Yandex": ["77.88.8.8", "77.88.8.1"]
305
- # }
306
-
307
- # try:
308
- # resolver = dns.resolver.Resolver()
309
- # nameservers = resolver.nameservers
310
-
311
- # if not nameservers:
312
- # return False
313
-
314
- # for server in nameservers:
315
- # for provider, ips in dns_providers.items():
316
- # if server in ips:
317
- # return True
318
- # return False
319
-
320
- # except Exception:
321
- # return False
322
-
323
287
  def check_dns_resolve(self, domains_list: list = None):
324
288
  """
325
289
  Check if the system's current DNS server can resolve a domain name.
@@ -347,6 +311,7 @@ class OsSummary:
347
311
  self.ffmpeg_path = None
348
312
  self.ffprobe_path = None
349
313
  self.ffplay_path = None
314
+ self.mp4decrypt_path = None
350
315
 
351
316
  def get_binary_directory(self):
352
317
  """Get the binary directory based on OS."""
@@ -441,10 +406,8 @@ class OsSummary:
441
406
  }
442
407
  arch = arch_map.get(arch, arch)
443
408
 
444
- # Check binary directory
409
+ # Check FFmpeg binaries
445
410
  if os.path.exists(binary_dir):
446
-
447
- # Search for any file containing 'ffmpeg' and the architecture
448
411
  ffmpeg_files = glob.glob(os.path.join(binary_dir, f'*ffmpeg*{arch}*'))
449
412
  ffprobe_files = glob.glob(os.path.join(binary_dir, f'*ffprobe*{arch}*'))
450
413
 
@@ -452,7 +415,6 @@ class OsSummary:
452
415
  self.ffmpeg_path = ffmpeg_files[0]
453
416
  self.ffprobe_path = ffprobe_files[0]
454
417
 
455
- # Set executable permissions if needed
456
418
  if system != 'windows':
457
419
  os.chmod(self.ffmpeg_path, 0o755)
458
420
  os.chmod(self.ffprobe_path, 0o755)
@@ -461,11 +423,19 @@ class OsSummary:
461
423
  else:
462
424
  self.ffmpeg_path, self.ffprobe_path, self.ffplay_path = check_ffmpeg()
463
425
 
426
+ # Check mp4decrypt
427
+ self.mp4decrypt_path = check_mp4decrypt()
428
+
464
429
  if not self.ffmpeg_path or not self.ffprobe_path:
465
430
  console.log("[red]Can't locate ffmpeg or ffprobe")
466
431
  sys.exit(0)
467
432
 
433
+ if not self.mp4decrypt_path:
434
+ console.log("[yellow]Warning: mp4decrypt not found")
435
+
468
436
  console.print(f"[cyan]Path: [red]ffmpeg [bold yellow]'{self.ffmpeg_path}'[/bold yellow][white], [red]ffprobe '[bold yellow]{self.ffprobe_path}'[/bold yellow]")
437
+ if self.mp4decrypt_path:
438
+ console.print(f"[cyan]Path: [red]mp4decrypt [bold yellow]'{self.mp4decrypt_path}'[/bold yellow]")
469
439
 
470
440
 
471
441
  os_manager = OsManager()
@@ -478,10 +448,6 @@ def suppress_output():
478
448
  with contextlib.redirect_stdout(io.StringIO()):
479
449
  yield
480
450
 
481
- def compute_sha1_hash(input_string: str) -> str:
482
- """Computes the SHA-1 hash of the input string."""
483
- return hashlib.sha1(input_string.encode()).hexdigest()
484
-
485
451
  def get_call_stack():
486
452
  """Retrieves the current call stack with details about each call."""
487
453
  stack = inspect.stack()
@@ -512,3 +478,27 @@ def get_ffmpeg_path():
512
478
  def get_ffprobe_path():
513
479
  """Returns the path of FFprobe."""
514
480
  return os_summary.ffprobe_path
481
+
482
+ def get_mp4decrypt_path():
483
+ """Returns the path of mp4decrypt."""
484
+ return os_summary.mp4decrypt_path
485
+
486
+ def get_wvd_path():
487
+ """
488
+ Searches the system's binary folder and returns the path of the first file ending with 'wvd'.
489
+ Returns None if not found.
490
+ """
491
+ system = platform.system().lower()
492
+ home = os.path.expanduser('~')
493
+ if system == 'windows':
494
+ binary_dir = os.path.join(os.path.splitdrive(home)[0] + os.path.sep, 'binary')
495
+ elif system == 'darwin':
496
+ binary_dir = os.path.join(home, 'Applications', 'binary')
497
+ else:
498
+ binary_dir = os.path.join(home, '.local', 'bin', 'binary')
499
+ if not os.path.exists(binary_dir):
500
+ return None
501
+ for file in os.listdir(binary_dir):
502
+ if file.lower().endswith('wvd'):
503
+ return os.path.join(binary_dir, file)
504
+ return None
@@ -3,4 +3,5 @@
3
3
  from .run import main
4
4
  from .Lib.Downloader.HLS.downloader import HLS_Downloader
5
5
  from .Lib.Downloader.MP4.downloader import MP4_downloader
6
- from .Lib.Downloader.TOR.downloader import TOR_downloader
6
+ from .Lib.Downloader.TOR.downloader import TOR_downloader
7
+ from .Lib.Downloader.DASH.downloader import DASH_Downloader
StreamingCommunity/run.py CHANGED
@@ -33,6 +33,7 @@ from StreamingCommunity.TelegramHelp.telegram_bot import get_bot_instance, Teleg
33
33
  SHOW_TRENDING = config_manager.get_bool('DEFAULT', 'show_trending')
34
34
  NOT_CLOSE_CONSOLE = config_manager.get_bool('DEFAULT', 'not_close')
35
35
  TELEGRAM_BOT = config_manager.get_bool('DEFAULT', 'telegram_bot')
36
+ BYPASS_DNS = config_manager.get_bool('DEFAULT', 'bypass_dns')
36
37
 
37
38
 
38
39
  # Variable
@@ -227,16 +228,16 @@ def main(script_id = 0):
227
228
  # Get all site hostname
228
229
  hostname_list = [hostname for site_info in config_manager.configSite.values() if (hostname := _extract_hostname(site_info.get('full_url')))]
229
230
 
230
- if not internet_manager.check_dns_resolve(hostname_list):
231
- print()
232
- console.print("[red] ERROR: DNS configuration is required!")
233
- console.print("[red]The program cannot function correctly without proper DNS settings.")
234
- console.print("[yellow]Please configure one of these DNS servers:")
235
- console.print("[blue]• Cloudflare (1.1.1.1) 'https://developers.cloudflare.com/1.1.1.1/setup/windows/'")
236
- console.print("[blue]• Quad9 (9.9.9.9) 'https://docs.quad9.net/Setup_Guides/Windows/Windows_10/'")
237
- console.print("\n[yellow]⚠️ The program will not work until you configure your DNS settings.")
238
-
239
- os._exit(0)
231
+ if not BYPASS_DNS:
232
+ if not internet_manager.check_dns_resolve(hostname_list):
233
+ console.print("[red] ERROR: DNS configuration is required!")
234
+ console.print("[red]The program cannot function correctly without proper DNS settings.")
235
+ console.print("[yellow]Please configure one of these DNS servers:")
236
+ console.print("[red]• Cloudflare (1.1.1.1) 'https://developers.cloudflare.com/1.1.1.1/setup/windows/'")
237
+ console.print("[red]• Quad9 (9.9.9.9) 'https://docs.quad9.net/Setup_Guides/Windows/Windows_10/'")
238
+ console.print("\n[yellow]⚠️ The program will not work until you configure your DNS settings.")
239
+
240
+ os._exit(0)
240
241
 
241
242
  # Load search functions
242
243
  search_functions = load_search_functions()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: StreamingCommunity
3
- Version: 3.2.1
3
+ Version: 3.2.7
4
4
  Home-page: https://github.com/Lovi-0/StreamingCommunity
5
5
  Author: Lovi-0
6
6
  Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
@@ -18,14 +18,13 @@ Requires-Dist: certifi
18
18
  Requires-Dist: psutil
19
19
  Requires-Dist: unidecode
20
20
  Requires-Dist: curl_cffi
21
- Requires-Dist: dnspython
22
21
  Requires-Dist: jsbeautifier
23
22
  Requires-Dist: pathvalidate
24
23
  Requires-Dist: pycryptodomex
25
24
  Requires-Dist: ua-generator
26
25
  Requires-Dist: qbittorrent-api
27
26
  Requires-Dist: pyTelegramBotAPI
28
- Requires-Dist: beautifulsoup4
27
+ Requires-Dist: pywidevine
29
28
  Dynamic: author
30
29
  Dynamic: description
31
30
  Dynamic: description-content-type
@@ -149,7 +148,7 @@ python run_streaming.py
149
148
  Download HTTP Live Streaming (HLS) content from m3u8 URLs.
150
149
 
151
150
  ```python
152
- from StreamingCommunity.Download import HLS_Downloader
151
+ from StreamingCommunity import HLS_Downloader
153
152
 
154
153
  # Initialize with m3u8 URL and optional output path
155
154
  downloader = HLS_Downloader(
@@ -170,7 +169,7 @@ See [HLS example](./Test/Download/HLS.py) for complete usage.
170
169
  Direct MP4 file downloader with support for custom headers and referrer.
171
170
 
172
171
  ```python
173
- from StreamingCommunity.Download import MP4_downloader
172
+ from StreamingCommunity import MP4_downloader
174
173
 
175
174
  # Basic usage
176
175
  downloader = MP4_downloader(
@@ -202,7 +201,7 @@ See [MP4 example](./Test/Download/MP4.py) for complete usage.
202
201
  Download content via torrent magnet links.
203
202
 
204
203
  ```python
205
- from StreamingCommunity.Download import TOR_downloader
204
+ from StreamingCommunity import TOR_downloader
206
205
 
207
206
  # Initialize torrent client
208
207
  client = TOR_downloader()
@@ -526,8 +525,6 @@ To enable qBittorrent integration, follow the setup guide [here](https://github.
526
525
  "default_video_workser": 12,
527
526
  "default_audio_workser": 12,
528
527
  "segment_timeout": 8,
529
- "download_audio": true,
530
- "merge_audio": true,
531
528
  "specific_list_audio": [
532
529
  "ita"
533
530
  ],
@@ -552,7 +549,6 @@ To enable qBittorrent integration, follow the setup guide [here](https://github.
552
549
 
553
550
  #### Audio Settings
554
551
  - `download_audio`: Whether to download audio tracks
555
- - `merge_audio`: Whether to merge audio with video
556
552
  - `specific_list_audio`: List of audio languages to download
557
553
  * Can be changed with `--specific_list_audio ita,eng`
558
554
 
@@ -839,3 +835,5 @@ API non ufficiale per accedere ai contenuti del sito italiano StreamingCommunity
839
835
  # Disclaimer
840
836
 
841
837
  This software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose, and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages, or other liability, whether in an action of contract, tort, or otherwise, arising from, out of, or in connection with the software or the use or other dealings in the software.
838
+
839
+ > **Note:** DASH downloads require a valid L3 CDM (Content Decryption Module) to proceed. This project does not provide, include, or facilitate obtaining any CDM. Users are responsible for ensuring compliance with all applicable laws and requirements regarding DRM and decryption modules.
@@ -0,0 +1,111 @@
1
+ StreamingCommunity/__init__.py,sha256=NPxefEfOANbfmXVfYMlofaZfzcMMcrUUpjWx81X_cQQ,267
2
+ StreamingCommunity/global_search.py,sha256=ip3D0OKNRTXHpe_Wy7v2KM-yNZdnnbG5FOBYSSk6wB8,12401
3
+ StreamingCommunity/run.py,sha256=_7e8BEGFCCHdKSv64q6M3IenxT0-TQ629VJaAZMPhhY,14242
4
+ StreamingCommunity/Api/Player/ddl.py,sha256=cPinK99iX4ThvAHLlzcACcnFvM-M_NK0f4imh9PQY1I,2174
5
+ StreamingCommunity/Api/Player/hdplayer.py,sha256=TTI_DNR9swFlUayJPfZBwqcH2pmw-oLk9PHu725wxnY,1936
6
+ StreamingCommunity/Api/Player/maxstream.py,sha256=JlVTCAo9ze0wF2h0eNPYqdorhwK7DPXpmLAyHMnT7-Y,5017
7
+ StreamingCommunity/Api/Player/mediapolisvod.py,sha256=Npm3HHUO5Wav8c2QX9E2c3SSW6d1STJw-kK8kHRF-zo,2403
8
+ StreamingCommunity/Api/Player/mixdrop.py,sha256=rZOE14yFdQM0l7ZNRMzFtOpaedgXUo6gdvoBu24y7IE,5127
9
+ StreamingCommunity/Api/Player/supervideo.py,sha256=AuAA6eXYODJN-ytdvKjqlzZLOHpwx3kwgy1CSiogs-o,5388
10
+ StreamingCommunity/Api/Player/sweetpixel.py,sha256=Qi4dcEDXbFjFPH9CHl0T0DfIJUfUXL0vyFdIUnIHkMI,1741
11
+ StreamingCommunity/Api/Player/vixcloud.py,sha256=0DnukAIBqGqTmL9I6JkpAkHLMf1UG1D_J8c7zt6KDmU,6609
12
+ StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py,sha256=U-8QlD5kGzIk3-4t4D6QyYmiDe8UBrSuVi1YHRQb7AU,4295
13
+ StreamingCommunity/Api/Player/Helper/Vixcloud/util.py,sha256=mTEAND-KepqRHRYlAorJ1mc6ICB-f0Whhp5OZ8R4MJ8,5306
14
+ StreamingCommunity/Api/Site/altadefinizione/__init__.py,sha256=6CF9MCh3AstetNlTqG_uzRUQEmMR4iix2vPzGbl3EWM,4180
15
+ StreamingCommunity/Api/Site/altadefinizione/film.py,sha256=fMrDew-M9S4ZTXNTYir4GJexQjG5aSlIYL_k-92iWKc,3701
16
+ StreamingCommunity/Api/Site/altadefinizione/series.py,sha256=I_Fol3grdTZmLwLFskkU7v9fcddzQUENtWmgeNXoC4s,8177
17
+ StreamingCommunity/Api/Site/altadefinizione/site.py,sha256=2kUNQ8ebYlX5dkSql-CvEhU01TOTNtuyEMIAD6SC3lg,2865
18
+ StreamingCommunity/Api/Site/altadefinizione/util/ScrapeSerie.py,sha256=9iulNlnNAhTfI5iKNW3I6pZqYeYwovAswa13L3LPGDM,4251
19
+ StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=cLuZOgtQ-1vKIKf3iJjznBu3ET1Q3WZtO0UoK9U0YPU,4034
20
+ StreamingCommunity/Api/Site/animeunity/film.py,sha256=Vqg6yag2siR-Y3ougBsV8mzdQXChxg6ghz_KVXFQ3pE,998
21
+ StreamingCommunity/Api/Site/animeunity/serie.py,sha256=wqpbry4wkkwc5M2sf3k6icQRRZ7Jw9hv4BE8BlMHec0,5696
22
+ StreamingCommunity/Api/Site/animeunity/site.py,sha256=GLULPQATMHcXiH99d772v1ICH-PnnZgSM3q5__eN-gs,4977
23
+ StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=UladSvOlTEVLiV0-rAz45zrET5qRHMuTGuKEpeQoumU,3872
24
+ StreamingCommunity/Api/Site/animeworld/__init__.py,sha256=fjStJyOl6VBVDgoi6wr2yA0CQ_UQ4atTBzal0gOBgRM,2822
25
+ StreamingCommunity/Api/Site/animeworld/film.py,sha256=Ysp0k5AlrOsl19S9LV4nwVg8cjFf5w0FZRO9CiO6NxA,1748
26
+ StreamingCommunity/Api/Site/animeworld/serie.py,sha256=b1yuBnLNqJ-IWEVqLnQuYv6VbUQ60a5YFpZbJrS3lnI,3486
27
+ StreamingCommunity/Api/Site/animeworld/site.py,sha256=HBUAYiOa-UPGAO4lyTL1qIqqpDNVhWRHZ-nyLFltl7I,3702
28
+ StreamingCommunity/Api/Site/animeworld/util/ScrapeSerie.py,sha256=EDTouftxigb4ojTEGWC0sOgOLCNjE1-1GFEMrK-qzRQ,3615
29
+ StreamingCommunity/Api/Site/cb01new/__init__.py,sha256=95M3DiNbLbZ6v1oFkPuAPEVJWf12W2JzJvxZKjZs_V8,2071
30
+ StreamingCommunity/Api/Site/cb01new/film.py,sha256=mjJQFoh8aTp7ydmr6_WLT0G0_HfEDGeVXp3QfSalVRw,1680
31
+ StreamingCommunity/Api/Site/cb01new/site.py,sha256=82GPxjOyY7Dlj1WbA0YNovgbKhuF3Vmca07IVXGh6lE,2139
32
+ StreamingCommunity/Api/Site/crunchyroll/__init__.py,sha256=hBb29hfYD_rGMkhhAknnkBOB-oG_yE2rfUtbPw0wPLQ,3456
33
+ StreamingCommunity/Api/Site/crunchyroll/film.py,sha256=AkDWcvDe43zSJH_Pxig4JmagDJuUw2PkB_q6dChL7MQ,2559
34
+ StreamingCommunity/Api/Site/crunchyroll/series.py,sha256=VCBnVrOj_Cmu4pAWGSfAgf-7GP8GsmSINLfHBwZ7f6U,7209
35
+ StreamingCommunity/Api/Site/crunchyroll/site.py,sha256=BmOQw060M7KvH_wL-V_x1s6918rxM_Pp54tuNgG5ju0,3210
36
+ StreamingCommunity/Api/Site/crunchyroll/util/ScrapeSerie.py,sha256=ZY6z4pT5q7igiNZnJAvE9x0WiORTvFSH-U_CpqOzusA,7855
37
+ StreamingCommunity/Api/Site/crunchyroll/util/get_license.py,sha256=KpVvJbGUTLeVD-tt8r7ajBPWVT7Tm6GrKwzpW8CS-tg,6881
38
+ StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=vnbt1DVG6nmHaLSUOO_2NQYi9iTiOPLrwtvUd_DZDZg,2800
39
+ StreamingCommunity/Api/Site/guardaserie/series.py,sha256=o7jjf64E95A2rGzYSEARTsZgOlQHeuXtfp4IlD4GtTU,6462
40
+ StreamingCommunity/Api/Site/guardaserie/site.py,sha256=z9PKJesarOFlIrCeaed5095poJWYroVoWRV1LYTR4E4,2252
41
+ StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py,sha256=hPul0-9sgi0IZplHn9UywtpAa3xhVKDC0lefb5l81-g,4413
42
+ StreamingCommunity/Api/Site/mediasetinfinity/__init__.py,sha256=dBKs42xEuIjHZ8mnqmjpdySjFYYuwDi6drWbBvzMzR8,3257
43
+ StreamingCommunity/Api/Site/mediasetinfinity/film.py,sha256=mOKktBmlW90mRDZfENWNpp5l2svRGXeo6MG0S7X2nlM,2582
44
+ StreamingCommunity/Api/Site/mediasetinfinity/series.py,sha256=JLcXcq5OKqBCYwcuworzHl2DNXO2ivxV-cqF8HaqKD8,7131
45
+ StreamingCommunity/Api/Site/mediasetinfinity/site.py,sha256=SVNcqcQAOxAKw0mcUzeQqDbfcnRFEPtxKNjl2Xe7FlY,3240
46
+ StreamingCommunity/Api/Site/mediasetinfinity/util/ScrapeSerie.py,sha256=-PUhtJ1Umb1SjLh6Ujs0cOmOi-uC0WrSkIecv6XDhgQ,9382
47
+ StreamingCommunity/Api/Site/mediasetinfinity/util/fix_mpd.py,sha256=B7uZfQ8X4p8KsiPVangFSs5rKKKpA3tavjPCdNrqyCc,1712
48
+ StreamingCommunity/Api/Site/mediasetinfinity/util/get_license.py,sha256=-uM5G2M-9MwJq-TyXEV6PcpsWBoGdJ8KcuNQwgn5cos,6330
49
+ StreamingCommunity/Api/Site/raiplay/__init__.py,sha256=6Hjkc_C0du_stc9cOKJIyWjW-YQPMmJLoLXZpiwX1S8,3106
50
+ StreamingCommunity/Api/Site/raiplay/film.py,sha256=uGN4sMMSkUJHjOUZbI-8yjpy5oGTcw1sNTPxct_PKvc,1967
51
+ StreamingCommunity/Api/Site/raiplay/series.py,sha256=Lfxe0cvsipcDZbX6W2bYLbnuXb-pcEEgBT-Tq8CXwaM,6147
52
+ StreamingCommunity/Api/Site/raiplay/site.py,sha256=kWo2YPcUOPgsThJU_RahnDwJP4QpkmgzdzRqtoubR5U,3166
53
+ StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py,sha256=V7fFP9KLuMXitRsHtInxUJBcGClfSk_tOUNWFC8pG5A,5807
54
+ StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=q5F3e2h7fuYKGLMfXOzK71sGfPW38CYP-dfGjwFe3mQ,5577
55
+ StreamingCommunity/Api/Site/streamingcommunity/film.py,sha256=ma9cLfU4w_e-qoN2JMLZdB4_LZoYa38W79y_MYstwTg,2723
56
+ StreamingCommunity/Api/Site/streamingcommunity/series.py,sha256=TlqvvOdB1FCHwsGCfvcBE6bzcJbOEfPC9lGiMrDm5vU,8952
57
+ StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=MMi4mcKu0iPhud685IVW4xc7hFkJe09OjT6L90tsRHk,3985
58
+ StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py,sha256=vnqVwDb4sxEXzMcr9B4ZZHFuADwcHSMCa3VMguKIe_U,5555
59
+ StreamingCommunity/Api/Site/streamingwatch/__init__.py,sha256=Swp2KHYBH96W8yBbjGF5x-xjnoal7hNj1JE05CWMsz4,3337
60
+ StreamingCommunity/Api/Site/streamingwatch/film.py,sha256=bLV3KjF7KFhpp8BvfQrpSFP9R__YmTlB-ypJBSivT5o,1637
61
+ StreamingCommunity/Api/Site/streamingwatch/series.py,sha256=ak4RdpR2-IuAimP3x5ZqEv9CH2_RcTZGN1hXlpoixJo,6141
62
+ StreamingCommunity/Api/Site/streamingwatch/site.py,sha256=dHEL5_3nSBynlXz82IUbCHkxIpuvhmE2aRpdE1b6wq8,3448
63
+ StreamingCommunity/Api/Site/streamingwatch/util/ScrapeSerie.py,sha256=Ui_2Vccf6C_ZLLMxLbUL0r5n8mWQiQTl4YZQAhXRf0g,4268
64
+ StreamingCommunity/Api/Template/__init__.py,sha256=oyfd_4_g5p5q6mxb_rKwSsudZnTM3W3kg1tLwxg-v-Q,46
65
+ StreamingCommunity/Api/Template/config_loader.py,sha256=2RT_0mqQmWzXM4rYaqss-yhXztYAcfNkTalFPjzv270,2056
66
+ StreamingCommunity/Api/Template/site.py,sha256=vUcHK4fuoBtDtO_Kgb4bQqfQDtVH5Jg9_-mVhZA3NTU,4919
67
+ StreamingCommunity/Api/Template/Class/SearchType.py,sha256=LOlE8UgraEM0UAVeNCThDGi8bleei31p7KpryuZm3VE,2530
68
+ StreamingCommunity/Api/Template/Util/__init__.py,sha256=ZWQQd6iymNFDol9HaKPhVBoRX1W-xHJZgU_mZvLVdsM,196
69
+ StreamingCommunity/Api/Template/Util/manage_ep.py,sha256=FYe2DC9SXIXzlRYI7fW4ieBpfrxYzsUgt2C47tYRk7U,9252
70
+ StreamingCommunity/Lib/Downloader/__init__.py,sha256=JhbBh5hOnSM7VmtkxJ7zZ_FtWEC1JdnKThsSBjLV5FY,140
71
+ StreamingCommunity/Lib/Downloader/DASH/cdm_helpher.py,sha256=at7_pYAbb_391PrQXWIxPZYT9gaS7qrVgKMdbQSMSyw,4714
72
+ StreamingCommunity/Lib/Downloader/DASH/decrypt.py,sha256=RuzxsXjJKKzdbbUESfujCXqg_t1brOJLAvVNFWej48o,2353
73
+ StreamingCommunity/Lib/Downloader/DASH/downloader.py,sha256=nuYZLM_Np0TKZ7wc7hYL5hivrEzqQ7sdvfx40LnVP_Q,8093
74
+ StreamingCommunity/Lib/Downloader/DASH/parser.py,sha256=ZW6oErH9i8Nrp6yPc8usiRBv9ftkfVYh46wEg8MOl6o,9835
75
+ StreamingCommunity/Lib/Downloader/DASH/segments.py,sha256=ZV9FYibbS8E722MHVxl16N6rN1tPioZTNqO4jWBpGGo,12672
76
+ StreamingCommunity/Lib/Downloader/HLS/downloader.py,sha256=yzusDF32uSR_MZqdrNoJ27nR2VXRvflckTxiw04JoNk,21189
77
+ StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=0uEjyG8vZLKSEkZGmkheeZXqWCyF8-UbuFI1tEil5JM,12257
78
+ StreamingCommunity/Lib/Downloader/MP4/downloader.py,sha256=OBObY930wrOG0IUlDRROOfgU_u6uYHvckED4nnPjXzs,7367
79
+ StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=CrRGdLGI_45AnhtTZm8r7KO7uGmU9k6pywy-qO18LG8,19242
80
+ StreamingCommunity/Lib/FFmpeg/__init__.py,sha256=6PBsZdE1jrD2EKOVyx3JEHnyDZzVeKlPkH5T0zyfOgU,130
81
+ StreamingCommunity/Lib/FFmpeg/capture.py,sha256=UUBaFK8WLkvqxsElqyEj-JvDvd9zUFZ2bRwRoUcGjVk,5039
82
+ StreamingCommunity/Lib/FFmpeg/command.py,sha256=Fy_vs1tqIeG8Mgtj5aZaUp7oLDAceBPN72pqqKViD8s,10716
83
+ StreamingCommunity/Lib/FFmpeg/util.py,sha256=byM5DzAA-8Ts0FtviEPfbFJKN_PuxVFGjELgD_FEhsk,9287
84
+ StreamingCommunity/Lib/M3U8/__init__.py,sha256=H_KS2eDd3kVXMziFJnD0FCPvPHEizaqfoA36ElTv_r8,170
85
+ StreamingCommunity/Lib/M3U8/decryptor.py,sha256=kuxxsd3eN0VGRrMJWXzHo8gCpT0u3fSZs_lwxlE5Fqs,2948
86
+ StreamingCommunity/Lib/M3U8/estimator.py,sha256=8gwTxJ3poRqZdHUTD9_oqXegiPWSXFuqLmqCZBnXS8A,5893
87
+ StreamingCommunity/Lib/M3U8/parser.py,sha256=cSjXPOSgTewrfLgREyQ47wzoOeoYo3L4lOfEWZKxad8,22485
88
+ StreamingCommunity/Lib/M3U8/url_fixer.py,sha256=zldE4yOuNBV6AAvL1KI6p7XdRI_R5YZRscbDgT1564M,1735
89
+ StreamingCommunity/Lib/TMBD/__init__.py,sha256=XzE42tw3Ws59DD1PF8WmGtZ0D4D7Hk3Af8QthNE-22U,66
90
+ StreamingCommunity/Lib/TMBD/obj_tmbd.py,sha256=dRSvJFS5yqmsBZcw2wqbStcBtXNjU_3n5czMyremAtU,1187
91
+ StreamingCommunity/Lib/TMBD/tmdb.py,sha256=byg0EFnlmd9JeLvn1N9K3QkB1KEfeMuFa7OVfGqks1Y,10685
92
+ StreamingCommunity/TelegramHelp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
93
+ StreamingCommunity/TelegramHelp/config.json,sha256=4Tnram-K5wNK0QjWY9R4VpiHfGnMbahvDEdJ2VBWOoc,1460
94
+ StreamingCommunity/TelegramHelp/telegram_bot.py,sha256=zCqj7xBofh9FYfEYl55mgT945jqtKo7qJhn-SMLvAvA,26455
95
+ StreamingCommunity/Upload/update.py,sha256=ZGQHcnTLAfXla_PqvykDeg2-WKOYfX9zX2I3KrdKHpc,3814
96
+ StreamingCommunity/Upload/version.py,sha256=xHCI5wpbmfATQoDKu6smmB7Jq_R3elpw8qGq48nmaA8,171
97
+ StreamingCommunity/Util/bento4_installer.py,sha256=P5ipziMCvezxan8GUh9vm8B1LXGyHusFVDf842LSwis,6966
98
+ StreamingCommunity/Util/color.py,sha256=NvD0Eni-25oOOkY-szCEoc0lGvzQxyL7xhM0RE4EvUM,458
99
+ StreamingCommunity/Util/config_json.py,sha256=4sn-vvrYybZMOlT-blx3bM9njxQRQS_HwSPfqQ0qZ94,24226
100
+ StreamingCommunity/Util/ffmpeg_installer.py,sha256=yRVIPwbh05tZ-duZmXkH0qasLNxaQCAT_E4cTP79Z3c,14890
101
+ StreamingCommunity/Util/headers.py,sha256=RP3A6Gr8UB8VU6uzw_yDOjEKkIFKpi7Gi6_w2ACxE30,292
102
+ StreamingCommunity/Util/logger.py,sha256=9kGD6GmWj2pM8ADpJc85o7jm8DD0c5Aguqnq-9kmxos,3314
103
+ StreamingCommunity/Util/message.py,sha256=81vPmsGBusovIhheIO4Ec6p7BYvMj1wE_CthtRyp6OM,1333
104
+ StreamingCommunity/Util/os.py,sha256=vLNRGWsQYTSUGdpj19fR_n0i-6bhZYeJh5IZpahdyKM,16832
105
+ StreamingCommunity/Util/table.py,sha256=Nw5PlsvfEIOQZWy5VhsU5OK3heuBXGwsqmLl0k8yQzc,9813
106
+ streamingcommunity-3.2.7.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
107
+ streamingcommunity-3.2.7.dist-info/METADATA,sha256=pCGVpbT5rIjdWH1qxZcIUxdNWvIAWd78bA0KIJ0hk4U,25312
108
+ streamingcommunity-3.2.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
109
+ streamingcommunity-3.2.7.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
110
+ streamingcommunity-3.2.7.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
111
+ streamingcommunity-3.2.7.dist-info/RECORD,,
@@ -1,72 +0,0 @@
1
- # 02.07.24
2
-
3
- from urllib.parse import quote_plus
4
-
5
-
6
- # External library
7
- from rich.console import Console
8
- from rich.prompt import Prompt
9
-
10
-
11
- # Internal utilities
12
- from StreamingCommunity.Api.Template import get_select_title
13
- from StreamingCommunity.Api.Template.config_loader import site_constant
14
- from StreamingCommunity.Api.Template.Class.SearchType import MediaItem
15
-
16
-
17
- # Logic class
18
- from .site import title_search, media_search_manager, table_show_manager
19
- from .title import download_title
20
-
21
-
22
- # Variable
23
- indice = 3
24
- _useFor = "Torrent"
25
- _priority = 0
26
- _engineDownload = "Torrent"
27
- _deprecate = True
28
-
29
- console = Console()
30
- msg = Prompt()
31
-
32
-
33
-
34
- def process_search_result(select_title):
35
- """
36
- Handles the search result and initiates the download for either a film or series.
37
- """
38
- download_title(select_title)
39
-
40
- def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None):
41
- """
42
- Main function of the application for search.
43
-
44
- Parameters:
45
- string_to_search (str, optional): String to search for
46
- get_onylDatabase (bool, optional): If True, return only the database object
47
- direct_item (dict, optional): Direct item to process (bypass search)
48
- """
49
- if direct_item:
50
- select_title = MediaItem(**direct_item)
51
- process_search_result(select_title)
52
- return
53
-
54
- if string_to_search is None:
55
- string_to_search = msg.ask(f"\n[purple]Insert word to search in [green]{site_constant.SITE_NAME}").strip()
56
-
57
- # Perform the database search
58
- len_database = title_search(quote_plus(string_to_search))
59
-
60
- # If only the database is needed, return the manager
61
- if get_onlyDatabase:
62
- return media_search_manager
63
-
64
- if len_database > 0:
65
- select_title = get_select_title(table_show_manager, media_search_manager, len_database)
66
- download_title(select_title)
67
-
68
- else:
69
-
70
- # If no results are found, ask again
71
- console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
72
- search()