Mimari Genel Bakış¶
Bu belge, Weeb CLI'nin mimarisine ve tasarım kararlarına üst düzey bir genel bakış sağlar.
Sistem Mimarisi¶
┌─────────────────────────────────────────────────────────┐
│ CLI Katmanı (Typer) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Arama │ │İndirmeler│ │İzleme │ │ Ayarlar │ │
│ │ │ │ │ │Listesi │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ Servis Katmanı │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ İndirici │ │ İzleyici │ │ Oynatıcı │ │Önbellek │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Veritabanı│ │ Scraper │ │Günlükçü │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ Sağlayıcı Katmanı │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ Türkçe │ │ İngilizce│ │ Almanca │ │ Lehçe │ │
│ │Sağlayıcı │ │Sağlayıcı │ │Sağlayıcı │ │Sağlayıcı│ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────┐
│ Veri Katmanı │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ SQLite │ │ Önbellek │ │ Günlük │ │
│ │Veritabanı│ │Dosyaları │ │Dosyaları │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
Tasarım Desenleri¶
1. Kayıt Deseni (Sağlayıcılar)¶
Sağlayıcılar dekoratörler kullanılarak otomatik olarak keşfedilir ve kaydedilir:
Faydaları: - Yeni sağlayıcı eklemek kolay - Manuel kayıt gerekmez - Dosya sisteminden otomatik keşif
2. Tembel Yükleme (Servisler)¶
Servisler başlatmayı ertelemek için tembel yükleme kullanır:
@property
def db(self):
if self._db is None:
from weeb_cli.services.database import db
self._db = db
return self._db
Faydaları: - Daha hızlı başlangıç süresi - Azaltılmış bellek kullanımı - Döngüsel içe aktarmaları önler
3. Tekil Deseni (Global Örnekler)¶
Paylaşılan kaynaklar için global örnekler:
Faydaları: - Tek doğruluk kaynağı - Uygulama genelinde kolay erişim - Tutarlı durum
4. Strateji Deseni (İndirme Yöntemleri)¶
Yedekleme ile birden fazla indirme stratejisi:
def _try_download(self, url, path, item):
strategies = [
self._download_aria2,
self._download_ytdlp,
self._download_ffmpeg,
self._download_generic
]
for strategy in strategies:
if strategy(url, path, item):
return True
return False
Faydaları: - Zarif bozulma - Esnek indirme yöntemleri - Yeni stratejiler eklemek kolay
Temel Bileşenler¶
CLI Katmanı¶
Teknoloji: Typer + Rich + Questionary
Sorumluluklar: - Komut satırı argümanlarını ayrıştır - Etkileşimli menüleri göster - Kullanıcı girişini işle - İlerleme göstergelerini göster
Servis Katmanı¶
Temel Servisler:
- Veritabanı: WAL modu ile SQLite
- Yapılandırma depolama
- İlerleme takibi
- İndirme kuyruğu
-
Yerel kütüphane dizini
-
İndirici: Kuyruk tabanlı indirme yöneticisi
- Eşzamanlı indirmeler
- Birden fazla indirme yöntemi
- Yeniden deneme mantığı
-
İlerleme takibi
-
İzleyici: Anime izleme entegrasyonu
- OAuth kimlik doğrulama
- İlerleme senkronizasyonu
-
Çevrimdışı kuyruk
-
Oynatıcı: MPV entegrasyonu
- IPC iletişimi
- İlerleme izleme
-
Devam etme işlevselliği
-
Önbellek: İki katmanlı önbellekleme
- Bellek önbelleği
- Dosya önbelleği
- TTL desteği
Sağlayıcı Katmanı¶
Yapı: - Dile göre düzenlenmiş dizinler - Temel sağlayıcı arayüzü - Kayıt sistemi - Yayın çıkarıcılar
Sağlayıcı Yaşam Döngüsü: 1. Keşif (dosya sistemi taraması) 2. Kayıt (dekoratör) 3. Örnekleme (talep üzerine) 4. Önbellekleme (sonuçlar)
Veri Katmanı¶
Depolama: - SQLite veritabanı (~/.weeb-cli/weeb.db) - Önbellek dosyaları (~/.weeb-cli/cache/) - Günlük dosyaları (~/.weeb-cli/logs/) - İndirilen ikili dosyalar (~/.weeb-cli/bin/)
Veri Akışı¶
Arama Akışı¶
İndirme Akışı¶
Kullanıcı Seçimi → Kuyruk Yöneticisi → İndirme İşçisi
↓
Stratejileri Dene
↓
┌─────────────────────────┐
│ Aria2 → yt-dlp → │
│ FFmpeg → Genel │
└─────────────────────────┘
↓
İlerleme Güncelle
↓
Veritabanına Kaydet
İzleme Akışı¶
Kullanıcı Seçimi → Yayın Çıkarma → Oynatıcı (MPV)
↓
IPC İzleyici
↓
İlerlemeyi Kaydet
↓
İzleyici Senkronize Et
İş Parçacığı Güvenliği¶
Kilitleme Stratejisi¶
- Veritabanı: Bağlantı yönetimi için RLock
- İndirme Kuyruğu: Kuyruk işlemleri için Lock
- Önbellek: Kilitleme yok (tek iş parçacıklı erişim)
Eşzamanlı İşlemler¶
- İndirme işçileri ayrı iş parçacıklarında çalışır
- MPV izleyici daemon iş parçacığında çalışır
- İzleyici senkronizasyonu arka planda çalışır
Hata İşleme¶
İstisna Hiyerarşisi¶
WeebCLIError (temel)
├── ProviderError
├── DownloadError
├── NetworkError
├── AuthenticationError
├── DatabaseError
├── ValidationError
└── DependencyError
Hata Kurtarma¶
- Yeniden Deneme Mantığı: Geçici hatalar için üstel geri çekilme
- Yedekleme: Birincil başarısız olduğunda alternatif yöntemler
- Zarif Bozulma: Azaltılmış işlevsellikle devam et
- Kullanıcı Bildirimi: i18n ile net hata mesajları
Performans Optimizasyonları¶
1. Önbellekleme¶
- Arama sonuçları 1 saat önbelleğe alınır
- Detaylar 6 saat önbelleğe alınır
- Hız için iki katmanlı (bellek + dosya)
2. Tembel Yükleme¶
- Servisler ilk kullanımda yüklenir
- Sağlayıcılar talep üzerine keşfedilir
- Veritabanı bağlantı havuzu
3. Eşzamanlı İndirmeler¶
- Paralel olarak birden fazla indirme
- Yapılandırılabilir eşzamanlılık sınırı
- Kaynak farkında zamanlama
4. Veritabanı Optimizasyonu¶
- Eşzamanlı erişim için WAL modu
- Hazırlanmış ifadeler
- İndekslenmiş sorgular
- Toplu işlemler
Güvenlik Hususları¶
1. Girdi Temizleme¶
- Dosya adı temizleme
- URL doğrulama
- SQL enjeksiyonu önleme (parametreli sorgular)
2. Kimlik Bilgisi Depolama¶
- Veritabanında OAuth token'ları
- Düz metin şifre yok
- Güvenli token yenileme
3. Ağ Güvenliği¶
- API çağrıları için HTTPS
- Sertifika doğrulama
- Zaman aşımı sınırları
Genişletilebilirlik¶
Yeni Özellikler Ekleme¶
- Yeni Sağlayıcı: BaseProvider arayüzünü uygula
- Yeni İzleyici: TrackerBase arayüzünü uygula
- Yeni Komut: Typer komutu ekle
- Yeni Servis: Servis desenini takip et
Eklenti Sistemi¶
Şu anda uygulanmamış, ancak mimari destekliyor: - Sağlayıcı eklentileri - Çıkarıcı eklentileri - Komut eklentileri
Gelecek İyileştirmeler¶
- Eklenti Sistemi: Dinamik eklenti yükleme
- API Sunucusu: Uzaktan kontrol için REST API
- Web Arayüzü: Tarayıcı tabanlı arayüz
- Mobil Uygulama: Yardımcı mobil uygulama
- Bulut Senkronizasyonu: Cihazlar arası senkronizasyon