weeb-cli 2.7.0__tar.gz → 2.7.1__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.
- weeb_cli-2.7.1/PKG-INFO +368 -0
- weeb_cli-2.7.1/README.md +333 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/pyproject.toml +1 -1
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_cache.py +0 -11
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_exceptions.py +0 -9
- weeb_cli-2.7.1/tests/test_providers.py +333 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_sanitizer.py +1 -16
- weeb_cli-2.7.1/weeb_cli/__init__.py +1 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/__init__.py +3 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/anime_details.py +71 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/download_flow.py +113 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/episode_utils.py +66 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/search_handlers.py +112 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/stream_utils.py +34 -0
- weeb_cli-2.7.1/weeb_cli/commands/search/watch_flow.py +256 -0
- weeb_cli-2.7.1/weeb_cli/commands/search.py +3 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/__init__.py +3 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_backup.py +116 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_config.py +90 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_download.py +159 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_drives.py +128 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_menu.py +111 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_shortcuts.py +109 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings/settings_trackers.py +226 -0
- weeb_cli-2.7.1/weeb_cli/commands/settings.py +3 -0
- weeb_cli-2.7.1/weeb_cli/commands/setup.py +29 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/commands/watchlist.py +1 -1
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/config.py +4 -5
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/exceptions.py +0 -11
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/locales/en.json +7 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/locales/tr.json +7 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/dependency_manager.py +13 -3
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/utils/sanitizer.py +0 -32
- weeb_cli-2.7.1/weeb_cli.egg-info/PKG-INFO +368 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/SOURCES.txt +16 -0
- weeb_cli-2.7.0/PKG-INFO +0 -218
- weeb_cli-2.7.0/README.md +0 -183
- weeb_cli-2.7.0/weeb_cli/__init__.py +0 -1
- weeb_cli-2.7.0/weeb_cli/commands/search.py +0 -551
- weeb_cli-2.7.0/weeb_cli/commands/settings.py +0 -863
- weeb_cli-2.7.0/weeb_cli/commands/setup.py +0 -26
- weeb_cli-2.7.0/weeb_cli.egg-info/PKG-INFO +0 -218
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/LICENSE +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/setup.cfg +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/__main__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/commands/downloads.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/i18n.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/main.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/__init__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/allanime.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/animecix.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/anizle.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/base.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/extractors/__init__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/extractors/megacloud.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/hianime.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/registry.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/turkanime.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/__init__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/_base.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/_tracker_base.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/cache.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/database.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/details.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/discord_rpc.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/downloader.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/error_handler.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/local_library.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/logger.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/notifier.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/player.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/progress.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/scraper.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/search.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/shortcuts.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/tracker.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/updater.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/watch.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/anilist_error.html +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/anilist_success.html +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/mal_error.html +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/mal_success.html +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/__init__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/header.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/menu.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/prompt.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/utils/__init__.py +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/dependency_links.txt +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/entry_points.txt +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/requires.txt +0 -0
- {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/top_level.txt +0 -0
weeb_cli-2.7.1/PKG-INFO
ADDED
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: weeb-cli
|
|
3
|
+
Version: 2.7.1
|
|
4
|
+
Summary: Tarayıcı yok, reklam yok, dikkat dağıtıcı unsur yok. Sadece siz ve eşsiz bir anime izleme deneyimi.
|
|
5
|
+
Author-email: ewgsta <ewgst@proton.me>
|
|
6
|
+
License-Expression: CC-BY-NC-ND-4.0
|
|
7
|
+
Project-URL: Homepage, https://weeb-cli.ewgsta.me
|
|
8
|
+
Project-URL: Repository, https://github.com/ewgsta/weeb-cli
|
|
9
|
+
Project-URL: Issues, https://github.com/ewgsta/weeb-cli/issues
|
|
10
|
+
Keywords: anime,weeb,anime-download,anizm,anime-watch,anime-watching,anime-downloading,anime-cli,allanime,animecix,anime-indir,anime-izle,weeb-cli,anime-izleme,anime-indirme,weebanime,tranime
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Requires-Python: >=3.8
|
|
15
|
+
Description-Content-Type: text/markdown
|
|
16
|
+
License-File: LICENSE
|
|
17
|
+
Requires-Dist: typer[all]
|
|
18
|
+
Requires-Dist: rich
|
|
19
|
+
Requires-Dist: questionary
|
|
20
|
+
Requires-Dist: requests
|
|
21
|
+
Requires-Dist: packaging
|
|
22
|
+
Requires-Dist: beautifulsoup4
|
|
23
|
+
Requires-Dist: lxml
|
|
24
|
+
Requires-Dist: pycryptodome
|
|
25
|
+
Requires-Dist: curl_cffi
|
|
26
|
+
Requires-Dist: appdirs
|
|
27
|
+
Requires-Dist: prompt_toolkit<3.0.50,>=3.0.36
|
|
28
|
+
Requires-Dist: build
|
|
29
|
+
Requires-Dist: pyinstaller
|
|
30
|
+
Requires-Dist: pyfiglet
|
|
31
|
+
Requires-Dist: py7zr
|
|
32
|
+
Requires-Dist: pypresence
|
|
33
|
+
Requires-Dist: winotify; sys_platform == "win32"
|
|
34
|
+
Dynamic: license-file
|
|
35
|
+
|
|
36
|
+
<p align="center">
|
|
37
|
+
<img src="weeb_landing/logo/512x512.webp" alt="Weeb CLI Logo" width="120">
|
|
38
|
+
</p>
|
|
39
|
+
|
|
40
|
+
<h1 align="center">Weeb CLI</h1>
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<strong>No browser, no ads, no distractions. Just you and an unparalleled anime viewing experience.</strong>
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<a href="https://github.com/ewgsta/weeb-cli/releases"><img src="https://img.shields.io/github/v/release/ewgsta/weeb-cli?style=flat-square" alt="Release"></a>
|
|
48
|
+
<a href="https://github.com/ewgsta/weeb-cli/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-CC%20BY--NC--ND%204.0-blue?style=flat-square" alt="License"></a>
|
|
49
|
+
<a href="https://github.com/ewgsta/weeb-cli/stargazers"><img src="https://img.shields.io/github/stars/ewgsta/weeb-cli?style=flat-square" alt="Stars"></a>
|
|
50
|
+
<a href="https://github.com/ewgsta/weeb-cli/actions"><img src="https://img.shields.io/github/actions/workflow/status/ewgsta/weeb-cli/tests.yml?style=flat-square" alt="Tests"></a>
|
|
51
|
+
</p>
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
<a href="#installation">Installation</a> •
|
|
55
|
+
<a href="#features">Features</a> •
|
|
56
|
+
<a href="#usage">Usage</a> •
|
|
57
|
+
<a href="#sources">Sources</a> •
|
|
58
|
+
<a href="README-TR.md">Türkçe</a>
|
|
59
|
+
</p>
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Features
|
|
64
|
+
|
|
65
|
+
### Multiple Sources
|
|
66
|
+
- **Turkish**: Animecix, Turkanime, Anizle
|
|
67
|
+
- **English**: HiAnime, AllAnime
|
|
68
|
+
|
|
69
|
+
### Smart Streaming
|
|
70
|
+
- High-quality HLS/MP4 playback with MPV
|
|
71
|
+
- Resume from where you left off (timestamp-based)
|
|
72
|
+
- Watch history and statistics
|
|
73
|
+
- Completed (✓) and in-progress (●) episode markers
|
|
74
|
+
|
|
75
|
+
### Powerful Download System
|
|
76
|
+
- **Aria2** for multi-connection fast downloads
|
|
77
|
+
- **yt-dlp** for complex stream support
|
|
78
|
+
- Queue system with concurrent downloads
|
|
79
|
+
- Resume interrupted downloads
|
|
80
|
+
- Smart file naming (`Anime Name - S1E1.mp4`)
|
|
81
|
+
|
|
82
|
+
### Local Library
|
|
83
|
+
- Auto-scan downloaded anime
|
|
84
|
+
- External drive support (USB, HDD)
|
|
85
|
+
- Offline anime indexing
|
|
86
|
+
- Search across all sources
|
|
87
|
+
|
|
88
|
+
### Additional Features
|
|
89
|
+
- SQLite database (fast and reliable)
|
|
90
|
+
- System notifications on download completion
|
|
91
|
+
- Discord RPC integration (show what you're watching on Discord)
|
|
92
|
+
- Search history
|
|
93
|
+
- Debug mode and logging
|
|
94
|
+
- Automatic update checks
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Installation
|
|
99
|
+
|
|
100
|
+
### PyPI (Universal)
|
|
101
|
+
```bash
|
|
102
|
+
pip install weeb-cli
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Arch Linux (AUR)
|
|
106
|
+
```bash
|
|
107
|
+
yay -S weeb-cli
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Portable
|
|
111
|
+
Download the appropriate file for your platform from [Releases](https://github.com/ewgsta/weeb-cli/releases).
|
|
112
|
+
|
|
113
|
+
### Developer Setup
|
|
114
|
+
```bash
|
|
115
|
+
git clone https://github.com/ewgsta/weeb-cli.git
|
|
116
|
+
cd weeb-cli
|
|
117
|
+
pip install -e .
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## Usage
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
weeb-cli
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Keyboard Controls
|
|
129
|
+
| Key | Action |
|
|
130
|
+
|-----|--------|
|
|
131
|
+
| `↑` `↓` | Navigate menu |
|
|
132
|
+
| `Enter` | Select |
|
|
133
|
+
| `s` | Search Anime (Main menu) |
|
|
134
|
+
| `d` | Downloads (Main menu) |
|
|
135
|
+
| `w` | Watchlist (Main menu) |
|
|
136
|
+
| `c` | Settings (Main menu) |
|
|
137
|
+
| `q` | Exit (Main menu) |
|
|
138
|
+
| `Ctrl+C` | Go back / Exit |
|
|
139
|
+
|
|
140
|
+
**Note:** All shortcuts can be customized in Settings > Keyboard Shortcuts.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Sources
|
|
145
|
+
|
|
146
|
+
| Source | Language |
|
|
147
|
+
|--------|----------|
|
|
148
|
+
| Animecix | Turkish |
|
|
149
|
+
| Turkanime | Turkish |
|
|
150
|
+
| Anizle | Turkish |
|
|
151
|
+
| HiAnime | English |
|
|
152
|
+
| AllAnime | English |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Configuration
|
|
157
|
+
|
|
158
|
+
Config location: `~/.weeb-cli/weeb.db` (SQLite)
|
|
159
|
+
|
|
160
|
+
### Available Settings
|
|
161
|
+
|
|
162
|
+
| Setting | Description | Default | Type |
|
|
163
|
+
|---------|-------------|---------|------|
|
|
164
|
+
| `language` | Interface language (tr/en) | `null` (asks on first run) | string |
|
|
165
|
+
| `scraping_source` | Active anime source | `animecix` | string |
|
|
166
|
+
| `aria2_enabled` | Use Aria2 for downloads | `true` | boolean |
|
|
167
|
+
| `aria2_max_connections` | Max connections per download | `16` | integer |
|
|
168
|
+
| `ytdlp_enabled` | Use yt-dlp for HLS streams | `true` | boolean |
|
|
169
|
+
| `ytdlp_format` | yt-dlp format string | `bestvideo+bestaudio/best` | string |
|
|
170
|
+
| `max_concurrent_downloads` | Simultaneous downloads | `3` | integer |
|
|
171
|
+
| `download_dir` | Download folder path | `./weeb-downloads` | string |
|
|
172
|
+
| `download_max_retries` | Retry failed downloads | `3` | integer |
|
|
173
|
+
| `download_retry_delay` | Delay between retries (seconds) | `10` | integer |
|
|
174
|
+
| `show_description` | Show anime descriptions | `true` | boolean |
|
|
175
|
+
| `discord_rpc_enabled` | Discord Rich Presence | `false` | boolean |
|
|
176
|
+
| `shortcuts_enabled` | Keyboard shortcuts | `true` | boolean |
|
|
177
|
+
| `debug_mode` | Debug logging | `false` | boolean |
|
|
178
|
+
|
|
179
|
+
### Tracker Settings (stored separately)
|
|
180
|
+
- `anilist_token` - AniList OAuth token
|
|
181
|
+
- `anilist_user_id` - AniList user ID
|
|
182
|
+
- `mal_token` - MyAnimeList OAuth token
|
|
183
|
+
- `mal_refresh_token` - MAL refresh token
|
|
184
|
+
- `mal_username` - MAL username
|
|
185
|
+
|
|
186
|
+
### External Drives
|
|
187
|
+
Managed via Settings > External Drives menu. Each drive stores:
|
|
188
|
+
- Path (e.g., `D:\Anime`)
|
|
189
|
+
- Custom name/nickname
|
|
190
|
+
- Added timestamp
|
|
191
|
+
|
|
192
|
+
All settings can be modified through the interactive Settings menu.
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Roadmap
|
|
197
|
+
|
|
198
|
+
### Completed
|
|
199
|
+
- [x] Multiple source support (TR/EN)
|
|
200
|
+
- [x] MPV streaming
|
|
201
|
+
- [x] Watch history and progress tracking
|
|
202
|
+
- [x] Aria2/yt-dlp download integration
|
|
203
|
+
- [x] External drives and local library
|
|
204
|
+
- [x] SQLite database
|
|
205
|
+
- [x] Notification system
|
|
206
|
+
- [x] Debug mode
|
|
207
|
+
- [x] MAL/AniList integration
|
|
208
|
+
- [x] Database backup/restore
|
|
209
|
+
- [x] Keyboard shortcuts
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
### Planned
|
|
213
|
+
- [ ] Anime recommendations
|
|
214
|
+
- [ ] Batch operations
|
|
215
|
+
- [ ] Watch statistics (graphs)
|
|
216
|
+
- [ ] Theme support
|
|
217
|
+
- [ ] Subtitle downloads
|
|
218
|
+
- [ ] Torrent support (nyaa.si)
|
|
219
|
+
- [ ] Watch party
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## License
|
|
224
|
+
|
|
225
|
+
This project is licensed under [CC BY-NC-ND 4.0](LICENSE).
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Project Structure
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
weeb-cli/
|
|
233
|
+
├── weeb_cli/ # Main application package
|
|
234
|
+
│ ├── commands/ # CLI command handlers
|
|
235
|
+
│ │ ├── downloads.py # Download management commands
|
|
236
|
+
│ │ ├── search.py # Anime search functionality
|
|
237
|
+
│ │ ├── settings.py # Settings menu and configuration
|
|
238
|
+
│ │ ├── setup.py # Initial setup wizard
|
|
239
|
+
│ │ └── watchlist.py # Watch history and progress
|
|
240
|
+
│ │
|
|
241
|
+
│ ├── providers/ # Anime source integrations
|
|
242
|
+
│ │ ├── extractors/ # Video stream extractors
|
|
243
|
+
│ │ │ └── megacloud.py # Megacloud extractor
|
|
244
|
+
│ │ ├── allanime.py # AllAnime provider (EN)
|
|
245
|
+
│ │ ├── animecix.py # Animecix provider (TR)
|
|
246
|
+
│ │ ├── anizle.py # Anizle provider (TR)
|
|
247
|
+
│ │ ├── base.py # Base provider interface
|
|
248
|
+
│ │ ├── hianime.py # HiAnime provider (EN)
|
|
249
|
+
│ │ ├── registry.py # Provider registration system
|
|
250
|
+
│ │ └── turkanime.py # Turkanime provider (TR)
|
|
251
|
+
│ │
|
|
252
|
+
│ ├── services/ # Business logic layer
|
|
253
|
+
│ │ ├── cache.py # File-based caching system
|
|
254
|
+
│ │ ├── database.py # SQLite database manager
|
|
255
|
+
│ │ ├── dependency_manager.py # Auto-install FFmpeg, MPV, etc.
|
|
256
|
+
│ │ ├── details.py # Anime details fetcher
|
|
257
|
+
│ │ ├── discord_rpc.py # Discord Rich Presence
|
|
258
|
+
│ │ ├── downloader.py # Queue-based download manager
|
|
259
|
+
│ │ ├── error_handler.py # Global error handling
|
|
260
|
+
│ │ ├── local_library.py # Local anime indexing
|
|
261
|
+
│ │ ├── logger.py # Debug logging system
|
|
262
|
+
│ │ ├── notifier.py # System notifications
|
|
263
|
+
│ │ ├── player.py # MPV video player integration
|
|
264
|
+
│ │ ├── progress.py # Watch progress tracking
|
|
265
|
+
│ │ ├── scraper.py # Provider facade
|
|
266
|
+
│ │ ├── search.py # Search service
|
|
267
|
+
│ │ ├── shortcuts.py # Keyboard shortcuts manager
|
|
268
|
+
│ │ ├── tracker.py # MAL/AniList integration
|
|
269
|
+
│ │ ├── updater.py # Auto-update checker
|
|
270
|
+
│ │ ├── watch.py # Streaming service
|
|
271
|
+
│ │ ├── _base.py # Base service class
|
|
272
|
+
│ │ └── _tracker_base.py # Base tracker interface
|
|
273
|
+
│ │
|
|
274
|
+
│ ├── ui/ # Terminal UI components
|
|
275
|
+
│ │ ├── header.py # Header display
|
|
276
|
+
│ │ ├── menu.py # Main menu
|
|
277
|
+
│ │ └── prompt.py # Custom prompts
|
|
278
|
+
│ │
|
|
279
|
+
│ ├── utils/ # Utility functions
|
|
280
|
+
│ │ └── sanitizer.py # Filename/path sanitization
|
|
281
|
+
│ │
|
|
282
|
+
│ ├── locales/ # Internationalization
|
|
283
|
+
│ │ ├── en.json # English translations
|
|
284
|
+
│ │ └── tr.json # Turkish translations
|
|
285
|
+
│ │
|
|
286
|
+
│ ├── templates/ # HTML templates
|
|
287
|
+
│ │ ├── anilist_error.html # AniList OAuth error page
|
|
288
|
+
│ │ ├── anilist_success.html # AniList OAuth success page
|
|
289
|
+
│ │ ├── mal_error.html # MAL OAuth error page
|
|
290
|
+
│ │ └── mal_success.html # MAL OAuth success page
|
|
291
|
+
│ │
|
|
292
|
+
│ ├── config.py # Configuration management
|
|
293
|
+
│ ├── exceptions.py # Custom exception hierarchy
|
|
294
|
+
│ ├── i18n.py # Internationalization system
|
|
295
|
+
│ ├── main.py # CLI entry point
|
|
296
|
+
│ └── __main__.py # Package execution entry
|
|
297
|
+
│
|
|
298
|
+
├── tests/ # Test suite
|
|
299
|
+
│ ├── test_cache.py # Cache manager tests
|
|
300
|
+
│ ├── test_exceptions.py # Exception tests
|
|
301
|
+
│ ├── test_sanitizer.py # Sanitizer tests
|
|
302
|
+
│ └── conftest.py # Pytest fixtures
|
|
303
|
+
│
|
|
304
|
+
├── weeb_landing/ # Landing page assets
|
|
305
|
+
│ ├── logo/ # Logo files (various sizes)
|
|
306
|
+
│ └── index.html # Landing page
|
|
307
|
+
│
|
|
308
|
+
├── distribution/ # Build and distribution files
|
|
309
|
+
├── pyproject.toml # Project metadata and dependencies
|
|
310
|
+
├── requirements.txt # Python dependencies
|
|
311
|
+
├── pytest.ini # Pytest configuration
|
|
312
|
+
├── LICENSE # CC BY-NC-ND 4.0 license
|
|
313
|
+
└── README.md # This file
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## Tech Stack
|
|
319
|
+
|
|
320
|
+
### Core Technologies
|
|
321
|
+
- **Python 3.8+** - Main programming language
|
|
322
|
+
- **Typer** - CLI framework with rich terminal support
|
|
323
|
+
- **Rich** - Terminal formatting and styling
|
|
324
|
+
- **Questionary** - Interactive prompts and menus
|
|
325
|
+
- **SQLite** - Local database (WAL mode)
|
|
326
|
+
|
|
327
|
+
### Web & Networking
|
|
328
|
+
- **requests** - HTTP client
|
|
329
|
+
- **curl_cffi** - Advanced HTTP with browser impersonation
|
|
330
|
+
- **BeautifulSoup4** - HTML parsing
|
|
331
|
+
- **lxml** - Fast XML/HTML processing
|
|
332
|
+
|
|
333
|
+
### Media & Download
|
|
334
|
+
- **FFmpeg** - Video processing and conversion
|
|
335
|
+
- **MPV** - High-quality video player
|
|
336
|
+
- **Aria2** - Multi-connection downloader
|
|
337
|
+
- **yt-dlp** - Complex stream downloader (HLS, DASH)
|
|
338
|
+
|
|
339
|
+
### Encryption & Security
|
|
340
|
+
- **pycryptodome** - Encryption/decryption (Turkanime)
|
|
341
|
+
|
|
342
|
+
### Additional Features
|
|
343
|
+
- **pypresence** - Discord Rich Presence
|
|
344
|
+
- **py7zr** - 7z archive handling
|
|
345
|
+
- **winotify** - Windows notifications
|
|
346
|
+
- **pyfiglet** - ASCII art headers
|
|
347
|
+
- **packaging** - Version comparison
|
|
348
|
+
|
|
349
|
+
### Development & Testing
|
|
350
|
+
- **pytest** - Testing framework
|
|
351
|
+
- **pyinstaller** - Executable builder
|
|
352
|
+
- **build** - Python package builder
|
|
353
|
+
|
|
354
|
+
### Architecture Patterns
|
|
355
|
+
- **Provider Pattern** - Pluggable anime sources
|
|
356
|
+
- **Registry Pattern** - Dynamic provider registration
|
|
357
|
+
- **Service Locator** - Lazy-loaded services
|
|
358
|
+
- **Queue Pattern** - Thread-safe download queue
|
|
359
|
+
- **Decorator Pattern** - Caching decorator
|
|
360
|
+
- **Observer Pattern** - Progress tracking
|
|
361
|
+
- **Strategy Pattern** - Multiple download strategies
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
<p align="center">
|
|
366
|
+
<a href="https://weeb-cli.ewgsta.me">Website</a> •
|
|
367
|
+
<a href="https://github.com/ewgsta/weeb-cli/issues">Report Issue</a>
|
|
368
|
+
</p>
|
weeb_cli-2.7.1/README.md
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="weeb_landing/logo/512x512.webp" alt="Weeb CLI Logo" width="120">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Weeb CLI</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>No browser, no ads, no distractions. Just you and an unparalleled anime viewing experience.</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://github.com/ewgsta/weeb-cli/releases"><img src="https://img.shields.io/github/v/release/ewgsta/weeb-cli?style=flat-square" alt="Release"></a>
|
|
13
|
+
<a href="https://github.com/ewgsta/weeb-cli/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-CC%20BY--NC--ND%204.0-blue?style=flat-square" alt="License"></a>
|
|
14
|
+
<a href="https://github.com/ewgsta/weeb-cli/stargazers"><img src="https://img.shields.io/github/stars/ewgsta/weeb-cli?style=flat-square" alt="Stars"></a>
|
|
15
|
+
<a href="https://github.com/ewgsta/weeb-cli/actions"><img src="https://img.shields.io/github/actions/workflow/status/ewgsta/weeb-cli/tests.yml?style=flat-square" alt="Tests"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
<p align="center">
|
|
19
|
+
<a href="#installation">Installation</a> •
|
|
20
|
+
<a href="#features">Features</a> •
|
|
21
|
+
<a href="#usage">Usage</a> •
|
|
22
|
+
<a href="#sources">Sources</a> •
|
|
23
|
+
<a href="README-TR.md">Türkçe</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Features
|
|
29
|
+
|
|
30
|
+
### Multiple Sources
|
|
31
|
+
- **Turkish**: Animecix, Turkanime, Anizle
|
|
32
|
+
- **English**: HiAnime, AllAnime
|
|
33
|
+
|
|
34
|
+
### Smart Streaming
|
|
35
|
+
- High-quality HLS/MP4 playback with MPV
|
|
36
|
+
- Resume from where you left off (timestamp-based)
|
|
37
|
+
- Watch history and statistics
|
|
38
|
+
- Completed (✓) and in-progress (●) episode markers
|
|
39
|
+
|
|
40
|
+
### Powerful Download System
|
|
41
|
+
- **Aria2** for multi-connection fast downloads
|
|
42
|
+
- **yt-dlp** for complex stream support
|
|
43
|
+
- Queue system with concurrent downloads
|
|
44
|
+
- Resume interrupted downloads
|
|
45
|
+
- Smart file naming (`Anime Name - S1E1.mp4`)
|
|
46
|
+
|
|
47
|
+
### Local Library
|
|
48
|
+
- Auto-scan downloaded anime
|
|
49
|
+
- External drive support (USB, HDD)
|
|
50
|
+
- Offline anime indexing
|
|
51
|
+
- Search across all sources
|
|
52
|
+
|
|
53
|
+
### Additional Features
|
|
54
|
+
- SQLite database (fast and reliable)
|
|
55
|
+
- System notifications on download completion
|
|
56
|
+
- Discord RPC integration (show what you're watching on Discord)
|
|
57
|
+
- Search history
|
|
58
|
+
- Debug mode and logging
|
|
59
|
+
- Automatic update checks
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Installation
|
|
64
|
+
|
|
65
|
+
### PyPI (Universal)
|
|
66
|
+
```bash
|
|
67
|
+
pip install weeb-cli
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Arch Linux (AUR)
|
|
71
|
+
```bash
|
|
72
|
+
yay -S weeb-cli
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Portable
|
|
76
|
+
Download the appropriate file for your platform from [Releases](https://github.com/ewgsta/weeb-cli/releases).
|
|
77
|
+
|
|
78
|
+
### Developer Setup
|
|
79
|
+
```bash
|
|
80
|
+
git clone https://github.com/ewgsta/weeb-cli.git
|
|
81
|
+
cd weeb-cli
|
|
82
|
+
pip install -e .
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Usage
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
weeb-cli
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Keyboard Controls
|
|
94
|
+
| Key | Action |
|
|
95
|
+
|-----|--------|
|
|
96
|
+
| `↑` `↓` | Navigate menu |
|
|
97
|
+
| `Enter` | Select |
|
|
98
|
+
| `s` | Search Anime (Main menu) |
|
|
99
|
+
| `d` | Downloads (Main menu) |
|
|
100
|
+
| `w` | Watchlist (Main menu) |
|
|
101
|
+
| `c` | Settings (Main menu) |
|
|
102
|
+
| `q` | Exit (Main menu) |
|
|
103
|
+
| `Ctrl+C` | Go back / Exit |
|
|
104
|
+
|
|
105
|
+
**Note:** All shortcuts can be customized in Settings > Keyboard Shortcuts.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Sources
|
|
110
|
+
|
|
111
|
+
| Source | Language |
|
|
112
|
+
|--------|----------|
|
|
113
|
+
| Animecix | Turkish |
|
|
114
|
+
| Turkanime | Turkish |
|
|
115
|
+
| Anizle | Turkish |
|
|
116
|
+
| HiAnime | English |
|
|
117
|
+
| AllAnime | English |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Configuration
|
|
122
|
+
|
|
123
|
+
Config location: `~/.weeb-cli/weeb.db` (SQLite)
|
|
124
|
+
|
|
125
|
+
### Available Settings
|
|
126
|
+
|
|
127
|
+
| Setting | Description | Default | Type |
|
|
128
|
+
|---------|-------------|---------|------|
|
|
129
|
+
| `language` | Interface language (tr/en) | `null` (asks on first run) | string |
|
|
130
|
+
| `scraping_source` | Active anime source | `animecix` | string |
|
|
131
|
+
| `aria2_enabled` | Use Aria2 for downloads | `true` | boolean |
|
|
132
|
+
| `aria2_max_connections` | Max connections per download | `16` | integer |
|
|
133
|
+
| `ytdlp_enabled` | Use yt-dlp for HLS streams | `true` | boolean |
|
|
134
|
+
| `ytdlp_format` | yt-dlp format string | `bestvideo+bestaudio/best` | string |
|
|
135
|
+
| `max_concurrent_downloads` | Simultaneous downloads | `3` | integer |
|
|
136
|
+
| `download_dir` | Download folder path | `./weeb-downloads` | string |
|
|
137
|
+
| `download_max_retries` | Retry failed downloads | `3` | integer |
|
|
138
|
+
| `download_retry_delay` | Delay between retries (seconds) | `10` | integer |
|
|
139
|
+
| `show_description` | Show anime descriptions | `true` | boolean |
|
|
140
|
+
| `discord_rpc_enabled` | Discord Rich Presence | `false` | boolean |
|
|
141
|
+
| `shortcuts_enabled` | Keyboard shortcuts | `true` | boolean |
|
|
142
|
+
| `debug_mode` | Debug logging | `false` | boolean |
|
|
143
|
+
|
|
144
|
+
### Tracker Settings (stored separately)
|
|
145
|
+
- `anilist_token` - AniList OAuth token
|
|
146
|
+
- `anilist_user_id` - AniList user ID
|
|
147
|
+
- `mal_token` - MyAnimeList OAuth token
|
|
148
|
+
- `mal_refresh_token` - MAL refresh token
|
|
149
|
+
- `mal_username` - MAL username
|
|
150
|
+
|
|
151
|
+
### External Drives
|
|
152
|
+
Managed via Settings > External Drives menu. Each drive stores:
|
|
153
|
+
- Path (e.g., `D:\Anime`)
|
|
154
|
+
- Custom name/nickname
|
|
155
|
+
- Added timestamp
|
|
156
|
+
|
|
157
|
+
All settings can be modified through the interactive Settings menu.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Roadmap
|
|
162
|
+
|
|
163
|
+
### Completed
|
|
164
|
+
- [x] Multiple source support (TR/EN)
|
|
165
|
+
- [x] MPV streaming
|
|
166
|
+
- [x] Watch history and progress tracking
|
|
167
|
+
- [x] Aria2/yt-dlp download integration
|
|
168
|
+
- [x] External drives and local library
|
|
169
|
+
- [x] SQLite database
|
|
170
|
+
- [x] Notification system
|
|
171
|
+
- [x] Debug mode
|
|
172
|
+
- [x] MAL/AniList integration
|
|
173
|
+
- [x] Database backup/restore
|
|
174
|
+
- [x] Keyboard shortcuts
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
### Planned
|
|
178
|
+
- [ ] Anime recommendations
|
|
179
|
+
- [ ] Batch operations
|
|
180
|
+
- [ ] Watch statistics (graphs)
|
|
181
|
+
- [ ] Theme support
|
|
182
|
+
- [ ] Subtitle downloads
|
|
183
|
+
- [ ] Torrent support (nyaa.si)
|
|
184
|
+
- [ ] Watch party
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
This project is licensed under [CC BY-NC-ND 4.0](LICENSE).
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Project Structure
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
weeb-cli/
|
|
198
|
+
├── weeb_cli/ # Main application package
|
|
199
|
+
│ ├── commands/ # CLI command handlers
|
|
200
|
+
│ │ ├── downloads.py # Download management commands
|
|
201
|
+
│ │ ├── search.py # Anime search functionality
|
|
202
|
+
│ │ ├── settings.py # Settings menu and configuration
|
|
203
|
+
│ │ ├── setup.py # Initial setup wizard
|
|
204
|
+
│ │ └── watchlist.py # Watch history and progress
|
|
205
|
+
│ │
|
|
206
|
+
│ ├── providers/ # Anime source integrations
|
|
207
|
+
│ │ ├── extractors/ # Video stream extractors
|
|
208
|
+
│ │ │ └── megacloud.py # Megacloud extractor
|
|
209
|
+
│ │ ├── allanime.py # AllAnime provider (EN)
|
|
210
|
+
│ │ ├── animecix.py # Animecix provider (TR)
|
|
211
|
+
│ │ ├── anizle.py # Anizle provider (TR)
|
|
212
|
+
│ │ ├── base.py # Base provider interface
|
|
213
|
+
│ │ ├── hianime.py # HiAnime provider (EN)
|
|
214
|
+
│ │ ├── registry.py # Provider registration system
|
|
215
|
+
│ │ └── turkanime.py # Turkanime provider (TR)
|
|
216
|
+
│ │
|
|
217
|
+
│ ├── services/ # Business logic layer
|
|
218
|
+
│ │ ├── cache.py # File-based caching system
|
|
219
|
+
│ │ ├── database.py # SQLite database manager
|
|
220
|
+
│ │ ├── dependency_manager.py # Auto-install FFmpeg, MPV, etc.
|
|
221
|
+
│ │ ├── details.py # Anime details fetcher
|
|
222
|
+
│ │ ├── discord_rpc.py # Discord Rich Presence
|
|
223
|
+
│ │ ├── downloader.py # Queue-based download manager
|
|
224
|
+
│ │ ├── error_handler.py # Global error handling
|
|
225
|
+
│ │ ├── local_library.py # Local anime indexing
|
|
226
|
+
│ │ ├── logger.py # Debug logging system
|
|
227
|
+
│ │ ├── notifier.py # System notifications
|
|
228
|
+
│ │ ├── player.py # MPV video player integration
|
|
229
|
+
│ │ ├── progress.py # Watch progress tracking
|
|
230
|
+
│ │ ├── scraper.py # Provider facade
|
|
231
|
+
│ │ ├── search.py # Search service
|
|
232
|
+
│ │ ├── shortcuts.py # Keyboard shortcuts manager
|
|
233
|
+
│ │ ├── tracker.py # MAL/AniList integration
|
|
234
|
+
│ │ ├── updater.py # Auto-update checker
|
|
235
|
+
│ │ ├── watch.py # Streaming service
|
|
236
|
+
│ │ ├── _base.py # Base service class
|
|
237
|
+
│ │ └── _tracker_base.py # Base tracker interface
|
|
238
|
+
│ │
|
|
239
|
+
│ ├── ui/ # Terminal UI components
|
|
240
|
+
│ │ ├── header.py # Header display
|
|
241
|
+
│ │ ├── menu.py # Main menu
|
|
242
|
+
│ │ └── prompt.py # Custom prompts
|
|
243
|
+
│ │
|
|
244
|
+
│ ├── utils/ # Utility functions
|
|
245
|
+
│ │ └── sanitizer.py # Filename/path sanitization
|
|
246
|
+
│ │
|
|
247
|
+
│ ├── locales/ # Internationalization
|
|
248
|
+
│ │ ├── en.json # English translations
|
|
249
|
+
│ │ └── tr.json # Turkish translations
|
|
250
|
+
│ │
|
|
251
|
+
│ ├── templates/ # HTML templates
|
|
252
|
+
│ │ ├── anilist_error.html # AniList OAuth error page
|
|
253
|
+
│ │ ├── anilist_success.html # AniList OAuth success page
|
|
254
|
+
│ │ ├── mal_error.html # MAL OAuth error page
|
|
255
|
+
│ │ └── mal_success.html # MAL OAuth success page
|
|
256
|
+
│ │
|
|
257
|
+
│ ├── config.py # Configuration management
|
|
258
|
+
│ ├── exceptions.py # Custom exception hierarchy
|
|
259
|
+
│ ├── i18n.py # Internationalization system
|
|
260
|
+
│ ├── main.py # CLI entry point
|
|
261
|
+
│ └── __main__.py # Package execution entry
|
|
262
|
+
│
|
|
263
|
+
├── tests/ # Test suite
|
|
264
|
+
│ ├── test_cache.py # Cache manager tests
|
|
265
|
+
│ ├── test_exceptions.py # Exception tests
|
|
266
|
+
│ ├── test_sanitizer.py # Sanitizer tests
|
|
267
|
+
│ └── conftest.py # Pytest fixtures
|
|
268
|
+
│
|
|
269
|
+
├── weeb_landing/ # Landing page assets
|
|
270
|
+
│ ├── logo/ # Logo files (various sizes)
|
|
271
|
+
│ └── index.html # Landing page
|
|
272
|
+
│
|
|
273
|
+
├── distribution/ # Build and distribution files
|
|
274
|
+
├── pyproject.toml # Project metadata and dependencies
|
|
275
|
+
├── requirements.txt # Python dependencies
|
|
276
|
+
├── pytest.ini # Pytest configuration
|
|
277
|
+
├── LICENSE # CC BY-NC-ND 4.0 license
|
|
278
|
+
└── README.md # This file
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## Tech Stack
|
|
284
|
+
|
|
285
|
+
### Core Technologies
|
|
286
|
+
- **Python 3.8+** - Main programming language
|
|
287
|
+
- **Typer** - CLI framework with rich terminal support
|
|
288
|
+
- **Rich** - Terminal formatting and styling
|
|
289
|
+
- **Questionary** - Interactive prompts and menus
|
|
290
|
+
- **SQLite** - Local database (WAL mode)
|
|
291
|
+
|
|
292
|
+
### Web & Networking
|
|
293
|
+
- **requests** - HTTP client
|
|
294
|
+
- **curl_cffi** - Advanced HTTP with browser impersonation
|
|
295
|
+
- **BeautifulSoup4** - HTML parsing
|
|
296
|
+
- **lxml** - Fast XML/HTML processing
|
|
297
|
+
|
|
298
|
+
### Media & Download
|
|
299
|
+
- **FFmpeg** - Video processing and conversion
|
|
300
|
+
- **MPV** - High-quality video player
|
|
301
|
+
- **Aria2** - Multi-connection downloader
|
|
302
|
+
- **yt-dlp** - Complex stream downloader (HLS, DASH)
|
|
303
|
+
|
|
304
|
+
### Encryption & Security
|
|
305
|
+
- **pycryptodome** - Encryption/decryption (Turkanime)
|
|
306
|
+
|
|
307
|
+
### Additional Features
|
|
308
|
+
- **pypresence** - Discord Rich Presence
|
|
309
|
+
- **py7zr** - 7z archive handling
|
|
310
|
+
- **winotify** - Windows notifications
|
|
311
|
+
- **pyfiglet** - ASCII art headers
|
|
312
|
+
- **packaging** - Version comparison
|
|
313
|
+
|
|
314
|
+
### Development & Testing
|
|
315
|
+
- **pytest** - Testing framework
|
|
316
|
+
- **pyinstaller** - Executable builder
|
|
317
|
+
- **build** - Python package builder
|
|
318
|
+
|
|
319
|
+
### Architecture Patterns
|
|
320
|
+
- **Provider Pattern** - Pluggable anime sources
|
|
321
|
+
- **Registry Pattern** - Dynamic provider registration
|
|
322
|
+
- **Service Locator** - Lazy-loaded services
|
|
323
|
+
- **Queue Pattern** - Thread-safe download queue
|
|
324
|
+
- **Decorator Pattern** - Caching decorator
|
|
325
|
+
- **Observer Pattern** - Progress tracking
|
|
326
|
+
- **Strategy Pattern** - Multiple download strategies
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
<p align="center">
|
|
331
|
+
<a href="https://weeb-cli.ewgsta.me">Website</a> •
|
|
332
|
+
<a href="https://github.com/ewgsta/weeb-cli/issues">Report Issue</a>
|
|
333
|
+
</p>
|