refactored to storeDB loadLocalDB and fetchRemoteDB for more readability

added more stuff to slackresponse cos cachets got some cool stuff
guards on toEmojis and it can take in and return nil
This commit is contained in:
neon443
2025-10-27 20:28:47 +00:00
parent 2ddcd49ad0
commit f4ab22a789
6 changed files with 44 additions and 27 deletions

View File

@@ -7,6 +7,7 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
A9112EAC2EAFFDB0006739E2 /* Haptics in Frameworks */ = {isa = PBXBuildFile; productRef = A9112EAB2EAFFDB0006739E2 /* Haptics */; };
A924C3722EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; }; A924C3722EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; };
A924C3732EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; }; A924C3732EA9127200F20781 /* Emoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A924C3712EA9127200F20781 /* Emoji.swift */; };
A924C3782EA9225800F20781 /* Haptics in Frameworks */ = {isa = PBXBuildFile; productRef = A924C3772EA9225800F20781 /* Haptics */; }; A924C3782EA9225800F20781 /* Haptics in Frameworks */ = {isa = PBXBuildFile; productRef = A924C3772EA9225800F20781 /* Haptics */; };
@@ -23,7 +24,6 @@
A969D6AE2EA3F1AF00399C05 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A969D6A92EA3F1AF00399C05 /* MainInterface.storyboard */; }; A969D6AE2EA3F1AF00399C05 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A969D6A92EA3F1AF00399C05 /* MainInterface.storyboard */; };
A969D6AF2EA3F1AF00399C05 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A969D6AA2EA3F1AF00399C05 /* MessagesViewController.swift */; }; A969D6AF2EA3F1AF00399C05 /* MessagesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A969D6AA2EA3F1AF00399C05 /* MessagesViewController.swift */; };
A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9773C2E2EA54AF000F3B753 /* EmojiPreview.swift */; }; A9773C2F2EA54AF000F3B753 /* EmojiPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9773C2E2EA54AF000F3B753 /* EmojiPreview.swift */; };
A986A6682EAAB41000B6E0FA /* Haptics in Frameworks */ = {isa = PBXBuildFile; productRef = A986A6672EAAB41000B6E0FA /* Haptics */; };
A9BE06DB2EA656B80033B213 /* EmojiHoarder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949B1F72EA04F2300215164 /* EmojiHoarder.swift */; }; A9BE06DB2EA656B80033B213 /* EmojiHoarder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949B1F72EA04F2300215164 /* EmojiHoarder.swift */; };
A9BE06DC2EA657C70033B213 /* ApiEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A940FE3C2EA232590016870B /* ApiEmoji.swift */; }; A9BE06DC2EA657C70033B213 /* ApiEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = A940FE3C2EA232590016870B /* ApiEmoji.swift */; };
A9BE06DD2EA657CF0033B213 /* SlackResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949B1FA2EA0518800215164 /* SlackResponse.swift */; }; A9BE06DD2EA657CF0033B213 /* SlackResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949B1FA2EA0518800215164 /* SlackResponse.swift */; };
@@ -80,7 +80,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
A924C3782EA9225800F20781 /* Haptics in Frameworks */, A924C3782EA9225800F20781 /* Haptics in Frameworks */,
A986A6682EAAB41000B6E0FA /* Haptics in Frameworks */, A9112EAC2EAFFDB0006739E2 /* Haptics in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@@ -195,7 +195,7 @@
name = StickerSlack; name = StickerSlack;
packageProductDependencies = ( packageProductDependencies = (
A924C3772EA9225800F20781 /* Haptics */, A924C3772EA9225800F20781 /* Haptics */,
A986A6672EAAB41000B6E0FA /* Haptics */, A9112EAB2EAFFDB0006739E2 /* Haptics */,
); );
productName = StickerSlack; productName = StickerSlack;
productReference = A949B1DF2EA04C0B00215164 /* StickerSlack.app */; productReference = A949B1DF2EA04C0B00215164 /* StickerSlack.app */;
@@ -248,7 +248,7 @@
mainGroup = A949B1D62EA04C0B00215164; mainGroup = A949B1D62EA04C0B00215164;
minimizedProjectReferenceProxies = 1; minimizedProjectReferenceProxies = 1;
packageReferences = ( packageReferences = (
A986A6662EAAB41000B6E0FA /* XCRemoteSwiftPackageReference "Haptics" */, A9112EAA2EAFFDB0006739E2 /* XCRemoteSwiftPackageReference "Haptics" */,
); );
preferredProjectObjectVersion = 77; preferredProjectObjectVersion = 77;
productRefGroup = A949B1E02EA04C0B00215164 /* Products */; productRefGroup = A949B1E02EA04C0B00215164 /* Products */;
@@ -635,9 +635,9 @@
/* End XCConfigurationList section */ /* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */ /* Begin XCRemoteSwiftPackageReference section */
A986A6662EAAB41000B6E0FA /* XCRemoteSwiftPackageReference "Haptics" */ = { A9112EAA2EAFFDB0006739E2 /* XCRemoteSwiftPackageReference "Haptics" */ = {
isa = XCRemoteSwiftPackageReference; isa = XCRemoteSwiftPackageReference;
repositoryURL = "http://github.com/neon443/Haptics"; repositoryURL = "https://github.com/neon443/Haptics";
requirement = { requirement = {
branch = main; branch = main;
kind = branch; kind = branch;
@@ -646,13 +646,13 @@
/* End XCRemoteSwiftPackageReference section */ /* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */ /* Begin XCSwiftPackageProductDependency section */
A924C3772EA9225800F20781 /* Haptics */ = { A9112EAB2EAFFDB0006739E2 /* Haptics */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = A9112EAA2EAFFDB0006739E2 /* XCRemoteSwiftPackageReference "Haptics" */;
productName = Haptics; productName = Haptics;
}; };
A986A6672EAAB41000B6E0FA /* Haptics */ = { A924C3772EA9225800F20781 /* Haptics */ = {
isa = XCSwiftPackageProductDependency; isa = XCSwiftPackageProductDependency;
package = A986A6662EAAB41000B6E0FA /* XCRemoteSwiftPackageReference "Haptics" */;
productName = Haptics; productName = Haptics;
}; };
/* End XCSwiftPackageProductDependency section */ /* End XCSwiftPackageProductDependency section */

View File

@@ -1,10 +1,10 @@
{ {
"originHash" : "62caf5d3b5c5f962753f0e93862d5d90e6fcd2157c5fef072880f7c4ca348c7c", "originHash" : "1d3269ec6ef7a3d9a10b9d3cc53bfd207a07ae67b8f251b18da218e827fd0bff",
"pins" : [ "pins" : [
{ {
"identity" : "haptics", "identity" : "haptics",
"kind" : "remoteSourceControl", "kind" : "remoteSourceControl",
"location" : "http://github.com/neon443/Haptics", "location" : "https://github.com/neon443/Haptics",
"state" : { "state" : {
"branch" : "main", "branch" : "main",
"revision" : "90e080694752c1af657d2f7ac2dce22eaf439391" "revision" : "90e080694752c1af657d2f7ac2dce22eaf439391"

View File

@@ -74,7 +74,6 @@
savedToolIdentifier = "" savedToolIdentifier = ""
useCustomWorkingDirectory = "NO" useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES" debugDocumentVersioning = "YES"
askForAppToLaunch = "Yes"
launchAutomaticallySubstyle = "2"> launchAutomaticallySubstyle = "2">
<RemoteRunnable <RemoteRunnable
runnableDebuggingMode = "1" runnableDebuggingMode = "1"

View File

@@ -8,7 +8,6 @@
import Foundation import Foundation
import UIKit import UIKit
import UniformTypeIdentifiers import UniformTypeIdentifiers
import Haptics
struct Emoji: Codable, Identifiable, Hashable { struct Emoji: Codable, Identifiable, Hashable {
var id: UUID var id: UUID

View File

@@ -7,13 +7,16 @@
import Foundation import Foundation
struct SlackResponse: Codable { struct SlackResponse: Identifiable, Codable {
var type: String
var id: UUID
var name: String var name: String
var imageUrl: String var imageUrl: String
var alias: String? var alias: String?
var expiration: Date
static func toEmojis(from response: [SlackResponse]?) -> [Emoji]? {
static func toEmojis(from: [SlackResponse]) -> [Emoji] { guard let response else { return nil }
return from.map { ApiEmoji(name: $0.name, url: $0.imageUrl).toEmoji() } return response.map { ApiEmoji(name: $0.name, url: $0.imageUrl).toEmoji() }
} }
} }

View File

@@ -15,22 +15,38 @@ class EmojiHoarder: ObservableObject {
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")!
@Published var emojis: [Emoji] @Published var emojis: [Emoji] = []
init() { init() {
if let localEmojiDB = try? Data(contentsOf: EmojiHoarder.localEmojiDB) { guard let fetched = fetchRemoteDB() else {
let decoded = try! JSONDecoder().decode([Emoji].self, from: localEmojiDB) self.emojis = loadLocalDB()
self.emojis = decoded
return return
} }
guard let data = try? Data(contentsOf: endpoint) else { fatalError("cachet unreachable") } self.emojis = fetched
}
let decoded: [SlackResponse] = try! JSONDecoder().decode([SlackResponse].self, from: data) func storeStickers(_ toStore: [UUID]) {
self.emojis = SlackResponse.toEmojis(from: decoded) for stickerId in toStore {
print(stickerId)
}
}
func storeDB() {
try! JSONEncoder().encode(emojis).write(to: EmojiHoarder.localEmojiDB) try! JSONEncoder().encode(emojis).write(to: EmojiHoarder.localEmojiDB)
} }
// func storeStickers func loadLocalDB() -> [Emoji] {
if let localEmojiDB = try? Data(contentsOf: EmojiHoarder.localEmojiDB) {
let decoded = try! JSONDecoder().decode([Emoji].self, from: localEmojiDB)
return decoded
}
return []
}
func fetchRemoteDB() -> [Emoji]? {
guard let data = try? Data(contentsOf: endpoint) else { fatalError("cachet unreachable") }
let decoded: [SlackResponse] = try! JSONDecoder().decode([SlackResponse].self, from: data)
return SlackResponse.toEmojis(from: decoded)
}
} }