fixed massive performance issue!!!!

emoji.image is a computed property
made it not crash if it couldnt access cachet 😭
added search and a counter
removed emojipreview.image
This commit is contained in:
neon443
2025-10-28 20:30:32 +00:00
parent 31321865e9
commit 9b6d91bf8f
4 changed files with 31 additions and 31 deletions

View File

@@ -20,7 +20,14 @@ struct Emoji: Codable, Identifiable, Hashable {
return (try? Data(contentsOf: localImageURL)) != nil
}
var image: UIImage?
var image: UIImage? {
if let data = try? Data(contentsOf: localImageURL),
let img = UIImage(data: data) {
return img
} else {
return nil
}
}
enum CodingKeys: String, CodingKey {
case id = "id"
@@ -36,13 +43,6 @@ struct Emoji: Codable, Identifiable, Hashable {
self.name = try container.decode(String.self, forKey: .name)
self.localImageURL = try container.decode(URL.self, forKey: .localImageURL)
self.remoteImageURL = try container.decode(URL.self, forKey: .remoteImageURL)
if let data = try? Data(contentsOf: localImageURL),
let img = UIImage(data: data) {
self.image = img
} else {
self.image = nil
}
}
init(

View File

@@ -28,6 +28,7 @@ class EmojiHoarder: ObservableObject {
}
self.emojis = fetched
self.filteredEmojis = fetched
}
func storeStickers(_ toStore: [UUID]) {
@@ -49,7 +50,7 @@ class EmojiHoarder: ObservableObject {
}
func fetchRemoteDB() -> [Emoji]? {
guard let data = try? Data(contentsOf: endpoint) else { fatalError("cachet unreachable") }
guard let data = try? Data(contentsOf: endpoint) else { return nil }
decoder.dateDecodingStrategy = .iso8601
let decoded: [SlackResponse] = try! decoder.decode([SlackResponse].self, from: data)
return SlackResponse.toEmojis(from: decoded)

View File

@@ -17,20 +17,18 @@ struct ContentView: View {
NavigationView {
TabView {
List {
HStack {
TextField("", text: $searchTerm) {
hoarder.filterEmojis(by: searchTerm)
}
.autocorrectionDisabled()
.textFieldStyle(.roundedBorder)
// Button("downloaded", systemImage: "arrow.down.circle.fill") {
// <#code#>
// }
TextField("", text: $searchTerm) {
hoarder.filterEmojis(by: searchTerm)
}
.autocorrectionDisabled()
.textFieldStyle(.roundedBorder)
Text("\(hoarder.filteredEmojis.count) Emoji")
ForEach($hoarder.filteredEmojis, id: \.self) { $emoji in
HStack {
EmojiPreview(emoji: emoji, image: emoji.image)
EmojiPreview(emoji: emoji)
.frame(maxWidth: 100)
Spacer()
if emoji.isLocal {
@@ -48,7 +46,6 @@ struct ContentView: View {
.buttonStyle(.plain)
}
}
.id(emoji.uiID)
.swipeActions(edge: .trailing, allowsFullSwipe: true) {
if emoji.isLocal {
Button("Remove", systemImage: "trash") {

View File

@@ -12,7 +12,6 @@ struct EmojiPreview: View {
@State var emoji: Emoji
@State private var id: UUID = UUID()
@State var image: UIImage? = nil
var body: some View {
VStack {
@@ -28,7 +27,6 @@ struct EmojiPreview: View {
.resizable().scaledToFit()
.frame(width: 20, height: 20)
.symbolRenderingMode(.hierarchical)
// .foregroundStyle(.gray)
}
} else {
AsyncImage(url: emoji.remoteImageURL) { phase in
@@ -36,14 +34,18 @@ struct EmojiPreview: View {
image
.resizable().scaledToFit()
} else if phase.error != nil {
Image(systemName: "xmark.app.fill")
.resizable().scaledToFit()
.padding()
.symbolRenderingMode(.hierarchical)
.foregroundStyle(.red)
.onTapGesture {
id = UUID()
}
ZStack {
Image(systemName: "xmark.app.fill")
.resizable().scaledToFit()
.padding()
.padding()
.symbolRenderingMode(.hierarchical)
.foregroundStyle(.red)
.onTapGesture {
id = UUID()
}
}
} else {
ProgressView()
}