Add developer option for clearing the application cache (#852)

* Add developer option for clearing the application cache

* Tweaks following code review
This commit is contained in:
Stefan Ceriu
2023-05-05 19:41:21 +03:00
committed by GitHub
parent f679c0ca2a
commit 574424024c
10 changed files with 93 additions and 7 deletions
@@ -21,6 +21,7 @@ import MatrixRustSDK
class UserSessionStore: UserSessionStoreProtocol {
private let keychainController: KeychainControllerProtocol
private let backgroundTaskService: BackgroundTaskServiceProtocol
private let cachesFolderName = "matrix-sdk-state"
/// Whether or not there are sessions in the store.
var hasSessions: Bool { !keychainController.restorationTokens().isEmpty }
@@ -90,6 +91,11 @@ class UserSessionStore: UserSessionStoreProtocol {
deleteSessionDirectory(for: userID)
}
func clearCacheFor(userSession: UserSessionProtocol) {
let userID = userSession.clientProxy.userID
deleteCachesFolder(for: userID)
}
// MARK: - Private
private func buildUserSessionWithClient(_ clientProxy: ClientProxyProtocol) -> UserSessionProtocol {
@@ -140,9 +146,15 @@ class UserSessionStore: UserSessionStoreProtocol {
}
private func deleteSessionDirectory(for userID: String) {
// Rust sanitises the user ID replacing invalid characters with an _
let sanitisedUserID = userID.replacingOccurrences(of: ":", with: "_")
let url = baseDirectory.appendingPathComponent(sanitisedUserID)
do {
try FileManager.default.removeItem(at: basePath(for: userID))
} catch {
MXLog.failure("Failed deleting the session data: \(error)")
}
}
private func deleteCachesFolder(for userID: String) {
let url = basePath(for: userID).appendingPathComponent(cachesFolderName)
do {
try FileManager.default.removeItem(at: url)
@@ -150,4 +162,11 @@ class UserSessionStore: UserSessionStoreProtocol {
MXLog.failure("Failed deleting the session data: \(error)")
}
}
#warning("We should move this and the caches folder path to the rust side")
private func basePath(for userID: String) -> URL {
// Rust sanitises the user ID replacing invalid characters with an _
let sanitisedUserID = userID.replacingOccurrences(of: ":", with: "_")
return baseDirectory.appendingPathComponent(sanitisedUserID)
}
}