mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2025-06-28 20:29:53 +00:00
56 lines
2 KiB
Swift
56 lines
2 KiB
Swift
//
|
|
// StorageView.swift
|
|
// SimpleX (iOS)
|
|
//
|
|
// Created by Stanislav Dmitrenko on 13.01.2025.
|
|
// Copyright © 2025 SimpleX Chat. All rights reserved.
|
|
//
|
|
|
|
import SwiftUI
|
|
import SimpleXChat
|
|
|
|
struct StorageView: View {
|
|
@State var appGroupFiles: [String: Int64] = [:]
|
|
@State var documentsFiles: [String: Int64] = [:]
|
|
|
|
var body: some View {
|
|
ScrollView {
|
|
VStack(alignment: .leading) {
|
|
directoryView("App group:", appGroupFiles)
|
|
if !documentsFiles.isEmpty {
|
|
directoryView("Documents:", documentsFiles)
|
|
}
|
|
}
|
|
}
|
|
.padding()
|
|
.onAppear {
|
|
appGroupFiles = traverseFiles(in: getGroupContainerDirectory())
|
|
documentsFiles = traverseFiles(in: getDocumentsDirectory())
|
|
}
|
|
}
|
|
|
|
@ViewBuilder
|
|
private func directoryView(_ name: LocalizedStringKey, _ contents: [String: Int64]) -> some View {
|
|
Text(name).font(.headline)
|
|
ForEach(Array(contents), id: \.key) { (key, value) in
|
|
Text(key).bold() + Text(" ") + Text("\(ByteCountFormatter.string(fromByteCount: value, countStyle: .binary))")
|
|
}
|
|
}
|
|
|
|
private func traverseFiles(in dir: URL) -> [String: Int64] {
|
|
var res: [String: Int64] = [:]
|
|
let fm = FileManager.default
|
|
do {
|
|
if let enumerator = fm.enumerator(at: dir, includingPropertiesForKeys: [.isDirectoryKey, .fileSizeKey, .fileAllocatedSizeKey]) {
|
|
for case let url as URL in enumerator {
|
|
let attrs = try url.resourceValues(forKeys: [/*.isDirectoryKey, .fileSizeKey,*/ .fileAllocatedSizeKey])
|
|
let root = String(url.absoluteString.replacingOccurrences(of: dir.absoluteString, with: "").split(separator: "/")[0])
|
|
res[root] = (res[root] ?? 0) + Int64(attrs.fileAllocatedSize ?? 0)
|
|
}
|
|
}
|
|
} catch {
|
|
logger.error("Error traversing files: \(error)")
|
|
}
|
|
return res
|
|
}
|
|
}
|