this is not good...
This commit is contained in:
neon443
2025-11-02 22:25:01 +00:00
parent edaa0953c7
commit bee0853f97
3 changed files with 22 additions and 12 deletions

View File

@@ -71,13 +71,14 @@ struct Emoji: Codable, Identifiable, Hashable {
self.remoteImageURL = url self.remoteImageURL = url
} }
nonisolated
func downloadImage() async throws -> UIImage { func downloadImage() async throws -> UIImage {
if let data = try? Data(contentsOf: localImageURL), if let data = try? await Data(contentsOf: localImageURL),
let uiimage = UIImage(data: data) { let uiimage = UIImage(data: data) {
return uiimage return uiimage
} }
let (data, _) = try await URLSession.shared.data(from: remoteImageURL) let (data, _) = try await URLSession.shared.data(from: remoteImageURL)
try! data.write(to: localImageURL) try! await data.write(to: localImageURL)
return UIImage(data: data)! return UIImage(data: data)!
} }

View File

@@ -145,10 +145,24 @@ class EmojiHoarder: ObservableObject {
} }
func downloadEmoji(_ toDownload: Emoji) { func downloadEmoji(_ toDownload: Emoji) {
Task.detached {
if (try? await toDownload.downloadImage()) != nil {
let index = await self.emojis.firstIndex { $0 == toDownload }
guard let index else { return }
await MainActor.run {
self.localEmojis.insert(toDownload)
self.emojis[index].refresh()
}
}
}
} }
@MainActor
func deleteEmoji(_ toDelete: Emoji) { func deleteEmoji(_ toDelete: Emoji) {
toDelete.deleteImage()
let index = self.emojis.firstIndex { $0 == toDelete }
guard let index else { return }
self.localEmojis.remove(toDelete)
self.emojis[index].refresh()
} }
} }

View File

@@ -66,16 +66,12 @@ struct ContentView: View {
.buttonStyle(.plain) .buttonStyle(.plain)
if hoarder.localEmojis.contains(emoji) { if hoarder.localEmojis.contains(emoji) {
Button("", systemImage: "trash") { Button("", systemImage: "trash") {
emoji.deleteImage() hoarder.deleteEmoji(emoji)
emoji.refresh()
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} else { } else {
Button("", systemImage: "arrow.down.circle") { Button("", systemImage: "arrow.down.circle") {
Task { hoarder.downloadEmoji(emoji)
let _ = try? await emoji.downloadImage()
emoji.refresh()
}
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} }
@@ -83,8 +79,7 @@ struct ContentView: View {
.swipeActions(edge: .trailing, allowsFullSwipe: true) { .swipeActions(edge: .trailing, allowsFullSwipe: true) {
if hoarder.localEmojis.contains(emoji) { if hoarder.localEmojis.contains(emoji) {
Button("Remove", systemImage: "trash") { Button("Remove", systemImage: "trash") {
emoji.deleteImage() hoarder.deleteEmoji(emoji)
emoji.refresh()
} }
.tint(.red) .tint(.red)
} }