From f90a2c65b4573d0be40a2d62c55ea7be722a4e3a Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:40:44 +0000 Subject: [PATCH] had to revert the hash map stuff :pf: --- StickerSlack/EmojiHoarder.swift | 37 +++++---------------------- StickerSlack/Views/ContentView.swift | 11 +++++--- StickerSlack/Views/EmojiPreview.swift | 2 +- 3 files changed, 15 insertions(+), 35 deletions(-) diff --git a/StickerSlack/EmojiHoarder.swift b/StickerSlack/EmojiHoarder.swift index 50aafca..7204683 100644 --- a/StickerSlack/EmojiHoarder.swift +++ b/StickerSlack/EmojiHoarder.swift @@ -18,7 +18,6 @@ class EmojiHoarder: ObservableObject { private let decoder = JSONDecoder() @Published var emojis: [Emoji] = [] - @Published var localEmojis: Set = [] @Published var filteredEmojis: [Emoji] = [] @Published var prefix: Int = 100 @@ -31,8 +30,6 @@ class EmojiHoarder: ObservableObject { Task.detached { print("start loading remote db") await self.loadRemoteDB() - print("start local emojis loading") - await self.findLocalEmojis() print("end") } } @@ -47,7 +44,7 @@ class EmojiHoarder: ObservableObject { await withTaskGroup { group in for i in emojis.indices { group.addTask { - guard await self.localEmojis.contains(self.emojis[i]) else { return } + guard await self.emojis[i].isLocal else { return } await self.emojis[i].deleteImage() DispatchQueue.main.sync { self.emojis[i].refresh() @@ -57,15 +54,6 @@ class EmojiHoarder: ObservableObject { } } - nonisolated - func findLocalEmojis() async { - let filteredSetted = await Set(self.emojis.filter { $0.isLocal }) - await MainActor.run { - self.localEmojis = filteredSetted - } - return - } - func storeDB() { try! encoder.encode(emojis).write(to: EmojiHoarder.localEmojiDB) } @@ -137,32 +125,19 @@ class EmojiHoarder: ObservableObject { case .none: fallthrough case .downloaded: - withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { self.localEmojis.contains($0) } } + withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { $0.isLocal } } case .notDownloaded: - withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { !self.localEmojis.contains($0) } } + withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { !$0.isLocal } } } } } - func downloadEmoji(_ toDownload: Emoji) { - Task.detached { - if (try? await toDownload.downloadImage()) != nil { - let index = await self.emojis.firstIndex { $0 == toDownload } - guard let index else { return } - await MainActor.run { - self.localEmojis.insert(toDownload) - self.emojis[index].refresh() - } - } - } + func downloadEmoji(_ toDownload: Emoji) async { + } @MainActor func deleteEmoji(_ toDelete: Emoji) { - toDelete.deleteImage() - let index = self.emojis.firstIndex { $0 == toDelete } - guard let index else { return } - self.localEmojis.remove(toDelete) - self.emojis[index].refresh() + } } diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index 739fbe7..35c2132 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -64,22 +64,27 @@ struct ContentView: View { } } .buttonStyle(.plain) - if hoarder.localEmojis.contains(emoji) { + if emoji.isLocal { Button("", systemImage: "trash") { hoarder.deleteEmoji(emoji) + emoji.refresh() } .buttonStyle(.plain) } else { Button("", systemImage: "arrow.down.circle") { - hoarder.downloadEmoji(emoji) + Task.detached { + await hoarder.downloadEmoji(emoji) + await emoji.refresh() + } } .buttonStyle(.plain) } } .swipeActions(edge: .trailing, allowsFullSwipe: true) { - if hoarder.localEmojis.contains(emoji) { + if emoji.isLocal { Button("Remove", systemImage: "trash") { hoarder.deleteEmoji(emoji) + emoji.refresh() } .tint(.red) } diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift index e4be691..90c35ef 100644 --- a/StickerSlack/Views/EmojiPreview.swift +++ b/StickerSlack/Views/EmojiPreview.swift @@ -18,7 +18,7 @@ struct EmojiPreview: View { VStack(alignment: .leading) { Text(emoji.name) Group { - if hoarder.localEmojis.contains(emoji) { + if emoji.isLocal { Image(uiImage: emoji.image ?? UIImage()) .resizable().scaledToFit() .border(.orange)