StreamingCommunity 2.5.2__py3-none-any.whl → 2.5.5__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 -143
- StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +136 -136
- StreamingCommunity/Api/Player/ddl.py +89 -89
- StreamingCommunity/Api/Player/maxstream.py +151 -151
- StreamingCommunity/Api/Player/supervideo.py +193 -193
- StreamingCommunity/Api/Player/vixcloud.py +272 -272
- StreamingCommunity/Api/Site/1337xx/__init__.py +51 -50
- StreamingCommunity/Api/Site/1337xx/costant.py +14 -14
- StreamingCommunity/Api/Site/1337xx/site.py +87 -89
- StreamingCommunity/Api/Site/1337xx/title.py +63 -64
- StreamingCommunity/Api/Site/altadefinizionegratis/__init__.py +74 -50
- StreamingCommunity/Api/Site/altadefinizionegratis/costant.py +21 -19
- StreamingCommunity/Api/Site/altadefinizionegratis/film.py +81 -72
- StreamingCommunity/Api/Site/altadefinizionegratis/site.py +116 -94
- StreamingCommunity/Api/Site/animeunity/__init__.py +75 -50
- StreamingCommunity/Api/Site/animeunity/costant.py +21 -19
- StreamingCommunity/Api/Site/animeunity/film_serie.py +171 -134
- StreamingCommunity/Api/Site/animeunity/site.py +191 -174
- StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +97 -97
- StreamingCommunity/Api/Site/cb01new/__init__.py +51 -51
- StreamingCommunity/Api/Site/cb01new/costant.py +19 -19
- StreamingCommunity/Api/Site/cb01new/film.py +61 -71
- StreamingCommunity/Api/Site/cb01new/site.py +82 -82
- StreamingCommunity/Api/Site/ddlstreamitaly/__init__.py +55 -55
- StreamingCommunity/Api/Site/ddlstreamitaly/costant.py +20 -20
- StreamingCommunity/Api/Site/ddlstreamitaly/series.py +149 -145
- StreamingCommunity/Api/Site/ddlstreamitaly/site.py +98 -98
- StreamingCommunity/Api/Site/ddlstreamitaly/util/ScrapeSerie.py +84 -84
- StreamingCommunity/Api/Site/guardaserie/__init__.py +50 -50
- StreamingCommunity/Api/Site/guardaserie/costant.py +19 -19
- StreamingCommunity/Api/Site/guardaserie/series.py +199 -198
- StreamingCommunity/Api/Site/guardaserie/site.py +89 -89
- StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +110 -110
- StreamingCommunity/Api/Site/ilcorsaronero/__init__.py +51 -51
- StreamingCommunity/Api/Site/ilcorsaronero/costant.py +18 -18
- StreamingCommunity/Api/Site/ilcorsaronero/site.py +71 -71
- StreamingCommunity/Api/Site/ilcorsaronero/title.py +44 -44
- StreamingCommunity/Api/Site/ilcorsaronero/util/ilCorsarScraper.py +149 -149
- StreamingCommunity/Api/Site/mostraguarda/__init__.py +48 -48
- StreamingCommunity/Api/Site/mostraguarda/costant.py +18 -18
- StreamingCommunity/Api/Site/mostraguarda/film.py +90 -101
- StreamingCommunity/Api/Site/streamingcommunity/__init__.py +79 -55
- StreamingCommunity/Api/Site/streamingcommunity/costant.py +21 -19
- StreamingCommunity/Api/Site/streamingcommunity/film.py +86 -75
- StreamingCommunity/Api/Site/streamingcommunity/series.py +259 -207
- StreamingCommunity/Api/Site/streamingcommunity/site.py +156 -142
- StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +124 -124
- StreamingCommunity/Api/Template/Class/SearchType.py +101 -101
- StreamingCommunity/Api/Template/Util/__init__.py +4 -4
- StreamingCommunity/Api/Template/Util/get_domain.py +201 -201
- StreamingCommunity/Api/Template/Util/manage_ep.py +178 -178
- StreamingCommunity/Api/Template/Util/recall_search.py +37 -37
- StreamingCommunity/Api/Template/__init__.py +2 -2
- StreamingCommunity/Api/Template/site.py +87 -87
- StreamingCommunity/Lib/Downloader/HLS/downloader.py +529 -1008
- StreamingCommunity/Lib/Downloader/HLS/proxyes.py +110 -110
- StreamingCommunity/Lib/Downloader/HLS/segments.py +446 -573
- StreamingCommunity/Lib/Downloader/MP4/downloader.py +181 -155
- StreamingCommunity/Lib/Downloader/TOR/downloader.py +297 -295
- StreamingCommunity/Lib/Downloader/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/__init__.py +4 -4
- StreamingCommunity/Lib/FFmpeg/capture.py +170 -170
- StreamingCommunity/Lib/FFmpeg/command.py +264 -296
- StreamingCommunity/Lib/FFmpeg/util.py +248 -248
- StreamingCommunity/Lib/M3U8/__init__.py +5 -5
- StreamingCommunity/Lib/M3U8/decryptor.py +164 -164
- StreamingCommunity/Lib/M3U8/estimator.py +146 -228
- StreamingCommunity/Lib/M3U8/parser.py +666 -666
- StreamingCommunity/Lib/M3U8/url_fixer.py +57 -57
- StreamingCommunity/Lib/TMBD/__init__.py +1 -1
- StreamingCommunity/Lib/TMBD/obj_tmbd.py +39 -39
- StreamingCommunity/Lib/TMBD/tmdb.py +345 -345
- StreamingCommunity/TelegramHelp/__init__.py +0 -0
- StreamingCommunity/TelegramHelp/request_manager.py +82 -0
- StreamingCommunity/TelegramHelp/session.py +56 -0
- StreamingCommunity/TelegramHelp/telegram_bot.py +561 -0
- StreamingCommunity/Upload/update.py +75 -67
- StreamingCommunity/Upload/version.py +5 -5
- StreamingCommunity/Util/_jsonConfig.py +227 -228
- StreamingCommunity/Util/call_stack.py +42 -42
- StreamingCommunity/Util/color.py +20 -20
- StreamingCommunity/Util/console.py +12 -12
- StreamingCommunity/Util/ffmpeg_installer.py +342 -370
- StreamingCommunity/Util/headers.py +159 -159
- StreamingCommunity/Util/logger.py +61 -61
- StreamingCommunity/Util/message.py +36 -64
- StreamingCommunity/Util/os.py +500 -507
- StreamingCommunity/Util/table.py +271 -228
- StreamingCommunity/run.py +352 -245
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/LICENSE +674 -674
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/METADATA +601 -543
- StreamingCommunity-2.5.5.dist-info/RECORD +96 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/entry_points.txt +0 -1
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/js_parser.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/Helper/Vixcloud/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/ddl.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/maxstream.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/supervideo.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Player/__pycache__/vixcloud.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/1337xx/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/altadefinizionegratis/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/film_serie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/animeunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/cb01new/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ddlstreamitaly/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/guardaserie/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/__pycache__/title.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/ilcorsaronero/util/__pycache__/ilCorsarScraper.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/mostraguarda/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/costant.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/film.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/series.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Site/streamingcommunity/util/__pycache__/ScrapeSerie.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Class/__pycache__/SearchType.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/get_domain.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/manage_ep.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/Util/__pycache__/recall_search.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-313.pyc +0 -0
- StreamingCommunity/Api/Template/__pycache__/site.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/proxyes.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/HLS/__pycache__/segments.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/MP4/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/TOR/__pycache__/downloader.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/Downloader/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/capture.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/command.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/FFmpeg/__pycache__/util.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/decryptor.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/estimator.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/parser.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/M3U8/__pycache__/url_fixer.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/obj_tmbd.cpython-39.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-313.pyc +0 -0
- StreamingCommunity/Lib/TMBD/__pycache__/tmdb.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/update.cpython-39.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-313.pyc +0 -0
- StreamingCommunity/Upload/__pycache__/version.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/_jsonConfig.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/call_stack.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/color.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/console.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/ffmpeg_installer.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/headers.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/logger.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/message.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/os.cpython-39.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-313.pyc +0 -0
- StreamingCommunity/Util/__pycache__/table.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/__init__.cpython-39.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-313.pyc +0 -0
- StreamingCommunity/__pycache__/run.cpython-39.pyc +0 -0
- StreamingCommunity-2.5.2.dist-info/RECORD +0 -264
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/WHEEL +0 -0
- {StreamingCommunity-2.5.2.dist-info → StreamingCommunity-2.5.5.dist-info}/top_level.txt +0 -0
|
@@ -1,179 +1,179 @@
|
|
|
1
|
-
# 19.06.24
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from typing import List
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# Internal utilities
|
|
8
|
-
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
9
|
-
from StreamingCommunity.Util.os import os_manager
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# Config
|
|
13
|
-
MAP_EPISODE = config_manager.get('DEFAULT', 'map_episode_name')
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def dynamic_format_number(n: int) -> str:
|
|
17
|
-
"""
|
|
18
|
-
Formats a number by adding a leading zero if it is less than 9.
|
|
19
|
-
The width of the resulting string is dynamic, calculated as the number of digits in the number plus one
|
|
20
|
-
for numbers less than 9, otherwise the width remains the same.
|
|
21
|
-
|
|
22
|
-
Parameters:
|
|
23
|
-
- n (int): The number to format.
|
|
24
|
-
|
|
25
|
-
Returns:
|
|
26
|
-
- str: The formatted number as a string with a leading zero if the number is less than 9.
|
|
27
|
-
"""
|
|
28
|
-
if n < 10:
|
|
29
|
-
width = len(str(n)) + 1
|
|
30
|
-
else:
|
|
31
|
-
width = len(str(n))
|
|
32
|
-
|
|
33
|
-
return str(n).zfill(width)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def manage_selection(cmd_insert: str, max_count: int) -> List[int]:
|
|
37
|
-
"""
|
|
38
|
-
Manage user selection for seasons or episodes to download.
|
|
39
|
-
|
|
40
|
-
Parameters:
|
|
41
|
-
- cmd_insert (str): User input for selection.
|
|
42
|
-
- max_count (int): Maximum count available.
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
list_selection (List[int]): List of selected items.
|
|
46
|
-
"""
|
|
47
|
-
list_selection = []
|
|
48
|
-
logging.info(f"Command insert: {cmd_insert}, end index: {max_count + 1}")
|
|
49
|
-
|
|
50
|
-
# For a single number (e.g., '5')
|
|
51
|
-
if cmd_insert.isnumeric():
|
|
52
|
-
list_selection.append(int(cmd_insert))
|
|
53
|
-
|
|
54
|
-
# For a range (e.g., '5-12')
|
|
55
|
-
elif "-" in cmd_insert:
|
|
56
|
-
start, end = map(str.strip, cmd_insert.split('-'))
|
|
57
|
-
start = int(start)
|
|
58
|
-
end = int(end) if end.isnumeric() else max_count
|
|
59
|
-
|
|
60
|
-
list_selection = list(range(start, end + 1))
|
|
61
|
-
|
|
62
|
-
# For all items ('*')
|
|
63
|
-
elif cmd_insert == "*":
|
|
64
|
-
list_selection = list(range(1, max_count + 1))
|
|
65
|
-
|
|
66
|
-
else:
|
|
67
|
-
raise ValueError("Invalid input format")
|
|
68
|
-
|
|
69
|
-
logging.info(f"List return: {list_selection}")
|
|
70
|
-
return list_selection
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def map_episode_title(tv_name: str, number_season: int, episode_number: int, episode_name: str) -> str:
|
|
74
|
-
"""
|
|
75
|
-
Maps the episode title to a specific format.
|
|
76
|
-
|
|
77
|
-
Parameters:
|
|
78
|
-
tv_name (str): The name of the TV show.
|
|
79
|
-
number_season (int): The season number.
|
|
80
|
-
episode_number (int): The episode number.
|
|
81
|
-
episode_name (str): The original name of the episode.
|
|
82
|
-
|
|
83
|
-
Returns:
|
|
84
|
-
str: The mapped episode title.
|
|
85
|
-
"""
|
|
86
|
-
map_episode_temp = MAP_EPISODE
|
|
87
|
-
|
|
88
|
-
if tv_name != None:
|
|
89
|
-
map_episode_temp = map_episode_temp.replace("%(tv_name)", os_manager.get_sanitize_file(tv_name))
|
|
90
|
-
|
|
91
|
-
if number_season != None:
|
|
92
|
-
map_episode_temp = map_episode_temp.replace("%(season)", number_season)
|
|
93
|
-
else:
|
|
94
|
-
map_episode_temp = map_episode_temp.replace("%(season)", dynamic_format_number(0))
|
|
95
|
-
|
|
96
|
-
if episode_number != None:
|
|
97
|
-
map_episode_temp = map_episode_temp.replace("%(episode)", dynamic_format_number(episode_number))
|
|
98
|
-
else:
|
|
99
|
-
map_episode_temp = map_episode_temp.replace("%(episode)", dynamic_format_number(0))
|
|
100
|
-
|
|
101
|
-
if episode_name != None:
|
|
102
|
-
map_episode_temp = map_episode_temp.replace("%(episode_name)", os_manager.get_sanitize_file(episode_name))
|
|
103
|
-
|
|
104
|
-
logging.info(f"Map episode string return: {map_episode_temp}")
|
|
105
|
-
return map_episode_temp
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
# --> for season
|
|
109
|
-
def validate_selection(list_season_select: List[int], seasons_count: int) -> List[int]:
|
|
110
|
-
"""
|
|
111
|
-
Validates and adjusts the selected seasons based on the available seasons.
|
|
112
|
-
|
|
113
|
-
Parameters:
|
|
114
|
-
- list_season_select (List[int]): List of seasons selected by the user.
|
|
115
|
-
- seasons_count (int): Total number of available seasons.
|
|
116
|
-
|
|
117
|
-
Returns:
|
|
118
|
-
- List[int]: Adjusted list of valid season numbers.
|
|
119
|
-
"""
|
|
120
|
-
while True:
|
|
121
|
-
try:
|
|
122
|
-
|
|
123
|
-
# Remove any seasons greater than the available seasons
|
|
124
|
-
valid_seasons = [season for season in list_season_select if 1 <= season <= seasons_count]
|
|
125
|
-
|
|
126
|
-
# If the list is empty, the input was completely invalid
|
|
127
|
-
if not valid_seasons:
|
|
128
|
-
logging.error(f"Invalid selection: The selected seasons are outside the available range (1-{seasons_count}). Please try again.")
|
|
129
|
-
|
|
130
|
-
# Re-prompt for valid input
|
|
131
|
-
input_seasons = input(f"Enter valid season numbers (1-{seasons_count}): ")
|
|
132
|
-
list_season_select = list(map(int, input_seasons.split(',')))
|
|
133
|
-
continue # Re-prompt the user if the selection is invalid
|
|
134
|
-
|
|
135
|
-
return valid_seasons # Return the valid seasons if the input is correct
|
|
136
|
-
|
|
137
|
-
except ValueError:
|
|
138
|
-
logging.error("Error: Please enter valid integers separated by commas.")
|
|
139
|
-
|
|
140
|
-
# Prompt the user for valid input again
|
|
141
|
-
input_seasons = input(f"Enter valid season numbers (1-{seasons_count}): ")
|
|
142
|
-
list_season_select = list(map(int, input_seasons.split(',')))
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
# --> for episode
|
|
146
|
-
def validate_episode_selection(list_episode_select: List[int], episodes_count: int) -> List[int]:
|
|
147
|
-
"""
|
|
148
|
-
Validates and adjusts the selected episodes based on the available episodes.
|
|
149
|
-
|
|
150
|
-
Parameters:
|
|
151
|
-
- list_episode_select (List[int]): List of episodes selected by the user.
|
|
152
|
-
- episodes_count (int): Total number of available episodes in the season.
|
|
153
|
-
|
|
154
|
-
Returns:
|
|
155
|
-
- List[int]: Adjusted list of valid episode numbers.
|
|
156
|
-
"""
|
|
157
|
-
while True:
|
|
158
|
-
try:
|
|
159
|
-
|
|
160
|
-
# Remove any episodes greater than the available episodes
|
|
161
|
-
valid_episodes = [episode for episode in list_episode_select if 1 <= episode <= episodes_count]
|
|
162
|
-
|
|
163
|
-
# If the list is empty, the input was completely invalid
|
|
164
|
-
if not valid_episodes:
|
|
165
|
-
logging.error(f"Invalid selection: The selected episodes are outside the available range (1-{episodes_count}). Please try again.")
|
|
166
|
-
|
|
167
|
-
# Re-prompt for valid input
|
|
168
|
-
input_episodes = input(f"Enter valid episode numbers (1-{episodes_count}): ")
|
|
169
|
-
list_episode_select = list(map(int, input_episodes.split(',')))
|
|
170
|
-
continue # Re-prompt the user if the selection is invalid
|
|
171
|
-
|
|
172
|
-
return valid_episodes
|
|
173
|
-
|
|
174
|
-
except ValueError:
|
|
175
|
-
logging.error("Error: Please enter valid integers separated by commas.")
|
|
176
|
-
|
|
177
|
-
# Prompt the user for valid input again
|
|
178
|
-
input_episodes = input(f"Enter valid episode numbers (1-{episodes_count}): ")
|
|
1
|
+
# 19.06.24
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
from typing import List
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Internal utilities
|
|
8
|
+
from StreamingCommunity.Util._jsonConfig import config_manager
|
|
9
|
+
from StreamingCommunity.Util.os import os_manager
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# Config
|
|
13
|
+
MAP_EPISODE = config_manager.get('DEFAULT', 'map_episode_name')
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def dynamic_format_number(n: int) -> str:
|
|
17
|
+
"""
|
|
18
|
+
Formats a number by adding a leading zero if it is less than 9.
|
|
19
|
+
The width of the resulting string is dynamic, calculated as the number of digits in the number plus one
|
|
20
|
+
for numbers less than 9, otherwise the width remains the same.
|
|
21
|
+
|
|
22
|
+
Parameters:
|
|
23
|
+
- n (int): The number to format.
|
|
24
|
+
|
|
25
|
+
Returns:
|
|
26
|
+
- str: The formatted number as a string with a leading zero if the number is less than 9.
|
|
27
|
+
"""
|
|
28
|
+
if n < 10:
|
|
29
|
+
width = len(str(n)) + 1
|
|
30
|
+
else:
|
|
31
|
+
width = len(str(n))
|
|
32
|
+
|
|
33
|
+
return str(n).zfill(width)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def manage_selection(cmd_insert: str, max_count: int) -> List[int]:
|
|
37
|
+
"""
|
|
38
|
+
Manage user selection for seasons or episodes to download.
|
|
39
|
+
|
|
40
|
+
Parameters:
|
|
41
|
+
- cmd_insert (str): User input for selection.
|
|
42
|
+
- max_count (int): Maximum count available.
|
|
43
|
+
|
|
44
|
+
Returns:
|
|
45
|
+
list_selection (List[int]): List of selected items.
|
|
46
|
+
"""
|
|
47
|
+
list_selection = []
|
|
48
|
+
logging.info(f"Command insert: {cmd_insert}, end index: {max_count + 1}")
|
|
49
|
+
|
|
50
|
+
# For a single number (e.g., '5')
|
|
51
|
+
if cmd_insert.isnumeric():
|
|
52
|
+
list_selection.append(int(cmd_insert))
|
|
53
|
+
|
|
54
|
+
# For a range (e.g., '5-12')
|
|
55
|
+
elif "-" in cmd_insert:
|
|
56
|
+
start, end = map(str.strip, cmd_insert.split('-'))
|
|
57
|
+
start = int(start)
|
|
58
|
+
end = int(end) if end.isnumeric() else max_count
|
|
59
|
+
|
|
60
|
+
list_selection = list(range(start, end + 1))
|
|
61
|
+
|
|
62
|
+
# For all items ('*')
|
|
63
|
+
elif cmd_insert == "*":
|
|
64
|
+
list_selection = list(range(1, max_count + 1))
|
|
65
|
+
|
|
66
|
+
else:
|
|
67
|
+
raise ValueError("Invalid input format")
|
|
68
|
+
|
|
69
|
+
logging.info(f"List return: {list_selection}")
|
|
70
|
+
return list_selection
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def map_episode_title(tv_name: str, number_season: int, episode_number: int, episode_name: str) -> str:
|
|
74
|
+
"""
|
|
75
|
+
Maps the episode title to a specific format.
|
|
76
|
+
|
|
77
|
+
Parameters:
|
|
78
|
+
tv_name (str): The name of the TV show.
|
|
79
|
+
number_season (int): The season number.
|
|
80
|
+
episode_number (int): The episode number.
|
|
81
|
+
episode_name (str): The original name of the episode.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
str: The mapped episode title.
|
|
85
|
+
"""
|
|
86
|
+
map_episode_temp = MAP_EPISODE
|
|
87
|
+
|
|
88
|
+
if tv_name != None:
|
|
89
|
+
map_episode_temp = map_episode_temp.replace("%(tv_name)", os_manager.get_sanitize_file(tv_name))
|
|
90
|
+
|
|
91
|
+
if number_season != None:
|
|
92
|
+
map_episode_temp = map_episode_temp.replace("%(season)", number_season)
|
|
93
|
+
else:
|
|
94
|
+
map_episode_temp = map_episode_temp.replace("%(season)", dynamic_format_number(0))
|
|
95
|
+
|
|
96
|
+
if episode_number != None:
|
|
97
|
+
map_episode_temp = map_episode_temp.replace("%(episode)", dynamic_format_number(episode_number))
|
|
98
|
+
else:
|
|
99
|
+
map_episode_temp = map_episode_temp.replace("%(episode)", dynamic_format_number(0))
|
|
100
|
+
|
|
101
|
+
if episode_name != None:
|
|
102
|
+
map_episode_temp = map_episode_temp.replace("%(episode_name)", os_manager.get_sanitize_file(episode_name))
|
|
103
|
+
|
|
104
|
+
logging.info(f"Map episode string return: {map_episode_temp}")
|
|
105
|
+
return map_episode_temp
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# --> for season
|
|
109
|
+
def validate_selection(list_season_select: List[int], seasons_count: int) -> List[int]:
|
|
110
|
+
"""
|
|
111
|
+
Validates and adjusts the selected seasons based on the available seasons.
|
|
112
|
+
|
|
113
|
+
Parameters:
|
|
114
|
+
- list_season_select (List[int]): List of seasons selected by the user.
|
|
115
|
+
- seasons_count (int): Total number of available seasons.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
- List[int]: Adjusted list of valid season numbers.
|
|
119
|
+
"""
|
|
120
|
+
while True:
|
|
121
|
+
try:
|
|
122
|
+
|
|
123
|
+
# Remove any seasons greater than the available seasons
|
|
124
|
+
valid_seasons = [season for season in list_season_select if 1 <= season <= seasons_count]
|
|
125
|
+
|
|
126
|
+
# If the list is empty, the input was completely invalid
|
|
127
|
+
if not valid_seasons:
|
|
128
|
+
logging.error(f"Invalid selection: The selected seasons are outside the available range (1-{seasons_count}). Please try again.")
|
|
129
|
+
|
|
130
|
+
# Re-prompt for valid input
|
|
131
|
+
input_seasons = input(f"Enter valid season numbers (1-{seasons_count}): ")
|
|
132
|
+
list_season_select = list(map(int, input_seasons.split(',')))
|
|
133
|
+
continue # Re-prompt the user if the selection is invalid
|
|
134
|
+
|
|
135
|
+
return valid_seasons # Return the valid seasons if the input is correct
|
|
136
|
+
|
|
137
|
+
except ValueError:
|
|
138
|
+
logging.error("Error: Please enter valid integers separated by commas.")
|
|
139
|
+
|
|
140
|
+
# Prompt the user for valid input again
|
|
141
|
+
input_seasons = input(f"Enter valid season numbers (1-{seasons_count}): ")
|
|
142
|
+
list_season_select = list(map(int, input_seasons.split(',')))
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# --> for episode
|
|
146
|
+
def validate_episode_selection(list_episode_select: List[int], episodes_count: int) -> List[int]:
|
|
147
|
+
"""
|
|
148
|
+
Validates and adjusts the selected episodes based on the available episodes.
|
|
149
|
+
|
|
150
|
+
Parameters:
|
|
151
|
+
- list_episode_select (List[int]): List of episodes selected by the user.
|
|
152
|
+
- episodes_count (int): Total number of available episodes in the season.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
- List[int]: Adjusted list of valid episode numbers.
|
|
156
|
+
"""
|
|
157
|
+
while True:
|
|
158
|
+
try:
|
|
159
|
+
|
|
160
|
+
# Remove any episodes greater than the available episodes
|
|
161
|
+
valid_episodes = [episode for episode in list_episode_select if 1 <= episode <= episodes_count]
|
|
162
|
+
|
|
163
|
+
# If the list is empty, the input was completely invalid
|
|
164
|
+
if not valid_episodes:
|
|
165
|
+
logging.error(f"Invalid selection: The selected episodes are outside the available range (1-{episodes_count}). Please try again.")
|
|
166
|
+
|
|
167
|
+
# Re-prompt for valid input
|
|
168
|
+
input_episodes = input(f"Enter valid episode numbers (1-{episodes_count}): ")
|
|
169
|
+
list_episode_select = list(map(int, input_episodes.split(',')))
|
|
170
|
+
continue # Re-prompt the user if the selection is invalid
|
|
171
|
+
|
|
172
|
+
return valid_episodes
|
|
173
|
+
|
|
174
|
+
except ValueError:
|
|
175
|
+
logging.error("Error: Please enter valid integers separated by commas.")
|
|
176
|
+
|
|
177
|
+
# Prompt the user for valid input again
|
|
178
|
+
input_episodes = input(f"Enter valid episode numbers (1-{episodes_count}): ")
|
|
179
179
|
list_episode_select = list(map(int, input_episodes.split(',')))
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
# 19.10.24
|
|
2
|
-
|
|
3
|
-
import os
|
|
4
|
-
import sys
|
|
5
|
-
|
|
6
|
-
def execute_search(info):
|
|
7
|
-
"""
|
|
8
|
-
Dynamically imports and executes a specified function from a module defined in the info dictionary.
|
|
9
|
-
|
|
10
|
-
Parameters:
|
|
11
|
-
info (dict): A dictionary containing the function name, folder, and module information.
|
|
12
|
-
"""
|
|
13
|
-
|
|
14
|
-
# Define the project path using the folder from the info dictionary
|
|
15
|
-
project_path = os.path.dirname(info['folder']) # Get the base path for the project
|
|
16
|
-
|
|
17
|
-
# Add the project path to sys.path
|
|
18
|
-
if project_path not in sys.path:
|
|
19
|
-
sys.path.append(project_path)
|
|
20
|
-
|
|
21
|
-
# Attempt to import the specified function from the module
|
|
22
|
-
try:
|
|
23
|
-
# Construct the import statement dynamically
|
|
24
|
-
module_path = f"StreamingCommunity.Api.Site{info['folder_base']}"
|
|
25
|
-
exec(f"from {module_path} import {info['function']}")
|
|
26
|
-
|
|
27
|
-
# Call the specified function
|
|
28
|
-
eval(info['function'])() # Calls the search function
|
|
29
|
-
|
|
30
|
-
except ModuleNotFoundError as e:
|
|
31
|
-
print(f"ModuleNotFoundError: {e}")
|
|
32
|
-
|
|
33
|
-
except ImportError as e:
|
|
34
|
-
print(f"ImportError: {e}")
|
|
35
|
-
|
|
36
|
-
except Exception as e:
|
|
37
|
-
print(f"An error occurred: {e}")
|
|
1
|
+
# 19.10.24
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
def execute_search(info):
|
|
7
|
+
"""
|
|
8
|
+
Dynamically imports and executes a specified function from a module defined in the info dictionary.
|
|
9
|
+
|
|
10
|
+
Parameters:
|
|
11
|
+
info (dict): A dictionary containing the function name, folder, and module information.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
# Define the project path using the folder from the info dictionary
|
|
15
|
+
project_path = os.path.dirname(info['folder']) # Get the base path for the project
|
|
16
|
+
|
|
17
|
+
# Add the project path to sys.path
|
|
18
|
+
if project_path not in sys.path:
|
|
19
|
+
sys.path.append(project_path)
|
|
20
|
+
|
|
21
|
+
# Attempt to import the specified function from the module
|
|
22
|
+
try:
|
|
23
|
+
# Construct the import statement dynamically
|
|
24
|
+
module_path = f"StreamingCommunity.Api.Site{info['folder_base']}"
|
|
25
|
+
exec(f"from {module_path} import {info['function']}")
|
|
26
|
+
|
|
27
|
+
# Call the specified function
|
|
28
|
+
eval(info['function'])() # Calls the search function
|
|
29
|
+
|
|
30
|
+
except ModuleNotFoundError as e:
|
|
31
|
+
print(f"ModuleNotFoundError: {e}")
|
|
32
|
+
|
|
33
|
+
except ImportError as e:
|
|
34
|
+
print(f"ImportError: {e}")
|
|
35
|
+
|
|
36
|
+
except Exception as e:
|
|
37
|
+
print(f"An error occurred: {e}")
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
# 19.06.24
|
|
2
|
-
|
|
1
|
+
# 19.06.24
|
|
2
|
+
|
|
3
3
|
from .site import get_select_title
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
# 19.06.24
|
|
2
|
-
|
|
3
|
-
import sys
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
# Internal utilities
|
|
7
|
-
from StreamingCommunity.Util.console import console
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Variable
|
|
11
|
-
available_colors = ['red', 'magenta', 'yellow', 'cyan', 'green', 'blue', 'white']
|
|
12
|
-
column_to_hide = ['Slug', 'Sub_ita', 'Last_air_date', 'Seasons_count', 'Url']
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def get_select_title(table_show_manager, media_search_manager):
|
|
16
|
-
"""
|
|
17
|
-
Display a selection of titles and prompt the user to choose one.
|
|
18
|
-
|
|
19
|
-
Returns:
|
|
20
|
-
MediaItem: The selected media item.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
# Set up table for displaying titles
|
|
24
|
-
table_show_manager.set_slice_end(10)
|
|
25
|
-
|
|
26
|
-
# Determine column_info dynamically for (search site)
|
|
27
|
-
if not media_search_manager.media_list:
|
|
28
|
-
console.print("\n[red]No media items available.")
|
|
29
|
-
return None
|
|
30
|
-
|
|
31
|
-
# Example of available colors for columns
|
|
32
|
-
available_colors = ['red', 'magenta', 'yellow', 'cyan', 'green', 'blue', 'white']
|
|
33
|
-
|
|
34
|
-
# Retrieve the keys of the first media item as column headers
|
|
35
|
-
first_media_item = media_search_manager.media_list[0]
|
|
36
|
-
column_info = {"Index": {'color': available_colors[0]}} # Always include Index with a fixed color
|
|
37
|
-
|
|
38
|
-
# Assign colors to the remaining keys dynamically
|
|
39
|
-
color_index = 1
|
|
40
|
-
for key in first_media_item.__dict__.keys():
|
|
41
|
-
|
|
42
|
-
if key.capitalize() in column_to_hide:
|
|
43
|
-
continue
|
|
44
|
-
|
|
45
|
-
if key in ('id', 'type', 'name', 'score'): # Custom prioritization of colors
|
|
46
|
-
if key == 'type':
|
|
47
|
-
column_info["Type"] = {'color': 'yellow'}
|
|
48
|
-
elif key == 'name':
|
|
49
|
-
column_info["Name"] = {'color': 'magenta'}
|
|
50
|
-
elif key == 'score':
|
|
51
|
-
column_info["Score"] = {'color': 'cyan'}
|
|
52
|
-
|
|
53
|
-
else:
|
|
54
|
-
column_info[key.capitalize()] = {'color': available_colors[color_index % len(available_colors)]}
|
|
55
|
-
color_index += 1
|
|
56
|
-
|
|
57
|
-
table_show_manager.add_column(column_info)
|
|
58
|
-
|
|
59
|
-
# Populate the table with title information
|
|
60
|
-
for i, media in enumerate(media_search_manager.media_list):
|
|
61
|
-
media_dict = {'Index': str(i)}
|
|
62
|
-
|
|
63
|
-
for key in first_media_item.__dict__.keys():
|
|
64
|
-
if key.capitalize() in column_to_hide:
|
|
65
|
-
continue
|
|
66
|
-
|
|
67
|
-
# Ensure all values are strings for rich add table
|
|
68
|
-
media_dict[key.capitalize()] = str(getattr(media, key))
|
|
69
|
-
|
|
70
|
-
table_show_manager.add_tv_show(media_dict)
|
|
71
|
-
|
|
72
|
-
# Run the table and handle user input
|
|
73
|
-
last_command = table_show_manager.run(force_int_input=True, max_int_input=len(media_search_manager.media_list))
|
|
74
|
-
table_show_manager.clear()
|
|
75
|
-
|
|
76
|
-
# Handle user's quit command
|
|
77
|
-
if last_command == "q" or last_command == "quit":
|
|
78
|
-
console.print("\n[red]Quit [white]...")
|
|
79
|
-
sys.exit(0)
|
|
80
|
-
|
|
81
|
-
# Check if the selected index is within range
|
|
82
|
-
if 0 <= int(last_command) < len(media_search_manager.media_list):
|
|
83
|
-
return media_search_manager.get(int(last_command))
|
|
84
|
-
|
|
85
|
-
else:
|
|
86
|
-
console.print("\n[red]Wrong index")
|
|
87
|
-
sys.exit(0)
|
|
1
|
+
# 19.06.24
|
|
2
|
+
|
|
3
|
+
import sys
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
# Internal utilities
|
|
7
|
+
from StreamingCommunity.Util.console import console
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Variable
|
|
11
|
+
available_colors = ['red', 'magenta', 'yellow', 'cyan', 'green', 'blue', 'white']
|
|
12
|
+
column_to_hide = ['Slug', 'Sub_ita', 'Last_air_date', 'Seasons_count', 'Url']
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_select_title(table_show_manager, media_search_manager):
|
|
16
|
+
"""
|
|
17
|
+
Display a selection of titles and prompt the user to choose one.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
MediaItem: The selected media item.
|
|
21
|
+
"""
|
|
22
|
+
|
|
23
|
+
# Set up table for displaying titles
|
|
24
|
+
table_show_manager.set_slice_end(10)
|
|
25
|
+
|
|
26
|
+
# Determine column_info dynamically for (search site)
|
|
27
|
+
if not media_search_manager.media_list:
|
|
28
|
+
console.print("\n[red]No media items available.")
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
# Example of available colors for columns
|
|
32
|
+
available_colors = ['red', 'magenta', 'yellow', 'cyan', 'green', 'blue', 'white']
|
|
33
|
+
|
|
34
|
+
# Retrieve the keys of the first media item as column headers
|
|
35
|
+
first_media_item = media_search_manager.media_list[0]
|
|
36
|
+
column_info = {"Index": {'color': available_colors[0]}} # Always include Index with a fixed color
|
|
37
|
+
|
|
38
|
+
# Assign colors to the remaining keys dynamically
|
|
39
|
+
color_index = 1
|
|
40
|
+
for key in first_media_item.__dict__.keys():
|
|
41
|
+
|
|
42
|
+
if key.capitalize() in column_to_hide:
|
|
43
|
+
continue
|
|
44
|
+
|
|
45
|
+
if key in ('id', 'type', 'name', 'score'): # Custom prioritization of colors
|
|
46
|
+
if key == 'type':
|
|
47
|
+
column_info["Type"] = {'color': 'yellow'}
|
|
48
|
+
elif key == 'name':
|
|
49
|
+
column_info["Name"] = {'color': 'magenta'}
|
|
50
|
+
elif key == 'score':
|
|
51
|
+
column_info["Score"] = {'color': 'cyan'}
|
|
52
|
+
|
|
53
|
+
else:
|
|
54
|
+
column_info[key.capitalize()] = {'color': available_colors[color_index % len(available_colors)]}
|
|
55
|
+
color_index += 1
|
|
56
|
+
|
|
57
|
+
table_show_manager.add_column(column_info)
|
|
58
|
+
|
|
59
|
+
# Populate the table with title information
|
|
60
|
+
for i, media in enumerate(media_search_manager.media_list):
|
|
61
|
+
media_dict = {'Index': str(i)}
|
|
62
|
+
|
|
63
|
+
for key in first_media_item.__dict__.keys():
|
|
64
|
+
if key.capitalize() in column_to_hide:
|
|
65
|
+
continue
|
|
66
|
+
|
|
67
|
+
# Ensure all values are strings for rich add table
|
|
68
|
+
media_dict[key.capitalize()] = str(getattr(media, key))
|
|
69
|
+
|
|
70
|
+
table_show_manager.add_tv_show(media_dict)
|
|
71
|
+
|
|
72
|
+
# Run the table and handle user input
|
|
73
|
+
last_command = table_show_manager.run(force_int_input=True, max_int_input=len(media_search_manager.media_list))
|
|
74
|
+
table_show_manager.clear()
|
|
75
|
+
|
|
76
|
+
# Handle user's quit command
|
|
77
|
+
if last_command == "q" or last_command == "quit":
|
|
78
|
+
console.print("\n[red]Quit [white]...")
|
|
79
|
+
sys.exit(0)
|
|
80
|
+
|
|
81
|
+
# Check if the selected index is within range
|
|
82
|
+
if 0 <= int(last_command) < len(media_search_manager.media_list):
|
|
83
|
+
return media_search_manager.get(int(last_command))
|
|
84
|
+
|
|
85
|
+
else:
|
|
86
|
+
console.print("\n[red]Wrong index")
|
|
87
|
+
sys.exit(0)
|