StreamingCommunity 3.3.3__tar.gz → 3.3.6__tar.gz

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 (117) hide show
  1. {streamingcommunity-3.3.3/StreamingCommunity.egg-info → streamingcommunity-3.3.6}/PKG-INFO +38 -51
  2. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/README.md +37 -50
  3. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/altadefinizione/__init__.py +17 -18
  4. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/altadefinizione/series.py +4 -0
  5. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeunity/__init__.py +14 -15
  6. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeunity/serie.py +1 -1
  7. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeworld/__init__.py +15 -13
  8. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeworld/serie.py +1 -1
  9. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/__init__.py +16 -17
  10. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/series.py +6 -1
  11. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/guardaserie/__init__.py +17 -19
  12. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/guardaserie/series.py +4 -0
  13. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/guardaserie/site.py +2 -7
  14. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/__init__.py +15 -15
  15. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/series.py +4 -0
  16. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/site.py +12 -2
  17. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/util/ScrapeSerie.py +67 -98
  18. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/__init__.py +15 -15
  19. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/series.py +5 -1
  20. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingcommunity/__init__.py +16 -14
  21. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingwatch/__init__.py +12 -12
  22. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingwatch/series.py +4 -0
  23. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/Class/SearchType.py +0 -1
  24. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/Util/manage_ep.py +1 -11
  25. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/site.py +2 -3
  26. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/DASH/decrypt.py +4 -1
  27. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/DASH/downloader.py +55 -17
  28. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/DASH/segments.py +73 -17
  29. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/HLS/downloader.py +282 -152
  30. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/HLS/segments.py +1 -5
  31. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/FFmpeg/capture.py +1 -1
  32. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/FFmpeg/command.py +6 -6
  33. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/FFmpeg/util.py +11 -30
  34. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/M3U8/estimator.py +27 -13
  35. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Upload/update.py +2 -2
  36. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Upload/version.py +1 -1
  37. streamingcommunity-3.3.6/StreamingCommunity/Util/installer/__init__.py +11 -0
  38. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/installer/device_install.py +1 -1
  39. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/os.py +2 -6
  40. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/table.py +40 -8
  41. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/run.py +15 -8
  42. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6/StreamingCommunity.egg-info}/PKG-INFO +38 -51
  43. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity.egg-info/SOURCES.txt +1 -0
  44. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/LICENSE +0 -0
  45. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/MANIFEST.in +0 -0
  46. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/Helper/Vixcloud/js_parser.py +0 -0
  47. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/Helper/Vixcloud/util.py +0 -0
  48. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/hdplayer.py +0 -0
  49. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/mediapolisvod.py +0 -0
  50. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/supervideo.py +0 -0
  51. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/sweetpixel.py +0 -0
  52. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Player/vixcloud.py +0 -0
  53. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/altadefinizione/film.py +0 -0
  54. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/altadefinizione/site.py +0 -0
  55. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/altadefinizione/util/ScrapeSerie.py +0 -0
  56. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeunity/film.py +0 -0
  57. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeunity/site.py +0 -0
  58. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeunity/util/ScrapeSerie.py +0 -0
  59. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeworld/film.py +0 -0
  60. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeworld/site.py +0 -0
  61. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/animeworld/util/ScrapeSerie.py +0 -0
  62. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/film.py +0 -0
  63. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/site.py +0 -0
  64. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/util/ScrapeSerie.py +0 -0
  65. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/crunchyroll/util/get_license.py +0 -0
  66. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/guardaserie/util/ScrapeSerie.py +0 -0
  67. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/film.py +0 -0
  68. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/util/fix_mpd.py +0 -0
  69. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/mediasetinfinity/util/get_license.py +0 -0
  70. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/film.py +0 -0
  71. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/site.py +0 -0
  72. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/util/ScrapeSerie.py +0 -0
  73. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/raiplay/util/get_license.py +0 -0
  74. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingcommunity/film.py +0 -0
  75. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingcommunity/series.py +0 -0
  76. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingcommunity/site.py +0 -0
  77. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingcommunity/util/ScrapeSerie.py +0 -0
  78. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingwatch/film.py +0 -0
  79. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingwatch/site.py +0 -0
  80. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Site/streamingwatch/util/ScrapeSerie.py +0 -0
  81. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/Util/__init__.py +0 -0
  82. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/__init__.py +0 -0
  83. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Api/Template/config_loader.py +0 -0
  84. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/DASH/cdm_helpher.py +0 -0
  85. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/DASH/parser.py +0 -0
  86. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/MP4/downloader.py +0 -0
  87. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/TOR/downloader.py +0 -0
  88. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/Downloader/__init__.py +0 -0
  89. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/FFmpeg/__init__.py +0 -0
  90. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/M3U8/__init__.py +0 -0
  91. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/M3U8/decryptor.py +0 -0
  92. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/M3U8/parser.py +0 -0
  93. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/M3U8/url_fixer.py +0 -0
  94. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/TMBD/__init__.py +0 -0
  95. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/TMBD/obj_tmbd.py +0 -0
  96. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Lib/TMBD/tmdb.py +0 -0
  97. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/TelegramHelp/__init__.py +0 -0
  98. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/TelegramHelp/config.json +0 -0
  99. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/TelegramHelp/telegram_bot.py +0 -0
  100. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/color.py +0 -0
  101. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/config_json.py +0 -0
  102. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/headers.py +0 -0
  103. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/http_client.py +0 -0
  104. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/installer/bento4_install.py +0 -0
  105. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/installer/binary_paths.py +0 -0
  106. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/installer/ffmpeg_install.py +0 -0
  107. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/logger.py +0 -0
  108. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/Util/message.py +0 -0
  109. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/__init__.py +0 -0
  110. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity/global_search.py +0 -0
  111. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity.egg-info/dependency_links.txt +0 -0
  112. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity.egg-info/entry_points.txt +0 -0
  113. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity.egg-info/requires.txt +0 -0
  114. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/StreamingCommunity.egg-info/top_level.txt +0 -0
  115. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/requirements.txt +0 -0
  116. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/setup.cfg +0 -0
  117. {streamingcommunity-3.3.3 → streamingcommunity-3.3.6}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: StreamingCommunity
