diff --git a/StickerSlack/EmojiHoarder.swift b/StickerSlack/EmojiHoarder.swift index 829eaf2..3094c64 100644 --- a/StickerSlack/EmojiHoarder.swift +++ b/StickerSlack/EmojiHoarder.swift @@ -32,7 +32,7 @@ class EmojiHoarder: ObservableObject { print("start loading remote db") await self.loadRemoteDB() print("start local emojis loading") - await self.loadLocalEmojis() + await self.findLocalEmojis() print("end") } } @@ -47,7 +47,7 @@ class EmojiHoarder: ObservableObject { await withTaskGroup { group in for i in emojis.indices { group.addTask { - guard await self.emojis[i].isLocal else { return } + guard await self.localEmojis.contains(self.emojis[i]) else { return } await self.emojis[i].deleteImage() DispatchQueue.main.sync { self.emojis[i].refresh() @@ -58,7 +58,7 @@ class EmojiHoarder: ObservableObject { } nonisolated - func loadLocalEmojis() async { + func findLocalEmojis() async { let filteredSetted = await Set(self.emojis.filter { $0.isLocal }) await MainActor.run { self.localEmojis = filteredSetted @@ -74,6 +74,7 @@ class EmojiHoarder: ObservableObject { try! data.write(to: EmojiHoarder.localEmojiDB) } + nonisolated func loadLocalDB() -> [Emoji] { if let localEmojiDB = try? Data(contentsOf: EmojiHoarder.localEmojiDB) { let decoded = try! decoder.decode([Emoji].self, from: localEmojiDB) @@ -136,9 +137,9 @@ class EmojiHoarder: ObservableObject { case .none: fallthrough case .downloaded: - withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { $0.isLocal } } + withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { self.localEmojis.contains($0) } } case .notDownloaded: - withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { !$0.isLocal } } + withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { !self.localEmojis.contains($0) } } } } } diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index 9da78c4..37e606a 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -46,7 +46,10 @@ struct ContentView: View { ForEach($hoarder.filteredEmojis, id: \.self) { $emoji in HStack { - EmojiPreview(emoji: emoji) + EmojiPreview( + hoarder: hoarder, + emoji: emoji + ) .frame(maxWidth: 100, maxHeight: 100) Spacer() Button("", systemImage: "checkmark") { @@ -61,7 +64,7 @@ struct ContentView: View { } } .buttonStyle(.plain) - if emoji.isLocal { + if hoarder.localEmojis.contains(emoji) { Button("", systemImage: "trash") { emoji.deleteImage() emoji.refresh() @@ -78,7 +81,7 @@ struct ContentView: View { } } .swipeActions(edge: .trailing, allowsFullSwipe: true) { - if emoji.isLocal { + if hoarder.localEmojis.contains(emoji) { Button("Remove", systemImage: "trash") { emoji.deleteImage() emoji.refresh() diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift index aac1052..e4be691 100644 --- a/StickerSlack/Views/EmojiPreview.swift +++ b/StickerSlack/Views/EmojiPreview.swift @@ -9,6 +9,7 @@ import SwiftUI import Haptics struct EmojiPreview: View { + @ObservedObject var hoarder: EmojiHoarder @State var emoji: Emoji @State private var id: UUID = UUID() @@ -17,7 +18,7 @@ struct EmojiPreview: View { VStack(alignment: .leading) { Text(emoji.name) Group { - if emoji.isLocal { + if hoarder.localEmojis.contains(emoji) { Image(uiImage: emoji.image ?? UIImage()) .resizable().scaledToFit() .border(.orange) @@ -62,6 +63,7 @@ struct EmojiPreview: View { #Preview { EmojiPreview( + hoarder: EmojiHoarder(localOnly: true), emoji: Emoji( name: "s?", url: URL(string: "https://neon443.github.io/images/fav.ico")!