feat(studio): run nitro scans in the background with cancel-re-attach and nightly auto-clean

This commit is contained in:
openhands committed 2026-09-19 13:41:14 +02:00
1 parent 9d571e0c29
commit 6c53f4680c
14 files changed
+1547 -303

No files matched your search

+72
View File
@@ -6497,6 +6497,78 @@
},
"admin": {
"studio": {
"nitroCleanup": {
"alreadyRunning": "A scan is already running — attached to it.",
"ageUnknown": "age unknown",
"ageBelow": "< 1d",
"scanButton": "Scan furniture assets",
"scanningAssets": "Scanning assets…",
"cancelButton": "Cancel",
"deleteSelected": "Delete selected ({count})",
"deleting": "Deleting…",
"redownloadBroken": "Re-download broken",
"redownloading": "Re-downloading…",
"autoClean": "Auto-clean old fakes",
"cleaning": "Cleaning…",
"exportManifest": "Export manifest",
"exporting": "Exporting…",
"phaseStems": "Loading furniture stems…",
"phaseReaddir": "Reading asset directories…",
"phaseValidate": "Validating .nitro bundles…",
"phaseScanning": "Scanning…",
"scanProgressFiles": "{count} files",
"repairProgress": "ok {ok}, failed {failed}",
"attachedNotice": "Scan continues in the background — results will appear when it finishes.",
"sessionCancelled": "Scan cancelled.",
"onlyOldLabel": "Only show files older than",
"onlyOldAgeLabel": "Minimum age in days to display",
"onlyOldToggle": "Hide recent files",
"daysLabel": "days",
"autoAgeLabel": "Minimum age in days for auto-clean",
"loadingResult": "Loading scan result…",
"scannedStat": "asset files scanned",
"cachedNotice": "(cached — directories unchanged)",
"fakeStat": "Fake nitros (no matching item)",
"brokenStat": "Broken nitros (unparseable)",
"groupEmpty": "None found",
"selectedCount": "{count} selected",
"copiesBadge": "{count} copies",
"groupFakeLabel": "Fake nitros",
"groupFakeDescription": "These files match no item in items_base — leftovers from deleted or renamed furniture.",
"groupBrokenLabel": "Broken nitros",
"groupBrokenDescription": "These files belong to an item but cannot be parsed as a valid Nitro bundle.",
"groupSwfLabel": "Orphaned SWFs",
"groupSwfDescription": ".swf files that match no item in items_base.",
"groupIconLabel": "Orphaned icons",
"groupIconDescription": "Icon files that match no item in items_base.",
"warningText": "Deleting a broken .nitro leaves its item in the database without a bundle — prefer re-downloading it, or let the catalog audit re-obtain it later. Database rows are never removed by this tool.",
"onlyAssetsTouched": "Only asset files are touched — FurnitureData.json and database rows stay intact.",
"emptyHint": "Scan every furni asset directory to find fake and broken nitro bundles plus orphaned SWFs and icons. Delete them, re-download the broken ones, or auto-clean old leftovers.",
"noResult": "No scan result yet — run a furniture asset scan first.",
"scanFailed": "The scan failed.",
"confirmDeleteTitle": "Delete {count} asset file(s)?",
"confirmDeleteDescription": "The files will be removed from every directory (public + mirrored gamedata). Database rows are never touched.",
"confirmDeleteLabel": "Delete",
"confirmRepairTitle": "Re-download {count} broken .nitro bundle(s)?",
"confirmRepairDescription": "The bundles will be fetched again from the configured nitro sources and written over every directory (public + mirrored gamedata).",
"confirmRepairLabel": "Re-download",
"confirmAutoCleanTitle": "Auto-clean fake nitros older than {days} day(s)?",
"confirmAutoCleanDescription": "Only fake .nitro files (no matching item) older than the threshold are removed. Broken bundles and recent files are never touched.",
"confirmAutoCleanLabel": "Auto-clean",
"toastDeletePartial": "Deleted {copies} copy/copies, but some files could not be removed",
"toastDeleteDone": "Deleted {copies} file copy/copies ({deleted} file(s))",
"toastRepairDone": "Repaired {count} .nitro bundle(s)",
"toastRepairFailed": "Could not re-obtain any bundle ({failed} failed)",
"toastRepairCancelled": "Repair cancelled",
"toastAutoCleanDone": "Auto-cleaned {deleted} old fake .nitro file(s) ({copies} copies). Skipped {recent} recent + {broken} broken.",
"toastAutoCleanNothing": "Nothing old enough to remove (skipped {recent} recent, {broken} broken)",
"toastManifestDownload": "Scan manifest downloaded",
"historyTitle": "Auto-clean history",
"historyScheduled": "scheduled",
"historyManual": "manual",
"historyEntry": "{deleted} removed ({copies} copies); {recent} recent and {broken} broken skipped",
"historyErrors": "{count} errors"
},
"importDiagnostics": {
"attempts": "Source file diagnostics",
"preliminary": "Preliminary check: these addresses were checked without downloading the files. The import will validate the original files.",