mirror of
https://github.com/neon443/StickerSlack.git
synced 2026-03-11 13:26:17 +00:00
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:
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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") {
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user