StreamingCommunity 2.4.0__py3-none-any.whl → 2.5.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 (91) hide show
  1. {StreamingCommunity-2.4.0.dist-info → StreamingCommunity-2.5.0.dist-info}/METADATA +9 -6
  2. StreamingCommunity-2.5.0.dist-info/RECORD +8 -0
  3. StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +0 -143
  4. StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +0 -136
  5. StreamingCommunity/Api/Player/ddl.py +0 -89
  6. StreamingCommunity/Api/Player/maxstream.py +0 -151
  7. StreamingCommunity/Api/Player/supervideo.py +0 -194
  8. StreamingCommunity/Api/Player/vixcloud.py +0 -273
  9. StreamingCommunity/Api/Site/1337xx/__init__.py +0 -51
  10. StreamingCommunity/Api/Site/1337xx/costant.py +0 -15
  11. StreamingCommunity/Api/Site/1337xx/site.py +0 -89
  12. StreamingCommunity/Api/Site/1337xx/title.py +0 -66
  13. StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +0 -51
  14. StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +0 -19
  15. StreamingCommunity/Api/Site/altadefinizionegratis/film.py +0 -74
  16. StreamingCommunity/Api/Site/altadefinizionegratis/site.py +0 -95
  17. StreamingCommunity/Api/Site/animeunity/__init__.py +0 -51
  18. StreamingCommunity/Api/Site/animeunity/costant.py +0 -19
  19. StreamingCommunity/Api/Site/animeunity/film_serie.py +0 -135
  20. StreamingCommunity/Api/Site/animeunity/site.py +0 -175
  21. StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +0 -97
  22. StreamingCommunity/Api/Site/cb01new/__init__.py +0 -52
  23. StreamingCommunity/Api/Site/cb01new/costant.py +0 -19
  24. StreamingCommunity/Api/Site/cb01new/film.py +0 -73
  25. StreamingCommunity/Api/Site/cb01new/site.py +0 -83
  26. StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +0 -56
  27. StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +0 -20
  28. StreamingCommunity/Api/Site/ddlstreamitaly/series.py +0 -146
  29. StreamingCommunity/Api/Site/ddlstreamitaly/site.py +0 -99
  30. StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +0 -85
  31. StreamingCommunity/Api/Site/guardaserie/__init__.py +0 -51
  32. StreamingCommunity/Api/Site/guardaserie/costant.py +0 -19
  33. StreamingCommunity/Api/Site/guardaserie/series.py +0 -198
  34. StreamingCommunity/Api/Site/guardaserie/site.py +0 -90
  35. StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +0 -110
  36. StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +0 -52
  37. StreamingCommunity/Api/Site/ilcorsaronero/costant.py +0 -19
  38. StreamingCommunity/Api/Site/ilcorsaronero/site.py +0 -72
  39. StreamingCommunity/Api/Site/ilcorsaronero/title.py +0 -46
  40. StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +0 -149
  41. StreamingCommunity/Api/Site/mostraguarda/__init__.py +0 -49
  42. StreamingCommunity/Api/Site/mostraguarda/costant.py +0 -19
  43. StreamingCommunity/Api/Site/mostraguarda/film.py +0 -101
  44. StreamingCommunity/Api/Site/streamingcommunity/__init__.py +0 -56
  45. StreamingCommunity/Api/Site/streamingcommunity/costant.py +0 -19
  46. StreamingCommunity/Api/Site/streamingcommunity/film.py +0 -75
  47. StreamingCommunity/Api/Site/streamingcommunity/series.py +0 -206
  48. StreamingCommunity/Api/Site/streamingcommunity/site.py +0 -142
  49. StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +0 -123
  50. StreamingCommunity/Api/Template/Class/SearchType.py +0 -101
  51. StreamingCommunity/Api/Template/Util/__init__.py +0 -5
  52. StreamingCommunity/Api/Template/Util/get_domain.py +0 -203
  53. StreamingCommunity/Api/Template/Util/manage_ep.py +0 -179
  54. StreamingCommunity/Api/Template/Util/recall_search.py +0 -37
  55. StreamingCommunity/Api/Template/__init__.py +0 -3
  56. StreamingCommunity/Api/Template/site.py +0 -87
  57. StreamingCommunity/Lib/Downloader/HLS/downloader.py +0 -965
  58. StreamingCommunity/Lib/Downloader/HLS/proxyes.py +0 -110
  59. StreamingCommunity/Lib/Downloader/HLS/segments.py +0 -573
  60. StreamingCommunity/Lib/Downloader/MP4/downloader.py +0 -155
  61. StreamingCommunity/Lib/Downloader/TOR/downloader.py +0 -296
  62. StreamingCommunity/Lib/Downloader/__init__.py +0 -5
  63. StreamingCommunity/Lib/FFmpeg/__init__.py +0 -4
  64. StreamingCommunity/Lib/FFmpeg/capture.py +0 -170
  65. StreamingCommunity/Lib/FFmpeg/command.py +0 -296
  66. StreamingCommunity/Lib/FFmpeg/util.py +0 -249
  67. StreamingCommunity/Lib/M3U8/__init__.py +0 -6
  68. StreamingCommunity/Lib/M3U8/decryptor.py +0 -165
  69. StreamingCommunity/Lib/M3U8/estimator.py +0 -229
  70. StreamingCommunity/Lib/M3U8/parser.py +0 -666
  71. StreamingCommunity/Lib/M3U8/url_fixer.py +0 -58
  72. StreamingCommunity/Lib/TMBD/__init__.py +0 -2
  73. StreamingCommunity/Lib/TMBD/obj_tmbd.py +0 -39
  74. StreamingCommunity/Lib/TMBD/tmdb.py +0 -346
  75. StreamingCommunity/Upload/update.py +0 -67
  76. StreamingCommunity/Upload/version.py +0 -5
  77. StreamingCommunity/Util/_jsonConfig.py +0 -228
  78. StreamingCommunity/Util/call_stack.py +0 -42
  79. StreamingCommunity/Util/color.py +0 -20
  80. StreamingCommunity/Util/console.py +0 -12
  81. StreamingCommunity/Util/ffmpeg_installer.py +0 -368
  82. StreamingCommunity/Util/headers.py +0 -160
  83. StreamingCommunity/Util/logger.py +0 -62
  84. StreamingCommunity/Util/message.py +0 -64
  85. StreamingCommunity/Util/os.py +0 -507
  86. StreamingCommunity/Util/table.py +0 -229
  87. StreamingCommunity-2.4.0.dist-info/RECORD +0 -92
  88. {StreamingCommunity-2.4.0.dist-info → StreamingCommunity-2.5.0.dist-info}/LICENSE +0 -0
  89. {StreamingCommunity-2.4.0.dist-info → StreamingCommunity-2.5.0.dist-info}/WHEEL +0 -0
  90. {StreamingCommunity-2.4.0.dist-info → StreamingCommunity-2.5.0.dist-info}/entry_points.txt +0 -0
  91. {StreamingCommunity-2.4.0.dist-info → StreamingCommunity-2.5.0.dist-info}/top_level.txt +0 -0
