StreamingCommunity 1.9.8__py3-none-any.whl → 2.0.0__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.
- StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +143 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +145 -0
- StreamingCommunity/Api/Player/ddl.py +89 -0
- StreamingCommunity/Api/Player/maxstream.py +151 -0
- StreamingCommunity/Api/Player/supervideo.py +194 -0
- StreamingCommunity/Api/Player/vixcloud.py +273 -0
- StreamingCommunity/Api/Site/1337xx/__init__.py +51 -0
- StreamingCommunity/Api/Site/1337xx/costant.py +15 -0
- StreamingCommunity/Api/Site/1337xx/site.py +86 -0
- StreamingCommunity/Api/Site/1337xx/title.py +66 -0
- StreamingCommunity/Api/Site/altadefinizione/__init__.py +51 -0
- StreamingCommunity/Api/Site/altadefinizione/costant.py +15 -0
- StreamingCommunity/Api/Site/altadefinizione/film.py +74 -0
- StreamingCommunity/Api/Site/altadefinizione/site.py +89 -0
- StreamingCommunity/Api/Site/animeunity/__init__.py +51 -0
- StreamingCommunity/Api/Site/animeunity/costant.py +15 -0
- StreamingCommunity/Api/Site/animeunity/film_serie.py +135 -0
- StreamingCommunity/Api/Site/animeunity/site.py +167 -0
- StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -0
- StreamingCommunity/Api/Site/cb01new/__init__.py +52 -0
- StreamingCommunity/Api/Site/cb01new/costant.py +15 -0
- StreamingCommunity/Api/Site/cb01new/film.py +73 -0
- StreamingCommunity/Api/Site/cb01new/site.py +76 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +58 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +16 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/series.py +146 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py +95 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +85 -0
- StreamingCommunity/Api/Site/guardaserie/__init__.py +53 -0
- StreamingCommunity/Api/Site/guardaserie/costant.py +15 -0
- StreamingCommunity/Api/Site/guardaserie/series.py +199 -0
- StreamingCommunity/Api/Site/guardaserie/site.py +86 -0
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +52 -0
- StreamingCommunity/Api/Site/ilcorsaronero/costant.py +15 -0
- StreamingCommunity/Api/Site/ilcorsaronero/site.py +63 -0
- StreamingCommunity/Api/Site/ilcorsaronero/title.py +46 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +141 -0
- StreamingCommunity/Api/Site/mostraguarda/__init__.py +49 -0
- StreamingCommunity/Api/Site/mostraguarda/costant.py +15 -0
- StreamingCommunity/Api/Site/mostraguarda/film.py +103 -0
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +56 -0
- StreamingCommunity/Api/Site/streamingcommunity/costant.py +15 -0
- StreamingCommunity/Api/Site/streamingcommunity/film.py +75 -0
- StreamingCommunity/Api/Site/streamingcommunity/series.py +206 -0
- StreamingCommunity/Api/Site/streamingcommunity/site.py +138 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +123 -0
- StreamingCommunity/Api/Template/Class/SearchType.py +101 -0
- StreamingCommunity/Api/Template/Util/__init__.py +5 -0
- StreamingCommunity/Api/Template/Util/get_domain.py +173 -0
- StreamingCommunity/Api/Template/Util/manage_ep.py +179 -0
- StreamingCommunity/Api/Template/Util/recall_search.py +37 -0
- StreamingCommunity/Api/Template/__init__.py +3 -0
- StreamingCommunity/Api/Template/site.py +87 -0
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +946 -0
- StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -0
- StreamingCommunity/Lib/Downloader/HLS/segments.py +561 -0
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +155 -0
- StreamingCommunity/Lib/Downloader/TOR/downloader.py +296 -0
- StreamingCommunity/Lib/Downloader/__init__.py +5 -0
- StreamingCommunity/Lib/FFmpeg/__init__.py +4 -0
- StreamingCommunity/Lib/FFmpeg/capture.py +170 -0
- StreamingCommunity/Lib/FFmpeg/command.py +296 -0
- StreamingCommunity/Lib/FFmpeg/util.py +249 -0
- StreamingCommunity/Lib/M3U8/__init__.py +6 -0
- StreamingCommunity/Lib/M3U8/decryptor.py +164 -0
- StreamingCommunity/Lib/M3U8/estimator.py +176 -0
- StreamingCommunity/Lib/M3U8/parser.py +666 -0
- StreamingCommunity/Lib/M3U8/url_fixer.py +52 -0
- StreamingCommunity/Lib/TMBD/__init__.py +2 -0
- StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -0
- StreamingCommunity/Lib/TMBD/tmdb.py +346 -0
- StreamingCommunity/Upload/update.py +68 -0
- StreamingCommunity/Upload/version.py +5 -0
- StreamingCommunity/Util/_jsonConfig.py +204 -0
- StreamingCommunity/Util/call_stack.py +42 -0
- StreamingCommunity/Util/color.py +20 -0
- StreamingCommunity/Util/console.py +12 -0
- StreamingCommunity/Util/ffmpeg_installer.py +311 -0
- StreamingCommunity/Util/headers.py +147 -0
- StreamingCommunity/Util/logger.py +53 -0
- StreamingCommunity/Util/message.py +64 -0
- StreamingCommunity/Util/os.py +554 -0
- StreamingCommunity/Util/table.py +229 -0
- StreamingCommunity/__init__.py +0 -0
- {StreamingCommunity-1.9.8.dist-info → StreamingCommunity-2.0.0.dist-info}/METADATA +69 -43
- StreamingCommunity-2.0.0.dist-info/RECORD +92 -0
- {StreamingCommunity-1.9.8.dist-info → StreamingCommunity-2.0.0.dist-info}/WHEEL +1 -1
- {StreamingCommunity-1.9.8.dist-info → StreamingCommunity-2.0.0.dist-info}/entry_points.txt +0 -1
- StreamingCommunity-1.9.8.dist-info/RECORD +0 -7
- {StreamingCommunity-1.9.8.dist-info → StreamingCommunity-2.0.0.dist-info}/LICENSE +0 -0
- {StreamingCommunity-1.9.8.dist-info → StreamingCommunity-2.0.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# 03.03.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
import logging
|
|
6
|
+
import importlib
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
# External library
|
|
10
|
+
from rich.console import Console
|
|
11
|
+
from rich.table import Table
|
|
12
|
+
from rich.prompt import Prompt
|
|
13
|
+
from rich.style import Style
|
|
14
|
+
from typing import Dict, List, Any
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# Internal utilities
|
|
18
|
+
from .message import start_message
|
|
19
|
+
from .call_stack import get_call_stack
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class TVShowManager:
|
|
23
|
+
def __init__(self):
|
|
24
|
+
"""
|
|
25
|
+
Initialize TVShowManager with provided column information.
|
|
26
|
+
"""
|
|
27
|
+
self.console = Console()
|
|
28
|
+
self.tv_shows: List[Dict[str, Any]] = [] # List to store TV show data as dictionaries
|
|
29
|
+
self.slice_start: int = 0
|
|
30
|
+
self.slice_end: int = 5
|
|
31
|
+
self.step: int = self.slice_end
|
|
32
|
+
self.column_info = []
|
|
33
|
+
|
|
34
|
+
def set_slice_end(self, new_slice: int) -> None:
|
|
35
|
+
"""
|
|
36
|
+
Set the end of the slice for displaying TV shows.
|
|
37
|
+
|
|
38
|
+
Parameters:
|
|
39
|
+
- new_slice (int): The new value for the slice end.
|
|
40
|
+
"""
|
|
41
|
+
self.slice_end = new_slice
|
|
42
|
+
self.step = new_slice
|
|
43
|
+
|
|
44
|
+
def add_column(self, column_info: Dict[str, Dict[str, str]]) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Add column information.
|
|
47
|
+
|
|
48
|
+
Parameters:
|
|
49
|
+
- column_info (Dict[str, Dict[str, str]]): Dictionary containing column names, their colors, and justification.
|
|
50
|
+
"""
|
|
51
|
+
self.column_info = column_info
|
|
52
|
+
|
|
53
|
+
def add_tv_show(self, tv_show: Dict[str, Any]):
|
|
54
|
+
"""
|
|
55
|
+
Add a TV show to the list of TV shows.
|
|
56
|
+
|
|
57
|
+
Parameters:
|
|
58
|
+
- tv_show (Dict[str, Any]): Dictionary containing TV show details.
|
|
59
|
+
"""
|
|
60
|
+
self.tv_shows.append(tv_show)
|
|
61
|
+
|
|
62
|
+
def display_data(self, data_slice: List[Dict[str, Any]]):
|
|
63
|
+
"""
|
|
64
|
+
Display TV show data in a tabular format.
|
|
65
|
+
|
|
66
|
+
Parameters:
|
|
67
|
+
- data_slice (List[Dict[str, Any]]): List of dictionaries containing TV show details to display.
|
|
68
|
+
"""
|
|
69
|
+
table = Table(border_style="white")
|
|
70
|
+
|
|
71
|
+
# Add columns dynamically based on provided column information
|
|
72
|
+
for col_name, col_style in self.column_info.items():
|
|
73
|
+
color = col_style.get("color", None)
|
|
74
|
+
if color:
|
|
75
|
+
style = Style(color=color)
|
|
76
|
+
else:
|
|
77
|
+
style = None
|
|
78
|
+
table.add_column(col_name, style=style, justify='center')
|
|
79
|
+
|
|
80
|
+
# Add rows dynamically based on available TV show data
|
|
81
|
+
for entry in data_slice:
|
|
82
|
+
# Create row data while handling missing keys
|
|
83
|
+
row_data = [entry.get(col_name, '') for col_name in self.column_info.keys()]
|
|
84
|
+
table.add_row(*row_data)
|
|
85
|
+
|
|
86
|
+
self.console.print(table)
|
|
87
|
+
|
|
88
|
+
def run_back_command(self, research_func: dict):
|
|
89
|
+
"""
|
|
90
|
+
Executes a back-end search command by dynamically importing a module and invoking its search function.
|
|
91
|
+
|
|
92
|
+
Args:
|
|
93
|
+
research_func (dict): A dictionary containing:
|
|
94
|
+
- 'folder' (str): The absolute path to the directory containing the module to be executed.
|
|
95
|
+
"""
|
|
96
|
+
try:
|
|
97
|
+
|
|
98
|
+
# Get site name from folder
|
|
99
|
+
site_name = (os.path.basename(research_func['folder']))
|
|
100
|
+
|
|
101
|
+
# Find the project root directory
|
|
102
|
+
current_path = research_func['folder']
|
|
103
|
+
while not os.path.exists(os.path.join(current_path, 'StreamingCommunity')):
|
|
104
|
+
current_path = os.path.dirname(current_path)
|
|
105
|
+
|
|
106
|
+
# Add project root to Python path
|
|
107
|
+
project_root = current_path
|
|
108
|
+
#print(f"[DEBUG] Project Root: {project_root}")
|
|
109
|
+
|
|
110
|
+
if project_root not in sys.path:
|
|
111
|
+
sys.path.insert(0, project_root)
|
|
112
|
+
|
|
113
|
+
# Import using full absolute import
|
|
114
|
+
module_path = f'StreamingCommunity.Api.Site.{site_name}'
|
|
115
|
+
#print(f"[DEBUG] Importing module: {module_path}")
|
|
116
|
+
|
|
117
|
+
# Import the module
|
|
118
|
+
module = importlib.import_module(module_path)
|
|
119
|
+
|
|
120
|
+
# Get the search function
|
|
121
|
+
search_func = getattr(module, 'search')
|
|
122
|
+
|
|
123
|
+
# Call the search function with the search string
|
|
124
|
+
search_func(None)
|
|
125
|
+
|
|
126
|
+
except Exception as e:
|
|
127
|
+
self.console.print(f"[red]Error during search: {e}")
|
|
128
|
+
|
|
129
|
+
# Print detailed traceback
|
|
130
|
+
import traceback
|
|
131
|
+
traceback.print_exc()
|
|
132
|
+
|
|
133
|
+
# Optionally remove the path if you want to clean up
|
|
134
|
+
if project_root in sys.path:
|
|
135
|
+
sys.path.remove(project_root)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def run(self, force_int_input: bool = False, max_int_input: int = 0) -> str:
|
|
139
|
+
"""
|
|
140
|
+
Run the TV show manager application.
|
|
141
|
+
|
|
142
|
+
Parameters:
|
|
143
|
+
- force_int_input(bool): If True, only accept integer inputs from 0 to max_int_input
|
|
144
|
+
- max_int_input (int): range of row to show
|
|
145
|
+
|
|
146
|
+
Returns:
|
|
147
|
+
str: Last command executed before breaking out of the loop.
|
|
148
|
+
"""
|
|
149
|
+
total_items = len(self.tv_shows)
|
|
150
|
+
last_command = "" # Variable to store the last command executed
|
|
151
|
+
|
|
152
|
+
while True:
|
|
153
|
+
start_message()
|
|
154
|
+
|
|
155
|
+
# Display table
|
|
156
|
+
self.display_data(self.tv_shows[self.slice_start:self.slice_end])
|
|
157
|
+
|
|
158
|
+
# Find research function from call stack
|
|
159
|
+
research_func = None
|
|
160
|
+
for reverse_fun in get_call_stack():
|
|
161
|
+
if reverse_fun['function'] == 'search' and reverse_fun['script'] == '__init__.py':
|
|
162
|
+
research_func = reverse_fun
|
|
163
|
+
logging.info(f"Found research_func: {research_func}")
|
|
164
|
+
|
|
165
|
+
# Handling user input for loading more items or quitting
|
|
166
|
+
if self.slice_end < total_items:
|
|
167
|
+
self.console.print(f"\n[green]Press [red]Enter [green]for next page, [red]'q' [green]to quit, or [red]'back' [green]to search.")
|
|
168
|
+
|
|
169
|
+
if not force_int_input:
|
|
170
|
+
key = Prompt.ask(
|
|
171
|
+
"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
172
|
+
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end"
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
else:
|
|
176
|
+
choices = [str(i) for i in range(0, max_int_input)]
|
|
177
|
+
choices.extend(["q", "", "back"])
|
|
178
|
+
|
|
179
|
+
key = Prompt.ask("[cyan]Insert media [red]index", choices=choices, show_choices=False)
|
|
180
|
+
last_command = key
|
|
181
|
+
|
|
182
|
+
if key.lower() == "q":
|
|
183
|
+
break
|
|
184
|
+
|
|
185
|
+
elif key == "":
|
|
186
|
+
self.slice_start += self.step
|
|
187
|
+
self.slice_end += self.step
|
|
188
|
+
if self.slice_end > total_items:
|
|
189
|
+
self.slice_end = total_items
|
|
190
|
+
|
|
191
|
+
elif key.lower() == "back" and research_func:
|
|
192
|
+
self.run_back_command(research_func)
|
|
193
|
+
|
|
194
|
+
else:
|
|
195
|
+
break
|
|
196
|
+
|
|
197
|
+
else:
|
|
198
|
+
# Last slice, ensure all remaining items are shown
|
|
199
|
+
self.console.print(f"\n [green]You've reached the end. [red]Enter [green]for first page, [red]'q' [green]to quit, or [red]'back' [green]to search.")
|
|
200
|
+
if not force_int_input:
|
|
201
|
+
key = Prompt.ask(
|
|
202
|
+
"\n[cyan]Insert media index [yellow](e.g., 1), [red]* [cyan]to download all media, "
|
|
203
|
+
"[yellow](e.g., 1-2) [cyan]for a range of media, or [yellow](e.g., 3-*) [cyan]to download from a specific index to the end"
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
else:
|
|
207
|
+
choices = [str(i) for i in range(0, max_int_input)]
|
|
208
|
+
choices.extend(["q", "", "back"])
|
|
209
|
+
|
|
210
|
+
key = Prompt.ask("[cyan]Insert media [red]index", choices=choices, show_choices=False)
|
|
211
|
+
last_command = key
|
|
212
|
+
|
|
213
|
+
if key.lower() == "q":
|
|
214
|
+
break
|
|
215
|
+
|
|
216
|
+
elif key == "":
|
|
217
|
+
self.slice_start = 0
|
|
218
|
+
self.slice_end = self.step
|
|
219
|
+
|
|
220
|
+
elif key.lower() == "back" and research_func:
|
|
221
|
+
self.run_back_command(research_func)
|
|
222
|
+
|
|
223
|
+
else:
|
|
224
|
+
break
|
|
225
|
+
|
|
226
|
+
return last_command
|
|
227
|
+
|
|
228
|
+
def clear(self):
|
|
229
|
+
self.tv_shows = []
|
|
File without changes
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: StreamingCommunity
|
|
3
|
-
Version:
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: A streaming community package
|
|
5
5
|
Home-page: https://github.com/Lovi-0/StreamingCommunity
|
|
6
6
|
Author: Lovi-0
|
|
7
|
-
License: UNKNOWN
|
|
8
7
|
Project-URL: Bug Reports, https://github.com/Lovi-0/StreamingCommunity/issues
|
|
9
8
|
Project-URL: Source, https://github.com/Lovi-0/StreamingCommunity
|
|
10
|
-
Keywords:
|
|
11
|
-
Platform: UNKNOWN
|
|
9
|
+
Keywords: Streaming Community
|
|
12
10
|
Requires-Python: >=3.8
|
|
13
11
|
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
14
13
|
Requires-Dist: httpx
|
|
15
14
|
Requires-Dist: cffi
|
|
16
15
|
Requires-Dist: bs4
|
|
@@ -27,38 +26,67 @@ Requires-Dist: qbittorrent-api
|
|
|
27
26
|
Requires-Dist: python-qbittorrent
|
|
28
27
|
Requires-Dist: googlesearch-python
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
29
|
+
<p align="center">
|
|
30
|
+
<img src="https://i.ibb.co/PFnjvBc/immagine-2024-12-26-180318047.png" alt="Project Logo" width="700"/>
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<p align="center">
|
|
34
|
+
<a href="https://pypi.org/project/streamingcommunity">
|
|
35
|
+
<img src="https://img.shields.io/pypi/v/streamingcommunity?logo=pypi&labelColor=555555&style=for-the-badge" alt="PyPI"/>
|
|
36
|
+
</a>
|
|
37
|
+
<a href="https://www.python.org">
|
|
38
|
+
<img src="https://img.shields.io/badge/Python->=3.8-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python"/>
|
|
39
|
+
</a>
|
|
40
|
+
<a href="https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C">
|
|
41
|
+
<img src="https://img.shields.io/badge/_-Donate-red.svg?logo=githubsponsors&labelColor=555555&style=for-the-badge" alt="Donate"/>
|
|
42
|
+
</a>
|
|
43
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/blob/main/LICENSE">
|
|
44
|
+
<img src="https://img.shields.io/badge/License-GPL_3.0-blue.svg?style=for-the-badge" alt="License"/>
|
|
45
|
+
</a>
|
|
46
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/commits">
|
|
47
|
+
<img src="https://img.shields.io/github/commit-activity/m/Lovi-0/StreamingCommunity?label=commits&style=for-the-badge" alt="Commits"/>
|
|
48
|
+
</a>
|
|
49
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/commits">
|
|
50
|
+
<img src="https://img.shields.io/github/last-commit/Lovi-0/StreamingCommunity/main?label=&style=for-the-badge&display_timestamp=committer" alt="Last Commit"/>
|
|
51
|
+
</a>
|
|
52
|
+
</p>
|
|
53
|
+
|
|
54
|
+
<p align="center">
|
|
55
|
+
<a href="https://pypi.org/project/streamingcommunity">
|
|
56
|
+
<img src="https://img.shields.io/pypi/dm/streamingcommunity?style=for-the-badge" alt="PyPI Downloads"/>
|
|
57
|
+
</a>
|
|
58
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/network/members">
|
|
59
|
+
<img src="https://img.shields.io/github/forks/Lovi-0/StreamingCommunity?style=for-the-badge" alt="Forks"/>
|
|
60
|
+
</a>
|
|
61
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity">
|
|
62
|
+
<img src="https://img.shields.io/github/languages/code-size/Lovi-0/StreamingCommunity?style=for-the-badge" alt="Code Size"/>
|
|
63
|
+
</a>
|
|
64
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity">
|
|
65
|
+
<img src="https://img.shields.io/github/repo-size/Lovi-0/StreamingCommunity?style=for-the-badge" alt="Repo Size"/>
|
|
66
|
+
</a>
|
|
67
|
+
</p>
|
|
39
68
|
|
|
40
69
|
# 📋 Table of Contents
|
|
41
70
|
|
|
42
|
-
- [Website available](#website-status)
|
|
43
|
-
- [Installation](#installation)
|
|
44
|
-
- [PyPI Installation](#1-pypi-installation)
|
|
45
|
-
- [Automatic Installation](#2-automatic-installation)
|
|
46
|
-
- [Manual Installation](#3-manual-installation)
|
|
47
|
-
- [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7)
|
|
48
|
-
- [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux)
|
|
49
|
-
- [Configuration](#configuration)
|
|
50
|
-
- [Default](#default-settings)
|
|
51
|
-
- [Request](#requests-settings)
|
|
52
|
-
- [Download](#m3u8_download-settings)
|
|
53
|
-
- [Parser](#m3u8_parser-settings)
|
|
54
|
-
- [Docker](#docker)
|
|
55
|
-
- [Tutorial](#tutorials)
|
|
56
|
-
- [To
|
|
57
|
-
- [Support](#support)
|
|
58
|
-
- [Contribute](#contributing)
|
|
59
|
-
- [
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
- 🌐 [Website available](#website-status)
|
|
72
|
+
- 🛠️ [Installation](#installation)
|
|
73
|
+
- 📦 [PyPI Installation](#1-pypi-installation)
|
|
74
|
+
- 🔄 [Automatic Installation](#2-automatic-installation)
|
|
75
|
+
- 📝 [Manual Installation](#3-manual-installation)
|
|
76
|
+
- 💻 [Win 7](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Installation#win-7)
|
|
77
|
+
- 📱 [Termux](https://github.com/Ghost6446/StreamingCommunity_api/wiki/Termux)
|
|
78
|
+
- ⚙️ [Configuration](#configuration)
|
|
79
|
+
- 🔧 [Default](#default-settings)
|
|
80
|
+
- 📩 [Request](#requests-settings)
|
|
81
|
+
- 📥 [Download](#m3u8_download-settings)
|
|
82
|
+
- 🔍 [Parser](#m3u8_parser-settings)
|
|
83
|
+
- 🐳 [Docker](#docker)
|
|
84
|
+
- 🎓 [Tutorial](#tutorials)
|
|
85
|
+
- 📝 [To do](#to-do)
|
|
86
|
+
- 💬 [Support](#support)
|
|
87
|
+
- 🤝 [Contribute](#contributing)
|
|
88
|
+
- ⚠️ [Disclaimer](#disclaimer)
|
|
89
|
+
- ⚡ [Contributors](#contributors)
|
|
62
90
|
|
|
63
91
|
# Installation
|
|
64
92
|
|
|
@@ -112,13 +140,13 @@ pip install --upgrade StreamingCommunity
|
|
|
112
140
|
#### On Windows:
|
|
113
141
|
|
|
114
142
|
```powershell
|
|
115
|
-
.\win_install.bat
|
|
143
|
+
.\Installer\win_install.bat
|
|
116
144
|
```
|
|
117
145
|
|
|
118
146
|
#### On Linux/MacOS/BSD:
|
|
119
147
|
|
|
120
148
|
```bash
|
|
121
|
-
sudo chmod +x unix_install.sh && ./unix_install.sh
|
|
149
|
+
sudo chmod +x Installer/unix_install.sh && ./Installer/unix_install.sh
|
|
122
150
|
```
|
|
123
151
|
|
|
124
152
|
### Usage
|
|
@@ -227,7 +255,7 @@ The configuration file is divided into several main sections:
|
|
|
227
255
|
* `%(episode)` : Is the number of the episode
|
|
228
256
|
* `%(episode_name)` : Is the name of the episode
|
|
229
257
|
`<br/><br/>`
|
|
230
|
-
|
|
258
|
+
|
|
231
259
|
- `not_close`: If true, continues running after downloading
|
|
232
260
|
|
|
233
261
|
### qBittorrent Configuration
|
|
@@ -407,12 +435,6 @@ The `run-container` command mounts also the `config.json` file, so any change to
|
|
|
407
435
|
|
|
408
436
|
- Create website API -> https://github.com/Lovi-0/StreamingCommunity/tree/test_gui_1
|
|
409
437
|
|
|
410
|
-
# Support
|
|
411
|
-
|
|
412
|
-
If you'd like to support this project, consider making a donation!
|
|
413
|
-
|
|
414
|
-
[](https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C)
|
|
415
|
-
|
|
416
438
|
# Contributing
|
|
417
439
|
|
|
418
440
|
Contributions are welcome! Steps:
|
|
@@ -427,4 +449,8 @@ Contributions are welcome! Steps:
|
|
|
427
449
|
|
|
428
450
|
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.
|
|
429
451
|
|
|
452
|
+
## Contributors
|
|
430
453
|
|
|
454
|
+
<a href="https://github.com/Lovi-0/StreamingCommunity/graphs/contributors" alt="View Contributors">
|
|
455
|
+
<img src="https://contrib.rocks/image?repo=Lovi-0/StreamingCommunity&max=1000&columns=10" alt="Contributors" />
|
|
456
|
+
</a>
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
StreamingCommunity/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
+
StreamingCommunity/run.py,sha256=8juF-UPFnzzs0AqJkF_FF10PkYisbqc70xypln1aMRc,6435
|
|
3
|
+
StreamingCommunity/Api/Player/ddl.py,sha256=cRPb3sfX5o_rkJ33qe7rDGmlgRgYMr0LTmdZLCsbO90,2409
|
|
4
|
+
StreamingCommunity/Api/Player/maxstream.py,sha256=0NwzyTFrIWC21xZytmg4Pl_ShAPfqIOXNU6XpEy9KuY,5304
|
|
5
|
+
StreamingCommunity/Api/Player/supervideo.py,sha256=gNoAo_LVZWycfIzmK28erWRTXwNDV6FKJSLJ2Lrw_Ok,6118
|
|
6
|
+
StreamingCommunity/Api/Player/vixcloud.py,sha256=pTl60wxSQmyCWjhv1RfHST_hacnwT3N9WnYnUJwKank,9498
|
|
7
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py,sha256=HniFPpcF1qtMAT8z5bf4noHJO85x8wRke6KUxB5r-F0,4438
|
|
8
|
+
StreamingCommunity/Api/Player/Helper/Vixcloud/util.py,sha256=4DomUZ6qg_GGCIfQ38-CKrO24zyzm8voJgv8OiMxDbw,5257
|
|
9
|
+
StreamingCommunity/Api/Site/1337xx/__init__.py,sha256=tNVEjRSnXOeWcJTF5c840YFBTiOgSXD0GaM-VsxOGT8,1217
|
|
10
|
+
StreamingCommunity/Api/Site/1337xx/costant.py,sha256=3jDI0qlysmtfiZIAciNA-pBLSza5GBYKZlONyMpb-FI,451
|
|
11
|
+
StreamingCommunity/Api/Site/1337xx/site.py,sha256=Cn6DC5Od89f8xj22x2NPUgAPlBmWEgXG5J3Aa810Pok,2689
|
|
12
|
+
StreamingCommunity/Api/Site/1337xx/title.py,sha256=lGJCxmlWvSWtxn69ClOCA4e_zbtHk_otHV7DiSaKcLo,1980
|
|
13
|
+
StreamingCommunity/Api/Site/altadefinizione/__init__.py,sha256=FHR7TlsM5LXQkESeM54gfNXSsv1wKZVKilqRlp49pgo,1208
|
|
14
|
+
StreamingCommunity/Api/Site/altadefinizione/costant.py,sha256=bxFBx_dljZM8x4nxig8pg35ylDQnR4NNr2SV3_S7Lg0,451
|
|
15
|
+
StreamingCommunity/Api/Site/altadefinizione/film.py,sha256=aKVnn-7xdxnWJZvkDZwbxVXP-vmZ4RN3jIIBivEAcY0,2253
|
|
16
|
+
StreamingCommunity/Api/Site/altadefinizione/site.py,sha256=JqNiP4Rqmn7zLALKBIAv0U_KY6uLYvGgg4_6Dw77SKU,2883
|
|
17
|
+
StreamingCommunity/Api/Site/animeunity/__init__.py,sha256=3RUvqPerfHYdCX1F1nokjCrSs6BHzj4lCd5y5ZlCbB4,1298
|
|
18
|
+
StreamingCommunity/Api/Site/animeunity/costant.py,sha256=bxFBx_dljZM8x4nxig8pg35ylDQnR4NNr2SV3_S7Lg0,451
|
|
19
|
+
StreamingCommunity/Api/Site/animeunity/film_serie.py,sha256=clYVjrZRKjWRnJCAvsLEEAfKMtPN9s7pgCgAx64eJuU,4162
|
|
20
|
+
StreamingCommunity/Api/Site/animeunity/site.py,sha256=WYfPtlaInQuV98Vc7CEFeRSri3EduC9ix6niVXJTnw4,5306
|
|
21
|
+
StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py,sha256=Gv0xvTJMHru3YExAqQ-ZFfwIxs_227mB3d0JpsI3oAY,2983
|
|
22
|
+
StreamingCommunity/Api/Site/cb01new/__init__.py,sha256=A8M8LIcPXdzwaPOARY4LaKlYGlEA_a7OxLYzFzWH7BI,1228
|
|
23
|
+
StreamingCommunity/Api/Site/cb01new/costant.py,sha256=EcUm_oH28CGbi5Dm2sBBAHJ1ywzn6R6mwk-Rx8mj7aQ,453
|
|
24
|
+
StreamingCommunity/Api/Site/cb01new/film.py,sha256=uc_SCS645rtwyYCofnzMj7_xc5tna1R4-hHdFHmo9T8,2268
|
|
25
|
+
StreamingCommunity/Api/Site/cb01new/site.py,sha256=dDv9P9GWtL07eygwndrPsPVmPd0kueeAn2vLPw4vHCc,2153
|
|
26
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py,sha256=U0mFvhAr9bDt3v_qFOyUC-LC1nsMTQMLvEc4GRrNnQk,1454
|
|
27
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/costant.py,sha256=r-rc_9dIFkfFZwJmY3noG1LgkKgHDxEEzQY-8aWj3dI,515
|
|
28
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/series.py,sha256=m-H_CtHIlN_3KPv5d7kgm2au_lZAni8eXuA1-0O5LIo,4263
|
|
29
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/site.py,sha256=0UfXLlABh7-ejU2cRTVsWPAPLaARbF6xu1PV4kyZvG4,2903
|
|
30
|
+
StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py,sha256=f7uA3VTANmWnLvYhjxMjzKRxU6FTgH2H8MSntWgc8jw,2652
|
|
31
|
+
StreamingCommunity/Api/Site/guardaserie/__init__.py,sha256=UaTo1uXMgL8lVb72PoD4VtecQlqpC-PNPUEIBH756bE,1301
|
|
32
|
+
StreamingCommunity/Api/Site/guardaserie/costant.py,sha256=OOxqZVqlZ9XcdrOLLOz4U7MA2SrRbZ_qvvlGpuQzczo,453
|
|
33
|
+
StreamingCommunity/Api/Site/guardaserie/series.py,sha256=3pXkwbponT6sS2vDVD2QvEk7jhYHoalR80jcpx-hRZE,6873
|
|
34
|
+
StreamingCommunity/Api/Site/guardaserie/site.py,sha256=2f_Q3D25bf0vNAx0XgPRTcay0QeWOm8espzDo9Lp3EA,2632
|
|
35
|
+
StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py,sha256=Os4lKYQB8PT1b-jzozRIpdovGh4gUQuXrPEHyLriYio,3399
|
|
36
|
+
StreamingCommunity/Api/Site/ilcorsaronero/__init__.py,sha256=E75cZUptIDjf1GR-dUY62v6qrTGuBa-r8EACUhVf1Tc,1246
|
|
37
|
+
StreamingCommunity/Api/Site/ilcorsaronero/costant.py,sha256=3jDI0qlysmtfiZIAciNA-pBLSza5GBYKZlONyMpb-FI,451
|
|
38
|
+
StreamingCommunity/Api/Site/ilcorsaronero/site.py,sha256=dkNOUZanaPtQJIrOskzOC4cEOHFG3gnwH5RFYaw_ERU,1812
|
|
39
|
+
StreamingCommunity/Api/Site/ilcorsaronero/title.py,sha256=5cPMiBWoZPUerS2aI_6qO14hA14ztW-cWkaIInUYBlI,1377
|
|
40
|
+
StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py,sha256=vMYSoa5bn5dIfsjMkb6_0fNf8fOu-7f2wJ9j9alzzFY,4791
|
|
41
|
+
StreamingCommunity/Api/Site/mostraguarda/__init__.py,sha256=G6Ozksp8CGTHKy1LsdYJAxX9prnH3CPU_68xJHhRLDo,1175
|
|
42
|
+
StreamingCommunity/Api/Site/mostraguarda/costant.py,sha256=bxFBx_dljZM8x4nxig8pg35ylDQnR4NNr2SV3_S7Lg0,451
|
|
43
|
+
StreamingCommunity/Api/Site/mostraguarda/film.py,sha256=21U1FvttpcYdIzPPY0kKPIgPe0z0IkGvU-wB11Dp7hQ,3081
|
|
44
|
+
StreamingCommunity/Api/Site/streamingcommunity/__init__.py,sha256=KsgVib2AOW-afAMFmSgZQUUhjdpawq2kdDxhQ0_enrU,1485
|
|
45
|
+
StreamingCommunity/Api/Site/streamingcommunity/costant.py,sha256=XEksndtxSC8As-r15f0hRuFAum-CjseegrVjFYOc_XY,436
|
|
46
|
+
StreamingCommunity/Api/Site/streamingcommunity/film.py,sha256=f_jfKDVHr0o_-X7XEglUG0hW3U5RCtjzZcIh98S8TKs,2340
|
|
47
|
+
StreamingCommunity/Api/Site/streamingcommunity/series.py,sha256=xLdoAr6qH9PMnPFEx1upCwvw7szxeFYIUD2tZvwpvE0,7389
|
|
48
|
+
StreamingCommunity/Api/Site/streamingcommunity/site.py,sha256=6nW5USa6X5xiZvEHMRKipjZzsV__f8iV1Hx8dqEW2w0,3902
|
|
49
|
+
StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py,sha256=sNK61c1V6ULTk2kJFBOq3q_jzv281gfE52cjh7Oufsg,4313
|
|
50
|
+
StreamingCommunity/Api/Template/__init__.py,sha256=lhVpudlILM1L9iBZ_7vfYwgKyrdR1OWeLvk364-fJpU,48
|
|
51
|
+
StreamingCommunity/Api/Template/site.py,sha256=Xk_XpZ97xDUhGeiwo-52b7h1kOVsRQVdCqoXcMs2zHk,2995
|
|
52
|
+
StreamingCommunity/Api/Template/Class/SearchType.py,sha256=lJ054oi7baFU8HoXzq_mO4foRz0wtF9GIGOOFS8VpmY,2632
|
|
53
|
+
StreamingCommunity/Api/Template/Util/__init__.py,sha256=e-206LT2iAnL9I21fR_1FRm8F3WsbBRrUmraPP2Xfzo,202
|
|
54
|
+
StreamingCommunity/Api/Template/Util/get_domain.py,sha256=AiLqXWF3RAgkwEZ663QD2ReH0afhuOHCs7fir6Rwgg4,6396
|
|
55
|
+
StreamingCommunity/Api/Template/Util/manage_ep.py,sha256=TkeRH8120Bsu7gTOJb2GRdZI6LZmgYCD60tQVruwkvI,6697
|
|
56
|
+
StreamingCommunity/Api/Template/Util/recall_search.py,sha256=N-h00R2S8rQud3mNtUmaakK_8d9e5YxgHv4QwcJ4aZw,1184
|
|
57
|
+
StreamingCommunity/Lib/Downloader/__init__.py,sha256=vAn-rpmlSmojvz4Quv47A5HLq4yBR_7noy4r6hqk0OQ,144
|
|
58
|
+
StreamingCommunity/Lib/Downloader/HLS/downloader.py,sha256=pPgoohAhfxs0HBqtudBRmgGSlUMn6MwDE1kjT4vZ--I,39558
|
|
59
|
+
StreamingCommunity/Lib/Downloader/HLS/proxyes.py,sha256=Mrs5Mr6ATv-6BUS7CLcZjw3JNH7g_XOz7boeB1oQAQ8,3385
|
|
60
|
+
StreamingCommunity/Lib/Downloader/HLS/segments.py,sha256=cs81AgyowaAKDbN9Kz1jdCXpr0It5SeaKQeRbE0nwOM,22415
|
|
61
|
+
StreamingCommunity/Lib/Downloader/MP4/downloader.py,sha256=gWhNHhL5f3bXAGUaOlH2wCwda0sKi-R9s6PxOIp7LrU,6028
|
|
62
|
+
StreamingCommunity/Lib/Downloader/TOR/downloader.py,sha256=67RDi3Er5xpoHFIn11sGcCB1xgIEGE-Nhn9wqDfmGak,11617
|
|
63
|
+
StreamingCommunity/Lib/FFmpeg/__init__.py,sha256=0KehwaTYL72PJaJJo2fzveGgc9F2-abIk7w6gXsfX1w,135
|
|
64
|
+
StreamingCommunity/Lib/FFmpeg/capture.py,sha256=pgYsJGnC90dNZm6bBgdlXGhkJWDS-aDvZNzbP8hCJYY,5623
|
|
65
|
+
StreamingCommunity/Lib/FFmpeg/command.py,sha256=EfI3Q4tQkV7XmKWx0eBDnuIhn0O_lfPiAiI5IET3nLk,10289
|
|
66
|
+
StreamingCommunity/Lib/FFmpeg/util.py,sha256=trIi1un5lpYdIewD1eXddgNU8f65FwwltFP2s0D4xkI,8340
|
|
67
|
+
StreamingCommunity/Lib/M3U8/__init__.py,sha256=sD2VIslF43OrudA1r-9xkSfUvSblr1LOZpaIM89F6M4,175
|
|
68
|
+
StreamingCommunity/Lib/M3U8/decryptor.py,sha256=sm-kG-3zzOIqrPMNiID68bepoWKQ1F9gbKdiCmxjdP0,6475
|
|
69
|
+
StreamingCommunity/Lib/M3U8/estimator.py,sha256=aaOLtrTtFwGEVxu76DPy4ACJ4kSBUJqc9sH-N6Ch2wc,6655
|
|
70
|
+
StreamingCommunity/Lib/M3U8/parser.py,sha256=xmyCU4AYGIOUheTZ4OBPmQl_R4dJ3Y72i9UUa6_aErA,23553
|
|
71
|
+
StreamingCommunity/Lib/M3U8/url_fixer.py,sha256=6NVKhc8R5CqarDM5TLWy6QU05qXPouW31gyilQszwbI,1675
|
|
72
|
+
StreamingCommunity/Lib/TMBD/__init__.py,sha256=b3yUqfeBFpnKH-MScrZ3r90cpXc2ufCC-El3whK1zk8,55
|
|
73
|
+
StreamingCommunity/Lib/TMBD/obj_tmbd.py,sha256=HEL3jAqUYtVgX7GCaw60EAD3JGvEJLOQXfD6lRYEjxA,1968
|
|
74
|
+
StreamingCommunity/Lib/TMBD/tmdb.py,sha256=3UO_0uzi8xtrokX8Y_vO8vx_V8XHSkOVCqtgT-289GM,12000
|
|
75
|
+
StreamingCommunity/Upload/update.py,sha256=MF1M-vypz-z6tn9z_lQkZCpXD02GvHC2UvsBcK0mNC0,2339
|
|
76
|
+
StreamingCommunity/Upload/version.py,sha256=rqufxkhxojj2efd6SdeXRGYhZrlBbi_jGdALT1WsnC0,175
|
|
77
|
+
StreamingCommunity/Util/_jsonConfig.py,sha256=CLvk6HWxUklZztoy55SzEOvdsbNo-pFcVQVanwixXCc,7001
|
|
78
|
+
StreamingCommunity/Util/call_stack.py,sha256=zuYbO8dV8bCa7fCdtaKQYuheA5K7BkTm3Oj8JA6GCpM,1417
|
|
79
|
+
StreamingCommunity/Util/color.py,sha256=1iQUf5xDp5XKKbXl9MvKEXJvv44Zf0P4J2Nu5ATIId8,479
|
|
80
|
+
StreamingCommunity/Util/console.py,sha256=bXP_iibXMpRIJ_zs03xFmSbkvMP3SguIuEUJZovoOqw,230
|
|
81
|
+
StreamingCommunity/Util/ffmpeg_installer.py,sha256=buiAxxcgHWPzj9ngq4-SCkZRXOmXEqfDwmuZH6g2-Q4,12558
|
|
82
|
+
StreamingCommunity/Util/headers.py,sha256=r5hK8HVF-y6dQzCQpDnpbDGP02n29OYlzgaZAorcmG0,4565
|
|
83
|
+
StreamingCommunity/Util/logger.py,sha256=5XmFquGYt4FjvKNyYKa21mLLKARmzGWk-mBo05ezlHQ,1914
|
|
84
|
+
StreamingCommunity/Util/message.py,sha256=pgUf50z4kSJjKHBlBKn5bd26xlAAEvlLiMs9dvcvJ_s,3675
|
|
85
|
+
StreamingCommunity/Util/os.py,sha256=FydTixaZyrHN0ZPPmqXwuPCkUz7IG8-yIcMA1osD-sI,19472
|
|
86
|
+
StreamingCommunity/Util/table.py,sha256=lKCgvrtfODuQY5dFJqlNUYL2aFzfij-efS5oGv84E44,8508
|
|
87
|
+
StreamingCommunity-2.0.0.dist-info/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
|
88
|
+
StreamingCommunity-2.0.0.dist-info/METADATA,sha256=_O1JRXFC_HXh2OcqlwmBK4tBqVBcvpyjf3_xbmVmVhk,13439
|
|
89
|
+
StreamingCommunity-2.0.0.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
90
|
+
StreamingCommunity-2.0.0.dist-info/entry_points.txt,sha256=Qph9XYfDC8n4LfDLOSl6gJGlkb9eFb5f-JOr_Wb_5rk,67
|
|
91
|
+
StreamingCommunity-2.0.0.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
|
|
92
|
+
StreamingCommunity-2.0.0.dist-info/RECORD,,
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
StreamingCommunity/run.py,sha256=8juF-UPFnzzs0AqJkF_FF10PkYisbqc70xypln1aMRc,6435
|
|
2
|
-
StreamingCommunity-1.9.8.dist-info/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
|
|
3
|
-
StreamingCommunity-1.9.8.dist-info/METADATA,sha256=tMXG8fMQbUTvvHzMqCT3y3HCFxF0KtpXukyG_ZNO5VA,11425
|
|
4
|
-
StreamingCommunity-1.9.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
5
|
-
StreamingCommunity-1.9.8.dist-info/entry_points.txt,sha256=-iQU6qfeHFwauAg4iZhifWhNZAkiV-x3XuEauo_EjUc,68
|
|
6
|
-
StreamingCommunity-1.9.8.dist-info/top_level.txt,sha256=YsOcxKP-WOhWpIWgBlh0coll9XUx7aqmRPT7kmt3fH0,19
|
|
7
|
-
StreamingCommunity-1.9.8.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|