From 00941ae7d5e52a963f4932be486eefdd9a329230 Mon Sep 17 00:00:00 2001 From: "913695467@qq.com" Date: Sat, 16 May 2026 12:49:04 +0800 Subject: [PATCH] Fix disk usage calculation and regex pattern - Change default disk stats to use root volume "/" instead of summing all volumes from /Volumes, which included external drives (fixes #250) - Fix invalid NSRegularExpression pattern "/ +/g" (JS-style) to use Swift's split(separator:) directly --- SharedLibrary/Extension/String.swift | 11 +---------- eul/Store/DiskStore.swift | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/SharedLibrary/Extension/String.swift b/SharedLibrary/Extension/String.swift index d247596..1a3d115 100644 --- a/SharedLibrary/Extension/String.swift +++ b/SharedLibrary/Extension/String.swift @@ -29,16 +29,7 @@ public extension String { } var splittedByWhitespace: [String] { - guard let trimWhiteSpaceRegEx = try? NSRegularExpression(pattern: "/ +/g") else { - return [] - } - let trimmed = trimWhiteSpaceRegEx.stringByReplacingMatches( - in: self, - options: [], - range: NSRange(location: 0, length: count), - withTemplate: " " - ) - return trimmed.split(separator: " ").map { String($0) } + split(separator: " ").filter { !$0.isEmpty }.map { String($0) } } var numericOnly: String { diff --git a/eul/Store/DiskStore.swift b/eul/Store/DiskStore.swift index dae8aa6..e2d11ce 100644 --- a/eul/Store/DiskStore.swift +++ b/eul/Store/DiskStore.swift @@ -29,12 +29,29 @@ class DiskStore: ObservableObject, Refreshable { return list?.disks.filter { $0.name == config.diskSelection }.first } + private var rootAttributes: (size: UInt64, free: UInt64)? { + guard + let attrs = try? FileManager.default.attributesOfFileSystem(forPath: "/"), + let size = attrs[.systemSize] as? UInt64, + let free = attrs[.systemFreeSize] as? UInt64 + else { + return nil + } + return (size, free) + } + var ceilingBytes: UInt64? { - selectedDisk?.size ?? list?.disks.reduce(0) { $0 + $1.size } + if let selected = selectedDisk { + return selected.size + } + return rootAttributes?.size } var freeBytes: UInt64? { - selectedDisk?.freeSize ?? list?.disks.reduce(0) { $0 + $1.freeSize } + if let selected = selectedDisk { + return selected.freeSize + } + return rootAttributes?.free } var usageString: String {