From 82f79b0ad577012897c5d84c1edbc23f253282ff Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Thu, 20 Nov 2025 21:44:17 +0000 Subject: [PATCH] okayokay fixed the gifs being too fast giffrom url uses an async task to grab data it can kidna stop animating when spam switching views, other than that its fine yay ts a tomorrow problem --- StickerSlack/Emoji/GifManager.swift | 7 +--- StickerSlack/Emoji/GifView.swift | 10 ++++- StickerSlack/SwiftUI/Emoji/EmojiPreview.swift | 41 +++---------------- 3 files changed, 15 insertions(+), 43 deletions(-) diff --git a/StickerSlack/Emoji/GifManager.swift b/StickerSlack/Emoji/GifManager.swift index 63694c5..cba1769 100644 --- a/StickerSlack/Emoji/GifManager.swift +++ b/StickerSlack/Emoji/GifManager.swift @@ -10,11 +10,8 @@ import UIKit class GifManager { static let defaultDuration: Double = 0.083333333333333329 - static func gifFrom(url: URL) -> [(frame: CGImage, showFor: Double)] { -// let url = URL(string: "https://emoji.slack-edge.com/T0266FRGM/yay-bounce/046cfcc7ed81030f.gif")! -// guard let source = CGImageSourceCreateWithURL(url as CFURL, nil) else { fatalError("couldnt create source") } - - guard let data = try? Data(contentsOf: url) else { return [] } + static func gifFrom(url: URL) async -> [(frame: CGImage, showFor: Double)] { + guard let (data, _) = try? await URLSession.shared.data(from: url) else { return [] } return gifFrom(data: data) } diff --git a/StickerSlack/Emoji/GifView.swift b/StickerSlack/Emoji/GifView.swift index f2a6596..624fec9 100644 --- a/StickerSlack/Emoji/GifView.swift +++ b/StickerSlack/Emoji/GifView.swift @@ -37,8 +37,14 @@ struct GifView: View { go.toggle() } } - .onAppear { - self.gif = GifManager.gifFrom(url: url) + .onTapGesture { + go.toggle() + } + .task { + self.gif = await GifManager.gifFrom(url: url) + guard gif.count > 0 else { + return + } DispatchQueue.main.asyncAfter(deadline: .now()+gif[0].showFor) { go.toggle() } diff --git a/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift b/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift index 805e5c4..eefce3e 100644 --- a/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift +++ b/StickerSlack/SwiftUI/Emoji/EmojiPreview.swift @@ -13,44 +13,13 @@ struct EmojiPreview: View { @State var emoji: Emoji @State var gifImage: Image? - @State var stopPointer: UnsafeMutablePointer? - - @State private var id: UUID = UUID() - @State private var delay: TimeInterval = 0 - + var body: some View { - Group { - if let image = emoji.image { - if emoji.localImageURLString.contains(".gif") { - GifView(url: emoji.localImageURL) - } else { - Image(uiImage: image) - .resizable().scaledToFit() - } - } else { - AsyncImage(url: emoji.remoteImageURL) { phase in - if let image = phase.image { - image - .resizable().scaledToFit() - } else if phase.error != nil { - ImageErrorView() - .onTapGesture { - id = UUID() - } - .onAppear { - DispatchQueue.main.asyncAfter(deadline: .now()+delay) { - id = UUID() - delay+=0.1 - } - } - } else { - ProgressView() - .frame(maxWidth: .infinity, maxHeight: .infinity) - } - } - } + if let image = emoji.image { + GifView(url: emoji.localImageURL) + } else { + GifView(url: emoji.remoteImageURL) } - .id(id) } }