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.
Files changed (91) hide show
  1. weeb_cli-2.7.1/PKG-INFO +368 -0
  2. weeb_cli-2.7.1/README.md +333 -0
  3. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/pyproject.toml +1 -1
  4. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_cache.py +0 -11
  5. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_exceptions.py +0 -9
  6. weeb_cli-2.7.1/tests/test_providers.py +333 -0
  7. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/tests/test_sanitizer.py +1 -16
  8. weeb_cli-2.7.1/weeb_cli/__init__.py +1 -0
  9. weeb_cli-2.7.1/weeb_cli/commands/search/__init__.py +3 -0
  10. weeb_cli-2.7.1/weeb_cli/commands/search/anime_details.py +71 -0
  11. weeb_cli-2.7.1/weeb_cli/commands/search/download_flow.py +113 -0
  12. weeb_cli-2.7.1/weeb_cli/commands/search/episode_utils.py +66 -0
  13. weeb_cli-2.7.1/weeb_cli/commands/search/search_handlers.py +112 -0
  14. weeb_cli-2.7.1/weeb_cli/commands/search/stream_utils.py +34 -0
  15. weeb_cli-2.7.1/weeb_cli/commands/search/watch_flow.py +256 -0
  16. weeb_cli-2.7.1/weeb_cli/commands/search.py +3 -0
  17. weeb_cli-2.7.1/weeb_cli/commands/settings/__init__.py +3 -0
  18. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_backup.py +116 -0
  19. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_config.py +90 -0
  20. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_download.py +159 -0
  21. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_drives.py +128 -0
  22. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_menu.py +111 -0
  23. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_shortcuts.py +109 -0
  24. weeb_cli-2.7.1/weeb_cli/commands/settings/settings_trackers.py +226 -0
  25. weeb_cli-2.7.1/weeb_cli/commands/settings.py +3 -0
  26. weeb_cli-2.7.1/weeb_cli/commands/setup.py +29 -0
  27. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/commands/watchlist.py +1 -1
  28. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/config.py +4 -5
  29. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/exceptions.py +0 -11
  30. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/locales/en.json +7 -0
  31. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/locales/tr.json +7 -0
  32. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/dependency_manager.py +13 -3
  33. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/utils/sanitizer.py +0 -32
  34. weeb_cli-2.7.1/weeb_cli.egg-info/PKG-INFO +368 -0
  35. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/SOURCES.txt +16 -0
  36. weeb_cli-2.7.0/PKG-INFO +0 -218
  37. weeb_cli-2.7.0/README.md +0 -183
  38. weeb_cli-2.7.0/weeb_cli/__init__.py +0 -1
  39. weeb_cli-2.7.0/weeb_cli/commands/search.py +0 -551
  40. weeb_cli-2.7.0/weeb_cli/commands/settings.py +0 -863
  41. weeb_cli-2.7.0/weeb_cli/commands/setup.py +0 -26
  42. weeb_cli-2.7.0/weeb_cli.egg-info/PKG-INFO +0 -218
  43. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/LICENSE +0 -0
  44. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/setup.cfg +0 -0
  45. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/__main__.py +0 -0
  46. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/commands/downloads.py +0 -0
  47. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/i18n.py +0 -0
  48. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/main.py +0 -0
  49. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/__init__.py +0 -0
  50. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/allanime.py +0 -0
  51. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/animecix.py +0 -0
  52. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/anizle.py +0 -0
  53. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/base.py +0 -0
  54. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/extractors/__init__.py +0 -0
  55. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/extractors/megacloud.py +0 -0
  56. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/hianime.py +0 -0
  57. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/registry.py +0 -0
  58. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/providers/turkanime.py +0 -0
  59. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/__init__.py +0 -0
  60. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/_base.py +0 -0
  61. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/_tracker_base.py +0 -0
  62. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/cache.py +0 -0
  63. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/database.py +0 -0
  64. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/details.py +0 -0
  65. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/discord_rpc.py +0 -0
  66. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/downloader.py +0 -0
  67. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/error_handler.py +0 -0
  68. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/local_library.py +0 -0
  69. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/logger.py +0 -0
  70. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/notifier.py +0 -0
  71. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/player.py +0 -0
  72. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/progress.py +0 -0
  73. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/scraper.py +0 -0
  74. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/search.py +0 -0
  75. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/shortcuts.py +0 -0
  76. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/tracker.py +0 -0
  77. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/updater.py +0 -0
  78. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/services/watch.py +0 -0
  79. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/anilist_error.html +0 -0
  80. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/anilist_success.html +0 -0
  81. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/mal_error.html +0 -0
  82. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/templates/mal_success.html +0 -0
  83. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/__init__.py +0 -0
  84. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/header.py +0 -0
  85. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/menu.py +0 -0
  86. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/ui/prompt.py +0 -0
  87. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli/utils/__init__.py +0 -0
  88. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/dependency_links.txt +0 -0
  89. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/entry_points.txt +0 -0
  90. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/requires.txt +0 -0
  91. {weeb_cli-2.7.0 → weeb_cli-2.7.1}/weeb_cli.egg-info/top_level.txt +0 -0
@@ -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>
@@ -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>