From 2ddcd49ad0be1d78df3d5bb9eebb55a094783445 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:01:14 +0200 Subject: [PATCH] yay okay ui is state-ing added swipe actions to delete local image slow, but i think i can fix it?? switch to gh neon443/Haptics --- .../xcshareddata/swiftpm/Package.resolved | 15 +++++++++++++++ StickerSlack/Emoji/Emoji.swift | 16 +++++++++++++++- StickerSlack/Views/ContentView.swift | 19 ++++++++++++++----- StickerSlack/Views/EmojiPreview.swift | 8 +------- 4 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 StickerSlack.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/StickerSlack.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/StickerSlack.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..0f1d098 --- /dev/null +++ b/StickerSlack.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,15 @@ +{ + "originHash" : "62caf5d3b5c5f962753f0e93862d5d90e6fcd2157c5fef072880f7c4ca348c7c", + "pins" : [ + { + "identity" : "haptics", + "kind" : "remoteSourceControl", + "location" : "http://github.com/neon443/Haptics", + "state" : { + "branch" : "main", + "revision" : "90e080694752c1af657d2f7ac2dce22eaf439391" + } + } + ], + "version" : 3 +} diff --git a/StickerSlack/Emoji/Emoji.swift b/StickerSlack/Emoji/Emoji.swift index 0d6e5e0..8de8cc0 100644 --- a/StickerSlack/Emoji/Emoji.swift +++ b/StickerSlack/Emoji/Emoji.swift @@ -8,9 +8,11 @@ import Foundation import UIKit import UniformTypeIdentifiers +import Haptics struct Emoji: Codable, Identifiable, Hashable { var id: UUID + var uiID: UUID var name: String var localImageURL: URL var remoteImageURL: URL @@ -31,6 +33,7 @@ struct Emoji: Codable, Identifiable, Hashable { init(from decoder: any Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) self.id = try container.decode(UUID.self, forKey: .id) + self.uiID = UUID() 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) @@ -48,9 +51,12 @@ struct Emoji: Codable, Identifiable, Hashable { id: UUID = UUID() ) { self.id = id + self.uiID = id self.name = apiEmoji.name self.remoteImageURL = apiEmoji.url - self.localImageURL = EmojiHoarder.container.appendingPathComponent(id.uuidString, conformingTo: .image) + + let fileExtension = String(apiEmoji.urlString.split(separator: ".").last ?? "png") + self.localImageURL = EmojiHoarder.container.appendingPathComponent(id.uuidString+"."+fileExtension, conformingTo: .image) // Task { [weak self] in // let (data, response) = try await URLSession.shared.data(from: apiEmoji.url) @@ -70,4 +76,12 @@ struct Emoji: Codable, Identifiable, Hashable { try! data.write(to: localImageURL) return UIImage(data: data)! } + + func deleteImage() { + try? FileManager.default.removeItem(at: localImageURL) + } + + mutating func refresh() { + self.uiID = UUID() + } } diff --git a/StickerSlack/Views/ContentView.swift b/StickerSlack/Views/ContentView.swift index cdc81af..12f8118 100644 --- a/StickerSlack/Views/ContentView.swift +++ b/StickerSlack/Views/ContentView.swift @@ -15,20 +15,29 @@ struct ContentView: View { NavigationView { TabView { List { - ForEach(hoarder.emojis, id: \.self) { emoji in + ForEach($hoarder.emojis, id: \.self) { $emoji in HStack { - EmojiPreview(emoji: emoji) + EmojiPreview(emoji: emoji, image: emoji.image) .frame(maxWidth: 100) Spacer() Button("", systemImage: "arrow.down.circle") { Task { - let _ = try? await emoji.downloadImage() - Haptic.success.trigger() + try? await emoji.downloadImage() + emoji.refresh() } } .buttonStyle(.plain) } - .border(emoji.isLocal ? .red : .clear) + .id(emoji.uiID) + .swipeActions(edge: .trailing, allowsFullSwipe: true) { + if emoji.isLocal { + Button("Remove", systemImage: "trash") { + emoji.deleteImage() + emoji.refresh() + } + .tint(.red) + } + } } } .tabItem { diff --git a/StickerSlack/Views/EmojiPreview.swift b/StickerSlack/Views/EmojiPreview.swift index e9885f3..7c7906c 100644 --- a/StickerSlack/Views/EmojiPreview.swift +++ b/StickerSlack/Views/EmojiPreview.swift @@ -12,7 +12,7 @@ struct EmojiPreview: View { @State var emoji: Emoji @State private var id: UUID = UUID() - @State private var image: UIImage? + @State var image: UIImage? = nil var body: some View { VStack { @@ -51,12 +51,6 @@ struct EmojiPreview: View { } } } - .onTapGesture { - Task { - image = try? await emoji.downloadImage() - Haptic.success.trigger() - } - } .id(id) } }