diff --git a/client/src/routes/Files.svelte b/client/src/routes/Files.svelte index 2332ee7..5903095 100644 --- a/client/src/routes/Files.svelte +++ b/client/src/routes/Files.svelte @@ -468,6 +468,7 @@ let pendingPlayTarget = null; let activeMenu = null; // Aktif menü öğesi let menuPosition = { top: 0, left: 0 }; // Menü pozisyonu + let deleteConfirmPending = false; // Silme onayı beklemede mi let showMatchModal = false; let matchingFile = null; let matchTitle = ""; @@ -1444,48 +1445,53 @@ async function deleteFile(item) { if (!item) return; - const target = resolveDeletionTargets(item); - if (!target) { + + // Eğer onay beklemedeyse, silme işlemini gerçekleştir + if (deleteConfirmPending) { + const target = resolveDeletionTargets(item); + if (!target) { + closeMenu(); + return; + } + + const result = await performDeletion(target); + deleteConfirmPending = false; // Reset flag + + if (!result.ok) { + alert("Silme hatası: " + (result.error || "Bilinmeyen hata")); + closeMenu(); + return; + } + + if (item.isDirectory) { + const displayKey = normalizePath( + item.displayPath || + (item.name?.startsWith("dir:") ? item.name.slice(4) : ""), + ); + if (displayKey || displayKey === "") { + pendingFolders.delete(displayKey); + } + } + + await loadFiles(); + await Promise.all([refreshMovieCount(), refreshTvShowCount(), fetchTrashItems()]); + selectedItems = new Set( + [...selectedItems].filter((name) => name !== item.name), + ); closeMenu(); return; } - const label = - target.type === "directory" - ? target.label || item.displayName || "Klasör" - : target.label || cleanFileName(item.name); - const message = - target.type === "directory" - ? `"${label}" klasörünü silmek istediğine emin misin?` - : `"${label}" dosyasını silmek istediğinizden emin misiniz?`; - - if (!confirm(message)) { - closeMenu(); - return; - } - - const result = await performDeletion(target); - if (!result.ok) { - alert("Silme hatası: " + (result.error || "Bilinmeyen hata")); - closeMenu(); - return; - } - if (item.isDirectory) { - const displayKey = normalizePath( - item.displayPath || - (item.name?.startsWith("dir:") ? item.name.slice(4) : ""), - ); - if (displayKey || displayKey === "") { - pendingFolders.delete(displayKey); - } + // İlk tıklama - onay moduna geç + deleteConfirmPending = true; } - await loadFiles(); - await Promise.all([refreshMovieCount(), refreshTvShowCount(), fetchTrashItems()]); - selectedItems = new Set( - [...selectedItems].filter((name) => name !== item.name), - ); - closeMenu(); + // Menü kapandığında onay durumunu resetle + function closeMenu() { + activeMenu = null; + deleteConfirmPending = false; + showMatchModal = false; + matchingFile = null; } // Klasör oluşturma fonksiyonları @@ -2419,11 +2425,11 @@ {/if} @@ -3979,7 +3985,17 @@ .menu-item.delete { color: #e53935; } - + + .menu-item.delete.confirming { + color: #fff; + background-color: #e53935; + font-weight: 600; + } + + .menu-item.delete.confirming:hover { + background-color: #c62828; + } + .menu-item.delete:hover { background-color: #ffebee; }