StreamingCommunity 2.9.9__py3-none-any.whl → 3.0.1__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 (40) hide show
  1. StreamingCommunity/Api/Site/1337xx/__init__.py +1 -2
  2. StreamingCommunity/Api/Site/1337xx/site.py +10 -2
  3. StreamingCommunity/Api/Site/altadefinizione/__init__.py +1 -2
  4. StreamingCommunity/Api/Site/altadefinizione/site.py +6 -1
  5. StreamingCommunity/Api/Site/animeunity/__init__.py +1 -2
  6. StreamingCommunity/Api/Site/animeunity/site.py +63 -35
  7. StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +43 -29
  8. StreamingCommunity/Api/Site/animeworld/__init__.py +1 -2
  9. StreamingCommunity/Api/Site/animeworld/site.py +6 -1
  10. StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +1 -2
  11. StreamingCommunity/Api/Site/ddlstreamitaly/site.py +6 -1
  12. StreamingCommunity/Api/Site/guardaserie/__init__.py +1 -2
  13. StreamingCommunity/Api/Site/guardaserie/site.py +7 -1
  14. StreamingCommunity/Api/Site/raiplay/__init__.py +1 -2
  15. StreamingCommunity/Api/Site/raiplay/film.py +1 -1
  16. StreamingCommunity/Api/Site/raiplay/series.py +1 -1
  17. StreamingCommunity/Api/Site/raiplay/site.py +9 -2
  18. StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py +1 -1
  19. StreamingCommunity/Api/Site/streamingcommunity/__init__.py +1 -2
  20. StreamingCommunity/Api/Site/streamingcommunity/site.py +7 -1
  21. StreamingCommunity/Lib/Downloader/HLS/segments.py +7 -15
  22. StreamingCommunity/Lib/Downloader/TOR/downloader.py +7 -14
  23. StreamingCommunity/Lib/FFmpeg/capture.py +1 -5
  24. StreamingCommunity/Lib/FFmpeg/util.py +48 -40
  25. StreamingCommunity/Lib/M3U8/estimator.py +20 -33
  26. StreamingCommunity/Upload/version.py +1 -1
  27. StreamingCommunity/Util/config_json.py +11 -13
  28. StreamingCommunity/Util/ffmpeg_installer.py +26 -1
  29. StreamingCommunity/Util/os.py +13 -15
  30. StreamingCommunity/global_search.py +1 -4
  31. StreamingCommunity/run.py +1 -4
  32. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/METADATA +1 -1
  33. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/RECORD +37 -40
  34. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/WHEEL +1 -1
  35. StreamingCommunity/Api/Site/cb01new/__init__.py +0 -72
  36. StreamingCommunity/Api/Site/cb01new/film.py +0 -62
  37. StreamingCommunity/Api/Site/cb01new/site.py +0 -75
  38. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/entry_points.txt +0 -0
  39. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/licenses/LICENSE +0 -0
  40. {streamingcommunity-2.9.9.dist-info → streamingcommunity-3.0.1.dist-info}/top_level.txt +0 -0
