StreamingCommunity 1.7.6__py3-none-any.whl → 1.9.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 (101) hide show
  1. StreamingCommunity/{Src/Api → Api}/Player/Helper/Vixcloud/js_parser.py +4 -1
  2. StreamingCommunity/{Src/Api → Api}/Player/Helper/Vixcloud/util.py +166 -166
  3. StreamingCommunity/{Src/Api → Api}/Player/ddl.py +89 -89
  4. StreamingCommunity/{Src/Api → Api}/Player/maxstream.py +151 -151
  5. StreamingCommunity/{Src/Api → Api}/Player/supervideo.py +193 -193
  6. StreamingCommunity/{Src/Api → Api}/Player/vixcloud.py +224 -212
  7. StreamingCommunity/{Src/Api → Api}/Site/1337xx/__init__.py +50 -50
  8. StreamingCommunity/{Src/Api → Api}/Site/1337xx/costant.py +15 -15
  9. StreamingCommunity/{Src/Api → Api}/Site/1337xx/site.py +83 -83
  10. StreamingCommunity/{Src/Api → Api}/Site/1337xx/title.py +66 -66
  11. StreamingCommunity/{Src/Api → Api}/Site/altadefinizione/__init__.py +50 -50
  12. StreamingCommunity/{Src/Api/Site/mostraguarda → Api/Site/altadefinizione}/costant.py +15 -15
  13. StreamingCommunity/{Src/Api → Api}/Site/altadefinizione/film.py +69 -69
  14. StreamingCommunity/{Src/Api → Api}/Site/altadefinizione/site.py +86 -86
  15. StreamingCommunity/{Src/Api → Api}/Site/animeunity/__init__.py +50 -50
  16. StreamingCommunity/{Src/Api/Site/altadefinizione → Api/Site/animeunity}/costant.py +15 -15
  17. StreamingCommunity/{Src/Api → Api}/Site/animeunity/film_serie.py +130 -131
  18. StreamingCommunity/{Src/Api → Api}/Site/animeunity/site.py +164 -164
  19. StreamingCommunity/{Src/Api → Api}/Site/animeunity/util/ScrapeSerie.py +3 -3
  20. StreamingCommunity/{Src/Api → Api}/Site/bitsearch/__init__.py +51 -51
  21. StreamingCommunity/{Src/Api → Api}/Site/bitsearch/costant.py +15 -15
  22. StreamingCommunity/{Src/Api → Api}/Site/bitsearch/site.py +84 -84
  23. StreamingCommunity/{Src/Api → Api}/Site/bitsearch/title.py +47 -47
  24. StreamingCommunity/{Src/Api → Api}/Site/cb01new/__init__.py +51 -51
  25. StreamingCommunity/{Src/Api → Api}/Site/cb01new/costant.py +15 -15
  26. StreamingCommunity/{Src/Api → Api}/Site/cb01new/film.py +69 -69
  27. StreamingCommunity/{Src/Api → Api}/Site/cb01new/site.py +74 -74
  28. StreamingCommunity/{Src/Api → Api}/Site/ddlstreamitaly/__init__.py +57 -57
  29. StreamingCommunity/{Src/Api → Api}/Site/ddlstreamitaly/costant.py +16 -16
  30. StreamingCommunity/{Src/Api → Api}/Site/ddlstreamitaly/series.py +141 -142
  31. StreamingCommunity/{Src/Api → Api}/Site/ddlstreamitaly/site.py +92 -92
  32. StreamingCommunity/{Src/Api → Api}/Site/ddlstreamitaly/util/ScrapeSerie.py +84 -82
  33. StreamingCommunity/{Src/Api → Api}/Site/guardaserie/__init__.py +52 -52
  34. StreamingCommunity/{Src/Api/Site/piratebays → Api/Site/guardaserie}/costant.py +15 -15
  35. StreamingCommunity/{Src/Api → Api}/Site/guardaserie/series.py +195 -195
  36. StreamingCommunity/{Src/Api → Api}/Site/guardaserie/site.py +84 -84
  37. StreamingCommunity/{Src/Api → Api}/Site/guardaserie/util/ScrapeSerie.py +110 -110
  38. StreamingCommunity/{Src/Api → Api}/Site/mostraguarda/__init__.py +48 -48
  39. StreamingCommunity/{Src/Api/Site/animeunity → Api/Site/mostraguarda}/costant.py +15 -15
  40. StreamingCommunity/{Src/Api → Api}/Site/mostraguarda/film.py +94 -94
  41. StreamingCommunity/{Src/Api → Api}/Site/piratebays/__init__.py +50 -50
  42. StreamingCommunity/{Src/Api/Site/guardaserie → Api/Site/piratebays}/costant.py +15 -15
  43. StreamingCommunity/{Src/Api → Api}/Site/piratebays/site.py +88 -88
  44. StreamingCommunity/{Src/Api → Api}/Site/piratebays/title.py +45 -45
  45. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/__init__.py +55 -55
  46. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/costant.py +15 -15
  47. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/film.py +70 -70
  48. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/series.py +205 -203
  49. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/site.py +125 -125
  50. StreamingCommunity/{Src/Api → Api}/Site/streamingcommunity/util/ScrapeSerie.py +3 -3
  51. StreamingCommunity/{Src/Api → Api}/Template/Class/SearchType.py +101 -101
  52. StreamingCommunity/{Src/Api → Api}/Template/Util/__init__.py +4 -4
  53. StreamingCommunity/{Src/Api → Api}/Template/Util/get_domain.py +137 -137
  54. StreamingCommunity/{Src/Api → Api}/Template/Util/manage_ep.py +153 -153
  55. StreamingCommunity/{Src/Api → Api}/Template/Util/recall_search.py +37 -37
  56. StreamingCommunity/Api/Template/__init__.py +3 -0
  57. StreamingCommunity/{Src/Api → Api}/Template/site.py +87 -87
  58. StreamingCommunity/{Src/Lib → Lib}/Downloader/HLS/downloader.py +968 -968
  59. StreamingCommunity/{Src/Lib → Lib}/Downloader/HLS/proxyes.py +110 -110
  60. StreamingCommunity/{Src/Lib → Lib}/Downloader/HLS/segments.py +538 -540
  61. StreamingCommunity/{Src/Lib → Lib}/Downloader/MP4/downloader.py +156 -156
  62. StreamingCommunity/{Src/Lib → Lib}/Downloader/TOR/downloader.py +222 -222
  63. StreamingCommunity/{Src/Lib → Lib}/Downloader/__init__.py +4 -4
  64. StreamingCommunity/{Src/Lib → Lib}/Driver/driver_1.py +76 -76
  65. StreamingCommunity/{Src/Lib → Lib}/FFmpeg/__init__.py +4 -4
  66. StreamingCommunity/{Src/Lib → Lib}/FFmpeg/capture.py +170 -170
  67. StreamingCommunity/{Src/Lib → Lib}/FFmpeg/command.py +292 -292
  68. StreamingCommunity/{Src/Lib → Lib}/FFmpeg/util.py +241 -241
  69. StreamingCommunity/{Src/Lib → Lib}/M3U8/__init__.py +5 -5
  70. StreamingCommunity/{Src/Lib → Lib}/M3U8/decryptor.py +164 -129
  71. StreamingCommunity/{Src/Lib → Lib}/M3U8/estimator.py +175 -172
  72. StreamingCommunity/{Src/Lib → Lib}/M3U8/parser.py +666 -666
  73. StreamingCommunity/{Src/Lib → Lib}/M3U8/url_fixer.py +51 -51
  74. StreamingCommunity/Lib/TMBD/__init__.py +2 -0
  75. StreamingCommunity/{Src/Lib → Lib}/TMBD/obj_tmbd.py +39 -39
  76. StreamingCommunity/{Src/Lib → Lib}/TMBD/tmdb.py +345 -345
  77. StreamingCommunity/{Src/Upload → Upload}/update.py +68 -64
  78. StreamingCommunity/{Src/Upload → Upload}/version.py +5 -5
  79. StreamingCommunity/{Src/Util → Util}/_jsonConfig.py +204 -204
  80. StreamingCommunity/{Src/Util → Util}/call_stack.py +42 -42
  81. StreamingCommunity/{Src/Util → Util}/color.py +20 -20
  82. StreamingCommunity/{Src/Util → Util}/console.py +12 -12
  83. StreamingCommunity/Util/ffmpeg_installer.py +275 -0
  84. StreamingCommunity/{Src/Util → Util}/headers.py +147 -147
  85. StreamingCommunity/{Src/Util → Util}/logger.py +53 -53
  86. StreamingCommunity/{Src/Util → Util}/message.py +46 -46
  87. StreamingCommunity/{Src/Util → Util}/os.py +514 -417
  88. StreamingCommunity/{Src/Util → Util}/table.py +163 -163
  89. StreamingCommunity/run.py +202 -196
  90. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.9.1.dist-info}/METADATA +126 -60
  91. StreamingCommunity-1.9.1.dist-info/RECORD +95 -0
  92. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.9.1.dist-info}/WHEEL +1 -1
  93. StreamingCommunity/Src/Api/Site/animeunity/anime.py +0 -126
  94. StreamingCommunity/Src/Api/Site/ddlstreamitaly/Player/ScrapeSerie.py +0 -83
  95. StreamingCommunity/Src/Api/Site/guardaserie/Player/ScrapeSerie.py +0 -110
  96. StreamingCommunity/Src/Api/Template/__init__.py +0 -3
  97. StreamingCommunity/Src/Lib/TMBD/__init__.py +0 -2
  98. StreamingCommunity-1.7.6.dist-info/RECORD +0 -97
  99. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.9.1.dist-info}/LICENSE +0 -0
  100. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.9.1.dist-info}/entry_points.txt +0 -0
  101. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.9.1.dist-info}/top_level.txt +0 -0
