59 lines
1.9 KiB
Swift
59 lines
1.9 KiB
Swift
import Foundation
|
|
|
|
public extension Profile {
|
|
func read() throws -> String {
|
|
#if DEBUG
|
|
precondition(!Thread.isMainThread, "Profile.read() must not be called on the main thread")
|
|
#endif
|
|
switch type {
|
|
case .local, .remote:
|
|
return try String(contentsOfFile: path)
|
|
case .icloud:
|
|
let saveURL = FilePath.iCloudDirectory.appendingPathComponent(path)
|
|
return try String(contentsOf: saveURL)
|
|
}
|
|
}
|
|
|
|
func write(_ content: String) throws {
|
|
#if DEBUG
|
|
precondition(!Thread.isMainThread, "Profile.write(...) must not be called on the main thread")
|
|
#endif
|
|
switch type {
|
|
case .local, .remote:
|
|
try content.write(toFile: path, atomically: true, encoding: .utf8)
|
|
case .icloud:
|
|
let saveURL = FilePath.iCloudDirectory.appendingPathComponent(path)
|
|
try content.write(to: saveURL, atomically: true, encoding: .utf8)
|
|
}
|
|
}
|
|
|
|
func readAsync() async throws -> String {
|
|
let type = type
|
|
let path = path
|
|
return try await BlockingIO.run {
|
|
switch type {
|
|
case .local, .remote:
|
|
return try String(contentsOfFile: path)
|
|
case .icloud:
|
|
let saveURL = FilePath.iCloudDirectory.appendingPathComponent(path)
|
|
return try String(contentsOf: saveURL)
|
|
}
|
|
}
|
|
}
|
|
|
|
func writeAsync(_ content: String) async throws {
|
|
let type = type
|
|
let path = path
|
|
let content = content
|
|
try await BlockingIO.run {
|
|
switch type {
|
|
case .local, .remote:
|
|
try content.write(toFile: path, atomically: true, encoding: .utf8)
|
|
case .icloud:
|
|
let saveURL = FilePath.iCloudDirectory.appendingPathComponent(path)
|
|
try content.write(to: saveURL, atomically: true, encoding: .utf8)
|
|
}
|
|
}
|
|
}
|
|
}
|