3
- Version: 3.3.3
3
+ Version: 3.3.6
4
4
  Home-page: https://github.com/Arrowar/StreamingCommunity
5
5
  Author: Arrowar
6
6
  Project-URL: Bug Reports, https://github.com/Arrowar/StreamingCommunity/issues
@@ -45,7 +45,9 @@ Dynamic: requires-python
45
45
  [![License](https://img.shields.io/github/license/Arrowar/StreamingCommunity?logo=gnu&logoColor=white&labelColor=2d3748&color=e53e3e&style=for-the-badge)](https://github.com/Arrowar/StreamingCommunity/blob/main/LICENSE)
46
46
 
47
47
  ## 💝 Support the Project
48
- [![Donate PayPal](https://img.shields.io/badge/💳_Donate-PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white&labelColor=2d3748)](https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C)
48
+ <a href='https://ko-fi.com/E1E11LVC83' target='_blank'>
49
+ <img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi4.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' />
50
+ </a>
49
51
 
50
52
  ## 🚀 Download & Install
51
53
  [![Windows](https://img.shields.io/badge/🪟_Windows-0078D4?style=for-the-badge&logo=windows&logoColor=white&labelColor=2d3748)](https://github.com/Arrowar/StreamingCommunity/releases/latest/download/StreamingCommunity_win.exe)
@@ -62,50 +64,44 @@ Dynamic: requires-python
62
64
  ---
63
65
 
64
66
  ## 📖 Table of Contents
65
- - [Installation](#manual-installation)
66
- - [Quick Start](#quick-start)
67
- - [Downloaders](#downloaders)
68
- - [Configuration](#configuration)
69
- - [Login](.github/.site/login.md)
70
- - [Usage Examples](#usage-examples)
71
- - [Global Search](#global-search)
72
- - [Advanced Features](#advanced-options)
73
- - [Deployment](#docker)
74
- - [Tutorials](#tutorials)
75
- - [Related Projects](#useful-project)
67
+ - ⚙️ [Installation](#installation)
68
+ - 🚀 [Quick Start](#quick-start)
69
+ - 📥 [Downloaders](#downloaders)
70
+ - 🛠️ [Configuration](#configuration)
71
+ - 🔐 [Login](.github/.site/login.md)
72
+ - 🌐 [Domain](https://arrowar.github.io/StreamingCommunity)
73
+ - 💡 [Usage Examples](#usage-examples)
74
+ - 🔍 [Global Search](#global-search)
75
+ - 🧩 [Advanced Features](#advanced-options)
76
+ - 🐳 [Deployment](#docker)
77
+ - 🎓 [Tutorials](#tutorials)
78
+ - 🔗 [Related Projects](#useful-project)
76
79
 
77
80
  ---
78
81
 
79
- ## Manual Installation
82
+ ## Installation
80
83
 
81
- <summary>⚙️ Python Dependencies</summary>
84
+ ### Prerequisites
85
+ Make sure you have Python installed on your system:
86
+ - **Windows**: Download from [python.org](https://python.org) or install via Microsoft Store
87
+ - **Linux**: `sudo apt install python3 python3-pip` (Ubuntu/Debian) or equivalent for your distro
88
+ - **MacOS**: `brew install python3` or download from [python.org](https://python.org)
82
89
 
83
- #### On Windows:
84
-
85
- ```powershell
90
+ ### Dependencies
91
+ ```bash
92
+ # Windows
86
93
  pip install -r requirements.txt
87
- ```
88
94
 
89
- #### On Linux/MacOS:
90
-
91
- ```bash
95
+ # Linux/MacOS
92
96
  pip3 install -r requirements.txt
93
- # or alternatively:
94
- python3 -m pip install -r requirements.txt
95
97
  ```
96
98
 
97
- <detail>
98
- <summary> Update </summary>
99
-
100
- ### On Windows:
101
-
102
- ```powershell
99
+ ### Update
100
+ ```bash
101
+ # Windows
103
102
  python update.py
104
- ```
105
103
 
106
- ### On Linux/MacOS:
107
-
108
- ```bash
104
+ # Linux/MacOS
109
105
  python3 update.py
110
106
  ```
111
107
 
@@ -113,26 +109,17 @@ python3 update.py
113
109
 
114
110
  ## Quick Start
115
111
 
116
- After installing via pip, just run:
112
+ **Via pip installation:**
117
113
  ```bash
118
114
  StreamingCommunity
119
115
  ```
120
- to start the application.
121
-
122
- Run the script:
123
- ```bash
124
- python run_streaming.py
125
- ```
126
116
 
127
117
  **Manual execution:**
128
-
129
- **Windows:**
130
- ```powershell
118
+ ```bash
119
+ # Windows
131
120
  python test_run.py
132
- ```
133
121
 
134
- **Linux/MacOS:**
135
- ```bash
122
+ # Linux/MacOS
136
123
  python3 test_run.py
137
124
  ```
138
125
 
@@ -155,7 +142,7 @@ downloader = HLS_Downloader(
155
142
  downloader.download()
156
143
  ```
157
144
 
158
- See [HLS example](./Test/EasyDownload//HLS.py) for complete usage.
145
+ See [HLS example](./Test/Downloads//HLS.py) for complete usage.
159
146
 
160
147
  <summary>📽️ MP4</summary>
161
148
 
@@ -172,7 +159,7 @@ downloader = MP4_downloader(
172
159
  downloader.download()
173
160
  ```
174
161
 
175
- See [MP4 example](./Test/EasyDownload/MP4.py) for complete usage.
162
+ See [MP4 example](./Test/Downloads/MP4.py) for complete usage.
176
163
 
177
164
  <summary>🧲 TOR</summary>
178
165
 
@@ -188,7 +175,7 @@ client.add_magnet_link("magnet:?xt=urn:btih:example_hash&dn=example_name", save_
188
175
  client.start_download()
189
176
  ```
190
177
 
191
- See [Torrent example](./Test/EasyDownload/TOR.py) for complete usage.
178
+ See [Torrent example](./Test/Downloads/TOR.py) for complete usage.
192
179
 
193
180
  <summary>🎞️ DASH</summary>
194
181
 
@@ -210,7 +197,7 @@ if dash_process.download_and_decrypt():
210
197
  dash_process.get_status()
211
198
  ```
212
199
 
213
- See [DASH example](./Test/EasyDownload/DASH.py) for complete usage.
200
+ See [DASH example](./Test/Downloads/DASH.py) for complete usage.
214
201
 
215
202
  ---
216
203
 
@@ -7,7 +7,9 @@
7
7
  [![License](https://img.shields.io/github/license/Arrowar/StreamingCommunity?logo=gnu&logoColor=white&labelColor=2d3748&color=e53e3e&style=for-the-badge)](https://github.com/Arrowar/StreamingCommunity/blob/main/LICENSE)
8
8
 
9
9
  ## 💝 Support the Project
10
- [![Donate PayPal](https://img.shields.io/badge/💳_Donate-PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white&labelColor=2d3748)](https://www.paypal.com/donate/?hosted_button_id=UXTWMT8P6HE2C)
10
+ <a href='https://ko-fi.com/E1E11LVC83' target='_blank'>
11
+ <img height='36' style='border:0px;height:36px;' src='https://storage.ko-fi.com/cdn/kofi4.png?v=6' border='0' alt='Buy Me a Coffee at ko-fi.com' />
12
+ </a>
11
13
 
12
14
  ## 🚀 Download & Install
13
15
  [![Windows](https://img.shields.io/badge/🪟_Windows-0078D4?style=for-the-badge&logo=windows&logoColor=white&labelColor=2d3748)](https://github.com/Arrowar/StreamingCommunity/releases/latest/download/StreamingCommunity_win.exe)
@@ -24,50 +26,44 @@
24
26
  ---
25
27
 
26
28
  ## 📖 Table of Contents
27
- - [Installation](#manual-installation)
28
- - [Quick Start](#quick-start)
29
- - [Downloaders](#downloaders)
30
- - [Configuration](#configuration)
31
- - [Login](.github/.site/login.md)
32
- - [Usage Examples](#usage-examples)
33
- - [Global Search](#global-search)
34
- - [Advanced Features](#advanced-options)
35
- - [Deployment](#docker)
36
- - [Tutorials](#tutorials)
37
- - [Related Projects](#useful-project)
29
+ - ⚙️ [Installation](#installation)
30
+ - 🚀 [Quick Start](#quick-start)
31
+ - 📥 [Downloaders](#downloaders)
32
+ - 🛠️ [Configuration](#configuration)
33
+ - 🔐 [Login](.github/.site/login.md)
34
+ - 🌐 [Domain](https://arrowar.github.io/StreamingCommunity)
35
+ - 💡 [Usage Examples](#usage-examples)
36
+ - 🔍 [Global Search](#global-search)
37
+ - 🧩 [Advanced Features](#advanced-options)
38
+ - 🐳 [Deployment](#docker)
39
+ - 🎓 [Tutorials](#tutorials)
40
+ - 🔗 [Related Projects](#useful-project)
38
41
 
39
42
  ---
40
43
 
41
- ## Manual Installation
44
+ ## Installation
42
45
 
43
- <summary>⚙️ Python Dependencies</summary>
46
+ ### Prerequisites
47
+ Make sure you have Python installed on your system:
48
+ - **Windows**: Download from [python.org](https://python.org) or install via Microsoft Store
49
+ - **Linux**: `sudo apt install python3 python3-pip` (Ubuntu/Debian) or equivalent for your distro
50
+ - **MacOS**: `brew install python3` or download from [python.org](https://python.org)
44
51
 
45
- #### On Windows:
46
-
47
- ```powershell
52
+ ### Dependencies
53
+ ```bash
54
+ # Windows
48
55
  pip install -r requirements.txt
49
- ```
50
56
 
51
- #### On Linux/MacOS:
52
-
53
- ```bash
57
+ # Linux/MacOS
54
58
  pip3 install -r requirements.txt
55
- # or alternatively:
56
- python3 -m pip install -r requirements.txt
57
59
  ```
58
60
 
59
- <detail>
60
- <summary> Update </summary>
61
-
62
- ### On Windows:
63
-
64
- ```powershell
61
+ ### Update
62
+ ```bash
63
+ # Windows
65
64
  python update.py
66
- ```
67
65
 
68
- ### On Linux/MacOS:
69
-
70
- ```bash
66
+ # Linux/MacOS
71
67
  python3 update.py
72
68
  ```
73
69
 
@@ -75,26 +71,17 @@ python3 update.py
75
71
 
76
72
  ## Quick Start
77
73
 
78
- After installing via pip, just run:
74
+ **Via pip installation:**
79
75
  ```bash
80
76
  StreamingCommunity
81
77
  ```
82
- to start the application.
83
-
84
- Run the script:
85
- ```bash
86
- python run_streaming.py
87
- ```
88
78
 
89
79
  **Manual execution:**
90
-
91
- **Windows:**
92
- ```powershell
80
+ ```bash
81
+ # Windows
93
82
  python test_run.py
94
- ```
95
83
 
96
- **Linux/MacOS:**
97
- ```bash
84
+ # Linux/MacOS
98
85
  python3 test_run.py
99
86
  ```
100
87
 
@@ -117,7 +104,7 @@ downloader = HLS_Downloader(
117
104
  downloader.download()
118
105
  ```
119
106
 
120
- See [HLS example](./Test/EasyDownload//HLS.py) for complete usage.
107
+ See [HLS example](./Test/Downloads//HLS.py) for complete usage.
121
108
 
122
109
  <summary>📽️ MP4</summary>
123
110
 
@@ -134,7 +121,7 @@ downloader = MP4_downloader(
134
121
  downloader.download()
135
122
  ```
136
123
 
137
- See [MP4 example](./Test/EasyDownload/MP4.py) for complete usage.
124
+ See [MP4 example](./Test/Downloads/MP4.py) for complete usage.
138
125
 
139
126
  <summary>🧲 TOR</summary>
140
127
 
@@ -150,7 +137,7 @@ client.add_magnet_link("magnet:?xt=urn:btih:example_hash&dn=example_name", save_
150
137
  client.start_download()
151
138
  ```
152
139
 
153
- See [Torrent example](./Test/EasyDownload/TOR.py) for complete usage.
140
+ See [Torrent example](./Test/Downloads/TOR.py) for complete usage.
154
141
 
155
142
  <summary>🎞️ DASH</summary>
156
143
 
@@ -172,7 +159,7 @@ if dash_process.download_and_decrypt():
172
159
  dash_process.get_status()
173
160
  ```
174
161
 
175
- See [DASH example](./Test/EasyDownload/DASH.py) for complete usage.
162
+ See [DASH example](./Test/Downloads/DASH.py) for complete usage.
176
163
 
177
164
  ---
178
165
 
@@ -2,7 +2,6 @@
2
2
 
3
3
  import sys
4
4
  import subprocess
5
- from urllib.parse import quote_plus
6
5
 
7
6
 
8
7
  # External library
@@ -101,10 +100,13 @@ def process_search_result(select_title, selections=None):
101
100
  episode_selection = selections.get('episode')
102
101
 
103
102
  download_series(select_title, season_selection, episode_selection)
103
+ media_search_manager.clear()
104
+ table_show_manager.clear()
104
105
  return True
105
106
 
106
107
  else:
107
108
  download_film(select_title)
109
+ table_show_manager.clear()
108
110
  return True
109
111
 
110
112
  # search("Game of Thrones", selections={"season": "1", "episode": "1-3"})
@@ -122,40 +124,37 @@ def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_
122
124
  bot = None
123
125
  if site_constant.TELEGRAM_BOT:
124
126
  bot = get_bot_instance()
125
-
127
+
126
128
  if direct_item:
127
129
  select_title = MediaItem(**direct_item)
128
- process_search_result(select_title, selections)
129
- return True
130
-
130
+ result = process_search_result(select_title, selections)
131
+ return result
132
+
131
133
  # Get the user input for the search term
132
134
  actual_search_query = get_user_input(string_to_search)
133
135
 
134
- # Handle cases where user input is empty, or 'back' was handled (sys.exit or None return)
136
+ # Handle empty input
135
137
  if not actual_search_query:
136
138
  if bot:
137
- if actual_search_query is None: # Specifically for timeout from bot.ask or failed restart
139
+ if actual_search_query is None:
138
140
  bot.send_message("Search term not provided or operation cancelled. Returning.", None)
139
- return
140
-
141
- # Perform the database search
142
- len_database = title_search(quote_plus(actual_search_query))
141
+ return False
142
+
143
+ # Search on database
144
+ len_database = title_search(actual_search_query)
143
145
 
144
146
  # If only the database is needed, return the manager
145
147
  if get_onlyDatabase:
146
148
  return media_search_manager
147
-
149
+
148
150
  if len_database > 0:
149
151
  select_title = get_select_title(table_show_manager, media_search_manager, len_database)
150
- process_search_result(select_title, selections)
151
- return True
152
+ result = process_search_result(select_title, selections)
153
+ return result
152
154
 
153
155
  else:
154
156
  if bot:
155
157
  bot.send_message(f"No results found for: '{actual_search_query}'", None)
156
158
  else:
157
159
  console.print(f"\n[red]Nothing matching was found for[white]: [purple]{actual_search_query}")
158
-
159
- # Do not call search() recursively here to avoid infinite loops on no results.
160
- # The flow should return to the caller (e.g., main menu in run.py).
161
- return
160
+ return False
@@ -109,6 +109,10 @@ def download_episode(index_season_selected: int, scrape_serie: GetSerieInfo, dow
109
109
  episodes = scrape_serie.getEpisodeSeasons(index_season_selected)
110
110
  episodes_count = len(episodes)
111
111
 
112
+ if episodes_count == 0:
113
+ console.print(f"[red]No episodes found for season {index_season_selected}")
114
+ return
115
+
112
116
  if download_all:
113
117
  for i_episode in range(1, episodes_count + 1):
114
118
  path, stopped = download_video(index_season_selected, i_episode, scrape_serie)
@@ -104,6 +104,8 @@ def process_search_result(select_title, selections=None):
104
104
  episode_selection = selections.get('episode')
105
105
 
106
106
  download_series(select_title, season_selection, episode_selection)
107
+ media_search_manager.clear()
108
+ table_show_manager.clear()
107
109
  return True
108
110
 
109
111
  def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None, selections: dict = None):
@@ -120,40 +122,37 @@ def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_
120
122
  bot = None
121
123
  if site_constant.TELEGRAM_BOT:
122
124
  bot = get_bot_instance()
123
-
125
+
124
126
  if direct_item:
125
127
  select_title = MediaItem(**direct_item)
126
- process_search_result(select_title, selections)
127
- return True
128
+ result = process_search_result(select_title, selections)
129
+ return result
128
130
 
129
131
  # Get the user input for the search term
130
132
  actual_search_query = get_user_input(string_to_search)
131
133
 
132
- # Handle cases where user input is empty, or 'back' was handled (sys.exit or None return)
134
+ # Handle empty input
133
135
  if not actual_search_query:
134
136
  if bot:
135
- if actual_search_query is None: # Specifically for timeout from bot.ask or failed restart
137
+ if actual_search_query is None:
136
138
  bot.send_message("Search term not provided or operation cancelled. Returning.", None)
137
- return
138
-
139
- # Perform the database search
139
+ return False
140
+
141
+ # Search on database
140
142
  len_database = title_search(actual_search_query)
141
143
 
142
144
  # If only the database is needed, return the manager
143
145
  if get_onlyDatabase:
144
146
  return media_search_manager
145
-
147
+
146
148
  if len_database > 0:
147
149
  select_title = get_select_title(table_show_manager, media_search_manager, len_database)
148
- process_search_result(select_title, selections)
149
- return True
150
+ result = process_search_result(select_title, selections)
151
+ return result
150
152
 
151
153
  else:
152
154
  if bot:
153
155
  bot.send_message(f"No results found for: '{actual_search_query}'", None)
154
156
  else:
155
157
  console.print(f"\n[red]Nothing matching was found for[white]: [purple]{actual_search_query}")
156
-
157
- # Do not call search() recursively here to avoid infinite loops on no results.
158
- # The flow should return to the caller (e.g., main menu in run.py).
159
- return
158
+ return False
@@ -48,7 +48,7 @@ def download_episode(index_select: int, scrape_serie: ScrapeSerieAnime, video_so
48
48
 
49
49
  # Get episode information
50
50
  obj_episode = scrape_serie.selectEpisode(1, index_select)
51
- console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] ([cyan]E{obj_episode.number}[/cyan]) \n")
51
+ console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [cyan]{scrape_serie.series_name}[/cyan] ([cyan]E{obj_episode.number}[/cyan]) \n")
52
52
 
53
53
  if site_constant.TELEGRAM_BOT:
54
54
  bot = get_bot_instance()
@@ -95,11 +95,15 @@ def process_search_result(select_title, selections=None):
95
95
  episode_selection = None
96
96
  if selections:
97
97
  episode_selection = selections.get('episode')
98
+
98
99
  download_series(select_title, episode_selection)
100
+ media_search_manager.clear()
101
+ table_show_manager.clear()
99
102
  return True
100
103
 
101
104
  else:
102
105
  download_film(select_title)
106
+ table_show_manager.clear()
103
107
  return True
104
108
 
105
109
  def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_item: dict = None, selections: dict = None):
@@ -119,36 +123,34 @@ def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_
119
123
 
120
124
  if direct_item:
121
125
  select_title = MediaItem(**direct_item)
122
- process_search_result(select_title, selections)
123
- return True
124
-
126
+ result = process_search_result(select_title, selections)
127
+ return result
128
+
125
129
  # Get the user input for the search term
126
130
  actual_search_query = get_user_input(string_to_search)
127
131
 
128
- # Perform the database search
132
+ # Handle empty input
129
133
  if not actual_search_query:
130
134
  if bot:
131
135
  if actual_search_query is None:
132
136
  bot.send_message("Search term not provided or operation cancelled. Returning.", None)
133
- return
137
+ return False
134
138
 
139
+ # Search on database
135
140
  len_database = title_search(actual_search_query)
136
141
 
137
142
  # If only the database is needed, return the manager
138
143
  if get_onlyDatabase:
139
144
  return media_search_manager
140
-
145
+
141
146
  if len_database > 0:
142
147
  select_title = get_select_title(table_show_manager, media_search_manager, len_database)
143
- process_search_result(select_title, selections)
144
- return True
145
-
148
+ result = process_search_result(select_title, selections)
149
+ return result
150
+
146
151
  else:
147
152
  if bot:
148
153
  bot.send_message(f"No results found for: '{actual_search_query}'", None)
149
154
  else:
150
155
  console.print(f"\n[red]Nothing matching was found for[white]: [purple]{actual_search_query}")
151
-
152
- # Do not call search() recursively here to avoid infinite loops on no results.
153
- # The flow should return to the caller (e.g., main menu in run.py).
154
- return
156
+ return False
@@ -47,7 +47,7 @@ def download_episode(index_select: int, scrape_serie: ScrapSerie) -> Tuple[str,b
47
47
 
48
48
  # Get episode information
49
49
  episode_data = scrape_serie.selectEpisode(1, index_select)
50
- console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] ([cyan]E{index_select+1}[/cyan]) \n")
50
+ console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [cyan]{scrape_serie.get_name()}[/cyan] ([cyan]E{str(index_select+1)}[/cyan]) \n")
51
51
 
52
52
  # Define filename and path for the downloaded video
53
53
  mp4_name = f"{scrape_serie.get_name()}_EP_{dynamic_format_number(str(index_select+1))}.mp4"
@@ -2,7 +2,6 @@
2
2
 
3
3
  import sys
4
4
  import subprocess
5
- from urllib.parse import quote_plus
6
5
 
7
6
 
8
7
  # External library
@@ -101,10 +100,13 @@ def process_search_result(select_title, selections=None):
101
100
  episode_selection = selections.get('episode')
102
101
 
103
102
  download_series(select_title, season_selection, episode_selection)
103
+ media_search_manager.clear()
104
+ table_show_manager.clear()
104
105
  return True
105
106
 
106
107
  else:
107
108
  download_film(select_title)
109
+ table_show_manager.clear()
108
110
  return True
109
111
 
110
112
  # search("Game of Thrones", selections={"season": "1", "episode": "1-3"})
@@ -122,40 +124,37 @@ def search(string_to_search: str = None, get_onlyDatabase: bool = False, direct_
122
124
  bot = None
123
125
  if site_constant.TELEGRAM_BOT:
124
126
  bot = get_bot_instance()
125
-
127
+
126
128
  if direct_item:
127
129
  select_title = MediaItem(**direct_item)
128
- process_search_result(select_title, selections)
129
- return True
130
+ result = process_search_result(select_title, selections)
131
+ return result
130
132
 
131
133
  # Get the user input for the search term
132
134
  actual_search_query = get_user_input(string_to_search)
133
135
 
134
- # Handle cases where user input is empty, or 'back' was handled (sys.exit or None return)
136
+ # Handle empty input
135
137
  if not actual_search_query:
136
138
  if bot:
137
- if actual_search_query is None: # Specifically for timeout from bot.ask or failed restart
139
+ if actual_search_query is None:
138
140
  bot.send_message("Search term not provided or operation cancelled. Returning.", None)
139
- return
140
-
141
- # Perform the database search
142
- len_database = title_search(quote_plus(actual_search_query))
141
+ return False
142
+
143
+ # Search on database
144
+ len_database = title_search(actual_search_query)
143
145
 
144
146
  # If only the database is needed, return the manager
145
147
  if get_onlyDatabase:
146
148
  return media_search_manager
147
-
149
+
148
150
  if len_database > 0:
149
151
  select_title = get_select_title(table_show_manager, media_search_manager, len_database)
150
- process_search_result(select_title, selections)
151
- return True
152
+ result = process_search_result(select_title, selections)
153
+ return result
152
154
 
153
155
  else:
154
156
  if bot:
155
157
  bot.send_message(f"No results found for: '{actual_search_query}'", None)
156
158
  else:
157
159
  console.print(f"\n[red]Nothing matching was found for[white]: [purple]{actual_search_query}")
158
-
159
- # Do not call search() recursively here to avoid infinite loops on no results.
160
- # The flow should return to the caller (e.g., main menu in run.py).
161
- return
160
+ return False
@@ -55,7 +55,8 @@ def download_video(index_season_selected: int, index_episode_selected: int, scra
55
55
 
56
56
  # Get episode information
57
57
  obj_episode = scrape_serie.selectEpisode(index_season_selected, index_episode_selected-1)
58
- console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [bold magenta]{obj_episode.get('name')}[/bold magenta] ([cyan]S{index_season_selected}E{index_episode_selected}[/cyan]) \n")
58
+
59
+ console.print(f"[bold yellow]Download:[/bold yellow] [red]{site_constant.SITE_NAME}[/red] → [cyan]{scrape_serie.series_name}[/cyan] \\ [bold magenta]{obj_episode.get('name')}[/bold magenta] ([cyan]S{index_season_selected}E{index_episode_selected}[/cyan]) \n")
59
60
 
60
61
  # Define filename and path for the downloaded video
61
62
  mp4_name = f"{map_episode_title(scrape_serie.series_name, index_season_selected, index_episode_selected, obj_episode.get('name'))}.mp4"
@@ -117,6 +118,10 @@ def download_episode(index_season_selected: int, scrape_serie: GetSerieInfo, dow
117
118
  episodes = scrape_serie.getEpisodeSeasons(index_season_selected)
118
119
  episodes_count = len(episodes)
119
120
 
121
+ if episodes_count == 0:
122
+ console.print(f"[red]No episodes found for season {index_season_selected}")
123
+ return
124
+
120
125
  if download_all:
121
126
  for i_episode in range(1, episodes_count + 1):
122
127
  path, stopped = download_video(index_season_selected, i_episode, scrape_serie)