Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 22 additions & 2 deletions app/player.py
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,26 @@ def dropEvent(self, event):
if (os.path.isfile(p) and p not in subtitle_paths
and os.path.splitext(p)[1].lower() in allowed_media)
]
had_current_media = bool(self.current_file)

def finish_appended_subtitles():
"""Yalnız gerçekten başlatılan yeni medyaya altyazı bağlar.

Aktif oynatma varken `append_media_paths` bırakılan videoları
başlatmadan kuyruğa ekler. Global pending kuyruğuna bu videoların
altyazısını yazmak, onu mevcut medyanın sonraki UI turunda
tüketmesine yol açar. Hedef belirsizken yanlış medyaya bağlamak
yerine mevcut pending durumunu koruyup kullanıcıyı yönlendiririz.
"""
if not subtitle_paths:
return
if had_current_media:
show_user_error(
self, tr("Altyazı Eklenemedi"),
tr("Altyazı sıradaki videoya otomatik bağlanamadı. "
"Videoyu oynatın ve altyazıyı yeniden bırakın."))
return
self._pending_subs = list(subtitle_paths)

def add_sub(s):
# mpv, video yüklü değilken sub_add'i -12 (command) ile reddeder.
Expand Down Expand Up @@ -707,7 +727,7 @@ def add_sub(s):
# Playlist açıkken video yüzeyine bırakılan tek dosya da kuyruğa
# eklenir; listeyi tek öğeye sıfırlamaz.
if append_media_paths(self, media_paths):
self._pending_subs = list(subtitle_paths)
finish_appended_subtitles()
else:
# Yeni medya açılacak: mpv yükleme sırasında önceden eklenen dış
# altyazıları sildiği için altyazıları yükleme tamamlanınca ekle
Expand All @@ -717,7 +737,7 @@ def add_sub(s):
# Çoklu bırakma mevcut listeyi silmez. Oynatma yoksa ilk yeni öğe
# başlatılır; oynatma sürüyorsa yalnızca kuyruğa eklenir.
if append_media_paths(self, media_paths):
self._pending_subs = list(subtitle_paths)
finish_appended_subtitles()
else:
# Sürükle-bırak ile altyazı: video oynarken anında ekle (canlı)
for s in subtitle_paths:
Expand Down
10 changes: 5 additions & 5 deletions docs/ARCHITECTURE_INVENTORY.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"schema_version": 1,
"status": "analyzed",
"measured_product_commit": "59f6980d6be88d5c66ab55aeb235a1e07518e212",
"working_tree_state": "modified",
"measured_at_utc": "2026-08-28T14:28:54Z",
"measured_product_commit": "b54a9c3d5c87472f47acab6155c5d6325d24dc45",
"working_tree_state": "clean product sources; inventory refresh uncommitted",
"measured_at_utc": "2026-08-29T17:45:44Z",
"hash_contract": "sha256 of UTF-8 source normalized to LF",
"modules": [
{
Expand All @@ -26,8 +26,8 @@
},
{
"path": "app/player.py",
"sha256": "ab4a7623cae2fba369f8acc1b0756644eec9ad896e9bd419113dc4c17a4f5b73",
"lines": 1200,
"sha256": "8162463bd06777b6544af5f46d5579e2a1644041b2cee6f7c4946bad27602c24",
"lines": 1220,
"classes": 1,
"top_functions": 1,
"indented_functions": 78,
Expand Down
10 changes: 5 additions & 5 deletions docs/CONTINUITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi
`ROADMAP.md` ve `ENGINEERING_AUDIT.md` içindedir.

- Güncelleme: 29 Ağustos 2026
- Kayıt hazırlanırken doğrulanan HEAD: `2c68648c82cbc3a6b56fc03b1317f07c322da1bd`
- Kayıt hazırlanırken doğrulanan HEAD: `5b4a59dd1f5f2681cd316f325833227f190c01c3`
- Güncel HEAD/origin farkı her oturumda `git rev-list --left-right --count` ile ölçülür; bu belge kendi commit hash'ini tahmin etmez.
- Dal: `codex/ipc-offscreen-acceptance` (temiz canonical `master` ve `origin/master` exact `2c68648`, `0/0` tabanında source/test/docs değişiklikleri uncommitted)
- Son kanıt: `EV-20260829-002`
- Dal: `codex/deferred-drop-subtitle-binding` (PR #72 remote head `9d940e1`; exact yerel timing-test/evidence commit `5b4a59d`, dal uzak ref'in bir commit önünde)
- Son kanıt: `EV-20260829-010`
- Yayın kararı: **v0.40 canlı/latest; 87 varlık eş, public ana/add-on indirme hashleri ve Ed25519 imzaları geçti.**

## Canlı ürün ve yayın durumu
Expand Down Expand Up @@ -41,7 +41,7 @@ Bu dosya projenin tek canlı devir noktasıdır. Tarihsel continuity kronolojisi
## Kalite kabul özeti
- Windows P0 matrisi: `WIN-P0-01`–`WIN-P0-05` PASSED; drag/drop, playlist
sınırları ve IPC için `P0-06`, `P0-07`, `P0-08` NOT_RUN.
- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`).
- `WIN-P0-08` deterministik offscreen çok-süreç kapsamı gerçek secondary PID, dosya/URL/aktivasyon devri, exit `0` ve terminal kapanış ölçümüyle genişletildi; dar etki paketi **93 passed** verdi. Gerçek ürün penceresi foreground ve hedef-yükleme sonucu ölçülmediği için fiziksel satır hâlâ `NOT_RUN` (`EV-20260829-002`). Aktif oynatma sırasında kuyruğa eklenen yeni video(lar)la birlikte bırakılan altyazının global pending kuyruğuyla yanlışlıkla mevcut videoya uygulanması kırmızı testte doğrulandı; hedef medya başlatılmadığında pending durum artık korunuyor ve kullanıcı açıkça yönlendiriliyor. Subtitle/playlist/atomiklik/çeviri etki paketi **87 passed** verdi (`EV-20260829-003`). PR #72 ilk hosted run `33266269968`, **5151 passed / 22 skipped / 1 failed** ile stale `app/player.py` mimari hash/satır kapısında durdu; diğer beş modül exact eşti ve envanter düzeltildi (`EV-20260829-005`–`007`). Yeni push koşumu `33266596701` yine **5151/22/1** verdi; tek hata ürün bütçesi yerine runner/UI overhead'ini de kapsayan `elapsed <= 0.8` testiydi. Test sonluluğu artık duvar-saati üst sınırı yerine exact 40 Qt wait çağrısıyla ölçülüyor; hedef 5/5 ve dosya paketi **12 passed** (`EV-20260829-008`–`009`). Hiçbir başarısız run retry edilmedi.
- Video biçimi matrisi: SDR ekranda `VF-CORE-01` ve HDR ekranda SDR-on-HDR
`VF-CORE-02` exact native ve kontrollü insan ramp kabulüyle PASSED. Kalan
14 biçim satırı ve genel `WIN-P2-01` BLOCKED; bu iki PASS genel HDR/format
Expand Down Expand Up @@ -182,7 +182,7 @@ merge/parent/run/`0/0` readback'ini sonraki gerçek kayıt provenance'ına bağl

## Sıradaki tek adım

Mevcut toplu Git onayı kapsamında `EV-20260829-002` offscreen IPC kapsamını commit/push/PR kapılarından geçir; hosted test sonucunu kullanıcı bildirsin. Gerçek `WIN-P0-08` ürün-penceresi koşumu, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur.
`EV-20260829-010` iki-belge bağlama kaydını ayrı onayla commit et; ardından ayrı push onayıyla PR #72 head'ini ilerlet ve yeni hosted sonucu kullanıcı bildirsin. Gerçek `WIN-P0-06`–`08`, build, native/kurulu artifact ve fiziksel kurulum ayrı onaylıdır. Tek-agent kısıtı nedeniyle bağımsız karşıt inceleme `NOT_RUN` ve formal bağımsız GO yoktur.

## Dokunulmayacaklar ve ayrı onaylar

Expand Down
Loading