From 336dd167444d972dc6a632f88c2889168c130aff Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Tue, 11 Nov 2025 20:29:12 +0000 Subject: [PATCH] fix uh building the tree like 5 times too many --- StickerSlack/Emoji/EmojiHoarder.swift | 7 ++++--- StickerSlack/SwiftUI/BrowseView.swift | 6 +++--- StickerSlack/SwiftUI/ContentView.swift | 18 +++++++++--------- StickerSlack/SwiftUI/DownloadedView.swift | 6 +++--- StickerSlack/SwiftUI/Emoji/EmojiPreview.swift | 2 +- StickerSlack/SwiftUI/Emoji/EmojiRow.swift | 4 ++-- StickerSlack/SwiftUI/SearchView.swift | 6 +++--- StickerSlack/Trie/Trie.swift | 2 +- StickerSlack/Trie/TrieTestingView.swift | 4 ++-- StickerSlack/UIKit/EmojiCollectionView.swift | 9 +++++---- 10 files changed, 33 insertions(+), 31 deletions(-) diff --git a/StickerSlack/Emoji/EmojiHoarder.swift b/StickerSlack/Emoji/EmojiHoarder.swift index 61e0a43..60f7b9b 100644 --- a/StickerSlack/Emoji/EmojiHoarder.swift +++ b/StickerSlack/Emoji/EmojiHoarder.swift @@ -12,7 +12,6 @@ import UniformTypeIdentifiers import Haptics class EmojiHoarder: ObservableObject { - static let shared: EmojiHoarder = EmojiHoarder() static let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.neon443.StickerSlack")!.appendingPathComponent("Library", conformingTo: .directory) nonisolated static let localEmojiDB: URL = EmojiHoarder.container.appendingPathComponent("_localEmojiDB.json", conformingTo: .fileURL) private let endpoint: URL = URL(string: "https://cachet.dunkirk.sh/emojis")! @@ -37,7 +36,9 @@ class EmojiHoarder: ObservableObject { print("start loading remote db") await self.loadRemoteDB() print("end") - if !skipIndex { await self.buildTrie() } + if !skipIndex { + await self.buildTrie() + } } } @@ -74,7 +75,7 @@ class EmojiHoarder: ObservableObject { let start = Date().timeIntervalSince1970 trie.root = TrieNode() for emoji in emojis { - trie.insert(word: emoji.name, emoji: emoji) + trie.insert(word: emoji.name) } buildTrieDict() print("done building trie in", Date().timeIntervalSince1970-start) diff --git a/StickerSlack/SwiftUI/BrowseView.swift b/StickerSlack/SwiftUI/BrowseView.swift index 199d375..4f33f44 100644 --- a/StickerSlack/SwiftUI/BrowseView.swift +++ b/StickerSlack/SwiftUI/BrowseView.swift @@ -8,17 +8,17 @@ import SwiftUI struct BrowseView: View { - @ObservedObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder var body: some View { List { ForEach(hoarder.emojis, id: \.self) { emoji in - EmojiRow(emoji: emoji) + EmojiRow(hoarder: hoarder, emoji: emoji) } } } } #Preview { - BrowseView() + BrowseView(hoarder: EmojiHoarder(localOnly: true)) } diff --git a/StickerSlack/SwiftUI/ContentView.swift b/StickerSlack/SwiftUI/ContentView.swift index 79c97e1..eab9fc8 100644 --- a/StickerSlack/SwiftUI/ContentView.swift +++ b/StickerSlack/SwiftUI/ContentView.swift @@ -9,14 +9,14 @@ import SwiftUI import Haptics struct ContentView: View { - @StateObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder = EmojiHoarder() var body: some View { NavigationSplitView { if #available(iOS 18, *) { TabView { Tab("Browse", systemImage: "square.grid.2x2.fill") { - BrowseView() + BrowseView(hoarder: hoarder) } // Tab { @@ -43,16 +43,16 @@ struct ContentView: View { // } Tab("Downloaded", systemImage: "arrow.down.circle.fill") { - DownloadedView() + DownloadedView(hoarder: hoarder) } Tab("Tree", systemImage: "tree.fill") { - TrieTestingView() + TrieTestingView(hoarder: hoarder) } Tab("Search", systemImage: "magnifyingglass", role: .search) { NavigationStack { - SearchView() + SearchView(hoarder: hoarder) } } } @@ -61,19 +61,19 @@ struct ContentView: View { // .modifier(tabViewActivationSearchActivation()) } else { TabView { - DownloadedView() + DownloadedView(hoarder: hoarder) .tabItem { Label("Downloaded", systemImage: "arrow.down.circle.fill") } - BrowseView() + BrowseView(hoarder: hoarder) .tabItem { Label("Browse", systemImage: "square.grid.2x2.fill") } - TrieTestingView() + TrieTestingView(hoarder: hoarder) .tabItem { Label("Trie", systemImage: "tree.fill") } - SearchView() + SearchView(hoarder: hoarder) .tabItem { Label("Search", systemImage: "magnifyingglass") } diff --git a/StickerSlack/SwiftUI/DownloadedView.swift b/StickerSlack/SwiftUI/DownloadedView.swift index 6c3dc31..23e190f 100644 --- a/StickerSlack/SwiftUI/DownloadedView.swift +++ b/StickerSlack/SwiftUI/DownloadedView.swift @@ -8,7 +8,7 @@ import SwiftUI struct DownloadedView: View { - @ObservedObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder @Environment(\.colorScheme) var colorScheme var isDark: Bool { colorScheme == .dark } @@ -33,7 +33,7 @@ struct DownloadedView: View { ZStack { Rectangle() .foregroundStyle(isDark ? .black : .white) - EmojiPreview(emoji: emoji) + EmojiPreview(hoarder: hoarder, emoji: emoji) RoundedRectangle(cornerRadius: 15) .stroke(.gray, lineWidth: 1) } @@ -63,5 +63,5 @@ struct DownloadedView: View { } #Preview { - DownloadedView() + DownloadedView(hoarder: EmojiHoarder(localOnly: true)) } diff --git a/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift b/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift index faf0284..febac45 100644 --- a/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift +++ b/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift @@ -9,7 +9,7 @@ import SwiftUI import Haptics struct EmojiPreview: View { - @ObservedObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder @State var emoji: Emoji @State private var id: UUID = UUID() diff --git a/StickerSlack/SwiftUI/Emoji/EmojiRow.swift b/StickerSlack/SwiftUI/Emoji/EmojiRow.swift index 667fde7..6856d68 100644 --- a/StickerSlack/SwiftUI/Emoji/EmojiRow.swift +++ b/StickerSlack/SwiftUI/Emoji/EmojiRow.swift @@ -9,7 +9,7 @@ import SwiftUI import Haptics struct EmojiRow: View { - @ObservedObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder @State var emoji: Emoji var body: some View { @@ -19,7 +19,7 @@ struct EmojiRow: View { // Text Text(emoji.name) } - EmojiPreview(emoji: emoji) + EmojiPreview(hoarder: hoarder, emoji: emoji) } .frame(maxWidth: 100, maxHeight: 100) diff --git a/StickerSlack/SwiftUI/SearchView.swift b/StickerSlack/SwiftUI/SearchView.swift index f301d12..972019d 100644 --- a/StickerSlack/SwiftUI/SearchView.swift +++ b/StickerSlack/SwiftUI/SearchView.swift @@ -8,7 +8,7 @@ import SwiftUI struct SearchView: View { - @ObservedObject var hoarder: EmojiHoarder = .shared + @ObservedObject var hoarder: EmojiHoarder var body: some View { List { @@ -16,7 +16,7 @@ struct SearchView: View { ForEach(hoarder.filteredEmojis, id: \.self) { name in if let emoji = hoarder.trie.dict[name] { - EmojiRow(emoji: emoji) + EmojiRow(hoarder: hoarder, emoji: emoji) } } } @@ -27,5 +27,5 @@ struct SearchView: View { } #Preview { - SearchView() + SearchView(hoarder: EmojiHoarder(localOnly: true)) } diff --git a/StickerSlack/Trie/Trie.swift b/StickerSlack/Trie/Trie.swift index 501f6be..4a620ba 100644 --- a/StickerSlack/Trie/Trie.swift +++ b/StickerSlack/Trie/Trie.swift @@ -18,7 +18,7 @@ class Trie: ObservableObject { @Published var root: TrieNode = TrieNode() @Published var dict: [String:Emoji] = [:] - func insert(word: String, emoji: Emoji) { + func insert(word: String) { let word = word.lowercased() var currentNode = root let indices = word.indices diff --git a/StickerSlack/Trie/TrieTestingView.swift b/StickerSlack/Trie/TrieTestingView.swift index 39121e6..598c4a0 100644 --- a/StickerSlack/Trie/TrieTestingView.swift +++ b/StickerSlack/Trie/TrieTestingView.swift @@ -64,11 +64,11 @@ struct TrieTestingView: View { } if uikit { - EmojiCollectionView(items: filterResult) + EmojiCollectionView(hoarder: hoarder, items: filterResult) .id(filterResult) } else { List(filterResult, id: \.self) { item in - EmojiRow(emoji: hoarder.trie.dict[item]!) + EmojiRow(hoarder: hoarder, emoji: hoarder.trie.dict[item]!) } } diff --git a/StickerSlack/UIKit/EmojiCollectionView.swift b/StickerSlack/UIKit/EmojiCollectionView.swift index 6666f7f..7bd4213 100644 --- a/StickerSlack/UIKit/EmojiCollectionView.swift +++ b/StickerSlack/UIKit/EmojiCollectionView.swift @@ -11,7 +11,7 @@ import SwiftUI import Haptics struct EmojiCollectionView: UIViewRepresentable { - let hoarder: EmojiHoarder = .shared + let hoarder: EmojiHoarder let items: [String] func makeUIView(context: Context) -> UITableView { @@ -28,14 +28,15 @@ struct EmojiCollectionView: UIViewRepresentable { } func makeCoordinator() -> Coordinator { - Coordinator(items: items) + Coordinator(hoarder: hoarder, items: items) } final class Coordinator: NSObject, UITableViewDataSource { - var hoarder: EmojiHoarder = .shared + var hoarder: EmojiHoarder var items: [String] - init(items: [String]) { + init(hoarder: EmojiHoarder, items: [String]) { + self.hoarder = hoarder self.items = items }