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
|
import Haptics
|
||||||
|
|
||||||
class EmojiHoarder: ObservableObject {
|
class EmojiHoarder: ObservableObject {
|
||||||
static let shared: EmojiHoarder = EmojiHoarder()
|
|
||||||
static let container = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.neon443.StickerSlack")!.appendingPathComponent("Library", conformingTo: .directory)
|
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)
|
nonisolated static let localEmojiDB: URL = EmojiHoarder.container.appendingPathComponent("_localEmojiDB.json", conformingTo: .fileURL)
|
||||||
private let endpoint: URL = URL(string: "https://cachet.dunkirk.sh/emojis")!
|
private let endpoint: URL = URL(string: "https://cachet.dunkirk.sh/emojis")!
|
||||||
@@ -37,7 +36,9 @@ class EmojiHoarder: ObservableObject {
|
|||||||
print("start loading remote db")
|
print("start loading remote db")
|
||||||
await self.loadRemoteDB()
|
await self.loadRemoteDB()
|
||||||
print("end")
|
print("end")
|
||||||
if !skipIndex { await self.buildTrie() }
|
if !skipIndex {
|
||||||
|
await self.buildTrie()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ class EmojiHoarder: ObservableObject {
|
|||||||
let start = Date().timeIntervalSince1970
|
let start = Date().timeIntervalSince1970
|
||||||
trie.root = TrieNode()
|
trie.root = TrieNode()
|
||||||
for emoji in emojis {
|
for emoji in emojis {
|
||||||
trie.insert(word: emoji.name, emoji: emoji)
|
trie.insert(word: emoji.name)
|
||||||
}
|
}
|
||||||
buildTrieDict()
|
buildTrieDict()
|
||||||
print("done building trie in", Date().timeIntervalSince1970-start)
|
print("done building trie in", Date().timeIntervalSince1970-start)
|
||||||
|
|||||||
@@ -8,17 +8,17 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct BrowseView: View {
|
struct BrowseView: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
List {
|
List {
|
||||||
ForEach(hoarder.emojis, id: \.self) { emoji in
|
ForEach(hoarder.emojis, id: \.self) { emoji in
|
||||||
EmojiRow(emoji: emoji)
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
BrowseView()
|
BrowseView(hoarder: EmojiHoarder(localOnly: true))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import SwiftUI
|
|||||||
import Haptics
|
import Haptics
|
||||||
|
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
@StateObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder = EmojiHoarder()
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
NavigationSplitView {
|
NavigationSplitView {
|
||||||
if #available(iOS 18, *) {
|
if #available(iOS 18, *) {
|
||||||
TabView {
|
TabView {
|
||||||
Tab("Browse", systemImage: "square.grid.2x2.fill") {
|
Tab("Browse", systemImage: "square.grid.2x2.fill") {
|
||||||
BrowseView()
|
BrowseView(hoarder: hoarder)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tab {
|
// Tab {
|
||||||
@@ -43,16 +43,16 @@ struct ContentView: View {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
Tab("Downloaded", systemImage: "arrow.down.circle.fill") {
|
Tab("Downloaded", systemImage: "arrow.down.circle.fill") {
|
||||||
DownloadedView()
|
DownloadedView(hoarder: hoarder)
|
||||||
}
|
}
|
||||||
|
|
||||||
Tab("Tree", systemImage: "tree.fill") {
|
Tab("Tree", systemImage: "tree.fill") {
|
||||||
TrieTestingView()
|
TrieTestingView(hoarder: hoarder)
|
||||||
}
|
}
|
||||||
|
|
||||||
Tab("Search", systemImage: "magnifyingglass", role: .search) {
|
Tab("Search", systemImage: "magnifyingglass", role: .search) {
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
SearchView()
|
SearchView(hoarder: hoarder)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -61,19 +61,19 @@ struct ContentView: View {
|
|||||||
// .modifier(tabViewActivationSearchActivation())
|
// .modifier(tabViewActivationSearchActivation())
|
||||||
} else {
|
} else {
|
||||||
TabView {
|
TabView {
|
||||||
DownloadedView()
|
DownloadedView(hoarder: hoarder)
|
||||||
.tabItem {
|
.tabItem {
|
||||||
Label("Downloaded", systemImage: "arrow.down.circle.fill")
|
Label("Downloaded", systemImage: "arrow.down.circle.fill")
|
||||||
}
|
}
|
||||||
BrowseView()
|
BrowseView(hoarder: hoarder)
|
||||||
.tabItem {
|
.tabItem {
|
||||||
Label("Browse", systemImage: "square.grid.2x2.fill")
|
Label("Browse", systemImage: "square.grid.2x2.fill")
|
||||||
}
|
}
|
||||||
TrieTestingView()
|
TrieTestingView(hoarder: hoarder)
|
||||||
.tabItem {
|
.tabItem {
|
||||||
Label("Trie", systemImage: "tree.fill")
|
Label("Trie", systemImage: "tree.fill")
|
||||||
}
|
}
|
||||||
SearchView()
|
SearchView(hoarder: hoarder)
|
||||||
.tabItem {
|
.tabItem {
|
||||||
Label("Search", systemImage: "magnifyingglass")
|
Label("Search", systemImage: "magnifyingglass")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct DownloadedView: View {
|
struct DownloadedView: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
|
|
||||||
@Environment(\.colorScheme) var colorScheme
|
@Environment(\.colorScheme) var colorScheme
|
||||||
var isDark: Bool { colorScheme == .dark }
|
var isDark: Bool { colorScheme == .dark }
|
||||||
@@ -33,7 +33,7 @@ struct DownloadedView: View {
|
|||||||
ZStack {
|
ZStack {
|
||||||
Rectangle()
|
Rectangle()
|
||||||
.foregroundStyle(isDark ? .black : .white)
|
.foregroundStyle(isDark ? .black : .white)
|
||||||
EmojiPreview(emoji: emoji)
|
EmojiPreview(hoarder: hoarder, emoji: emoji)
|
||||||
RoundedRectangle(cornerRadius: 15)
|
RoundedRectangle(cornerRadius: 15)
|
||||||
.stroke(.gray, lineWidth: 1)
|
.stroke(.gray, lineWidth: 1)
|
||||||
}
|
}
|
||||||
@@ -63,5 +63,5 @@ struct DownloadedView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
DownloadedView()
|
DownloadedView(hoarder: EmojiHoarder(localOnly: true))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import SwiftUI
|
|||||||
import Haptics
|
import Haptics
|
||||||
|
|
||||||
struct EmojiPreview: View {
|
struct EmojiPreview: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
@State var emoji: Emoji
|
@State var emoji: Emoji
|
||||||
|
|
||||||
@State private var id: UUID = UUID()
|
@State private var id: UUID = UUID()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import SwiftUI
|
|||||||
import Haptics
|
import Haptics
|
||||||
|
|
||||||
struct EmojiRow: View {
|
struct EmojiRow: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
@State var emoji: Emoji
|
@State var emoji: Emoji
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
@@ -19,7 +19,7 @@ struct EmojiRow: View {
|
|||||||
// Text
|
// Text
|
||||||
Text(emoji.name)
|
Text(emoji.name)
|
||||||
}
|
}
|
||||||
EmojiPreview(emoji: emoji)
|
EmojiPreview(hoarder: hoarder, emoji: emoji)
|
||||||
}
|
}
|
||||||
.frame(maxWidth: 100, maxHeight: 100)
|
.frame(maxWidth: 100, maxHeight: 100)
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct SearchView: View {
|
struct SearchView: View {
|
||||||
@ObservedObject var hoarder: EmojiHoarder = .shared
|
@ObservedObject var hoarder: EmojiHoarder
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
List {
|
List {
|
||||||
@@ -16,7 +16,7 @@ struct SearchView: View {
|
|||||||
|
|
||||||
ForEach(hoarder.filteredEmojis, id: \.self) { name in
|
ForEach(hoarder.filteredEmojis, id: \.self) { name in
|
||||||
if let emoji = hoarder.trie.dict[name] {
|
if let emoji = hoarder.trie.dict[name] {
|
||||||
EmojiRow(emoji: emoji)
|
EmojiRow(hoarder: hoarder, emoji: emoji)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -27,5 +27,5 @@ struct SearchView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#Preview {
|
#Preview {
|
||||||
SearchView()
|
SearchView(hoarder: EmojiHoarder(localOnly: true))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class Trie: ObservableObject {
|
|||||||
@Published var root: TrieNode = TrieNode()
|
@Published var root: TrieNode = TrieNode()
|
||||||
@Published var dict: [String:Emoji] = [:]
|
@Published var dict: [String:Emoji] = [:]
|
||||||
|
|
||||||
func insert(word: String, emoji: Emoji) {
|
func insert(word: String) {
|
||||||
let word = word.lowercased()
|
let word = word.lowercased()
|
||||||
var currentNode = root
|
var currentNode = root
|
||||||
let indices = word.indices
|
let indices = word.indices
|
||||||
|
|||||||
@@ -64,11 +64,11 @@ struct TrieTestingView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if uikit {
|
if uikit {
|
||||||
EmojiCollectionView(items: filterResult)
|
EmojiCollectionView(hoarder: hoarder, items: filterResult)
|
||||||
.id(filterResult)
|
.id(filterResult)
|
||||||
} else {
|
} else {
|
||||||
List(filterResult, id: \.self) { item in
|
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
|
import Haptics
|
||||||
|
|
||||||
struct EmojiCollectionView: UIViewRepresentable {
|
struct EmojiCollectionView: UIViewRepresentable {
|
||||||
let hoarder: EmojiHoarder = .shared
|
let hoarder: EmojiHoarder
|
||||||
let items: [String]
|
let items: [String]
|
||||||
|
|
||||||
func makeUIView(context: Context) -> UITableView {
|
func makeUIView(context: Context) -> UITableView {
|
||||||
@@ -28,14 +28,15 @@ struct EmojiCollectionView: UIViewRepresentable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func makeCoordinator() -> Coordinator {
|
func makeCoordinator() -> Coordinator {
|
||||||
Coordinator(items: items)
|
Coordinator(hoarder: hoarder, items: items)
|
||||||
}
|
}
|
||||||
|
|
||||||
final class Coordinator: NSObject, UITableViewDataSource {
|
final class Coordinator: NSObject, UITableViewDataSource {
|
||||||
var hoarder: EmojiHoarder = .shared
|
var hoarder: EmojiHoarder
|
||||||
var items: [String]
|
var items: [String]
|
||||||
|
|
||||||
init(items: [String]) {
|
init(hoarder: EmojiHoarder, items: [String]) {
|
||||||
|
self.hoarder = hoarder
|
||||||
self.items = items
|
self.items = items
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user