fix uh building the tree like 5 times too many

This commit is contained in:
neon443
2025-11-11 20:29:12 +00:00
parent 97a8515ba7
commit 336dd16744
10 changed files with 33 additions and 31 deletions

View File

@@ -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)

View File

@@ -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))
}

View File

@@ -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")
}

View File

@@ -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))
}

View File

@@ -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()

View File

@@ -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)

View File

@@ -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))
}

View File

@@ -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

View File

@@ -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]!)
}
}

View File

@@ -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
}