reduced usage of isLocal in favour of checking hoarder.downloadedEmojis

wrote tests to check that, Set checking is 1.5 to 2x faster
This commit is contained in:
neon443
2025-11-05 19:50:10 +00:00
parent c3cfecb87e
commit 08ad69b19a
4 changed files with 16 additions and 4 deletions

View File

@@ -21,7 +21,7 @@ class EmojiHoarder: ObservableObject {
@Published var trie: Trie = Trie() @Published var trie: Trie = Trie()
@Published var filteredEmojis: [String] = [] @Published var filteredEmojis: [String] = []
@Published var downloadedEmojis: [String] = [] @Published var downloadedEmojis: Set<String> = []
@Published var searchTerm: String = "" @Published var searchTerm: String = ""
init(localOnly: Bool = false) { init(localOnly: Bool = false) {
@@ -97,7 +97,7 @@ class EmojiHoarder: ObservableObject {
downloadedEmojis = [] downloadedEmojis = []
for emoji in emojis { for emoji in emojis {
guard emoji.isLocal else { continue } guard emoji.isLocal else { continue }
downloadedEmojis.append(emoji.name) downloadedEmojis.insert(emoji.name)
} }
} }

View File

@@ -20,7 +20,7 @@ struct EmojiRow: View {
) )
.frame(maxWidth: 100, maxHeight: 100) .frame(maxWidth: 100, maxHeight: 100)
Spacer() Spacer()
if emoji.isLocal { if hoarder.downloadedEmojis.contains(emoji.name) {
Button("", systemImage: "trash") { Button("", systemImage: "trash") {
emoji.deleteImage() emoji.deleteImage()
emoji.refresh() emoji.refresh()

View File

@@ -56,7 +56,7 @@ struct EmojiCollectionView: UIViewRepresentable {
) )
.frame(maxWidth: 100, maxHeight: 100) .frame(maxWidth: 100, maxHeight: 100)
Spacer() Spacer()
if hoarder.trie.dict[emojiName]!.isLocal { if hoarder.downloadedEmojis.contains(emojiName) {
Button("", systemImage: "trash") { Button("", systemImage: "trash") {
self.hoarder.trie.dict[emojiName]!.deleteImage() self.hoarder.trie.dict[emojiName]!.deleteImage()
self.hoarder.trie.dict[emojiName]!.refresh() self.hoarder.trie.dict[emojiName]!.refresh()

View File

@@ -140,4 +140,16 @@ struct PerformanceTests {
let _ = hoarder.trie.search(prefix: term) let _ = hoarder.trie.search(prefix: term)
} }
} }
@Test func testIsLocal() async throws {
for emoji in hoarder.emojis {
let x = emoji.isLocal
}
}
@Test func testDownloadedEmojis() async throws {
for emoji in hoarder.emojis {
let x = hoarder.downloadedEmojis.contains(emoji.name)
}
}
} }