docs: add implementation plan for project fastwatcher

This commit is contained in:
Ümit Tunç
2026-04-29 21:28:39 +03:00
parent 21280197ac
commit 13437589b7
+17 -4
View File
@@ -7,6 +7,7 @@
| **Ağ İletişimi** | `shelf` (Local HTTP Server) | TV tarafında raw TCP socket yerine küçük bir REST API (HTTP Server) kurmak hata yönetimini ve loglamayı inanılmaz kolaylaştırır. | | **Ağ İletişimi** | `shelf` (Local HTTP Server) | TV tarafında raw TCP socket yerine küçük bir REST API (HTTP Server) kurmak hata yönetimini ve loglamayı inanılmaz kolaylaştırır. |
| **Video Oynatıcı** | `media_kit` | *Chewie/Video_player yerine kesinlikle bunu kullanmalısın.* libmpv tabanlıdır. HLS (.m3u8), MKV ve özel codec'leri Android TV'de kusursuz oynatır. | | **Video Oynatıcı** | `media_kit` | *Chewie/Video_player yerine kesinlikle bunu kullanmalısın.* libmpv tabanlıdır. HLS (.m3u8), MKV ve özel codec'leri Android TV'de kusursuz oynatır. |
| **Link Yakalama** | `receive_sharing_intent` | Mobil cihazda tarayıcıdan "Paylaş" aksiyonunu dinlemek için. | | **Link Yakalama** | `receive_sharing_intent` | Mobil cihazda tarayıcıdan "Paylaş" aksiyonunu dinlemek için. |
| **Video Extraction** | `flutter_inappwebview` & `html` | Sayfa içindeki gizli `.m3u8` veya `.mp4` linklerini headless (gizli) bir tarayıcıda yakalamak için. |
| **Lokal Depolama** | `shared_preferences` | Cihazın "TV" mi yoksa "Mobil" mi olduğunu ilk seçimden sonra hatırlamak için. | | **Lokal Depolama** | `shared_preferences` | Cihazın "TV" mi yoksa "Mobil" mi olduğunu ilk seçimden sonra hatırlamak için. |
--- ---
@@ -61,6 +62,15 @@ Raw Socket'ler veriyi bölebilir veya bağlantı kopmalarında sorun yaratabilir
``` ```
* **TV'nin Yanıtı:** `200 OK` (Başarıyla aldım, oynatmaya başlıyorum). * **TV'nin Yanıtı:** `200 OK` (Başarıyla aldım, oynatmaya başlıyorum).
#### D. Video Linki Ayrıştırma (Video Extraction)
Tarayıcıdan paylaşılan link bir web sayfası olduğunda, içindeki asıl videoyu bulmak için şu hiyerarşi uygulanır:
1. **Headless WebView (En Garanti Yöntem):** Kullanıcı linki paylaştığında, arka planda gizli bir `InAppWebView` açılır. `onLoadResource` veya `shouldInterceptRequest` metodları ile ağ trafiği dinlenir. `.m3u8` veya `.mp4` uzantılı bir istek yakalandığı an sayfa kapatılır ve link TV'ye gönderilir.
2. **Open Graph & Meta Tags:** Sayfa HTML'i `html` paketi ile indirilir. `<meta property="og:video" content="...">` veya `<video src="...">` etiketleri taranır.
3. **Site Özelinde Çözücüler (Scrapers):** YouTube için `youtube_explode_dart`, Twitter/X için özel Regex paternleri gibi "Provider" tabanlı sınıflar kullanılır.
* **SOLID Notu:** Bu işlemi bir `LinkParser` interface'inden türetilen `HeadlessParser`, `RegexParser` ve `MetaParser` gibi sınıflara bölmeliyiz.
--- ---
### 4. SOLID Prensiplerinin Projeye Uygulanması ### 4. SOLID Prensiplerinin Projeye Uygulanması
@@ -87,10 +97,13 @@ Bu projeyi "Solid" yapacak mimari kararlar şunlardır:
1. Mobil cihazdan HTTP POST ile TV'ye manuel bir test linki (.m3u8) gönder. 1. Mobil cihazdan HTTP POST ile TV'ye manuel bir test linki (.m3u8) gönder.
2. TV tarafında `media_kit` paketini kur ve gelen linki tam ekranda (kumanda odaklamalarına dikkat ederek) oynatan sayfayı tasarla. 2. TV tarafında `media_kit` paketini kur ve gelen linki tam ekranda (kumanda odaklamalarına dikkat ederek) oynatan sayfayı tasarla.
**Faz 3: Entegrasyon (Link Yakalama)** **Faz 3: Entegrasyon ve Link Extraction**
1. Mobil tarafa `receive_sharing_intent` paketini kur. 1. Mobil tarafa `receive_sharing_intent` paketini kur ve Android Manifest ayarlarını yap.
2. Android Manifest ayarlarını yapıp, tarayıcıdan uygulamana link düşmesini sağla. 2. `LinkExtractionService` oluştur:
3. Gelen linki ayrıştır (Parse) ve eşleşmiş olan TV'ye fırlat. * Gelen URL eğer doğrudan video ise (`.mp4`, `.m3u8`, `.mkv`) direkt TV'ye gönder.
* Eğer bir web sayfası ise, `InAppWebView` (headless) ile sayfayı yükleyip ağ trafiğini dinleyerek gerçek video linkini "crawle" et.
3. Yakalanan linki ve sayfa başlığını (Title) eşleşmiş olan TV'ye fırlat.
4. Hatalı/Desteklenmeyen linkler için kullanıcıya "Video bulunamadı" uyarısı göster.
Bu mimariyle yazdığın bir kod hem çok hızlı çalışacak hem de aylar sonra dönüp baktığında nerede ne olduğunu saniyeler içinde bulabileceksin. Bu mimariyle yazdığın bir kod hem çok hızlı çalışacak hem de aylar sonra dönüp baktığında nerede ne olduğunu saniyeler içinde bulabileceksin.