shared decoder and encoder

This commit is contained in:
neon443
2025-10-28 11:42:08 +00:00
parent f4ab22a789
commit f37b254e80

View File

@@ -14,6 +14,8 @@ class EmojiHoarder: ObservableObject {
static let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.neon443.StickerSlack")!.appendingPathComponent("Library", conformingTo: .directory) static let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.neon443.StickerSlack")!.appendingPathComponent("Library", conformingTo: .directory)
static let localEmojiDB: URL = EmojiHoarder.container.appendingPathExtension("localEmojiDB.json") static let localEmojiDB: URL = EmojiHoarder.container.appendingPathExtension("localEmojiDB.json")
private let endpoint: URL = URL(string: "https://cachet.dunkirk.sh/emojis")! private let endpoint: URL = URL(string: "https://cachet.dunkirk.sh/emojis")!
private let encoder = JSONEncoder()
private let decoder = JSONDecoder()
@Published var emojis: [Emoji] = [] @Published var emojis: [Emoji] = []
@@ -33,12 +35,12 @@ class EmojiHoarder: ObservableObject {
} }
func storeDB() { func storeDB() {
try! JSONEncoder().encode(emojis).write(to: EmojiHoarder.localEmojiDB) try! encoder.encode(emojis).write(to: EmojiHoarder.localEmojiDB)
} }
func loadLocalDB() -> [Emoji] { func loadLocalDB() -> [Emoji] {
if let localEmojiDB = try? Data(contentsOf: EmojiHoarder.localEmojiDB) { if let localEmojiDB = try? Data(contentsOf: EmojiHoarder.localEmojiDB) {
let decoded = try! JSONDecoder().decode([Emoji].self, from: localEmojiDB) let decoded = try! decoder.decode([Emoji].self, from: localEmojiDB)
return decoded return decoded
} }
return [] return []
@@ -46,7 +48,8 @@ class EmojiHoarder: ObservableObject {
func fetchRemoteDB() -> [Emoji]? { func fetchRemoteDB() -> [Emoji]? {
guard let data = try? Data(contentsOf: endpoint) else { fatalError("cachet unreachable") } guard let data = try? Data(contentsOf: endpoint) else { fatalError("cachet unreachable") }
let decoded: [SlackResponse] = try! JSONDecoder().decode([SlackResponse].self, from: data) decoder.dateDecodingStrategy = .iso8601
let decoded: [SlackResponse] = try! decoder.decode([SlackResponse].self, from: data)
return SlackResponse.toEmojis(from: decoded) return SlackResponse.toEmojis(from: decoded)
} }
} }