Skip to content

Commit dfe1adb

Browse files
committed
offline izleme tracker sync ve birleşik mesajlar
1 parent dffd6d1 commit dfe1adb

File tree

7 files changed

+58
-49
lines changed

7 files changed

+58
-49
lines changed

README-TR.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@
4848
- **AniList** entegrasyonu (OAuth)
4949
- **MyAnimeList** entegrasyonu (OAuth)
5050
- **Kitsu** entegrasyonu (email/şifre)
51-
- Otomatik ilerleme senkronizasyonu
51+
- Online ve offline izleme için otomatik ilerleme senkronizasyonu
5252
- Bekleyen güncellemeler için çevrimdışı kuyruk
53+
- Dosya adlarından akıllı anime başlığı eşleştirme
5354

5455
### Yerel Kütüphane
5556
- İndirilen animeleri otomatik tarama
5657
- Harici disk desteği (USB, HDD)
57-
- Çevrimdışı anime indexleme
58+
- Otomatik tracker senkronizasyonu ile çevrimdışı indexleme
5859
- Tüm kaynaklarda arama
60+
- **Önerilen format**: `Anime Adı - S1B1.mp4` (en iyi tracker uyumluluğu için)
5961

6062
### Ek Özellikler
6163
- SQLite veritabanı (hızlı ve güvenilir)

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,16 @@
4949
- **AniList** integration with OAuth
5050
- **MyAnimeList** integration with OAuth
5151
- **Kitsu** integration with email/password
52-
- Automatic progress sync
52+
- Automatic progress sync for online and offline viewing
5353
- Offline queue for pending updates
54+
- Smart anime title matching from filenames
5455

5556
### Local Library
5657
- Auto-scan downloaded anime
5758
- External drive support (USB, HDD)
58-
- Offline anime indexing
59+
- Offline anime indexing with automatic tracker sync
5960
- Search across all sources
61+
- **Recommended format**: `Anime Name - S1E1.mp4` for best tracker compatibility
6062

6163
### Additional Features
6264
- SQLite database (fast and reliable)

weeb_cli/commands/downloads.py

Lines changed: 8 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -399,49 +399,20 @@ def play_local_episode(anime, episode):
399399
)
400400
console.print(f"[green]✓ {i18n.t('details.marked_watched')}[/green]")
401401

402+
# Check which trackers are connected and show sync status
402403
from weeb_cli.services.tracker import anilist_tracker, mal_tracker, kitsu_tracker
403404

404-
trackers_connected = []
405+
connected = []
405406
if anilist_tracker.is_authenticated():
406-
trackers_connected.append(("AniList", anilist_tracker))
407+
connected.append("AniList")
407408
if mal_tracker.is_authenticated():
408-
trackers_connected.append(("MAL", mal_tracker))
409+
connected.append("MAL")
409410
if kitsu_tracker.is_authenticated():
410-
trackers_connected.append(("Kitsu", kitsu_tracker))
411+
connected.append("Kitsu")
411412

412-
if trackers_connected:
413-
tracker_names = ", ".join([t[0] for t in trackers_connected])
414-
sync_ans = questionary.confirm(
415-
i18n.t("details.sync_to_trackers", f"{tracker_names}'e de eklensin mi?")
416-
).ask()
417-
418-
if sync_ans:
419-
for name, tracker in trackers_connected:
420-
result = tracker.update_progress(
421-
anime["title"],
422-
episode["number"],
423-
anime["episode_count"]
424-
)
425-
if result:
426-
console.print(f"[green]✓ {name} {i18n.t('watchlist.tracker_updated')}[/green]")
427-
else:
428-
console.print(f"[yellow]⏳ {name}: {i18n.t('watchlist.tracker_pending')}[/yellow]")
429-
else:
430-
anilist_tracker.update_progress(
431-
anime["title"],
432-
episode["number"],
433-
anime["episode_count"]
434-
)
435-
mal_tracker.update_progress(
436-
anime["title"],
437-
episode["number"],
438-
anime["episode_count"]
439-
)
440-
kitsu_tracker.update_progress(
441-
anime["title"],
442-
episode["number"],
443-
anime["episode_count"]
444-
)
413+
if connected:
414+
trackers_str = ", ".join(connected)
415+
console.print(f"[dim]→ {trackers_str} {i18n.t('watchlist.tracker_syncing')}[/dim]")
445416

