mirror of
https://github.com/willmiao/ComfyUI-Lora-Manager.git
synced 2026-10-12 12:32:11 -03:00
fix(sidebar): let a ghost folder be cleared from the UI (#1145)
Deleting a folder a file manager had already moved away answered "Folder no longer
exists" and stopped there: `remove_known_folder()` only ran after `shutil.rmtree()`
succeeded, so the records keeping the node in the tree could never be dropped, and
the modal's missing state hid its confirm button. The sidebar was a dead end for
exactly the case the folder list cannot self-heal.
* `ModelMoveService.forget_folder()` drops a folder's records (the recorded entry
plus the cached models under it) and refuses with `code: "exists"` while any root
still holds the directory, because then the caller wants a delete.
* `delete_folder()` forgets the records instead of failing when the directory is
already gone. The dry run stays a pure read and keeps answering `missing`, which
is what makes the dialog offer the removal. `POST`/`GET
/api/lm/{prefix}/forget-folder` is the endpoint for a node that maps to no
directory at all (the GET form is for the browser extension, which is GET-only).
* The sidebar falls back to it from the delete flow, offers "Remove from list" in
the missing state, and reports the folder as removed from the sidebar rather than
as a delete that never happened. An `exists` conflict says the directory is back
and should be deleted instead.
Verified: 3811 backend tests, 1543 JS tests, 96 Vue tests, 20 i18n tests.
This commit is contained in:
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "Dieser Ordner enthält noch {count} Modelldatei(en), davon {excluded} von der Bibliothek ausgeschlossen. Heben Sie den Ausschluss unter „Ausgeschlossene Modelle verwalten“ auf und löschen Sie sie zuerst — beim Löschen eines Ordners werden Modelldateien niemals mitgelöscht.",
|
||||
"missingTitle": "Ordner nicht gefunden",
|
||||
"missingMessage": "Dieser Ordner existiert nicht mehr auf dem Datenträger. Aktualisieren Sie die Seitenleiste und versuchen Sie es erneut.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "Ordner ist ein symbolischer Link",
|
||||
"symlinkMessage": "Alle Kopien dieses Ordners sind symbolische Links; entfernen Sie den Link oder sein Ziel außerhalb von LoRA Manager.",
|
||||
"protectedTitle": "Ordner ist geschützt",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "In diesem Ordner steht noch eine Löschung aus. Warten Sie, bis das Zeitfenster für das Rückgängigmachen abgelaufen ist.",
|
||||
"unsupported": "Das Löschen von Ordnern wird auf dieser Seite nicht unterstützt",
|
||||
"missing": "Dieser Ordner existiert nicht mehr auf dem Datenträger. Aktualisieren Sie die Seitenleiste und versuchen Sie es erneut.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "Dieser Ordner ist ein symbolischer Link; er kann nicht über die Seitenleiste gelöscht werden.",
|
||||
"successMulti": "Ordner \"{name}\" aus {count} Modell-Stammverzeichnissen gelöscht",
|
||||
"partial": "{count} von {total} Kopien gelöscht — {failed} konnten nicht gelöscht werden. Aktualisieren Sie die Seitenleiste und versuchen Sie es erneut."
|
||||
|
||||
+4
-1
@@ -1418,7 +1418,8 @@
|
||||
"notEmptyMessageCount": "This folder still contains {count} model file(s). Delete or move them first — deleting a folder never cascades over model files.",
|
||||
"notEmptyMessageExcluded": "This folder still contains {count} model file(s), {excluded} of them excluded from the library. Un-exclude them in Manage Excluded Models and delete them first — deleting a folder never cascades over model files.",
|
||||
"missingTitle": "Folder not found",
|
||||
"missingMessage": "This folder no longer exists on disk. Refresh the sidebar and try again.",
|
||||
"missingMessage": "This folder no longer exists on disk. Its entries can still be removed from the sidebar.",
|
||||
"removeFromList": "Remove from list",
|
||||
"symlinkTitle": "Folder is a symbolic link",
|
||||
"symlinkMessage": "Every copy of this folder is a symbolic link; remove the link or its target outside LoRA Manager.",
|
||||
"protectedTitle": "Folder is protected",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "A deletion is still pending inside this folder. Wait for the undo window to expire.",
|
||||
"unsupported": "Folder deletion is not supported on this page",
|
||||
"missing": "This folder no longer exists on disk. Refresh the sidebar and try again.",
|
||||
"forgotten": "Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "The folder is back on disk. Delete it instead.",
|
||||
"symlink": "This folder is a symbolic link; it cannot be deleted from the sidebar.",
|
||||
"successMulti": "Folder \"{name}\" deleted from {count} model roots",
|
||||
"partial": "Deleted {count} of {total} copies — {failed} could not be deleted. Refresh the sidebar and retry."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "Esta carpeta aún contiene {count} archivo(s) de modelo, de los cuales {excluded} están excluidos de la biblioteca. Anula su exclusión en «Gestionar modelos excluidos» y elimínalos primero — eliminar una carpeta nunca elimina los archivos de modelo en cascada.",
|
||||
"missingTitle": "Carpeta no encontrada",
|
||||
"missingMessage": "Esta carpeta ya no existe en el disco. Actualiza la barra lateral e inténtalo de nuevo.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "La carpeta es un enlace simbólico",
|
||||
"symlinkMessage": "Todas las copias de esta carpeta son enlaces simbólicos; elimina el enlace o su destino fuera de LoRA Manager.",
|
||||
"protectedTitle": "Carpeta protegida",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "Todavía hay una eliminación pendiente dentro de esta carpeta. Espera a que caduque la ventana de deshacer.",
|
||||
"unsupported": "La eliminación de carpetas no es compatible con esta página",
|
||||
"missing": "Esta carpeta ya no existe en el disco. Actualiza la barra lateral e inténtalo de nuevo.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "Esta carpeta es un enlace simbólico; no se puede eliminar desde la barra lateral.",
|
||||
"successMulti": "Carpeta \"{name}\" eliminada de {count} raíces de modelo",
|
||||
"partial": "Se eliminaron {count} de {total} copias — {failed} no se pudieron eliminar. Actualiza la barra lateral e inténtalo de nuevo."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "Ce dossier contient encore {count} fichier(s) de modèle, dont {excluded} sont exclus de la bibliothèque. Annulez leur exclusion dans « Gérer les modèles exclus » et supprimez-les d’abord — la suppression d’un dossier n’entraîne jamais celle des fichiers de modèles.",
|
||||
"missingTitle": "Dossier introuvable",
|
||||
"missingMessage": "Ce dossier n’existe plus sur le disque. Actualisez la barre latérale et réessayez.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "Le dossier est un lien symbolique",
|
||||
"symlinkMessage": "Toutes les copies de ce dossier sont des liens symboliques ; supprimez le lien ou sa cible en dehors de LoRA Manager.",
|
||||
"protectedTitle": "Dossier protégé",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "Une suppression est encore en attente dans ce dossier. Attendez la fin de la fenêtre d’annulation.",
|
||||
"unsupported": "La suppression de dossiers n’est pas prise en charge sur cette page",
|
||||
"missing": "Ce dossier n’existe plus sur le disque. Actualisez la barre latérale et réessayez.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "Ce dossier est un lien symbolique ; il ne peut pas être supprimé depuis la barre latérale.",
|
||||
"successMulti": "Dossier \"{name}\" supprimé de {count} racines de modèle",
|
||||
"partial": "{count} copie(s) sur {total} supprimée(s) — {failed} en échec. Actualisez la barre latérale et réessayez."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "בתיקייה זו עדיין יש {count} קובצי מודלים, שמהם {excluded} מוחרגים מהספרייה. בטל את ההחרגה ב«ניהול מודלים מוחרגים» ומחק אותם תחילה — מחיקת תיקייה לעולם אינה מוחקת קובצי מודלים.",
|
||||
"missingTitle": "התיקייה לא נמצאה",
|
||||
"missingMessage": "תיקייה זו אינה קיימת עוד בדיסק. רענן את סרגל הצד ונסה שוב.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "התיקייה היא קישור סמלי",
|
||||
"symlinkMessage": "כל העותקים של תיקייה זו הם קישורים סמליים; מחק את הקישור או את היעד שלו מחוץ ל-LoRA Manager.",
|
||||
"protectedTitle": "תיקייה מוגנת",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "מחיקה עדיין ממתינה בתיקייה זו. המתן לסיום חלון הביטול.",
|
||||
"unsupported": "מחיקת תיקיות אינה נתמכת בדף זה",
|
||||
"missing": "תיקייה זו אינה קיימת עוד בדיסק. רענן את סרגל הצד ונסה שוב.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "תיקייה זו היא קישור סמלי; לא ניתן למחוק אותה מסרגל הצד.",
|
||||
"successMulti": "התיקייה \"{name}\" נמחקה מ-{count} שורשי מודלים",
|
||||
"partial": "נמחקו {count} מתוך {total} עותקים — {failed} לא נמחקו. רענן את סרגל הצד ונסה שוב."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "このフォルダにはまだ {count} 個のモデルファイルがあり、そのうち {excluded} 個はライブラリから除外されています。「除外モデルを管理」で除外を解除してから削除してください —— フォルダを削除してもモデルファイルがまとめて削除されることはありません。",
|
||||
"missingTitle": "フォルダが見つかりません",
|
||||
"missingMessage": "このフォルダはディスク上に存在しません。サイドバーを再読み込みしてからもう一度お試しください。",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "フォルダがシンボリックリンクです",
|
||||
"symlinkMessage": "このフォルダのすべてのコピーがシンボリックリンクです。LoRA Manager の外でリンクまたはそのリンク先を削除してください。",
|
||||
"protectedTitle": "フォルダは保護されています",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "このフォルダ内に保留中の削除があります。取り消し可能な時間が過ぎるまでお待ちください。",
|
||||
"unsupported": "このページではフォルダを削除できません",
|
||||
"missing": "このフォルダはディスク上に存在しません。サイドバーを再読み込みしてからもう一度お試しください。",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "このフォルダはシンボリックリンクです。サイドバーからは削除できません。",
|
||||
"successMulti": "{count} 個のモデルルートからフォルダ \"{name}\" を削除しました",
|
||||
"partial": "{total} 個のコピーのうち {count} 個を削除しました —— {failed} 個は削除できませんでした。サイドバーを再読み込みしてからもう一度お試しください。"
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "이 폴더에는 아직 모델 파일이 {count}개 있으며, 그중 {excluded}개는 라이브러리에서 제외되어 있습니다. '제외된 모델 관리'에서 제외를 해제한 뒤 먼저 삭제하세요 —— 폴더를 삭제해도 모델 파일이 함께 삭제되지는 않습니다.",
|
||||
"missingTitle": "폴더를 찾을 수 없습니다",
|
||||
"missingMessage": "이 폴더는 디스크에 더 이상 존재하지 않습니다. 사이드바를 새로 고친 후 다시 시도하세요.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "폴더가 심볼릭 링크입니다",
|
||||
"symlinkMessage": "이 폴더의 모든 복사본이 심볼릭 링크입니다. LoRA Manager 외부에서 링크 또는 그 대상을 삭제하세요.",
|
||||
"protectedTitle": "보호된 폴더",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "이 폴더에 아직 대기 중인 삭제 작업이 있습니다. 되돌리기 시간이 끝날 때까지 기다리세요.",
|
||||
"unsupported": "이 페이지에서는 폴더를 삭제할 수 없습니다",
|
||||
"missing": "이 폴더는 디스크에 더 이상 존재하지 않습니다. 사이드바를 새로 고친 후 다시 시도하세요.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "이 폴더는 심볼릭 링크이므로 사이드바에서 삭제할 수 없습니다.",
|
||||
"successMulti": "모델 루트 {count}개에서 \"{name}\" 폴더를 삭제했습니다",
|
||||
"partial": "복사본 {total}개 중 {count}개를 삭제했습니다 —— {failed}개는 삭제하지 못했습니다. 사이드바를 새로 고친 후 다시 시도하세요."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "В этой папке ещё есть {count} файл(ов) модели, из них {excluded} исключены из библиотеки. Снимите исключение в разделе «Управление исключёнными моделями» и удалите их — удаление папки никогда не затрагивает файлы моделей.",
|
||||
"missingTitle": "Папка не найдена",
|
||||
"missingMessage": "Эта папка больше не существует на диске. Обновите боковую панель и повторите попытку.",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "Папка является символической ссылкой",
|
||||
"symlinkMessage": "Все копии этой папки являются символическими ссылками; удалите ссылку или её цель вне LoRA Manager.",
|
||||
"protectedTitle": "Папка защищена",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "В этой папке всё ещё есть отложенное удаление. Дождитесь окончания окна отмены.",
|
||||
"unsupported": "Удаление папок не поддерживается на этой странице",
|
||||
"missing": "Эта папка больше не существует на диске. Обновите боковую панель и повторите попытку.",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "Эта папка является символической ссылкой; её нельзя удалить из боковой панели.",
|
||||
"successMulti": "Папка \"{name}\" удалена из {count} корневых папок моделей",
|
||||
"partial": "Удалено {count} из {total} копий — не удалось удалить {failed}. Обновите боковую панель и повторите попытку."
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "该文件夹中仍有 {count} 个模型文件,其中 {excluded} 个已从模型库中排除。请先在“管理已排除的模型”中取消排除并删除它们 —— 删除文件夹不会级联删除模型文件。",
|
||||
"missingTitle": "未找到文件夹",
|
||||
"missingMessage": "该文件夹在磁盘上已不存在,请刷新侧边栏后重试。",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "文件夹是符号链接",
|
||||
"symlinkMessage": "该文件夹的每一份副本都是符号链接;请在 LoRA Manager 之外删除该链接或其指向的目标。",
|
||||
"protectedTitle": "文件夹受保护",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "该文件夹内仍有待处理的删除操作,请等待撤销窗口结束。",
|
||||
"unsupported": "此页面不支持删除文件夹",
|
||||
"missing": "该文件夹在磁盘上已不存在,请刷新侧边栏后重试。",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "该文件夹是符号链接,无法从侧边栏中删除。",
|
||||
"successMulti": "已从 {count} 个模型根目录中删除文件夹 \"{name}\"",
|
||||
"partial": "已删除 {total} 份副本中的 {count} 份 —— {failed} 份无法删除。请刷新侧边栏后重试。"
|
||||
|
||||
@@ -1419,6 +1419,7 @@
|
||||
"notEmptyMessageExcluded": "該資料夾中仍有 {count} 個模型檔案,其中 {excluded} 個已從模型庫中排除。請先在「管理已排除的模型」中取消排除並刪除它們 —— 刪除資料夾不會串聯刪除模型檔案。",
|
||||
"missingTitle": "未找到資料夾",
|
||||
"missingMessage": "該資料夾在磁碟上已不存在,請重新整理側邊欄後再試。",
|
||||
"removeFromList": "[TODO: Translate] Remove from list",
|
||||
"symlinkTitle": "資料夾是符號連結",
|
||||
"symlinkMessage": "該資料夾的每一份副本都是符號連結;請在 LoRA Manager 之外刪除該連結或其指向的目標。",
|
||||
"protectedTitle": "資料夾受保護",
|
||||
@@ -1440,6 +1441,8 @@
|
||||
"busy": "該資料夾內仍有待處理的刪除操作,請等待復原時間結束。",
|
||||
"unsupported": "此頁面不支援刪除資料夾",
|
||||
"missing": "該資料夾在磁碟上已不存在,請重新整理側邊欄後再試。",
|
||||
"forgotten": "[TODO: Translate] Folder \"{name}\" removed from the sidebar",
|
||||
"exists": "[TODO: Translate] The folder is back on disk. Delete it instead.",
|
||||
"symlink": "該資料夾是符號連結,無法從側邊欄中刪除。",
|
||||
"successMulti": "已從 {count} 個模型根目錄中刪除資料夾 \"{name}\"",
|
||||
"partial": "已刪除 {total} 份副本中的 {count} 份 —— {failed} 份無法刪除。請重新整理側邊欄後再試。"
|
||||
|
||||
Reference in New Issue
Block a user