@@ -1,212 +1,224 @@
1
- # 01.03.24
2
-
3
- import sys
4
- import logging
5
- from urllib.parse import urlparse, urlencode, urlunparse
6
-
7
-
8
- # External libraries
9
- import httpx
10
- from bs4 import BeautifulSoup
11
-
12
-
13
- # Internal utilities
14
- from StreamingCommunity.Src.Util.headers import get_headers
15
- from StreamingCommunity.Src.Util.console import console, Panel
16
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
17
- from .Helper.Vixcloud.util import WindowVideo, WindowParameter, StreamsCollection
18
- from .Helper.Vixcloud.js_parser import JavaScriptParser
19
-
20
-
21
- # Variable
22
- max_timeout = config_manager.get_int("REQUESTS", "timeout")
23
-
24
-
25
- class VideoSource:
26
- def __init__(self, site_name: str, is_series: bool):
27
- """
28
- Initialize video source for streaming site.
29
-
30
- Args:
31
- site_name (str): Name of streaming site
32
- is_series (bool): Flag for series or movie content
33
- """
34
- self.headers = {'user-agent': get_headers()}
35
- self.base_name = site_name
36
- self.domain = config_manager.get_dict('SITE', self.base_name)['domain']
37
- self.is_series = is_series
38
-
39
- def setup(self, media_id: int):
40
- """
41
- Configure media-specific context.
42
-
43
- Args:
44
- media_id (int): Unique identifier for media item
45
- """
46
- self.media_id = media_id
47
-
48
- def get_iframe(self, episode_id: int) -> None:
49
- """
50
- Retrieve iframe source for specified episode.
51
-
52
- Args:
53
- episode_id (int): Unique identifier for episode
54
- """
55
- params = {}
56
-
57
- if self.is_series:
58
- params = {
59
- 'episode_id': episode_id,
60
- 'next_episode': '1'
61
- }
62
-
63
- try:
64
-
65
- # Make a request to get iframe source
66
- response = httpx.get(
67
- url=f"https://{self.base_name}.{self.domain}/iframe/{self.media_id}",
68
- params=params,
69
- timeout=max_timeout
70
- )
71
- response.raise_for_status()
72
-
73
- # Parse response with BeautifulSoup to get iframe source
74
- soup = BeautifulSoup(response.text, "html.parser")
75
- self.iframe_src = soup.find("iframe").get("src")
76
-
77
- except Exception as e:
78
- logging.error(f"Error getting iframe source: {e}")
79
- raise
80
-
81
- def parse_script(self, script_text: str) -> None:
82
- """
83
- Convert raw script to structured video metadata.
84
-
85
- Args:
86
- script_text (str): Raw JavaScript/HTML script content
87
- """
88
- try:
89
- converter = JavaScriptParser.parse(js_string=str(script_text))
90
-
91
- # Create window video, streams and parameter objects
92
- self.window_video = WindowVideo(converter.get('video'))
93
- self.window_streams = StreamsCollection(converter.get('streams'))
94
- self.window_parameter = WindowParameter(converter.get('masterPlaylist'))
95
-
96
- except Exception as e:
97
- logging.error(f"Error parsing script: {e}")
98
- raise
99
-
100
- def get_content(self) -> None:
101
- """
102
- Fetch and process video content from iframe source.
103
-
104
- Workflow:
105
- - Validate iframe source
106
- - Retrieve content
107
- - Parse embedded script
108
- """
109
- try:
110
- if self.iframe_src is not None:
111
-
112
- # Make a request to get content
113
- try:
114
- response = httpx.get(
115
- url=self.iframe_src,
116
- headers=self.headers,
117
- timeout=max_timeout
118
- )
119
- response.raise_for_status()
120
-
121
- except Exception as e:
122
- print("\n")
123
- console.print(Panel("[red bold]Coming soon", title="Notification", title_align="left", border_style="yellow"))
124
- sys.exit(0)
125
-
126
- # Parse response with BeautifulSoup to get content
127
- soup = BeautifulSoup(response.text, "html.parser")
128
- script = soup.find("body").find("script").text
129
-
130
- # Parse script to get video information
131
- self.parse_script(script_text=script)
132
-
133
- except Exception as e:
134
- logging.error(f"Error getting content: {e}")
135
- raise
136
-
137
- def get_playlist(self) -> str:
138
- """
139
- Generate authenticated playlist URL.
140
-
141
- Returns:
142
- str: Fully constructed playlist URL with authentication parameters
143
- """
144
- params = {}
145
-
146
- if self.window_video.quality == 1080:
147
- params['h'] = 1
148
-
149
- if "b=1" in self.window_parameter.url:
150
- params['b'] = 1
151
-
152
- params.update({
153
- "token": self.window_parameter.token,
154
- "expires": self.window_parameter.expires
155
- })
156
-
157
- query_string = urlencode(params)
158
- return urlunparse(urlparse(self.window_parameter.url)._replace(query=query_string))
159
-
160
-
161
- class VideoSourceAnime(VideoSource):
162
- def __init__(self, site_name: str):
163
- """
164
- Initialize anime-specific video source.
165
-
166
- Args:
167
- site_name (str): Name of anime streaming site
168
-
169
- Extends base VideoSource with anime-specific initialization
170
- """
171
- self.headers = {'user-agent': get_headers()}
172
- self.base_name = site_name
173
- self.domain = config_manager.get_dict('SITE', self.base_name)['domain']
174
- self.src_mp4 = None
175
-
176
- def get_embed(self, episode_id: int):
177
- """
178
- Retrieve embed URL and extract video source.
179
-
180
- Args:
181
- episode_id (int): Unique identifier for episode
182
-
183
- Returns:
184
- str: Parsed script content
185
- """
186
- try:
187
-
188
- response = httpx.get(
189
- url=f"https://www.{self.base_name}.{self.domain}/embed-url/{episode_id}",
190
- headers=self.headers,
191
- timeout=max_timeout
192
- )
193
- response.raise_for_status()
194
-
195
- # Extract and clean embed URL
196
- embed_url = response.text.strip()
197
- self.iframe_src = embed_url
198
-
199
- # Fetch video content using embed URL
200
- video_response = httpx.get(embed_url)
201
- video_response.raise_for_status()
202
-
203
- # Parse response with BeautifulSoup to get content of the scriot
204
- soup = BeautifulSoup(video_response.text, "html.parser")
205
- script = soup.find("body").find("script").text
206
- self.src_mp4 = soup.find("body").find_all("script")[1].text.split(" = ")[1].replace("'", "")
207
-
208
- return script
209
-
210
- except Exception as e:
211
- logging.error(f"Error fetching embed URL: {e}")
212
- return None
1
+ # 01.03.24
2
+
3
+ import sys
4
+ import logging
5
+ from urllib.parse import urlparse, parse_qs, urlencode, urlunparse
6
+
7
+
8
+ # External libraries
9
+ import httpx
10
+ from bs4 import BeautifulSoup
11
+
12
+
13
+ # Internal utilities
14
+ from StreamingCommunity.Util.headers import get_headers
15
+ from StreamingCommunity.Util.console import console, Panel
16
+ from StreamingCommunity.Util._jsonConfig import config_manager
17
+ from .Helper.Vixcloud.util import WindowVideo, WindowParameter, StreamsCollection
18
+ from .Helper.Vixcloud.js_parser import JavaScriptParser
19
+
20
+
21
+ # Variable
22
+ max_timeout = config_manager.get_int("REQUESTS", "timeout")
23
+
24
+
25
+ class VideoSource:
26
+ def __init__(self, site_name: str, is_series: bool):
27
+ """
28
+ Initialize video source for streaming site.
29
+
30
+ Args:
31
+ site_name (str): Name of streaming site
32
+ is_series (bool): Flag for series or movie content
33
+ """
34
+ self.headers = {'user-agent': get_headers()}
35
+ self.base_name = site_name
36
+ self.domain = config_manager.get_dict('SITE', self.base_name)['domain']
37
+ self.is_series = is_series
38
+
39
+ def setup(self, media_id: int):
40
+ """
41
+ Configure media-specific context.
42
+
43
+ Args:
44
+ media_id (int): Unique identifier for media item
45
+ """
46
+ self.media_id = media_id
47
+
48
+ def get_iframe(self, episode_id: int) -> None:
49
+ """
50
+ Retrieve iframe source for specified episode.
51
+
52
+ Args:
53
+ episode_id (int): Unique identifier for episode
54
+ """
55
+ params = {}
56
+
57
+ if self.is_series:
58
+ params = {
59
+ 'episode_id': episode_id,
60
+ 'next_episode': '1'
61
+ }
62
+
63
+ try:
64
+
65
+ # Make a request to get iframe source
66
+ response = httpx.get(
67
+ url=f"https://{self.base_name}.{self.domain}/iframe/{self.media_id}",
68
+ params=params,
69
+ timeout=max_timeout
70
+ )
71
+ response.raise_for_status()
72
+
73
+ # Parse response with BeautifulSoup to get iframe source
74
+ soup = BeautifulSoup(response.text, "html.parser")
75
+ self.iframe_src = soup.find("iframe").get("src")
76
+
77
+ except Exception as e:
78
+ logging.error(f"Error getting iframe source: {e}")
79
+ raise
80
+
81
+ def parse_script(self, script_text: str) -> None:
82
+ """
83
+ Convert raw script to structured video metadata.
84
+
85
+ Args:
86
+ script_text (str): Raw JavaScript/HTML script content
87
+ """
88
+ try:
89
+ converter = JavaScriptParser.parse(js_string=str(script_text))
90
+
91
+ # Create window video, streams and parameter objects
92
+ self.canPlayFHD = bool(converter.get('canPlayFHD'))
93
+ self.window_video = WindowVideo(converter.get('video'))
94
+ self.window_streams = StreamsCollection(converter.get('streams'))
95
+ self.window_parameter = WindowParameter(converter.get('masterPlaylist'))
96
+
97
+ except Exception as e:
98
+ logging.error(f"Error parsing script: {e}")
99
+ raise
100
+
101
+ def get_content(self) -> None:
102
+ """
103
+ Fetch and process video content from iframe source.
104
+
105
+ Workflow:
106
+ - Validate iframe source
107
+ - Retrieve content
108
+ - Parse embedded script
109
+ """
110
+ try:
111
+ if self.iframe_src is not None:
112
+
113
+ # Make a request to get content
114
+ try:
115
+ response = httpx.get(
116
+ url=self.iframe_src,
117
+ headers=self.headers,
118
+ timeout=max_timeout
119
+ )
120
+ response.raise_for_status()
121
+
122
+ except Exception as e:
123
+ print("\n")
124
+ console.print(Panel("[red bold]Coming soon", title="Notification", title_align="left", border_style="yellow"))
125
+ sys.exit(0)
126
+
127
+ # Parse response with BeautifulSoup to get content
128
+ soup = BeautifulSoup(response.text, "html.parser")
129
+ script = soup.find("body").find("script").text
130
+
131
+ # Parse script to get video information
132
+ self.parse_script(script_text=script)
133
+
134
+ except Exception as e:
135
+ logging.error(f"Error getting content: {e}")
136
+ raise
137
+
138
+ def get_playlist(self) -> str:
139
+ """
140
+ Generate authenticated playlist URL.
141
+
142
+ Returns:
143
+ str: Fully constructed playlist URL with authentication parameters
144
+ """
145
+ # Initialize parameters dictionary
146
+ params = {}
147
+
148
+ # Add 'h' parameter if video quality is 1080p
149
+ if self.canPlayFHD:
150
+ params['h'] = 1
151
+
152
+ # Parse the original URL
153
+ parsed_url = urlparse(self.window_parameter.url)
154
+ query_params = parse_qs(parsed_url.query)
155
+
156
+ # Check specifically for 'b=1' in the query parameters
157
+ if 'b' in query_params and query_params['b'] == ['1']:
158
+ params['b'] = 1
159
+
160
+ # Add authentication parameters (token and expiration)
161
+ params.update({
162
+ "token": self.window_parameter.token,
163
+ "expires": self.window_parameter.expires
164
+ })
165
+
166
+ # Build the updated query string
167
+ query_string = urlencode(params)
168
+
169
+ # Construct the new URL with updated query parameters
170
+ return urlunparse(parsed_url._replace(query=query_string))
171
+
172
+
173
+ class VideoSourceAnime(VideoSource):
174
+ def __init__(self, site_name: str):
175
+ """
176
+ Initialize anime-specific video source.
177
+
178
+ Args:
179
+ site_name (str): Name of anime streaming site
180
+
181
+ Extends base VideoSource with anime-specific initialization
182
+ """
183
+ self.headers = {'user-agent': get_headers()}
184
+ self.base_name = site_name
185
+ self.domain = config_manager.get_dict('SITE', self.base_name)['domain']
186
+ self.src_mp4 = None
187
+
188
+ def get_embed(self, episode_id: int):
189
+ """
190
+ Retrieve embed URL and extract video source.
191
+
192
+ Args:
193
+ episode_id (int): Unique identifier for episode
194
+
195
+ Returns:
196
+ str: Parsed script content
197
+ """
198
+ try:
199
+
200
+ response = httpx.get(
201
+ url=f"https://www.{self.base_name}.{self.domain}/embed-url/{episode_id}",
202
+ headers=self.headers,
203
+ timeout=max_timeout
204
+ )
205
+ response.raise_for_status()
206
+
207
+ # Extract and clean embed URL
208
+ embed_url = response.text.strip()
209
+ self.iframe_src = embed_url
210
+
211
+ # Fetch video content using embed URL
212
+ video_response = httpx.get(embed_url)
213
+ video_response.raise_for_status()
214
+
215
+ # Parse response with BeautifulSoup to get content of the scriot
216
+ soup = BeautifulSoup(video_response.text, "html.parser")
217
+ script = soup.find("body").find("script").text
218
+ self.src_mp4 = soup.find("body").find_all("script")[1].text.split(" = ")[1].replace("'", "")
219
+
220
+ return script
221
+
222
+ except Exception as e:
223
+ logging.error(f"Error fetching embed URL: {e}")
224
+ return None
@@ -1,50 +1,50 @@
1
- # 02.07.24
2
-
3
- from unidecode import unidecode
4
-
5
-
6
- # Internal utilities
7
- from StreamingCommunity.Src.Util.console import console, msg
8
-
9
-
10
- # Logic class
11
- from .site import title_search, run_get_select_title, media_search_manager
12
- from .title import download_title
13
-
14
-
15
- # Variable
16
- indice = 8
17
- _useFor = "film_serie"
18
- _deprecate = False
19
- _priority = 2
20
- _engineDownload = "tor"
21
-
22
-
23
- def search(string_to_search: str = None, get_onylDatabase: bool = False):
24
- """
25
- Main function of the application for film and series.
26
- """
27
-
28
- if string_to_search is None:
29
- string_to_search = msg.ask("\n[purple]Insert word to search in all site").strip()
30
-
31
- # Search on database
32
- len_database = title_search(unidecode(string_to_search))
33
-
34
- # Return list of elements
35
- if get_onylDatabase:
36
- return media_search_manager
37
-
38
- if len_database > 0:
39
-
40
- # Select title from list
41
- select_title = run_get_select_title()
42
-
43
- # Download title
44
- download_title(select_title)
45
-
46
- else:
47
- console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
48
-
49
- # Retry
50
- search()
1
+ # 02.07.24
2
+
3
+ from unidecode import unidecode
4
+
5
+
6
+ # Internal utilities
7
+ from StreamingCommunity.Util.console import console, msg
8
+
9
+
10
+ # Logic class
11
+ from .site import title_search, run_get_select_title, media_search_manager
12
+ from .title import download_title
13
+
14
+
15
+ # Variable
16
+ indice = 8
17
+ _useFor = "film_serie"
18
+ _deprecate = False
19
+ _priority = 2
20
+ _engineDownload = "tor"
21
+
22
+
23
+ def search(string_to_search: str = None, get_onylDatabase: bool = False):
24
+ """
25
+ Main function of the application for film and series.
26
+ """
27
+
28
+ if string_to_search is None:
29
+ string_to_search = msg.ask("\n[purple]Insert word to search in all site").strip()
30
+
31
+ # Search on database
32
+ len_database = title_search(unidecode(string_to_search))
33
+
34
+ # Return list of elements
35
+ if get_onylDatabase:
36
+ return media_search_manager
37
+
38
+ if len_database > 0:
39
+
40
+ # Select title from list
41
+ select_title = run_get_select_title()
42
+
43
+ # Download title
44
+ download_title(select_title)
45
+
46
+ else:
47
+ console.print(f"\n[red]Nothing matching was found for[white]: [purple]{string_to_search}")
48
+
49
+ # Retry
50
+ search()
@@ -1,15 +1,15 @@
1
- # 09.06.24
2
-
3
- import os
4
-
5
-
6
- # Internal utilities
7
- from StreamingCommunity.Src.Util._jsonConfig import config_manager
8
-
9
-
10
- SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
11
- ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
12
- DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
13
-
14
- SERIES_FOLDER = "Serie"
15
- MOVIE_FOLDER = "Film"
1
+ # 09.06.24
2
+
3
+ import os
4
+
5
+
6
+ # Internal utilities
7
+ from StreamingCommunity.Util._jsonConfig import config_manager
8
+
9
+
10
+ SITE_NAME = os.path.basename(os.path.dirname(os.path.abspath(__file__)))
11
+ ROOT_PATH = config_manager.get('DEFAULT', 'root_path')
12
+ DOMAIN_NOW = config_manager.get_dict('SITE', SITE_NAME)['domain']
13
+
14
+ SERIES_FOLDER = config_manager.get('DEFAULT', 'serie_folder_name')
15
+ MOVIE_FOLDER = config_manager.get('DEFAULT', 'movie_folder_name')