weeb-cli 0.1.3__tar.gz → 0.2.0__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-0.1.3/weeb_cli.egg-info → weeb_cli-0.2.0}/PKG-INFO +4 -4
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/README.md +3 -3
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/pyproject.toml +2 -2
- weeb_cli-0.2.0/weeb_cli/__init__.py +1 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/main.py +10 -12
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/api.py +4 -4
- weeb_cli-0.2.0/weeb_cli/ui/prompt.py +120 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0/weeb_cli.egg-info}/PKG-INFO +4 -4
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli.egg-info/SOURCES.txt +2 -1
- weeb_cli-0.1.3/weeb_cli/__init__.py +0 -1
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/LICENSE +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/setup.cfg +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/__main__.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/commands/downloads.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/commands/search.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/commands/settings.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/commands/setup.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/commands/watchlist.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/config.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/i18n.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/locales/en.json +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/locales/tr.json +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/__init__.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/dependency_manager.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/details.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/downloader.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/player.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/progress.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/search.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/updater.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/services/watch.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/ui/__init__.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/ui/header.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli/ui/menu.py +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli.egg-info/dependency_links.txt +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli.egg-info/entry_points.txt +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli.egg-info/requires.txt +0 -0
- {weeb_cli-0.1.3 → weeb_cli-0.2.0}/weeb_cli.egg-info/top_level.txt +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: weeb-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Tarayıcı yok, reklam yok, dikkat dağıtıcı unsur yok. Sadece siz ve eşsiz bir anime izleme deneyimi.
|
|
5
5
|
Author-email: ewgsta <ewgst@proton.me>
|
|
6
6
|
License-Expression: CC-BY-NC-ND-4.0
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://weeb-cli.ewgsta.me
|
|
8
8
|
Project-URL: Repository, https://github.com/ewgsta/weeb-cli
|
|
9
9
|
Project-URL: Issues, https://github.com/ewgsta/weeb-cli/issues
|
|
10
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
|
|
@@ -58,7 +58,7 @@ Weeb CLI, anime severler için tasarlanmış güçlü, platformlar arası bir ko
|
|
|
58
58
|
- Akıllı dosya isimlendirme (Örn: `Anime Adı - S1B1.mp4`).
|
|
59
59
|
- **İzleme Geçmişi**: İlerlemenizi otomatik takip eder. Kaldığınız yeri (`●`) ve tamamlanan bölümleri (`✓`) işaretler.
|
|
60
60
|
- **Çoklu Dil**: Tam Türkçe ve İngilizce arayüz desteği.
|
|
61
|
-
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Türkçe)
|
|
61
|
+
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Yerel Kaynak) (Türkçe)
|
|
62
62
|
- **Otomatik Kurulum**: Gerekli araçları (MPV, FFmpeg, Aria2, yt-dlp) eksikse otomatik tespit eder ve kurar.
|
|
63
63
|
|
|
64
64
|
## Kurulum
|
|
@@ -98,7 +98,7 @@ choco install weeb-cli
|
|
|
98
98
|
Aracı terminalden başlatmak için:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
weeb
|
|
101
|
+
weeb-cli
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
### Kontroller
|
|
@@ -36,7 +36,7 @@ Weeb CLI, anime severler için tasarlanmış güçlü, platformlar arası bir ko
|
|
|
36
36
|
- Akıllı dosya isimlendirme (Örn: `Anime Adı - S1B1.mp4`).
|
|
37
37
|
- **İzleme Geçmişi**: İlerlemenizi otomatik takip eder. Kaldığınız yeri (`●`) ve tamamlanan bölümleri (`✓`) işaretler.
|
|
38
38
|
- **Çoklu Dil**: Tam Türkçe ve İngilizce arayüz desteği.
|
|
39
|
-
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Türkçe)
|
|
39
|
+
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Yerel Kaynak) (Türkçe)
|
|
40
40
|
- **Otomatik Kurulum**: Gerekli araçları (MPV, FFmpeg, Aria2, yt-dlp) eksikse otomatik tespit eder ve kurar.
|
|
41
41
|
|
|
42
42
|
## Kurulum
|
|
@@ -76,7 +76,7 @@ choco install weeb-cli
|
|
|
76
76
|
Aracı terminalden başlatmak için:
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
weeb
|
|
79
|
+
weeb-cli
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
### Kontroller
|
|
@@ -119,4 +119,4 @@ Yapılandırma dosyası `~/.weeb-cli/config.json` konumunda saklanır. Uygulama
|
|
|
119
119
|
Bu proje Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Lisansı (CC BY-NC-ND 4.0) ile lisanslanmıştır.
|
|
120
120
|
Detaylar için [LICENSE](LICENSE) dosyasına bakınız.
|
|
121
121
|
|
|
122
|
-
---
|
|
122
|
+
---
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "weeb-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "Tarayıcı yok, reklam yok, dikkat dağıtıcı unsur yok. Sadece siz ve eşsiz bir anime izleme deneyimi."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "ewgsta", email = "ewgst@proton.me" }]
|
|
@@ -31,7 +31,7 @@ include = ["weeb_cli*"]
|
|
|
31
31
|
weeb_cli = ["locales/*.json"]
|
|
32
32
|
|
|
33
33
|
[project.urls]
|
|
34
|
-
Homepage = "https://
|
|
34
|
+
Homepage = "https://weeb-cli.ewgsta.me"
|
|
35
35
|
Repository = "https://github.com/ewgsta/weeb-cli"
|
|
36
36
|
Issues = "https://github.com/ewgsta/weeb-cli/issues"
|
|
37
37
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.0"
|
|
@@ -12,6 +12,7 @@ from weeb_cli.i18n import i18n
|
|
|
12
12
|
from weeb_cli.commands.setup import start_setup_wizard
|
|
13
13
|
from weeb_cli.services.dependency_manager import dependency_manager
|
|
14
14
|
from weeb_cli.services.updater import update_prompt
|
|
15
|
+
from weeb_cli.ui.prompt import prompt
|
|
15
16
|
|
|
16
17
|
app = typer.Typer(add_completion=False)
|
|
17
18
|
console = Console()
|
|
@@ -26,19 +27,17 @@ def run_setup():
|
|
|
26
27
|
"English": "en"
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
choices = [(k, v) for k, v in langs.items()]
|
|
31
|
+
|
|
32
|
+
selected_code = prompt.select(
|
|
30
33
|
"Select Language / Dil Seçiniz",
|
|
31
|
-
choices
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
choices
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
i18n.set_language(selected_code)
|
|
35
38
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
i18n.set_language(lang_code)
|
|
39
|
-
|
|
40
|
-
console.print(f"[dim]{i18n.t('common.ctrl_c_hint')}[/dim]")
|
|
41
|
-
start_setup_wizard()
|
|
39
|
+
console.print(f"[dim]{i18n.t('common.ctrl_c_hint')}[/dim]")
|
|
40
|
+
start_setup_wizard()
|
|
42
41
|
|
|
43
42
|
def check_ffmpeg_silent():
|
|
44
43
|
if not dependency_manager.check_dependency("ffmpeg"):
|
|
@@ -50,7 +49,6 @@ def start():
|
|
|
50
49
|
if not config.get("language"):
|
|
51
50
|
run_setup()
|
|
52
51
|
|
|
53
|
-
# Check for updates silently first (the prompt internally handles silence during check)
|
|
54
52
|
update_prompt()
|
|
55
53
|
|
|
56
54
|
check_network()
|
|
@@ -28,19 +28,19 @@ class WeebClient:
|
|
|
28
28
|
source = config.get("scraping_source")
|
|
29
29
|
if source == "weeb": source = "local"
|
|
30
30
|
|
|
31
|
-
return self._get("/api/
|
|
31
|
+
return self._get("/api/v2/anime/search", params={"query": query, "source": source})
|
|
32
32
|
|
|
33
33
|
def get_details(self, slug):
|
|
34
34
|
source = config.get("scraping_source")
|
|
35
35
|
if source == "weeb": source = "local"
|
|
36
|
-
return self._get(f"/api/
|
|
36
|
+
return self._get(f"/api/v2/anime/detail/{slug}", params={"source": source})
|
|
37
37
|
|
|
38
38
|
def get_streams(self, slug, episode):
|
|
39
39
|
source = config.get("scraping_source")
|
|
40
40
|
if source == "weeb": source = "local"
|
|
41
|
-
return self._get(f"/api/
|
|
41
|
+
return self._get(f"/api/v2/anime/watch/{slug}/{episode}", params={"source": source})
|
|
42
42
|
|
|
43
43
|
def get_sources(self):
|
|
44
|
-
return self._get("/api/
|
|
44
|
+
return self._get("/api/v2/sources/")
|
|
45
45
|
|
|
46
46
|
api_client = WeebClient()
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import typer
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
from rich.live import Live
|
|
5
|
+
from rich.table import Table
|
|
6
|
+
from rich.text import Text
|
|
7
|
+
from typing import List, Any, Union, Tuple
|
|
8
|
+
|
|
9
|
+
console = Console()
|
|
10
|
+
|
|
11
|
+
class Prompt:
|
|
12
|
+
def __init__(self):
|
|
13
|
+
self.console = Console()
|
|
14
|
+
|
|
15
|
+
def _get_input(self):
|
|
16
|
+
try:
|
|
17
|
+
return typer.getchar()
|
|
18
|
+
except Exception:
|
|
19
|
+
return sys.stdin.read(1)
|
|
20
|
+
|
|
21
|
+
def select(self, title: str, options: List[Union[str, Tuple[str, Any]]], pointer: str = ">", page_size: int = 10) -> Any:
|
|
22
|
+
processed_options = []
|
|
23
|
+
for opt in options:
|
|
24
|
+
if isinstance(opt, tuple):
|
|
25
|
+
processed_options.append(opt)
|
|
26
|
+
else:
|
|
27
|
+
processed_options.append((opt, opt))
|
|
28
|
+
|
|
29
|
+
current_idx = 0
|
|
30
|
+
total_options = len(processed_options)
|
|
31
|
+
window_start = 0
|
|
32
|
+
|
|
33
|
+
def generate_table():
|
|
34
|
+
table = Table.grid(padding=(0, 1))
|
|
35
|
+
table.add_column("Pointer", width=2)
|
|
36
|
+
table.add_column("Option")
|
|
37
|
+
|
|
38
|
+
nonlocal window_start
|
|
39
|
+
if current_idx >= window_start + page_size:
|
|
40
|
+
window_start = current_idx - page_size + 1
|
|
41
|
+
elif current_idx < window_start:
|
|
42
|
+
window_start = current_idx
|
|
43
|
+
|
|
44
|
+
display_options = processed_options[window_start : window_start + page_size]
|
|
45
|
+
|
|
46
|
+
if title:
|
|
47
|
+
self.console.print(f"[bold cyan]? {title}[/bold cyan]")
|
|
48
|
+
|
|
49
|
+
for i, (label, _) in enumerate(display_options):
|
|
50
|
+
abs_idx = window_start + i
|
|
51
|
+
if abs_idx == current_idx:
|
|
52
|
+
table.add_row(f"[cyan]{pointer}[/cyan]", f"[cyan]{label}[/cyan]")
|
|
53
|
+
else:
|
|
54
|
+
table.add_row(" ", label)
|
|
55
|
+
|
|
56
|
+
if total_options > page_size:
|
|
57
|
+
table.add_row(" ", f"[dim]({window_start+1}-{min(window_start+page_size, total_options)} of {total_options})[/dim]")
|
|
58
|
+
|
|
59
|
+
return table
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
self.console.print(f"[bold cyan]? {title}[/bold cyan]")
|
|
63
|
+
|
|
64
|
+
with Live("", refresh_per_second=20, auto_refresh=False, transient=True) as live:
|
|
65
|
+
while True:
|
|
66
|
+
table = Table.grid(padding=(0, 1))
|
|
67
|
+
table.add_column("Pointer", width=2)
|
|
68
|
+
table.add_column("Option")
|
|
69
|
+
|
|
70
|
+
if current_idx >= window_start + page_size:
|
|
71
|
+
window_start = current_idx - page_size + 1
|
|
72
|
+
elif current_idx < window_start:
|
|
73
|
+
window_start = current_idx
|
|
74
|
+
|
|
75
|
+
limit = min(window_start + page_size, total_options)
|
|
76
|
+
|
|
77
|
+
for idx in range(window_start, limit):
|
|
78
|
+
label = processed_options[idx][0]
|
|
79
|
+
if idx == current_idx:
|
|
80
|
+
table.add_row(f"[cyan]{pointer}[/cyan]", f"[cyan]{label}[/cyan]")
|
|
81
|
+
else:
|
|
82
|
+
table.add_row(" ", label)
|
|
83
|
+
|
|
84
|
+
if total_options > page_size:
|
|
85
|
+
progress = f"({window_start+1}-{limit}/{total_options})"
|
|
86
|
+
table.add_row(" ", f"[dim]{progress}[/dim]")
|
|
87
|
+
|
|
88
|
+
live.update(table)
|
|
89
|
+
live.refresh()
|
|
90
|
+
|
|
91
|
+
key = self._get_input()
|
|
92
|
+
|
|
93
|
+
if key in ["w", "W", "k", "K"] or key == '\x1b[A' or key == '\xe0H': # \xe0H is windows arrow up sometimes
|
|
94
|
+
current_idx = (current_idx - 1) % total_options
|
|
95
|
+
elif key in ["s", "S", "j", "J"] or key == '\x1b[B' or key == '\xe0P':
|
|
96
|
+
current_idx = (current_idx + 1) % total_options
|
|
97
|
+
elif key == '\r' or key == '\n':
|
|
98
|
+
return processed_options[current_idx][1]
|
|
99
|
+
elif key == '\x03':
|
|
100
|
+
sys.exit(0)
|
|
101
|
+
elif key == '\xe0':
|
|
102
|
+
try:
|
|
103
|
+
next_key = typer.getchar()
|
|
104
|
+
if next_key == 'H':
|
|
105
|
+
current_idx = (current_idx - 1) % total_options
|
|
106
|
+
elif next_key == 'P':
|
|
107
|
+
current_idx = (current_idx + 1) % total_options
|
|
108
|
+
except: pass
|
|
109
|
+
elif key == '\x1b':
|
|
110
|
+
try:
|
|
111
|
+
k2 = typer.getchar()
|
|
112
|
+
if k2 == '[':
|
|
113
|
+
k3 = typer.getchar()
|
|
114
|
+
if k3 == 'A':
|
|
115
|
+
current_idx = (current_idx - 1) % total_options
|
|
116
|
+
elif k3 == 'B':
|
|
117
|
+
current_idx = (current_idx + 1) % total_options
|
|
118
|
+
except: pass
|
|
119
|
+
|
|
120
|
+
prompt = Prompt()
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: weeb-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Tarayıcı yok, reklam yok, dikkat dağıtıcı unsur yok. Sadece siz ve eşsiz bir anime izleme deneyimi.
|
|
5
5
|
Author-email: ewgsta <ewgst@proton.me>
|
|
6
6
|
License-Expression: CC-BY-NC-ND-4.0
|
|
7
|
-
Project-URL: Homepage, https://
|
|
7
|
+
Project-URL: Homepage, https://weeb-cli.ewgsta.me
|
|
8
8
|
Project-URL: Repository, https://github.com/ewgsta/weeb-cli
|
|
9
9
|
Project-URL: Issues, https://github.com/ewgsta/weeb-cli/issues
|
|
10
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
|
|
@@ -58,7 +58,7 @@ Weeb CLI, anime severler için tasarlanmış güçlü, platformlar arası bir ko
|
|
|
58
58
|
- Akıllı dosya isimlendirme (Örn: `Anime Adı - S1B1.mp4`).
|
|
59
59
|
- **İzleme Geçmişi**: İlerlemenizi otomatik takip eder. Kaldığınız yeri (`●`) ve tamamlanan bölümleri (`✓`) işaretler.
|
|
60
60
|
- **Çoklu Dil**: Tam Türkçe ve İngilizce arayüz desteği.
|
|
61
|
-
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Türkçe)
|
|
61
|
+
- **Çoklu Kaynak**: HiAnime, AllAnime (İngilizce), Animecix, Anizle, Turkanime, Weeb (Yerel Kaynak) (Türkçe)
|
|
62
62
|
- **Otomatik Kurulum**: Gerekli araçları (MPV, FFmpeg, Aria2, yt-dlp) eksikse otomatik tespit eder ve kurar.
|
|
63
63
|
|
|
64
64
|
## Kurulum
|
|
@@ -98,7 +98,7 @@ choco install weeb-cli
|
|
|
98
98
|
Aracı terminalden başlatmak için:
|
|
99
99
|
|
|
100
100
|
```bash
|
|
101
|
-
weeb
|
|
101
|
+
weeb-cli
|
|
102
102
|
```
|
|
103
103
|
|
|
104
104
|
### Kontroller
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.1.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|