2c60c669c0bbc8d46cfb04bf1e0a2ff86ce4d762
Arama sonuçlarının birden fazla sayfa taranabilmesi için sayfalama mekanizması eklendi. İlk sayfadan maksimum sayfa sayısı keşfedilir ve her sayfa taranarak eşleşen film aranır. Sayfalar arası bekleme süresi korunur ve boş sayfalarda işlem durdurulur. Maksimum 10 sayfa sınırı eklendi.
subwatcher
Docker tabanli altyazi otomasyon sistemi.
core: watcher + ffprobe + BullMQ + Mongo job/log API + review akisiapi: gercek provider subtitle engine + archive extraction + security + scoringui: React/Vite panel (dashboard, jobs, detail live logs, review, settings, watched paths)
Mimari
- Mongo koleksiyonlari:
watched_paths,settings,media_files,jobs,job_logs - Redis/BullMQ kuyruklari:
fileEventsmediaAnalysissubtitleFetchfinalizeWrite
- Core -> API servis cagrisi (docker network):
http://api:3002 - UI -> Core API:
http://localhost:3001/api(CORS acik) - Temp alan:
/temp/{jobToken}
TurkceAltyazi Gercek Modu (v2)
Gercek entegrasyon feature flag ile acilabilir:
ENABLE_TURKCEALTYAZI_REAL=true
TURKCEALTYAZI_BASE_URL=https://turkcealtyazi.org
TURKCEALTYAZI_TIMEOUT_MS=12000
TURKCEALTYAZI_MIN_DELAY_MS=300
ENABLE_TURKCEALTYAZI_REAL=true:TurkceAltyaziProvidergercek HTTP+HTML parse dener.
Gelistirme (Dev)
- Ortam dosyasi:
cp .env.example .env
- Servisleri kaldir:
docker compose -f compose.dev.yml up --build
- Portlar:
- UI:
http://localhost:5173 - Core:
http://localhost:3001 - API:
http://localhost:3002 - Mongo:
localhost:27017 - Redis:
localhost:6379
- Media dosyasi yerlestirme:
- TV:
./_media/tv - Movie:
./_media/movie
Gercek .mkv dosyasi ekleyince watcher pipeline'i tetikler.
- Debug enqueue (dev-only):
curl -X POST http://localhost:3001/api/debug/enqueue \
-H 'content-type: application/json' \
-d '{"path":"/media/movie/example.mkv","kind":"movie"}'
Production
docker compose -f compose.yml up --build -d
Portlar:
- UI:
http://localhost:3000 - Core:
http://localhost:3001 - API:
http://localhost:3002
UI Ozellikleri
- Dashboard: son 24h ozet + son isler
- Jobs: filtreleme + job detayi
- Job Detail: metadata, mediaInfo, sonuc dosyalari, canli SSE log paneli
- Review List:
NEEDS_REVIEWisler - Manual override: metadata ile ara + candidate sec + finalize write
- Settings: language/overwrite/stability/security ayarlari
- Watched Paths: ekle/sil/enable/disable
API Endpointleri
Core
GET /api/healthGET /api/settingsPOST /api/settingsGET /api/watched-pathsPOST /api/watched-pathsGET /api/jobsGET /api/jobs/:idGET /api/jobs/:id/logsGET /api/jobs/:id/stream(SSE)GET /api/reviewPOST /api/review/:jobId/searchPOST /api/review/:jobId/choosePOST /api/debug/enqueue(dev)
Subtitle API
GET /v1/healthPOST /v1/subtitles/searchPOST /v1/subtitles/choosePOST /v1/subtitles/cleanup
Guvenlik ve Dogrulama
- Archive extraction:
7z - Zip slip kontrolu: realpath root disina cikis reddi
- Limit kontrolleri:
- max file count
- max total size
- max single file size
- SRT/ASS extension'a gore degil, icerige gore validate edilir
- Gecersiz altyazilar aninda silinir (
INVALID_SUBTITLE_DELETED)
Encoding
Core finalize adiminda:
- BOM kontrol
- UTF-8 / windows-1254 / latin1 fallback
- LF newline normalizasyonu
- hedef adlandirma:
{base}.{lang}.{ext} - overwrite false ise
.2,.3...
Testler
Core:
cd services/core && npm test
API:
cd services/api && npm test
Kapsam:
- filename parser
- SRT/ASS validator
- scoring + ambiguous karari
- zip slip helper
Gelecek (v2)
- Gercek OpenSubtitles API entegrasyonu
- ClamAV tarama (feature flag hazir)
Description
Languages
TypeScript
98%
Dockerfile
1.1%
CSS
0.7%
HTML
0.2%