StreamingCommunity 1.7.6__py3-none-any.whl → 1.8.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.

Files changed (93) hide show
  1. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/js_parser.py +4 -1
  2. StreamingCommunity/Src/Api/Player/Helper/Vixcloud/util.py +166 -166
  3. StreamingCommunity/Src/Api/Player/ddl.py +89 -89
  4. StreamingCommunity/Src/Api/Player/maxstream.py +151 -151
  5. StreamingCommunity/Src/Api/Player/supervideo.py +193 -193
  6. StreamingCommunity/Src/Api/Player/vixcloud.py +224 -212
  7. StreamingCommunity/Src/Api/Site/1337xx/__init__.py +50 -50
  8. StreamingCommunity/Src/Api/Site/1337xx/costant.py +14 -14
  9. StreamingCommunity/Src/Api/Site/1337xx/site.py +83 -83
  10. StreamingCommunity/Src/Api/Site/1337xx/title.py +66 -66
  11. StreamingCommunity/Src/Api/Site/altadefinizione/__init__.py +50 -50
  12. StreamingCommunity/Src/Api/Site/altadefinizione/costant.py +14 -14
  13. StreamingCommunity/Src/Api/Site/altadefinizione/film.py +69 -69
  14. StreamingCommunity/Src/Api/Site/altadefinizione/site.py +86 -86
  15. StreamingCommunity/Src/Api/Site/animeunity/__init__.py +50 -50
  16. StreamingCommunity/Src/Api/Site/animeunity/costant.py +15 -15
  17. StreamingCommunity/Src/Api/Site/animeunity/film_serie.py +131 -131
  18. StreamingCommunity/Src/Api/Site/animeunity/site.py +164 -164
  19. StreamingCommunity/Src/Api/Site/bitsearch/__init__.py +51 -51
  20. StreamingCommunity/Src/Api/Site/bitsearch/costant.py +15 -15
  21. StreamingCommunity/Src/Api/Site/bitsearch/site.py +84 -84
  22. StreamingCommunity/Src/Api/Site/bitsearch/title.py +47 -47
  23. StreamingCommunity/Src/Api/Site/cb01new/__init__.py +51 -51
  24. StreamingCommunity/Src/Api/Site/cb01new/costant.py +15 -15
  25. StreamingCommunity/Src/Api/Site/cb01new/film.py +69 -69
  26. StreamingCommunity/Src/Api/Site/cb01new/site.py +74 -74
  27. StreamingCommunity/Src/Api/Site/ddlstreamitaly/__init__.py +57 -57
  28. StreamingCommunity/Src/Api/Site/ddlstreamitaly/costant.py +16 -16
  29. StreamingCommunity/Src/Api/Site/ddlstreamitaly/series.py +142 -142
  30. StreamingCommunity/Src/Api/Site/ddlstreamitaly/site.py +92 -92
  31. StreamingCommunity/Src/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +82 -82
  32. StreamingCommunity/Src/Api/Site/guardaserie/__init__.py +52 -52
  33. StreamingCommunity/Src/Api/Site/guardaserie/costant.py +15 -15
  34. StreamingCommunity/Src/Api/Site/guardaserie/series.py +195 -195
  35. StreamingCommunity/Src/Api/Site/guardaserie/site.py +84 -84
  36. StreamingCommunity/Src/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
  37. StreamingCommunity/Src/Api/Site/mostraguarda/__init__.py +48 -48
  38. StreamingCommunity/Src/Api/Site/mostraguarda/costant.py +14 -14
  39. StreamingCommunity/Src/Api/Site/mostraguarda/film.py +94 -94
  40. StreamingCommunity/Src/Api/Site/piratebays/__init__.py +50 -50
  41. StreamingCommunity/Src/Api/Site/piratebays/costant.py +14 -14
  42. StreamingCommunity/Src/Api/Site/piratebays/site.py +88 -88
  43. StreamingCommunity/Src/Api/Site/piratebays/title.py +45 -45
  44. StreamingCommunity/Src/Api/Site/streamingcommunity/__init__.py +55 -55
  45. StreamingCommunity/Src/Api/Site/streamingcommunity/costant.py +14 -14
  46. StreamingCommunity/Src/Api/Site/streamingcommunity/film.py +70 -70
  47. StreamingCommunity/Src/Api/Site/streamingcommunity/series.py +203 -203
  48. StreamingCommunity/Src/Api/Site/streamingcommunity/site.py +125 -125
  49. StreamingCommunity/Src/Api/Template/Class/SearchType.py +101 -101
  50. StreamingCommunity/Src/Api/Template/Util/__init__.py +4 -4
  51. StreamingCommunity/Src/Api/Template/Util/get_domain.py +137 -137
  52. StreamingCommunity/Src/Api/Template/Util/manage_ep.py +153 -153
  53. StreamingCommunity/Src/Api/Template/Util/recall_search.py +37 -37
  54. StreamingCommunity/Src/Api/Template/__init__.py +2 -2
  55. StreamingCommunity/Src/Api/Template/site.py +87 -87
  56. StreamingCommunity/Src/Lib/Downloader/HLS/downloader.py +968 -968
  57. StreamingCommunity/Src/Lib/Downloader/HLS/proxyes.py +110 -110
  58. StreamingCommunity/Src/Lib/Downloader/HLS/segments.py +540 -540
  59. StreamingCommunity/Src/Lib/Downloader/MP4/downloader.py +156 -156
  60. StreamingCommunity/Src/Lib/Downloader/TOR/downloader.py +222 -222
  61. StreamingCommunity/Src/Lib/Downloader/__init__.py +4 -4
  62. StreamingCommunity/Src/Lib/Driver/driver_1.py +76 -76
  63. StreamingCommunity/Src/Lib/FFmpeg/__init__.py +4 -4
  64. StreamingCommunity/Src/Lib/FFmpeg/capture.py +170 -170
  65. StreamingCommunity/Src/Lib/FFmpeg/command.py +292 -292
  66. StreamingCommunity/Src/Lib/FFmpeg/util.py +241 -241
  67. StreamingCommunity/Src/Lib/M3U8/__init__.py +5 -5
  68. StreamingCommunity/Src/Lib/M3U8/decryptor.py +128 -128
  69. StreamingCommunity/Src/Lib/M3U8/estimator.py +172 -172
  70. StreamingCommunity/Src/Lib/M3U8/parser.py +666 -666
  71. StreamingCommunity/Src/Lib/M3U8/url_fixer.py +51 -51
  72. StreamingCommunity/Src/Lib/TMBD/__init__.py +1 -1
  73. StreamingCommunity/Src/Lib/TMBD/obj_tmbd.py +39 -39
  74. StreamingCommunity/Src/Lib/TMBD/tmdb.py +345 -345
  75. StreamingCommunity/Src/Upload/update.py +64 -64
  76. StreamingCommunity/Src/Upload/version.py +5 -5
  77. StreamingCommunity/Src/Util/_jsonConfig.py +204 -204
  78. StreamingCommunity/Src/Util/call_stack.py +42 -42
  79. StreamingCommunity/Src/Util/color.py +20 -20
  80. StreamingCommunity/Src/Util/console.py +12 -12
  81. StreamingCommunity/Src/Util/headers.py +147 -147
  82. StreamingCommunity/Src/Util/logger.py +53 -53
  83. StreamingCommunity/Src/Util/message.py +46 -46
  84. StreamingCommunity/Src/Util/os.py +417 -417
  85. StreamingCommunity/Src/Util/table.py +163 -163
  86. StreamingCommunity/run.py +196 -196
  87. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/METADATA +1 -1
  88. StreamingCommunity-1.8.0.dist-info/RECORD +97 -0
  89. StreamingCommunity-1.7.6.dist-info/RECORD +0 -97
  90. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/LICENSE +0 -0
  91. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/WHEEL +0 -0
  92. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.dist-info}/entry_points.txt +0 -0
  93. {StreamingCommunity-1.7.6.dist-info → StreamingCommunity-1.8.0.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.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.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.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,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"
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
15
  MOVIE_FOLDER = "Film"