had to revert the hash map stuff :pf:

This commit is contained in:
neon443
2025-11-02 22:40:44 +00:00
parent bee0853f97
commit f90a2c65b4
3 changed files with 15 additions and 35 deletions

View File

@@ -18,7 +18,6 @@ class EmojiHoarder: ObservableObject {
private let decoder = JSONDecoder() private let decoder = JSONDecoder()
@Published var emojis: [Emoji] = [] @Published var emojis: [Emoji] = []
@Published var localEmojis: Set<Emoji> = []
@Published var filteredEmojis: [Emoji] = [] @Published var filteredEmojis: [Emoji] = []
@Published var prefix: Int = 100 @Published var prefix: Int = 100
@@ -31,8 +30,6 @@ class EmojiHoarder: ObservableObject {
Task.detached { Task.detached {
print("start loading remote db") print("start loading remote db")
await self.loadRemoteDB() await self.loadRemoteDB()
print("start local emojis loading")
await self.findLocalEmojis()
print("end") print("end")
} }
} }
@@ -47,7 +44,7 @@ class EmojiHoarder: ObservableObject {
await withTaskGroup { group in await withTaskGroup { group in
for i in emojis.indices { for i in emojis.indices {
group.addTask { 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() await self.emojis[i].deleteImage()
DispatchQueue.main.sync { DispatchQueue.main.sync {
self.emojis[i].refresh() 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() { func storeDB() {
try! encoder.encode(emojis).write(to: EmojiHoarder.localEmojiDB) try! encoder.encode(emojis).write(to: EmojiHoarder.localEmojiDB)
} }
@@ -137,32 +125,19 @@ class EmojiHoarder: ObservableObject {
case .none: case .none:
fallthrough fallthrough
case .downloaded: case .downloaded:
withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { self.localEmojis.contains($0) } } withAnimation(.interactiveSpring) { self.filteredEmojis = self.filteredEmojis.filter { $0.isLocal } }
case .notDownloaded: 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) { func downloadEmoji(_ toDownload: Emoji) async {
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()
}
}
}
} }
@MainActor @MainActor
func deleteEmoji(_ toDelete: Emoji) { 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()
} }
} }

View File

@@ -64,22 +64,27 @@ struct ContentView: View {
} }
} }
.buttonStyle(.plain) .buttonStyle(.plain)
if hoarder.localEmojis.contains(emoji) { if emoji.isLocal {
Button("", systemImage: "trash") { Button("", systemImage: "trash") {
hoarder.deleteEmoji(emoji) hoarder.deleteEmoji(emoji)
emoji.refresh()
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} else { } else {
Button("", systemImage: "arrow.down.circle") { Button("", systemImage: "arrow.down.circle") {
hoarder.downloadEmoji(emoji) Task.detached {
await hoarder.downloadEmoji(emoji)
await emoji.refresh()
}
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} }
} }
.swipeActions(edge: .trailing, allowsFullSwipe: true) { .swipeActions(edge: .trailing, allowsFullSwipe: true) {
if hoarder.localEmojis.contains(emoji) { if emoji.isLocal {
Button("Remove", systemImage: "trash") { Button("Remove", systemImage: "trash") {
hoarder.deleteEmoji(emoji) hoarder.deleteEmoji(emoji)
emoji.refresh()
} }
.tint(.red) .tint(.red)
} }

View File

@@ -18,7 +18,7 @@ struct EmojiPreview: View {
VStack(alignment: .leading) { VStack(alignment: .leading) {
Text(emoji.name) Text(emoji.name)
Group { Group {
if hoarder.localEmojis.contains(emoji) { if emoji.isLocal {
Image(uiImage: emoji.image ?? UIImage()) Image(uiImage: emoji.image ?? UIImage())
.resizable().scaledToFit() .resizable().scaledToFit()
.border(.orange) .border(.orange)