@@ -132,10 +132,8 @@ def print_duration_table(file_path: str, description: str = "Duration", return_s
132
132
  def get_ffprobe_info(file_path):
133
133
  """
134
134
  Get format and codec information for a media file using ffprobe.
135
-
136
135
  Parameters:
137
136
  - file_path (str): Path to the media file.
138
-
139
137
  Returns:
140
138
  dict: A dictionary containing the format name and a list of codec names.
141
139
  Returns None if file does not exist or ffprobe crashes.
@@ -143,48 +141,58 @@ def get_ffprobe_info(file_path):
143
141
  if not os.path.exists(file_path):
144
142
  logging.error(f"File not found: {file_path}")
145
143
  return None
146
-
144
+
145
+ # Get ffprobe path and verify it exists
146
+ ffprobe_path = get_ffprobe_path()
147
+ if not ffprobe_path or not os.path.exists(ffprobe_path):
148
+ logging.error(f"FFprobe not found at path: {ffprobe_path}")
149
+ return None
150
+
151
+ # Verify file permissions
152
+ try:
153
+ file_stat = os.stat(file_path)
154
+ logging.info(f"File permissions: {oct(file_stat.st_mode)}")
155
+ if not os.access(file_path, os.R_OK):
156
+ logging.error(f"No read permission for file: {file_path}")
157
+ return None
158
+ except OSError as e:
159
+ logging.error(f"Cannot access file {file_path}: {e}")
160
+ return None
161
+
147
162
  try:
148
- # Use subprocess.Popen instead of run to better handle crashes
149
- cmd = [get_ffprobe_path(), '-v', 'error', '-show_format', '-show_streams', '-print_format', 'json', file_path]
150
- logging.info(f"FFmpeg command: {cmd}")
163
+ cmd = [ffprobe_path, '-v', 'error', '-show_format', '-show_streams', '-print_format', 'json', file_path]
164
+ logging.info(f"Running FFprobe command: {' '.join(cmd)}")
151
165
 
152
- with subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) as proc:
153
- stdout, stderr = proc.communicate()
154
-
155
- if proc.returncode != 0:
156
- logging.error(f"FFprobe failed with return code {proc.returncode} for file {file_path}")
157
- if stderr:
158
- logging.error(f"FFprobe stderr: {stderr}")
159
- return {
160
- 'format_name': None,
161
- 'codec_names': []
162
- }
163
-
164
- # Make sure we have valid JSON before parsing
165
- if not stdout or not stdout.strip():
166
- logging.warning(f"FFprobe returned empty output for file {file_path}")
167
- return {
168
- 'format_name': None,
169
- 'codec_names': []
170
- }
171
-
172
- info = json.loads(stdout)
173
-
174
- format_name = info['format']['format_name'] if 'format' in info else None
175
- codec_names = [stream['codec_name'] for stream in info['streams']] if 'streams' in info else []
176
-
166
+ # Use subprocess.run instead of Popen for better error handling
167
+ result = subprocess.run(
168
+ cmd,
169
+ capture_output=True,
170
+ text=True,
171
+ check=False # Don't raise exception on non-zero exit
172
+ )
173
+
174
+ if result.returncode != 0:
175
+ logging.error(f"FFprobe failed with return code {result.returncode}")
176
+ logging.error(f"FFprobe stderr: {result.stderr}")
177
+ logging.error(f"FFprobe stdout: {result.stdout}")
178
+ logging.error(f"Command: {' '.join(cmd)}")
179
+ logging.error(f"FFprobe path permissions: {oct(os.stat(ffprobe_path).st_mode)}")
180
+ return None
181
+
182
+ # Parse JSON output
183
+ try:
184
+ info = json.loads(result.stdout)
177
185
  return {
178
- 'format_name': format_name,
179
- 'codec_names': codec_names
186
+ 'format_name': info.get('format', {}).get('format_name'),
187
+ 'codec_names': [stream.get('codec_name') for stream in info.get('streams', [])]
180
188
  }
181
-
189
+ except json.JSONDecodeError as e:
190
+ logging.error(f"Failed to parse FFprobe output: {e}")
191
+ return None
192
+
182
193
  except Exception as e:
183
- logging.error(f"Failed to get ffprobe info for file {file_path}: {e}")
184
- return {
185
- 'format_name': None,
186
- 'codec_names': []
187
- }
194
+ logging.error(f"FFprobe execution failed: {e}")
195
+ return None
188
196
 
189
197
 
190
198
  def is_png_format_or_codec(file_info):
@@ -255,4 +263,4 @@ def check_duration_v_a(video_path, audio_path, tolerance=1.0):
255
263
  if duration_difference <= tolerance:
256
264
  return True, duration_difference
257
265
  else:
258
- return False, duration_difference
266
+ return False, duration_difference
@@ -1,6 +1,5 @@
1
1
  # 21.04.25
2
2
 
3
- import sys
4
3
  import time
5
4
  import logging
6
5
  import threading
@@ -14,7 +13,6 @@ from tqdm import tqdm
14
13
 
15
14
  # Internal utilities
16
15
  from StreamingCommunity.Util.color import Colors
17
- from StreamingCommunity.Util.config_json import get_use_large_bar
18
16
  from StreamingCommunity.Util.os import internet_manager
19
17
 
20
18
 
@@ -32,14 +30,10 @@ class M3U8_Ts_Estimator:
32
30
  self.lock = threading.Lock()
33
31
  self.speed = {"upload": "N/A", "download": "N/A"}
34
32
  self._running = True
35
-
36
- if get_use_large_bar():
37
- logging.debug("USE_LARGE_BAR is True, starting speed capture thread")
38
- self.speed_thread = threading.Thread(target=self.capture_speed)
39
- self.speed_thread.daemon = True
40
- self.speed_thread.start()
41
- else:
42
- logging.debug("USE_LARGE_BAR is False, speed capture thread not started")
33
+
34
+ self.speed_thread = threading.Thread(target=self.capture_speed)
35
+ self.speed_thread.daemon = True
36
+ self.speed_thread.start()
43
37
 
44
38
  def __del__(self):
45
39
  """Ensure thread is properly stopped when the object is destroyed."""
@@ -133,29 +127,22 @@ class M3U8_Ts_Estimator:
133
127
  with self.segments_instance.active_retries_lock:
134
128
  retry_count = self.segments_instance.active_retries
135
129
 
136
- if get_use_large_bar():
137
- # Get speed data outside of any locks
138
- speed_data = ["N/A", ""]
139
- with self.lock:
140
- download_speed = self.speed['download']
141
-
142
- if download_speed != "N/A":
143
- speed_data = download_speed.split(" ")
144
-
145
- average_internet_speed = speed_data[0] if len(speed_data) >= 1 else "N/A"
146
- average_internet_unit = speed_data[1] if len(speed_data) >= 2 else ""
147
-
148
- progress_str = (
149
- f"{Colors.GREEN}{number_file_total_size} {Colors.RED}{units_file_total_size}"
150
- f"{Colors.WHITE}, {Colors.CYAN}{average_internet_speed} {Colors.RED}{average_internet_unit} "
151
- #f"{Colors.WHITE}, {Colors.GREEN}CRR {Colors.RED}{retry_count} "
152
- )
153
-
154
- else:
155
- progress_str = (
156
- f"{Colors.GREEN}{number_file_total_size} {Colors.RED}{units_file_total_size} "
157
- #f"{Colors.WHITE}, {Colors.GREEN}CRR {Colors.RED}{retry_count} "
158
- )
130
+ # Get speed data outside of any locks
131
+ speed_data = ["N/A", ""]
132
+ with self.lock:
133
+ download_speed = self.speed['download']
134
+
135
+ if download_speed != "N/A":
136
+ speed_data = download_speed.split(" ")
137
+
138
+ average_internet_speed = speed_data[0] if len(speed_data) >= 1 else "N/A"
139
+ average_internet_unit = speed_data[1] if len(speed_data) >= 2 else ""
140
+
141
+ progress_str = (
142
+ f"{Colors.GREEN}{number_file_total_size} {Colors.RED}{units_file_total_size}"
143
+ f"{Colors.WHITE}, {Colors.CYAN}{average_internet_speed} {Colors.RED}{average_internet_unit} "
144
+ #f"{Colors.WHITE}, {Colors.GREEN}CRR {Colors.RED}{retry_count} "
145
+ )
159
146
 
160
147
  progress_counter.set_postfix_str(progress_str)
161
148
 
@@ -1,5 +1,5 @@
1
1
  __title__ = 'StreamingCommunity'
2
- __version__ = '2.9.9'
2
+ __version__ = '3.0.1'
3
3
  __author__ = 'Arrowar'
4
4
  __description__ = 'A command-line program to download film'
5
5
  __copyright__ = 'Copyright 2024'
@@ -12,6 +12,10 @@ from typing import Any, List
12
12
  from rich.console import Console
13
13
 
14
14
 
15
+ # Internal utilities
16
+ from StreamingCommunity.Util.headers import get_userAgent
17
+
18
+
15
19
  # Variable
16
20
  console = Console()
17
21
  download_site_data = True
@@ -134,7 +138,7 @@ class ConfigManager:
134
138
  console.print(f"[bold cyan]Downloading reference configuration:[/bold cyan] [green]{self.reference_config_url}[/green]")
135
139
 
136
140
  try:
137
- response = requests.get(self.reference_config_url, timeout=10)
141
+ response = requests.get(self.reference_config_url, timeout=8, headers={'User-Agent': get_userAgent()})
138
142
 
139
143
  if response.status_code == 200:
140
144
  with open(self.file_path, 'wb') as f:
@@ -156,7 +160,7 @@ class ConfigManager:
156
160
  try:
157
161
  # Download the reference configuration
158
162
  console.print(f"[bold cyan]Validating configuration with GitHub...[/bold cyan]")
159
- response = requests.get(self.reference_config_url, timeout=10)
163
+ response = requests.get(self.reference_config_url, timeout=8, headers={'User-Agent': get_userAgent()})
160
164
 
161
165
  if not response.ok:
162
166
  raise Exception(f"Error downloading reference configuration. Code: {response.status_code}")
@@ -267,13 +271,14 @@ class ConfigManager:
267
271
  headers = {
268
272
  "apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inp2Zm5ncG94d3Jnc3duenl0YWRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDAxNTIxNjMsImV4cCI6MjA1NTcyODE2M30.FNTCCMwi0QaKjOu8gtZsT5yQttUW8QiDDGXmzkn89QE",
269
273
  "Authorization": f"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inp2Zm5ncG94d3Jnc3duenl0YWRoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDAxNTIxNjMsImV4cCI6MjA1NTcyODE2M30.FNTCCMwi0QaKjOu8gtZsT5yQttUW8QiDDGXmzkn89QE",
270
- "Content-Type": "application/json"
274
+ "Content-Type": "application/json",
275
+ "User-Agent": get_userAgent()
271
276
  }
272
277
 
273
278
  try:
274
279
  console.print("[bold cyan]Retrieving site data from API...[/bold cyan]")
275
- response = requests.get("https://zvfngpoxwrgswnzytadh.supabase.co/rest/v1/public", headers=headers, timeout=10)
276
-
280
+ response = requests.get("https://zvfngpoxwrgswnzytadh.supabase.co/rest/v1/public", timeout=8, headers=headers)
281
+
277
282
  if response.ok:
278
283
  data = response.json()
279
284
  if data and len(data) > 0:
@@ -282,13 +287,6 @@ class ConfigManager:
282
287
  site_count = len(self.configSite) if isinstance(self.configSite, dict) else 0
283
288
  console.print(f"[bold green]Site data retrieved:[/bold green] {site_count} streaming services available")
284
289
 
285
- # Show some sites as examples
286
- if site_count > 0:
287
- examples = list(self.configSite.items())[:3]
288
- sites_info = []
289
- for site, info in examples:
290
- url = info.get('full_url', 'N/A')
291
- console.print(f" • [cyan]{site}[/cyan]: {url}")
292
290
  else:
293
291
  console.print("[bold yellow]API returned an empty data set[/bold yellow]")
294
292
  else:
@@ -347,7 +345,7 @@ class ConfigManager:
347
345
  try:
348
346
  logging.info(f"Downloading {filename} from {url}...")
349
347
  console.print(f"[bold cyan]File download:[/bold cyan] {os.path.basename(filename)}")
350
- response = requests.get(url, timeout=10)
348
+ response = requests.get(url, timeout=8, headers={'User-Agent': get_userAgent()})
351
349
 
352
350
  if response.status_code == 200:
353
351
  with open(filename, 'wb') as f:
@@ -238,6 +238,31 @@ class FFMPEGDownloader:
238
238
  Returns:
239
239
  Tuple[Optional[str], Optional[str], Optional[str]]: Paths to ffmpeg, ffprobe, and ffplay executables.
240
240
  """
241
+ if self.os_name == 'linux':
242
+ try:
243
+ # Attempt to install FFmpeg using apt
244
+ console.print("[bold blue]Trying to install FFmpeg using 'sudo apt install ffmpeg'[/]")
245
+ result = subprocess.run(
246
+ ['sudo', 'apt', 'install', '-y', 'ffmpeg'],
247
+ stdout=subprocess.PIPE,
248
+ stderr=subprocess.PIPE,
249
+ text=True
250
+ )
251
+ if result.returncode == 0:
252
+ ffmpeg_path = shutil.which('ffmpeg')
253
+ ffprobe_path = shutil.which('ffprobe')
254
+
255
+ if ffmpeg_path and ffprobe_path:
256
+ console.print("[bold green]FFmpeg successfully installed via apt[/]")
257
+ return ffmpeg_path, ffprobe_path, None
258
+ else:
259
+ console.print("[bold yellow]Failed to install FFmpeg via apt. Proceeding with static download.[/]")
260
+
261
+ except Exception as e:
262
+ logging.error(f"Error during 'sudo apt install ffmpeg': {e}")
263
+ console.print("[bold red]Error during 'sudo apt install ffmpeg'. Proceeding with static download.[/]")
264
+
265
+ # Proceed with static download if apt installation fails or is not applicable
241
266
  config = FFMPEG_CONFIGURATION[self.os_name]
242
267
  executables = [exe.format(arch=self.arch) for exe in config['executables']]
243
268
  successful_extractions = []
@@ -346,4 +371,4 @@ def check_ffmpeg() -> Tuple[Optional[str], Optional[str], Optional[str]]:
346
371
 
347
372
  except Exception as e:
348
373
  logging.error(f"Error checking or downloading FFmpeg executables: {e}")
349
- return None, None, None
374
+ return None, None, None
@@ -4,7 +4,6 @@ import io
4
4
  import os
5
5
  import glob
6
6
  import sys
7
- import time
8
7
  import shutil
9
8
  import hashlib
10
9
  import logging
@@ -13,11 +12,9 @@ import inspect
13
12
  import subprocess
14
13
  import contextlib
15
14
  import importlib.metadata
16
- from pathlib import Path
17
15
 
18
16
 
19
17
  # External library
20
- import httpx
21
18
  from unidecode import unidecode
22
19
  from rich.console import Console
23
20
  from rich.prompt import Prompt
@@ -107,16 +104,14 @@ class OsManager:
107
104
  if not path:
108
105
  return path
109
106
 
110
- # Decode unicode characters
107
+ # Decode unicode characters and perform basic sanitization
111
108
  decoded = unidecode(path)
112
-
113
- # Basic path sanitization
114
109
  sanitized = sanitize_filepath(decoded)
115
110
 
116
111
  if self.system == 'windows':
117
112
  # Handle network paths (UNC or IP-based)
118
- if path.startswith('\\\\') or path.startswith('//'):
119
- parts = path.replace('/', '\\').split('\\')
113
+ if sanitized.startswith('\\\\') or sanitized.startswith('//'):
114
+ parts = sanitized.replace('/', '\\').split('\\')
120
115
  # Keep server/IP and share name as is
121
116
  sanitized_parts = parts[:4]
122
117
  # Sanitize remaining parts
@@ -129,9 +124,9 @@ class OsManager:
129
124
  return '\\'.join(sanitized_parts)
130
125
 
131
126
  # Handle drive letters
132
- elif len(path) >= 2 and path[1] == ':':
133
- drive = path[:2]
134
- rest = path[2:].lstrip('\\').lstrip('/')
127
+ elif len(sanitized) >= 2 and sanitized[1] == ':':
128
+ drive = sanitized[:2]
129
+ rest = sanitized[2:].lstrip('\\').lstrip('/')
135
130
  path_parts = [drive] + [
136
131
  self.get_sanitize_file(part)
137
132
  for part in rest.replace('/', '\\').split('\\')
@@ -141,12 +136,12 @@ class OsManager:
141
136
 
142
137
  # Regular path
143
138
  else:
144
- parts = path.replace('/', '\\').split('\\')
139
+ parts = sanitized.replace('/', '\\').split('\\')
145
140
  return '\\'.join(p for p in parts if p)
146
141
  else:
147
142
  # Handle Unix-like paths (Linux and macOS)
148
- is_absolute = path.startswith('/')
149
- parts = path.replace('\\', '/').split('/')
143
+ is_absolute = sanitized.startswith('/')
144
+ parts = sanitized.replace('\\', '/').split('/')
150
145
  sanitized_parts = [
151
146
  self.get_sanitize_file(part)
152
147
  for part in parts
@@ -357,12 +352,15 @@ class OsSummary:
357
352
  Exits with a message if not the official version.
358
353
  """
359
354
  python_implementation = platform.python_implementation()
355
+ python_version = platform.python_version()
360
356
 
361
357
  if python_implementation != "CPython":
362
358
  console.print(f"[bold red]Warning: You are using a non-official Python distribution: {python_implementation}.[/bold red]")
363
359
  console.print("Please install the official Python from [bold blue]https://www.python.org[/bold blue] and try again.", style="bold yellow")
364
360
  sys.exit(0)
365
361
 
362
+ console.print(f"[cyan]Python version: [bold red]{python_version}[/bold red]")
363
+
366
364
  def get_system_summary(self):
367
365
  self.check_python_version()
368
366
 
@@ -454,4 +452,4 @@ def get_ffmpeg_path():
454
452
 
455
453
  def get_ffprobe_path():
456
454
  """Returns the path of FFprobe."""
457
- return os_summary.ffprobe_path
455
+ return os_summary.ffprobe_path
@@ -57,11 +57,8 @@ def load_search_functions():
57
57
 
58
58
  # Get 'indice' from the module
59
59
  indice = getattr(mod, 'indice', 0)
60
- is_deprecate = bool(getattr(mod, '_deprecate', True))
61
60
  use_for = getattr(mod, '_useFor', 'other')
62
-
63
- if not is_deprecate:
64
- modules.append((module_name, indice, use_for))
61
+ modules.append((module_name, indice, use_for))
65
62
 
66
63
  except Exception as e:
67
64
  console.print(f"[red]Failed to import module {module_name}: {str(e)}")
StreamingCommunity/run.py CHANGED
@@ -90,11 +90,8 @@ def load_search_functions():
90
90
 
91
91
  # Get 'indice' from the module
92
92
  indice = getattr(mod, 'indice', 0)
93
- is_deprecate = bool(getattr(mod, '_deprecate', True))
94
93
  use_for = getattr(mod, '_useFor', 'other')
95
-
96
- if not is_deprecate:
97
- modules.append((module_name, indice, use_for))
94
+ modules.append((module_name, indice, use_for))
98
95
 
99
96
  except Exception as e:
100
97
  console.print(f"[red]Failed to import module {module_name}: {str(e)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: StreamingCommunity
3
- Version: 2.9.9
3
+ Version: 3.0.1
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
@@ -1,6 +1,6 @@
1
1
  StreamingCommunity/__init__.py,sha256=Cw-N0VCg7sef1WqdtvVwrhs1zc4LoUhs5C8k7vpM1lQ,207
2
- StreamingCommunity/global_search.py,sha256=1U74JtXLWDGC_r5KCsQt4kC-XRO76QIWk3QnUz-1AqY,12126
3
- StreamingCommunity/run.py,sha256=G4n1n6BrJv0Y32jCs25LKgUzXaSkFe3F5DaZknnehdA,13212
2
+ StreamingCommunity/global_search.py,sha256=LgRTjVBJYyLiKYa3EIb33vRnVQ-COoQT7gASfVW8-Dg,12022
3
+ StreamingCommunity/run.py,sha256=xBq2GS3JznLZBAF5DnJplNtJBzqOl_zHQXVmXxDMnBs,13108
4
4
  StreamingCommunity/Api/Player/ddl.py,sha256=S3UZFonJl3d3xU1fQrosRFXFhwAm8hGVQ8Ff8g-6xSI,2071
5
5
  StreamingCommunity/Api/Player/maxstream.py,sha256=WXg8xncFXFiaUmTVXxB3NyknQtbvd0sF1eRaoDO24bU,4822
6
6
  StreamingCommunity/Api/Player/mediapolisvod.py,sha256=OcdnE1BMSwPZM-nw74GXNJ44E9RYwGnc_kFEA-G8XyY,2294
@@ -9,44 +9,41 @@ StreamingCommunity/Api/Player/sweetpixel.py,sha256=gJSe1fop5J216CB3u8vstxLPP5Ybc
9
9
  StreamingCommunity/Api/Player/vixcloud.py,sha256=qI9ppYEMGaJ1B5y693BOMeRQri-F4-94SfRkS-9udfM,6287
10
10
  StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py,sha256=U-8QlD5kGzIk3-4t4D6QyYmiDe8UBrSuVi1YHRQb7AU,4295
11
11
  StreamingCommunity/Api/Player/Helper/Vixcloud/util.py,sha256=QLUgbwQrpuPIVNzdBlAiEJXnd-eCj_JQFckZZEEL55w,5214
12
- StreamingCommunity/Api/Site/1337xx/__init__.py,sha256=epPpqKWmrNnPegZhOr23fS4KEKZd68KG0lBjZuG-cGg,2018
13
- StreamingCommunity/Api/Site/1337xx/site.py,sha256=XHG2Ojhmj2eutyWJPIICZkJUSvpa4IEB7xsNs1Dqcfk,2222
12
+ StreamingCommunity/Api/Site/1337xx/__init__.py,sha256=OdQxYoJ9UyGSAutZwqH1FgmOH-Z6vGVHb0CLKhwEZGM,1999
13
+ StreamingCommunity/Api/Site/1337xx/site.py,sha256=9W88ErYQjCUoNAPS7PBie4838Gh1UJBTqQ8uGgS_InI,2344
14
14
  StreamingCommunity/Api/Site/1337xx/title.py,sha256=8T3cVRb-Mt9QdOtKWVVFHz8iOHqspf7iw28E7bfTV78,1865
15
- StreamingCommunity/Api/Site/altadefinizione/__init__.py,sha256=Kk1DRi9zLwGF1bM9WyYTw-t41ZkPbaUdt2Prsr9MeY8,4164
15
+ StreamingCommunity/Api/Site/altadefinizione/__init__.py,sha256=Oxjfyg6VolwV6n2VGgICLvdRVPPMzJXMSdz8oI2Xs0M,4145
16
16
  StreamingCommunity/Api/Site/altadefinizione/film.py,sha256=0XeqMrMHnk5nbFkVTFaNZWtlXI8pETl7dsORDtIMbjg,4395
17
17
  StreamingCommunity/Api/Site/altadefinizione/series.py,sha256=-rCYx-Fa7aZiYepcIne7OdH1aaUFZZAPX-ToBv6mxFs,8192
18
- StreamingCommunity/Api/Site/altadefinizione/site.py,sha256=oO7-6h1jLyFo5BiV8diHR16VtYDCkaKUX_cRrYLZvZo,2799
18
+ StreamingCommunity/Api/Site/altadefinizione/site.py,sha256=S-ucgLNXUYZPjgSNjEYVxlkpMkJyjpr7mYf_jBcYwqM,2860
19
19
  StreamingCommunity/Api/Site/altadefinizione/util/ScrapeSerie.py,sha256=bSApjfY9xd5dw0tZ1t7vB6ifAo5vAkeeEwX6IS7yH1o,3756
20
- StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=usma9w5aMo-glI0osJDcq94Zp0qM2Jpd94rpw4UuBJA,4050
20
+ StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=EayZqxyWltgjRRDNfM32JRzgeyElK85o6s0_YJ0dpBk,4031
21
21
  StreamingCommunity/Api/Site/animeunity/film.py,sha256=Vqg6yag2siR-Y3ougBsV8mzdQXChxg6ghz_KVXFQ3pE,998
22
22
  StreamingCommunity/Api/Site/animeunity/serie.py,sha256=ib86sLXYsYbrvrFNbzKdhlwMUO3DT7JS5yTTrrSr2jk,5711
23
- StreamingCommunity/Api/Site/animeunity/site.py,sha256=2YPoT3aICpIXVSKmtRRTpqmn82lVGDYOxm0GGKd1KuI,4861
24
- StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=1mVRmNQcIp4RpNxh0Iin4l4_t6P5kbPAhGm5SG-UQQw,3188
25
- StreamingCommunity/Api/Site/animeworld/__init__.py,sha256=_0-aGTpjfyVs-5Hvbm9YaXFBEN9OkRP0dzCdCWu4kcg,2809
23
+ StreamingCommunity/Api/Site/animeunity/site.py,sha256=KLBQ08TAMyzsrZ3SAxw8hZefreCtZAuU1KwEbaJnUAE,5646
24
+ StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=Ze6a8D2MRhiOvSw3mTpL3ue2iVc6pA5aqoyUMCTnT7A,3809
25
+ StreamingCommunity/Api/Site/animeworld/__init__.py,sha256=UzHQbfxx_i6qzM586LL940CoiI3Y98IGIVP4-hXUxn4,2790
26
26
  StreamingCommunity/Api/Site/animeworld/film.py,sha256=W9KOS9Wvx3Mlqx5WojR-NgnF9WX8mI79JZPS7UwG-dc,1763
27
27
  StreamingCommunity/Api/Site/animeworld/serie.py,sha256=MXyV1fK05jPW4iV9NWrRKW-R4ect-TSN78-2APayniU,3516
28
- StreamingCommunity/Api/Site/animeworld/site.py,sha256=tmTOsSBlDnCpTqF96dR2rVEfyYJ8gpjjYU_MOFucuLc,3556
28
+ StreamingCommunity/Api/Site/animeworld/site.py,sha256=1Ah4CmKXdqsoCGTbyPRSVJRAxtcW449kpBnPKnzR1K8,3650
29
29
  StreamingCommunity/Api/Site/animeworld/util/ScrapeSerie.py,sha256=CBTCH_wnTXUK_MKwq9a1k_XdvOlUrMpbUmpkD5fXVQ0,3589
30
- StreamingCommunity/Api/Site/cb01new/__init__.py,sha256=1A2UaDkDY42GTJS8h0ASXx5_fyff4-9HvBtfHp3KL2E,2058
31
- StreamingCommunity/Api/Site/cb01new/film.py,sha256=vjd1ftm4LhxxG0TTKEwlOXtx0AYgxBbV5ZlQH8aSxGU,1695
32
- StreamingCommunity/Api/Site/cb01new/site.py,sha256=_JPKP2BMK5SL_QZPtt7mbDdef_t0J7QO7QDKVw6xm-4,2068
33
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py,sha256=YRxyKamo566VyMQVGZV640xzn2D3oG3gTekJZvcIjYo,2160
30
+ StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py,sha256=2FGeGNJ5SHPQzKEEmVMFWft4woGgJ-XLeNxjbSb6L9s,2141
34
31
  StreamingCommunity/Api/Site/ddlstreamitaly/series.py,sha256=F_D_2lwHHWN5hgLs8oUDNCYe-4SEPtWzJoU4yT_Nzfg,3726
35
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py,sha256=t9fR7safcenl_wR46wuZofydKPEfo0z9ZdmwE9nEAPg,2535
32
+ StreamingCommunity/Api/Site/ddlstreamitaly/site.py,sha256=hspimNOnIkLdJMrYLgXHmXepLz_mu8z257camnlGfaI,2596
36
33
  StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py,sha256=tETaN-2GyFBeRsoLnGw3Kz4D4j2TMcnPzGjzlC62w_Y,3655
37
- StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=qz-BcSx_bpSylKY-fJ15X2prqokMmIZLZ_0ZWycYE5Y,2787
34
+ StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=p5hzqshw5hwDl9nJ8FBWbzfPe2j7c5eNYiaftDThGcU,2768
38
35
  StreamingCommunity/Api/Site/guardaserie/series.py,sha256=U9rMZCjRqHLFjo468vikxl-2RqO6DCJjebB-G8Y6LDg,6492
39
- StreamingCommunity/Api/Site/guardaserie/site.py,sha256=L_7GTbPkOLXGugAfUv0QtKdE86bHvuIemq7wikg6UTQ,2233
36
+ StreamingCommunity/Api/Site/guardaserie/site.py,sha256=DrtHD365Ezh3GGcluvTIJxWYSjhaJpiY1w6pg4M1odw,2321
40
37
  StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py,sha256=_aXU-YcUtSwbC2b6QpNnWDZR8m6vp9xzBEx_zdu5tgI,4196
41
- StreamingCommunity/Api/Site/raiplay/__init__.py,sha256=b2wT8il9ez9SjaCfJktzRIxBGBg8rgknKnNDy0wXkA8,3091
42
- StreamingCommunity/Api/Site/raiplay/film.py,sha256=lEsl9QPnqd37V7Zgk0H0dK-_zLs8J-1HtBy8D58lDxU,1981
43
- StreamingCommunity/Api/Site/raiplay/series.py,sha256=XNZTENH1LcI7c7Mwat5LTPUjxKaEmuKSkeH8OGwK34w,6160
44
- StreamingCommunity/Api/Site/raiplay/site.py,sha256=bZMUWfENihmtdz83JxYr08Rkm6B84tQUOoW7qDt4e9k,5079
45
- StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py,sha256=7Tj6wqym24iqtKEoBu84rGepwCdIQnfpY0dyPeKVN-8,5002
46
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=5K0BV2uOff0_ZcJz9MZZvjY1nuTHDCRJiWxaNdwemiY,3815
38
+ StreamingCommunity/Api/Site/raiplay/__init__.py,sha256=xkxVkFsSxA6DHRqPuzQYXnCVNUBhfUG5xxlz6iwf1mw,3132
39
+ StreamingCommunity/Api/Site/raiplay/film.py,sha256=wBv5kQXx7-aCKhAZ5LABZ8zUzu_jPGdXOl9OM2p8dpY,1982
40
+ StreamingCommunity/Api/Site/raiplay/series.py,sha256=uQVbeA_g3Z1Ciqeq99gsY2F8mC5DssH3ueGbCW8gd9Q,6161
41
+ StreamingCommunity/Api/Site/raiplay/site.py,sha256=FtIR_oT-ag1sh5XnaOAhEOE8biHZmXtZnsFAjKszU8U,5154
42
+ StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py,sha256=5F6abToCTtsvW8iIACbChZ0fPlymJiCSF_y8FRsDu7M,5002
43
+ StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=Ej-xZ6x99zeq3p5O7-e_Evi_529x3eq_VryBLejCBiA,3796
47
44
  StreamingCommunity/Api/Site/streamingcommunity/film.py,sha256=TPt0yB1DKShDIz_1OEVG1IolMoAKBOaWIZ8lQF61dfM,2575
48
45
  StreamingCommunity/Api/Site/streamingcommunity/series.py,sha256=jWwgawBovZkL7pafvd55L68AMAy7ZyvCPNZdh72bqq8,8859
49
- StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=IN1QguMznYkEHppvCDOLlcZHGQghWlU0I-xJbV4j2Yo,3041
46
+ StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=nKII_DjKN1ePeYdMn4titYgvPRMbm8PmEXIM6npGkeI,3129
50
47
  StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py,sha256=3sNz9uD-o9xz0dKpSnQsLPC_45v5fnW9Mzas2rQ8-Uc,5579
51
48
  StreamingCommunity/Api/Template/__init__.py,sha256=oyfd_4_g5p5q6mxb_rKwSsudZnTM3W3kg1tLwxg-v-Q,46
52
49
  StreamingCommunity/Api/Template/config_loader.py,sha256=2RT_0mqQmWzXM4rYaqss-yhXztYAcfNkTalFPjzv270,2056
@@ -56,16 +53,16 @@ StreamingCommunity/Api/Template/Util/__init__.py,sha256=ZWQQd6iymNFDol9HaKPhVBoR
56
53
  StreamingCommunity/Api/Template/Util/manage_ep.py,sha256=FYe2DC9SXIXzlRYI7fW4ieBpfrxYzsUgt2C47tYRk7U,9252
57
54
  StreamingCommunity/Lib/Downloader/__init__.py,sha256=JhbBh5hOnSM7VmtkxJ7zZ_FtWEC1JdnKThsSBjLV5FY,140
58
55
  StreamingCommunity/Lib/Downloader/HLS/downloader.py,sha256=wlujaWn5I5KtP0m61iYExtnEhwmsy_jdFqd9cM1A-2E,21588
59
- StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=neyguz95O2TIvqjVAHnfm9tbhNrazdXES-XsuNY2iX4,18380
56
+ StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=Q_YZxkWfUqd6TRkHoYt58Iy-xMWVLH6fCnBnQImQK2I,18059
60
57
  StreamingCommunity/Lib/Downloader/MP4/downloader.py,sha256=L03fpjaJ2pvZ_McaOShv3iCsdbefCGW3WM1QIa2TGJo,7514
61
- StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=8WC4_vXAjqkoWVtXAaA6EOzlA45qBwHr_DCMQO7mYNw,19608
58
+ StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=CrRGdLGI_45AnhtTZm8r7KO7uGmU9k6pywy-qO18LG8,19242
62
59
  StreamingCommunity/Lib/FFmpeg/__init__.py,sha256=6PBsZdE1jrD2EKOVyx3JEHnyDZzVeKlPkH5T0zyfOgU,130
63
- StreamingCommunity/Lib/FFmpeg/capture.py,sha256=73BEpTijksErZOu46iRxwl3idKzZ-sVXXRr4nocIGY0,5168
60
+ StreamingCommunity/Lib/FFmpeg/capture.py,sha256=QZYtuUG3L5_BsHFdzBU-5pZrX1PYxfCTx8bXShGF_bs,5029
64
61
  StreamingCommunity/Lib/FFmpeg/command.py,sha256=ubpffE02nsZM7xch5gbwGlEiUzecpxcFOd63n2cqM1k,10708
65
- StreamingCommunity/Lib/FFmpeg/util.py,sha256=KbYzQ0sKEu8nJQDxU4atBfjt_0407fioAIeiBZyf-EY,8976
62
+ StreamingCommunity/Lib/FFmpeg/util.py,sha256=byM5DzAA-8Ts0FtviEPfbFJKN_PuxVFGjELgD_FEhsk,9287
66
63
  StreamingCommunity/Lib/M3U8/__init__.py,sha256=H_KS2eDd3kVXMziFJnD0FCPvPHEizaqfoA36ElTv_r8,170
67
64
  StreamingCommunity/Lib/M3U8/decryptor.py,sha256=kuxxsd3eN0VGRrMJWXzHo8gCpT0u3fSZs_lwxlE5Fqs,2948
68
- StreamingCommunity/Lib/M3U8/estimator.py,sha256=zI6zGxcjni8m2ACX92xdIUMcsvzih5XZHWLYA1_3Q7o,6558
65
+ StreamingCommunity/Lib/M3U8/estimator.py,sha256=8gwTxJ3poRqZdHUTD9_oqXegiPWSXFuqLmqCZBnXS8A,5893
69
66
  StreamingCommunity/Lib/M3U8/parser.py,sha256=cSjXPOSgTewrfLgREyQ47wzoOeoYo3L4lOfEWZKxad8,22485
70
67
  StreamingCommunity/Lib/M3U8/url_fixer.py,sha256=zldE4yOuNBV6AAvL1KI6p7XdRI_R5YZRscbDgT1564M,1735
71
68
  StreamingCommunity/Lib/TMBD/__init__.py,sha256=XzE42tw3Ws59DD1PF8WmGtZ0D4D7Hk3Af8QthNE-22U,66
@@ -74,18 +71,18 @@ StreamingCommunity/Lib/TMBD/tmdb.py,sha256=byg0EFnlmd9JeLvn1N9K3QkB1KEfeMuFa7OVf
74
71
  StreamingCommunity/TelegramHelp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
75
72
  StreamingCommunity/TelegramHelp/telegram_bot.py,sha256=Qe1__aoK4PpDuing8JtWgdHzLee8LuYYyfeLNA7yADU,26307
76
73
  StreamingCommunity/Upload/update.py,sha256=mJTKUIOhC2j03sWXUK6oAZxHyObNP2r1fl3y0BC2jes,3351
77
- StreamingCommunity/Upload/version.py,sha256=hIxfVUyMRZT4Rei72y8Gxb_eQelKIjd-qiaif3nguAc,171
74
+ StreamingCommunity/Upload/version.py,sha256=19qvo-oaTAFq9_mEO90hzV-55WLMgiz_AJymK2rqe1E,171
78
75
  StreamingCommunity/Util/color.py,sha256=NvD0Eni-25oOOkY-szCEoc0lGvzQxyL7xhM0RE4EvUM,458
79
- StreamingCommunity/Util/config_json.py,sha256=xiE5JNw9HgbBdBqKhlywwWw1EnoyDdG47wcxFDTC8sA,24960
80
- StreamingCommunity/Util/ffmpeg_installer.py,sha256=q5yb_ZXKe9PhcG7JbKLfo1AZa8DNukgHqymPbudDuAY,13585
76
+ StreamingCommunity/Util/config_json.py,sha256=r31BJP67EItcI6GioEX7FJzmzM0mubmZ7M73mvZ9YWo,24801
77
+ StreamingCommunity/Util/ffmpeg_installer.py,sha256=yRVIPwbh05tZ-duZmXkH0qasLNxaQCAT_E4cTP79Z3c,14890
81
78
  StreamingCommunity/Util/headers.py,sha256=TItkaFMx1GqsVNEIS3Tr0BGU5EHyF-HkZVliHORT3P8,308
82
79
  StreamingCommunity/Util/logger.py,sha256=9kGD6GmWj2pM8ADpJc85o7jm8DD0c5Aguqnq-9kmxos,3314
83
80
  StreamingCommunity/Util/message.py,sha256=SJaIPLvWeQqsIODVUKw3TgYRmBChovmlbcF6OUxqMI8,1425
84
- StreamingCommunity/Util/os.py,sha256=MUGJKQbNMWeoUrnJ2Ug3hoyYlrPDqU9BY94UmiUbxfA,14858
81
+ StreamingCommunity/Util/os.py,sha256=0AD2DYoan9dl1ZC1pjDoUM7D8sRa9p81cGdI-lP1OX4,14993
85
82
  StreamingCommunity/Util/table.py,sha256=Nw5PlsvfEIOQZWy5VhsU5OK3heuBXGwsqmLl0k8yQzc,9813
86
- streamingcommunity-2.9.9.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
87
- streamingcommunity-2.9.9.dist-info/METADATA,sha256=h-OgYPUHv0omVOC1eBCAiURr--kmZO4WNgA4QqzjdTc,25012
88
- streamingcommunity-2.9.9.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
89
- streamingcommunity-2.9.9.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
90
- streamingcommunity-2.9.9.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
91
- streamingcommunity-2.9.9.dist-info/RECORD,,
83
+ streamingcommunity-3.0.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
84
+ streamingcommunity-3.0.1.dist-info/METADATA,sha256=1tW1Y50Qcjy5eYGbXcnln1HWIeIgwxbFhz_vJqRe7AA,25012
85
+ streamingcommunity-3.0.1.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
86
+ streamingcommunity-3.0.1.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
87
+ streamingcommunity-3.0.1.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
88
+ streamingcommunity-3.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (78.1.0)
2
+ Generator: setuptools (80.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5