secant-ios-wallet/modules/Sources/Dependencies/DatabaseFiles/DatabaseFiles.swift

93 lines
2.7 KiB
Swift

//
// DatabaseFiles.swift
// Zashi
//
// Created by Lukáš Korba on 05.04.2022.
//
import Foundation
import ZcashLightClientKit
import FileManager
public struct DatabaseFiles {
enum DatabaseFilesError: Error {
case getFsBlockDbRoot
case getDocumentsURL
case getCacheURL
case getDataURL
case getOutputParamsURL
case getPendingURL
case getSpendParamsURL
case nukeFiles
case filesPresentCheck
}
private let fileManager: FileManagerClient
public init(fileManager: FileManagerClient) {
self.fileManager = fileManager
}
func documentsDirectory() -> URL {
do {
return try fileManager.url(.documentDirectory, .userDomainMask, nil, true)
} catch {
// This is not super clean but this is second best thing when the above call fails.
return URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Documents")
}
}
func cacheDbURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)cache.db",
isDirectory: false
)
}
func dataDbURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)data.db",
isDirectory: false
)
}
func outputParamsURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)sapling-output.params",
isDirectory: false
)
}
func pendingDbURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)pending.db",
isDirectory: false
)
}
func spendParamsURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)sapling-spend.params",
isDirectory: false
)
}
func toDirURL(for network: ZcashNetwork) -> URL {
return documentsDirectory()
.appendingPathComponent(
"\(network.constants.defaultDbNamePrefix)to-dir",
isDirectory: false
)
}
func areDbFilesPresent(for network: ZcashNetwork) -> Bool {
let dataDbURL = dataDbURL(for: network)
return fileManager.fileExists(dataDbURL.path)
}
}