forked from shadowfacts/Tusker
Add cache size info to Advanced prefs
This commit is contained in:
parent
a5506aeab6
commit
3e5a3c81b5
|
@ -48,6 +48,7 @@
|
|||
D61F758A2932E1FC00C0B37F /* SwipeActionsPrefsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61F75892932E1FC00C0B37F /* SwipeActionsPrefsView.swift */; };
|
||||
D61F758D2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61F758B2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.swift */; };
|
||||
D61F758E2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D61F758C2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.xib */; };
|
||||
D61F759029353B4300C0B37F /* FileManager+Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61F758F29353B4300C0B37F /* FileManager+Size.swift */; };
|
||||
D620483423D3801D008A63EF /* LinkTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D620483323D3801D008A63EF /* LinkTextView.swift */; };
|
||||
D620483623D38075008A63EF /* ContentTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D620483523D38075008A63EF /* ContentTextView.swift */; };
|
||||
D620483823D38190008A63EF /* StatusContentTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D620483723D38190008A63EF /* StatusContentTextView.swift */; };
|
||||
|
@ -412,6 +413,7 @@
|
|||
D61F75892932E1FC00C0B37F /* SwipeActionsPrefsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeActionsPrefsView.swift; sourceTree = "<group>"; };
|
||||
D61F758B2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusUpdatedNotificationTableViewCell.swift; sourceTree = "<group>"; };
|
||||
D61F758C2933C69C00C0B37F /* StatusUpdatedNotificationTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = StatusUpdatedNotificationTableViewCell.xib; sourceTree = "<group>"; };
|
||||
D61F758F29353B4300C0B37F /* FileManager+Size.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "FileManager+Size.swift"; sourceTree = "<group>"; };
|
||||
D620483323D3801D008A63EF /* LinkTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LinkTextView.swift; sourceTree = "<group>"; };
|
||||
D620483523D38075008A63EF /* ContentTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentTextView.swift; sourceTree = "<group>"; };
|
||||
D620483723D38190008A63EF /* StatusContentTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusContentTextView.swift; sourceTree = "<group>"; };
|
||||
|
@ -1166,6 +1168,7 @@
|
|||
D62E9984279CA23900C26176 /* URLSession+Development.swift */,
|
||||
D6ADB6ED28EA74E8009924AB /* UIView+Configure.swift */,
|
||||
D63CC70F2911F1E4000E19DE /* UIScrollView+Top.swift */,
|
||||
D61F758F29353B4300C0B37F /* FileManager+Size.swift */,
|
||||
);
|
||||
path = Extensions;
|
||||
sourceTree = "<group>";
|
||||
|
@ -1935,6 +1938,7 @@
|
|||
D6C143DA253510F4007DC240 /* ComposeEmojiTextField.swift in Sources */,
|
||||
D6DD2A3F273C1F4900386A6C /* ComposeAttachmentImage.swift in Sources */,
|
||||
D6DD2A45273D6C5700386A6C /* GIFImageView.swift in Sources */,
|
||||
D61F759029353B4300C0B37F /* FileManager+Size.swift in Sources */,
|
||||
0427033822B30F5F000D31B6 /* BehaviorPrefsView.swift in Sources */,
|
||||
D627943923A553B600D38C68 /* UnbookmarkStatusActivity.swift in Sources */,
|
||||
D64D0AAD2128D88B005A6F37 /* LocalData.swift in Sources */,
|
||||
|
|
|
@ -122,6 +122,10 @@ class DiskCache<T> {
|
|||
}
|
||||
}
|
||||
|
||||
func getSizeInBytes() -> Int64? {
|
||||
return fileManager.recursiveSize(url: URL(fileURLWithPath: path, isDirectory: true))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
extension DiskCache {
|
||||
|
|
|
@ -110,6 +110,10 @@ class ImageCache {
|
|||
try cache.removeAll()
|
||||
}
|
||||
|
||||
func getDiskSizeInBytes() -> Int64? {
|
||||
return cache.disk?.getSizeInBytes()
|
||||
}
|
||||
|
||||
typealias Request = URLSessionDataTask
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ import UIKit
|
|||
class ImageDataCache {
|
||||
|
||||
private let memory: MemoryCache<Entry>
|
||||
private let disk: DiskCache<Data>?
|
||||
let disk: DiskCache<Data>?
|
||||
|
||||
private let storeOriginalDataInMemory: Bool
|
||||
private let desiredPixelSize: CGSize?
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// FileManager+Size.swift
|
||||
// Tusker
|
||||
//
|
||||
// Created by Shadowfacts on 11/28/22.
|
||||
// Copyright © 2022 Shadowfacts. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension FileManager {
|
||||
func recursiveSize(url: URL) -> Int64? {
|
||||
if (try? url.resourceValues(forKeys: [.isRegularFileKey]).isRegularFile) == true {
|
||||
return size(url: url)
|
||||
} else {
|
||||
guard let enumerator = enumerator(at: url, includingPropertiesForKeys: [.isRegularFileKey, .fileSizeKey, .totalFileAllocatedSizeKey]) else {
|
||||
return nil
|
||||
}
|
||||
var total: Int64 = 0
|
||||
for case let url as URL in enumerator {
|
||||
total += size(url: url) ?? 0
|
||||
}
|
||||
return total
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func size(url: URL) -> Int64? {
|
||||
guard let resourceValues = try? url.resourceValues(forKeys: [.isRegularFileKey, .fileSizeKey, .totalFileAllocatedSizeKey]),
|
||||
resourceValues.isRegularFile ?? false,
|
||||
let size = resourceValues.fileSize ?? resourceValues.totalFileAllocatedSize else {
|
||||
return nil
|
||||
}
|
||||
return Int64(size)
|
||||
}
|
|
@ -11,7 +11,9 @@ import CoreData
|
|||
|
||||
struct AdvancedPrefsView : View {
|
||||
@ObservedObject var preferences = Preferences.shared
|
||||
|
||||
@State private var imageCacheSize: Int64 = 0
|
||||
@State private var mastodonCacheSize: Int64 = 0
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
formattingSection
|
||||
|
@ -64,13 +66,42 @@ struct AdvancedPrefsView : View {
|
|||
}
|
||||
|
||||
var cachingSection: some View {
|
||||
Section(header: Text("Caching"), footer: Text("Clearing caches will restart the app.")) {
|
||||
Section {
|
||||
Button(action: clearCache) {
|
||||
Text("Clear Mastodon Cache")
|
||||
}.foregroundColor(.red)
|
||||
Button(action: clearImageCaches) {
|
||||
Text("Clear Image Caches")
|
||||
}.foregroundColor(.red)
|
||||
} header: {
|
||||
Text("Caching")
|
||||
} footer: {
|
||||
var s: AttributedString = "Clearing caches will restart the app."
|
||||
if imageCacheSize != 0 {
|
||||
s += AttributedString("\nImage cache size: \(ByteCountFormatter().string(fromByteCount: imageCacheSize))")
|
||||
}
|
||||
if mastodonCacheSize != 0 {
|
||||
s += AttributedString("\nMastodon cache size: \(ByteCountFormatter().string(fromByteCount: mastodonCacheSize))")
|
||||
}
|
||||
return Text(s)
|
||||
}.task {
|
||||
imageCacheSize = [
|
||||
ImageCache.avatars,
|
||||
.headers,
|
||||
.attachments,
|
||||
.emojis,
|
||||
].map {
|
||||
$0.getDiskSizeInBytes() ?? 0
|
||||
}.reduce(0, +)
|
||||
mastodonCacheSize = LocalData.shared.accounts.map {
|
||||
let descriptions = MastodonController.getForAccount($0).persistentContainer.persistentStoreDescriptions
|
||||
return descriptions.map {
|
||||
guard let url = $0.url else {
|
||||
return 0
|
||||
}
|
||||
return FileManager.default.recursiveSize(url: url) ?? 0
|
||||
}.reduce(0, +)
|
||||
}.reduce(0, +)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue