120 lines
3.5 KiB
Swift
120 lines
3.5 KiB
Swift
//
|
|
// DatabaseFiles.swift
|
|
// secant-testnet
|
|
//
|
|
// Created by Lukáš Korba on 05.04.2022.
|
|
//
|
|
|
|
import Foundation
|
|
import ZcashLightClientKit
|
|
|
|
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
|
|
|
|
init(fileManager: FileManagerClient) {
|
|
self.fileManager = fileManager
|
|
}
|
|
|
|
func documentsDirectory() throws -> URL {
|
|
do {
|
|
return try fileManager.url(.documentDirectory, .userDomainMask, nil, true)
|
|
} catch {
|
|
throw DatabaseFilesError.getDocumentsURL
|
|
}
|
|
}
|
|
|
|
func cacheDbURL(for network: ZcashNetwork) throws -> URL {
|
|
do {
|
|
return try documentsDirectory()
|
|
.appendingPathComponent(
|
|
"\(network.constants.defaultDbNamePrefix)cache.db",
|
|
isDirectory: false
|
|
)
|
|
} catch {
|
|
throw DatabaseFilesError.getCacheURL
|
|
}
|
|
}
|
|
|
|
func dataDbURL(for network: ZcashNetwork) throws -> URL {
|
|
do {
|
|
return try documentsDirectory()
|
|
.appendingPathComponent(
|
|
"\(network.constants.defaultDbNamePrefix)data.db",
|
|
isDirectory: false
|
|
)
|
|
} catch {
|
|
throw DatabaseFilesError.getDataURL
|
|
}
|
|
}
|
|
|
|
func outputParamsURL(for network: ZcashNetwork) throws -> URL {
|
|
do {
|
|
return try documentsDirectory()
|
|
.appendingPathComponent(
|
|
"\(network.constants.defaultDbNamePrefix)sapling-output.params",
|
|
isDirectory: false
|
|
)
|
|
} catch {
|
|
throw DatabaseFilesError.getOutputParamsURL
|
|
}
|
|
}
|
|
|
|
func pendingDbURL(for network: ZcashNetwork) throws -> URL {
|
|
do {
|
|
return try documentsDirectory()
|
|
.appendingPathComponent(
|
|
"\(network.constants.defaultDbNamePrefix)pending.db",
|
|
isDirectory: false
|
|
)
|
|
} catch {
|
|
throw DatabaseFilesError.getPendingURL
|
|
}
|
|
}
|
|
|
|
func spendParamsURL(for network: ZcashNetwork) throws -> URL {
|
|
do {
|
|
return try documentsDirectory()
|
|
.appendingPathComponent(
|
|
"\(network.constants.defaultDbNamePrefix)sapling-spend.params",
|
|
isDirectory: false
|
|
)
|
|
} catch {
|
|
throw DatabaseFilesError.getSpendParamsURL
|
|
}
|
|
}
|
|
|
|
func areDbFilesPresent(for network: ZcashNetwork) throws -> Bool {
|
|
do {
|
|
let dataDbURL = try dataDbURL(for: network)
|
|
return fileManager.fileExists(dataDbURL.path)
|
|
} catch {
|
|
throw DatabaseFilesError.filesPresentCheck
|
|
}
|
|
}
|
|
|
|
func nukeDbFiles(for network: ZcashNetwork) throws {
|
|
do {
|
|
let cacheDbURL = try cacheDbURL(for: network)
|
|
let dataDbURL = try dataDbURL(for: network)
|
|
let pendingDbURL = try pendingDbURL(for: network)
|
|
try fileManager.removeItem(cacheDbURL)
|
|
try fileManager.removeItem(dataDbURL)
|
|
try fileManager.removeItem(pendingDbURL)
|
|
} catch {
|
|
throw DatabaseFilesError.nukeFiles
|
|
}
|
|
}
|
|
}
|