ios: clear storage (#1069)

* wip

* display current storage state

* alert

* fix

* simplify

* remove unused function

* fix log

* replace prints with logger

* Apply suggestions from code review

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>

* low res will remain text

Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
This commit is contained in:
JRoberts
2022-09-19 19:05:29 +04:00
committed by GitHub
parent 962166c2ef
commit 67323a41eb
2 changed files with 77 additions and 1 deletions

View File

@@ -17,6 +17,7 @@ enum DatabaseAlert: Identifiable {
case deleteChat
case chatDeleted
case deleteLegacyDatabase
case deleteFilesAndMedia
case error(title: LocalizedStringKey, error: String = "")
var id: String {
@@ -28,6 +29,7 @@ enum DatabaseAlert: Identifiable {
case .deleteChat: return "deleteChat"
case .chatDeleted: return "chatDeleted"
case .deleteLegacyDatabase: return "deleteLegacyDatabase"
case .deleteFilesAndMedia: return "deleteFilesAndMedia"
case let .error(title, _): return "error \(title)"
}
}
@@ -46,6 +48,7 @@ struct DatabaseView: View {
@State private var dbContainer = dbContainerGroupDefault.get()
@State private var legacyDatabase = hasLegacyDatabase()
@State private var useKeychain = storeDBPassphraseGroupDefault.get()
@State private var appFilesCountAndSize: (Int, Int)?
var body: some View {
ZStack {
@@ -147,8 +150,27 @@ struct DatabaseView: View {
}
}
}
Section {
Button("Delete files & media", role: .destructive) {
alert = .deleteFilesAndMedia
}
} header: {
Text("Files")
} footer: {
if let (fileCount, size) = appFilesCountAndSize {
if fileCount == 0 {
Text("No received or sent files")
} else {
Text("\(fileCount) file(s) with total size of \(ByteCountFormatter().string(fromByteCount: Int64(size)))")
}
}
}
}
.onAppear {
runChat = m.chatRunning ?? true
appFilesCountAndSize = directoryFileCountAndSize(getAppFilesDirectory())
}
.onAppear { runChat = m.chatRunning ?? true }
.alert(item: $alert) { item in databaseAlert(item) }
.fileImporter(
isPresented: $showFileImporter,
@@ -222,6 +244,15 @@ struct DatabaseView: View {
},
secondaryButton: .cancel()
)
case .deleteFilesAndMedia:
return Alert(
title: Text("Delete files and media?"),
message: Text("This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain."),
primaryButton: .destructive(Text("Delete")) {
deleteFiles()
},
secondaryButton: .cancel()
)
case let .error(title, error):
return Alert(title: Text(title), message: Text("\(error)"))
}
@@ -354,6 +385,11 @@ struct DatabaseView: View {
}
}
}
private func deleteFiles() {
deleteAppFiles()
appFilesCountAndSize = directoryFileCountAndSize(getAppFilesDirectory())
}
}
struct DatabaseView_Previews: PreviewProvider {