446417
except KeyboardInterrupt:
447418
pass

weeb_cli/commands/search/watch_flow.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,25 @@ def _update_trackers(details, slug):
259259
total_watched = len(updated_prog.get("completed", []))
260260
total_eps = details.get("total_episodes", 0)
261261

262+
updated = []
263+
pending = []
264+
262265
for name, tracker in [("AniList", anilist_tracker), ("MAL", mal_tracker), ("Kitsu", kitsu_tracker)]:
263-
result = tracker.update_progress(
264-
details.get("title"),
265-
total_watched,
266-
total_eps
267-
)
268-
269266
if tracker.is_authenticated():
267+
result = tracker.update_progress(
268+
details.get("title"),
269+
total_watched,
270+
total_eps
271+
)
270272
if result:
271-
console.print(f"[green]✓ {name} {i18n.t('watchlist.tracker_updated')}[/green]")
273+
updated.append(name)
272274
else:
273-
console.print(f"[yellow]⏳ {name}: {i18n.t('watchlist.tracker_pending')}[/yellow]")
275+
pending.append(name)
276+
277+
# Show combined message
278+
if updated:
279+
trackers_str = ", ".join(updated)
280+
console.print(f"[green]✓ {trackers_str} {i18n.t('watchlist.tracker_updated')}[/green]")
281+
if pending:
282+
trackers_str = ", ".join(pending)
283+
console.print(f"[yellow]⏳ {trackers_str}: {i18n.t('watchlist.tracker_pending')}[/yellow]")

weeb_cli/locales/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@
263263
"episodes_watched": "Watched",
264264
"next": "Next",
265265
"tracker_updated": "updated",
266+
"tracker_syncing": "syncing...",
266267
"tracker_pending": "Added to pending",
267268
"tracker_error": "Tracker error"
268269
},

weeb_cli/locales/tr.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@
263263
"episodes_watched": "İzlenen",
264264
"next": "Sonraki",
265265
"tracker_updated": "güncellendi",
266+
"tracker_syncing": "senkronize ediliyor...",
266267
"tracker_pending": "Bekleyenlere eklendi",
267268
"tracker_error": "Tracker hatası"
268269
},

weeb_cli/services/local_library.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,28 @@ def get_anime_progress(self, anime_title: str) -> Dict:
129129
def mark_episode_watched(self, anime_title: str, ep_number: int, total_episodes: int):
130130
slug = self._title_to_slug(anime_title)
131131
progress_tracker.mark_watched(slug, ep_number, title=anime_title, total_episodes=total_episodes)
132+
133+
# Auto-sync to trackers if online
134+
self._sync_to_trackers(anime_title, ep_number, total_episodes)
135+
136+
def _sync_to_trackers(self, anime_title: str, ep_number: int, total_episodes: int):
137+
"""Sync watched episode to all connected trackers."""
138+
from weeb_cli.services.tracker import anilist_tracker, mal_tracker, kitsu_tracker
139+
140+
connected_trackers = []
141+
if anilist_tracker.is_authenticated():
142+
connected_trackers.append(("AniList", anilist_tracker))
143+
if mal_tracker.is_authenticated():
144+
connected_trackers.append(("MAL", mal_tracker))
145+
if kitsu_tracker.is_authenticated():
146+
connected_trackers.append(("Kitsu", kitsu_tracker))
147+
148+
if not connected_trackers:
149+
return
150+
151+
# Try to sync to all trackers
152+
for name, tracker in connected_trackers:
153+
tracker.update_progress(anime_title, ep_number, total_episodes)
132154

133155
def _title_to_slug(self, title: str) -> str:
134156
slug = title.lower()

0 commit comments

Comments
 (0)