fix(dashboard): 修复首页存储空间显示为 0

仪表板 _build_storage 原先仅按 library_storage 选取存储,用户只配置
本地下载目录而未填媒体库存储时存储集合为空,直接返回 0;而设置页经
LocalStorage.usage 同时统计下载目录与媒体库目录,故显示正常。

改为汇总下载目录的 storage 与媒体库目录的 library_storage,与 usage
口径对齐。存储名用 set 去重,同一存储只查询一次;磁盘层面 space_usage
已按 st_dev / Btrfs FSID 去重,相同磁盘的不同目录不会重复累加。

closes #6268
This commit is contained in:
jxxghp
2026-08-17 17:34:34 +08:00
parent 233e8c688a
commit 5d0bacabd5
2 changed files with 164 additions and 1 deletions
+7 -1
View File
@@ -64,7 +64,13 @@ def _build_storage() -> schemas.Storage:
dirs = DirectoryHelper().get_dirs()
if not dirs:
return schemas.Storage(total_storage=total, used_storage=total - available)
storages = set([d.library_storage for d in dirs if d.library_storage])
# 下载目录按 storage、媒体库目录按 library_storage 汇总存储集合,
# 用 set 去重存储名,避免同一存储被重复统计;
# 各存储的 usage 内部已按磁盘(st_dev / Btrfs FSID)去重,相同磁盘的不同目录不会重复累加。
storages = set(
[d.storage for d in dirs if d.download_path and d.storage]
+ [d.library_storage for d in dirs if d.library_path and d.library_storage]
)
for _storage in storages:
_result = StorageChain().manage_storage(storage=_storage, action=StorageAction.USAGE.value)
_usage = _result.get("data") if _result.get("success") else None