mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 05:19:13 +00:00
fix uh building the tree like 5 times too many
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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]!)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user