@@ -1,58 +0,0 @@
1
- # 20.03.24
2
-
3
- import logging
4
- from urllib.parse import urlparse, urljoin
5
-
6
-
7
- class M3U8_UrlFix:
8
- def __init__(self, url: str = None) -> None:
9
- """
10
- Initializes an M3U8_UrlFix object with the provided playlist URL.
11
-
12
- Parameters:
13
- - url (str, optional): The URL of the playlist. Defaults to None.
14
- """
15
- self.url_playlist: str = url
16
-
17
- def set_playlist(self, url: str) -> None:
18
- """
19
- Set the M3U8 playlist URL.
20
-
21
- Parameters:
22
- - url (str): The M3U8 playlist URL.
23
- """
24
- self.url_playlist = url
25
-
26
- def generate_full_url(self, url_resource: str) -> str:
27
- """
28
- Generate a full URL for a given resource using the base URL from the playlist.
29
-
30
- Parameters:
31
- - url_resource (str): The relative URL of the resource within the playlist.
32
-
33
- Returns:
34
- str: The full URL for the specified resource.
35
- """
36
-
37
- # Check if m3u8 url playlist is present
38
- if self.url_playlist == None:
39
- logging.error("[M3U8_UrlFix] Cant generate full url, playlist not present")
40
- raise
41
-
42
- # Parse the playlist URL to extract the base URL components
43
- parsed_playlist_url = urlparse(self.url_playlist)
44
-
45
- # Construct the base URL using the scheme, netloc, and path from the playlist URL
46
- base_url = f"{parsed_playlist_url.scheme}://{parsed_playlist_url.netloc}{parsed_playlist_url.path}"
47
-
48
- # Join the base URL with the relative resource URL to get the full URL
49
- full_url = urljoin(base_url, url_resource)
50
-
51
- return full_url
52
-
53
- def reset_playlist(self) -> None:
54
- """
55
- Reset the M3U8 playlist URL to its default state (None).
56
- """
57
- self.url_playlist = None
58
-
@@ -1,2 +0,0 @@
1
- from .tmdb import tmdb
2
- from .obj_tmbd import Json_film
@@ -1,39 +0,0 @@
1
- # 17.09.24
2
-
3
- from typing import Dict
4
-
5
-
6
- class Json_film:
7
- def __init__(self, data: Dict):
8
- self.adult = data.get('adult', False)
9
- self.backdrop_path = data.get('backdrop_path')
10
- self.budget = data.get('budget', 0)
11
- self.homepage = data.get('homepage')
12
- self.id = data.get('id', 0)
13
- self.imdb_id = data.get('imdb_id')
14
- self.origin_country = data.get('origin_country', [])
15
- self.original_language = data.get('original_language')
16
- self.original_title = data.get('original_title')
17
- self.overview = data.get('overview')
18
- self.popularity = data.get('popularity', 0.0)
19
- self.poster_path = data.get('poster_path')
20
- self.release_date = data.get('release_date')
21
- self.revenue = data.get('revenue', 0)
22
- self.runtime = data.get('runtime', 0)
23
- self.status = data.get('status')
24
- self.tagline = data.get('tagline')
25
- self.title = data.get('title')
26
- self.video = data.get('video', False)
27
- self.vote_average = data.get('vote_average', 0.0)
28
- self.vote_count = data.get('vote_count', 0)
29
-
30
- def __repr__(self):
31
- return (f"Film(adult={self.adult}, backdrop_path='{self.backdrop_path}', "
32
- f"budget={self.budget}, "
33
- f"homepage='{self.homepage}', id={self.id}, "
34
- f"imdb_id='{self.imdb_id}', origin_country={self.origin_country}, "
35
- f"original_language='{self.original_language}', original_title='{self.original_title}', "
36
- f"overview='{self.overview}', popularity={self.popularity}, poster_path='{self.poster_path}', "
37
- f"release_date='{self.release_date}', revenue={self.revenue}, runtime={self.runtime}, "
38
- f"status='{self.status}', tagline='{self.tagline}', "
39
- f"title='{self.title}', video={self.video}, vote_average={self.vote_average}, vote_count={self.vote_count})")
@@ -1,346 +0,0 @@
1
- # 24.08.24
2
-
3
- import sys
4
- from typing import Dict
5
-
6
-
7
- # External libraries
8
- import httpx
9
- from rich.console import Console
10
-
11
-
12
- # Internal utilities
13
- from .obj_tmbd import Json_film
14
- from StreamingCommunity.Util.table import TVShowManager
15
-
16
-
17
- # Variable
18
- table_show_manager = TVShowManager()
19
- api_key = "a800ed6c93274fb857ea61bd9e7256c5"
20
-
21
-
22
-
23
- def get_select_title(table_show_manager, generic_obj):
24
- """
25
- Display a selection of titles and prompt the user to choose one.
26
-
27
- Returns:
28
- dict: The selected media item.
29
- """
30
-
31
- # Set up table for displaying titles
32
- table_show_manager.set_slice_end(10)
33
-
34
- # Check if the generic_obj list is empty
35
- if not generic_obj:
36
- Console.print("\n[red]No media items available.")
37
- return None
38
-
39
- # Example of available colors for columns
40
- available_colors = ['red', 'magenta', 'yellow', 'cyan', 'green', 'blue', 'white']
41
-
42
- # Retrieve the keys of the first item as column headers
43
- first_item = generic_obj[0]
44
- column_info = {"Index": {'color': available_colors[0]}} # Always include Index with a fixed color
45
-
46
- # Assign colors to the remaining keys dynamically
47
- color_index = 1
48
- for key in first_item.keys():
49
- if key in ('name', 'date', 'number'): # Custom prioritization of colors
50
- if key == 'name':
51
- column_info["Name"] = {'color': 'magenta'}
52
- elif key == 'date':
53
- column_info["Date"] = {'color': 'cyan'}
54
- elif key == 'number':
55
- column_info["Number"] = {'color': 'yellow'}
56
-
57
- else:
58
- column_info[key.capitalize()] = {'color': available_colors[color_index % len(available_colors)]}
59
- color_index += 1
60
-
61
- table_show_manager.add_column(column_info)
62
-
63
- # Populate the table with title information
64
- for i, item in enumerate(generic_obj):
65
- item_dict = {'Index': str(i)}
66
-
67
- for key in item.keys():
68
- # Ensure all values are strings for rich add table
69
- item_dict[key.capitalize()] = str(item[key])
70
-
71
- table_show_manager.add_tv_show(item_dict)
72
-
73
- # Run the table and handle user input
74
- last_command = table_show_manager.run(force_int_input=True, max_int_input=len(generic_obj))
75
- table_show_manager.clear()
76
-
77
- # Handle user's quit command
78
- if last_command == "q" or last_command == "quit":
79
- Console.print("\n[red]Quit [white]...")
80
- sys.exit(0)
81
-
82
- # Check if the selected index is within range
83
- if 0 <= int(last_command) < len(generic_obj):
84
- return generic_obj[int(last_command)]
85
-
86
- else:
87
- Console.print("\n[red]Wrong index")
88
- sys.exit(0)
89
-
90
-
91
- class TheMovieDB:
92
- def __init__(self, api_key):
93
- """
94
- Initialize the class with the API key.
95
-
96
- Parameters:
97
- - api_key (str): The API key for authenticating requests to TheMovieDB.
98
- """
99
- self.api_key = api_key
100
- self.base_url = "https://api.themoviedb.org/3"
101
- self.console = Console()
102
- #self.genres = self._fetch_genres()
103
-
104
- def _make_request(self, endpoint, params=None):
105
- """
106
- Make a request to the given API endpoint with optional parameters.
107
-
108
- Parameters:
109
- - endpoint (str): The API endpoint to hit.
110
- - params (dict): Additional parameters for the request.
111
-
112
- Returns:
113
- dict: JSON response as a dictionary.
114
- """
115
- if params is None:
116
- params = {}
117
-
118
- params['api_key'] = self.api_key
119
- url = f"{self.base_url}/{endpoint}"
120
- response = httpx.get(url, params=params)
121
- response.raise_for_status()
122
-
123
- return response.json()
124
-
125
- def _fetch_genres(self) -> Dict[int, str]:
126
- """
127
- Fetch and return the genre names from TheMovieDB.
128
-
129
- Returns:
130
- Dict[int, str]: A dictionary mapping genre IDs to genre names.
131
- """
132
- genres = self._make_request("genre/movie/list")
133
- return {genre['id']: genre['name'] for genre in genres.get('genres', [])}
134
-
135
- def _process_and_add_tv_shows(self, data, columns):
136
- """
137
- Process TV show data and add it to the TV show manager.
138
-
139
- Parameters:
140
- - data (list): List of dictionaries containing the data to process.
141
- - columns (list): A list of tuples, where each tuple contains the column name and the key to fetch the data from the dictionary.
142
- """
143
- # Define column styles with colors
144
- tv_show_manager = TVShowManager()
145
- column_info = {
146
- col[0]: {'color': col[2] if len(col) > 2 else 'white'}
147
- for col in columns
148
- }
149
- tv_show_manager.add_column(column_info)
150
-
151
- # Add each item to the TV show manager, including rank
152
- for index, item in enumerate(data):
153
-
154
- # Convert genre IDs to genre names
155
- genre_names = [self.genres.get(genre_id, 'Unknown') for genre_id in item.get('genre_ids', [])]
156
- tv_show = {
157
- col[0]: str(item.get(col[1], 'N/A')) if col[1] != 'genre_ids' else ', '.join(genre_names)
158
- for col in columns
159
- }
160
-
161
- tv_show_manager.add_tv_show(tv_show)
162
-
163
- # Display the processed TV show data
164
- tv_show_manager.display_data(tv_show_manager.tv_shows[tv_show_manager.slice_start:tv_show_manager.slice_end])
165
-
166
- def _display_with_title(self, title: str, data, columns):
167
- """
168
- Display data with a title.
169
-
170
- Parameters:
171
- - title (str): The title to display.
172
- - data (list): List of dictionaries containing the data to process.
173
- - columns (list): A list of tuples, where each tuple contains the column name and the key to fetch the data from the dictionary.
174
- """
175
- self.console.print(f"\n{title}", style="bold underline")
176
- self._process_and_add_tv_shows(data, columns)
177
-
178
- def display_trending_tv_shows(self):
179
- """
180
- Fetch and display the trending TV shows of the week.
181
- """
182
- data = self._make_request("trending/tv/week").get("results", [])
183
- columns = [
184
- ("Title", "name", 'cyan'),
185
- ("First Air Date", "first_air_date", 'green'),
186
- ("Popularity", "popularity", 'magenta'),
187
- ("Genres", "genre_ids", 'blue'),
188
- ("Origin Country", "origin_country", 'red'),
189
- ("Vote Average", "vote_average", 'yellow')
190
- ]
191
- self._display_with_title("Trending TV Shows of the Week", data, columns)
192
-
193
- def display_trending_films(self):
194
- """
195
- Fetch and display the trending films of the week.
196
- """
197
- data = self._make_request("trending/movie/week").get("results", [])
198
- columns = [
199
- ("Title", "title", 'cyan'),
200
- ("Release Date", "release_date", 'green'),
201
- ("Popularity", "popularity", 'magenta'),
202
- ("Genres", "genre_ids", 'blue'),
203
- ("Vote Average", "vote_average", 'yellow')
204
- ]
205
- self._display_with_title("Trending Films of the Week", data, columns)
206
-
207
- def search_movie(self, movie_name: str):
208
- """
209
- Search for a movie by name and return its TMDB ID.
210
-
211
- Parameters:
212
- - movie_name (str): The name of the movie to search for.
213
-
214
- Returns:
215
- int: The TMDB ID of the selected movie.
216
- """
217
- generic_obj = []
218
- data = self._make_request("search/movie", {"query": movie_name}).get("results", [])
219
- if not data:
220
- self.console.print("No movies found with that name.", style="red")
221
- return None
222
-
223
- self.console.print("\nSelect a Movie:")
224
- for i, movie in enumerate(data, start=1):
225
- generic_obj.append({
226
- 'name': movie['title'],
227
- 'date': movie.get('release_date', 'N/A'),
228
- 'id': movie['id']
229
- })
230
-
231
- choice = get_select_title(table_show_manager, generic_obj)
232
- return choice["id"]
233
-
234
- def get_movie_details(self, tmdb_id: int) -> Json_film:
235
- """
236
- Fetch and display details for a specific movie using its TMDB ID.
237
-
238
- Parameters:
239
- - tmdb_id (int): The TMDB ID of the movie.
240
-
241
- Returns:
242
- - Json_film: The movie details as a class.
243
- """
244
- movie = self._make_request(f"movie/{tmdb_id}")
245
- if not movie:
246
- self.console.print("Movie not found.", style="red")
247
- return None
248
-
249
- return Json_film(movie)
250
-
251
- def search_tv_show(self, tv_name: str):
252
- """
253
- Search for a TV show by name and return its TMDB ID.
254
-
255
- Parameters:
256
- - tv_name (str): The name of the TV show to search for.
257
-
258
- Returns:
259
- int: The TMDB ID of the selected TV show.
260
- """
261
- data = self._make_request("search/tv", {"query": tv_name}).get("results", [])
262
- if not data:
263
- self.console.print("No TV shows found with that name.", style="red")
264
- return None
265
-
266
- self.console.print("\nSelect a TV Show:")
267
- for i, show in enumerate(data, start=1):
268
- self.console.print(f"{i}. {show['name']} (First Air Date: {show.get('first_air_date', 'N/A')})")
269
-
270
- choice = int(input("Enter the number of the show you want: ")) - 1
271
- selected_show = data[choice]
272
- return selected_show["id"] # Return the TMDB ID of the selected TV show
273
-
274
- def get_seasons(self, tv_show_id: int):
275
- """
276
- Get seasons for a given TV show.
277
-
278
- Parameters:
279
- - tv_show_id (int): The TMDB ID of the TV show.
280
-
281
- Returns:
282
- int: The season number selected by the user.
283
- """
284
- data = self._make_request(f"tv/{tv_show_id}").get("seasons", [])
285
- if not data:
286
- self.console.print("No seasons found for this TV show.", style="red")
287
- return None
288
-
289
- self.console.print("\nSelect a Season:")
290
- for i, season in enumerate(data, start=1):
291
- self.console.print(f"{i}. {season['name']} (Episodes: {season['episode_count']})")
292
-
293
- choice = int(input("Enter the number of the season you want: ")) - 1
294
- return data[choice]["season_number"]
295
-
296
- def get_episodes(self, tv_show_id: int, season_number: int):
297
- """
298
- Get episodes for a given season of a TV show.
299
-
300
- Parameters:
301
- - tv_show_id (int): The TMDB ID of the TV show.
302
- - season_number (int): The season number.
303
-
304
- Returns:
305
- dict: The details of the selected episode.
306
- """
307
- data = self._make_request(f"tv/{tv_show_id}/season/{season_number}").get("episodes", [])
308
- if not data:
309
- self.console.print("No episodes found for this season.", style="red")
310
- return None
311
-
312
- self.console.print("\nSelect an Episode:")
313
- for i, episode in enumerate(data, start=1):
314
- self.console.print(f"{i}. {episode['name']} (Air Date: {episode.get('air_date', 'N/A')})")
315
-
316
- choice = int(input("Enter the number of the episode you want: ")) - 1
317
- return data[choice]
318
-
319
-
320
-
321
- # Output
322
- tmdb = TheMovieDB(api_key)
323
-
324
-
325
- """
326
- Example:
327
-
328
-
329
- @ movie
330
- movie_name = "Interstellar"
331
- movie_id = tmdb.search_movie(movie_name)
332
-
333
- if movie_id:
334
- movie_details = tmdb.get_movie_details(tmdb_id=movie_id)
335
- print(movie_details)
336
-
337
-
338
- @ series
339
- tv_name = "Game of Thrones"
340
- tv_show_id = tmdb.search_tv_show(tv_name)
341
- if tv_show_id:
342
- season_number = tmdb.get_seasons(tv_show_id=tv_show_id)
343
- if season_number:
344
- episode = tmdb.get_episodes(tv_show_id=tv_show_id, season_number=season_number)
345
- print(episode)
346
- """
@@ -1,67 +0,0 @@
1
- # 01.03.2023
2
-
3
- import os
4
- import sys
5
- import time
6
-
7
-
8
- # Internal utilities
9
- from .version import __version__, __author__, __title__
10
- from StreamingCommunity.Util.console import console
11
-
12
-
13
- # External library
14
- import httpx
15
-
16
-
17
- # Variable
18
- if getattr(sys, 'frozen', False): # Modalità PyInstaller
19
- base_path = os.path.join(sys._MEIPASS, "StreamingCommunity")
20
- else:
21
- base_path = os.path.dirname(__file__)
22
-
23
-
24
- def update():
25
- """
26
- Check for updates on GitHub and display relevant information.
27
- """
28
-
29
- console.print("[green]Checking GitHub version [white]...")
30
-
31
- # Make the GitHub API requests and handle potential errors
32
- try:
33
- response_reposity = httpx.get(f"https://api.github.com/repos/{__author__}/{__title__}").json()
34
- response_releases = httpx.get(f"https://api.github.com/repos/{__author__}/{__title__}/releases").json()
35
-
36
- except Exception as e:
37
- console.print(f"[red]Error accessing GitHub API: {e}")
38
- return
39
-
40
- # Get stargazers count from the repository
41
- stargazers_count = response_reposity.get('stargazers_count', 0)
42
-
43
- # Calculate total download count from all releases
44
- total_download_count = sum(asset['download_count'] for release in response_releases for asset in release.get('assets', []))
45
-
46
- # Get latest version name
47
- if response_releases:
48
- last_version = response_releases[0].get('name', 'Unknown')
49
- else:
50
- last_version = 'Unknown'
51
-
52
- # Calculate percentual of stars based on download count
53
- if total_download_count > 0 and stargazers_count > 0:
54
- percentual_stars = round(stargazers_count / total_download_count * 100, 2)
55
- else:
56
- percentual_stars = 0
57
-
58
- # Check installed version
59
- if str(__version__).replace('v', '') != str(last_version).replace('v', '') :
60
- console.print(f"[red]New version available: [yellow]{last_version} \n")
61
- else:
62
- console.print(f" [yellow]Everything is up to date \n")
63
-
64
- console.print(f"[red]{__title__} has been downloaded [yellow]{total_download_count} [red]times, but only [yellow]{percentual_stars}% [red]of users have starred it.\n\
65
- [cyan]Help the repository grow today by leaving a [yellow]star [cyan]and [yellow]sharing [cyan]it with others online!")
66
-
67
- time.sleep(3)
@@ -1,5 +0,0 @@
1
- __title__ = 'StreamingCommunity'
2
- __version__ = '2.4.0'
3
- __author__ = 'Lovi-0'
4
- __description__ = 'A command-line program to download film'
5
- __copyright__ = 'Copyright 2024'