Files
suixinkan_uikit/suixinkan/Features/CloudDrive/Services/CloudTransferJSONStore.swift

45 lines
1.5 KiB
Swift

//
// CloudTransferJSONStore.swift
// suixinkan
//
import Foundation
/// JSON
final class CloudTransferJSONStore: CloudTransferTaskStoring {
private let fileURL: URL
private let encoder = JSONEncoder()
private let decoder = JSONDecoder()
/// JSON
init(fileURL: URL? = nil) {
if let fileURL {
self.fileURL = fileURL
} else {
let baseURL = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first
?? FileManager.default.temporaryDirectory
self.fileURL = baseURL
.appendingPathComponent("suixinkan", isDirectory: true)
.appendingPathComponent("cloud_transfer_tasks.json")
}
}
func loadTasks() -> [CloudTransferTask] {
guard let data = try? Data(contentsOf: fileURL) else { return [] }
return (try? decoder.decode([CloudTransferTask].self, from: data)) ?? []
}
func saveTasks(_ tasks: [CloudTransferTask]) {
do {
let directory = fileURL.deletingLastPathComponent()
try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true)
let data = try encoder.encode(tasks)
try data.write(to: fileURL, options: [.atomic])
} catch {
#if DEBUG
print("CloudTransferJSONStore save failed: \(error)")
#endif
}
}
}