diff --git a/ElementX/Sources/Other/Extensions/FileManager.swift b/ElementX/Sources/Other/Extensions/FileManager.swift index 3bb7b598f..5ef807fe4 100644 --- a/ElementX/Sources/Other/Extensions/FileManager.swift +++ b/ElementX/Sources/Other/Extensions/FileManager.swift @@ -59,6 +59,19 @@ extension FileManager { return size } + + func sizeForDirectory(at url: URL) throws -> UInt { + guard let enumerator = enumerator(at: url, includingPropertiesForKeys: [.fileSizeKey, .isDirectoryKey]) else { + throw FileManagerError.invalidFileSize + } + + return try enumerator + .compactMap { + guard let fileURL = $0 as? URL else { return nil } + return try UInt(fileURL.resourceValues(forKeys: [.fileSizeKey]).fileSize ?? 0) + } + .reduce(0, +) + } func numberOfItems(at url: URL) throws -> Int { try contentsOfDirectory(at: url, includingPropertiesForKeys: nil).count diff --git a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenViewModel.swift b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenViewModel.swift index 861f082cf..b70372334 100644 --- a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenViewModel.swift +++ b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenViewModel.swift @@ -40,6 +40,9 @@ class DeveloperOptionsScreenViewModel: DeveloperOptionsScreenViewModelType, Deve if let mediaStore = sizes.mediaStore { components.append(.init(name: "MediaStore", size: formatter.format(Int64(mediaStore)))) } + if let logsSize = try? FileManager.default.sizeForDirectory(at: .appGroupLogsDirectory) { + components.append(.init(name: "Log Files", size: formatter.format(Int64(logsSize)))) + } state.storeSizes = components }