finished gif.swift i think

add placeholder for gifs browsing and a toggle
minor ui improvement to emojirow
update test emoji url
reduce duplication of cgimage
This commit is contained in:
Nihaal Sharma
2026-03-07 12:56:44 +00:00
parent 6095aefca1
commit 7d83ae2101
4 changed files with 72 additions and 25 deletions

View File

@@ -58,7 +58,7 @@ struct Emoji: StickerProtocol {
var (data, _) = try await URLSession.shared.data(from: remoteImageURL)
if let uiImage = UIImage(data: data),
let cgImage = UIImage(data: data)?.cgImage,
let cgImage = uiImage.cgImage,
await !self.localImageURLString.contains(".gif"),
cgImage.width < 300 || cgImage.height < 300 {
data = await resize(image: uiImage, to: CGSize(width: 300, height: 300)).pngData()!
@@ -74,6 +74,6 @@ struct Emoji: StickerProtocol {
static var test: Emoji = Emoji(
name: "s?",
url: URL(string: "https://neon443.github.io/images/fav.ico")!
url: URL(string: "https://files.catbox.moe/d8go4n.png")!
)
}

View File

@@ -6,20 +6,63 @@
//
import Foundation
import SwiftUI
import UniformTypeIdentifiers
//struct Gif: StickerProtocol {
// var id: UUID
// var uiID: UUID
// var name: String
// var localImageURLString: String {
struct Gif: StickerProtocol {
var id: UUID
var uiID: UUID
var name: String
var localImageURLString: String {
let urlString = remoteImageURL.absoluteString
let split = urlString.split(separator: ".")
let fileExtension = ".\(split.last ?? "png")"
return EmojiHoarder.container.appendingPathComponent("gifs", conformingTo: .directory).absoluteString+id.uuidString+fileExtension
}
var remoteImageURL: URL
// enum CodingKeys: String, CodingKey {
//
// }
// var localImageURL: URL {
// return URL(string: localImageURLString)!
// }
// var remoteImageURL: URL
//
// var isLocal: Bool {
//
// }
//}
init(
name: String,
url: URL,
id: UUID = UUID()
) {
self.id = id
self.uiID = id
self.name = name
self.remoteImageURL = url
}
func downloadImage() async throws {
if let data = try? Data(contentsOf: localImageURL),
let _ = UIImage(data: data) {
return
}
var (data, _) = try await URLSession.shared.data(from: remoteImageURL)
if let uiImage = UIImage(data: data),
let cgImage = uiImage.cgImage,
!self.localImageURLString.contains(".gif"),
cgImage.width < 300 || cgImage.height < 300 {
data = resize(image: uiImage, to: CGSize(width: 300, height: 300)).pngData()!
}
try! data.write(to: localImageURL)
return
}
@MainActor
mutating func refresh() {
withAnimation { self.uiID = UUID() }
}
static var test: Gif = Gif(
name: "doesheknow",
url: URL(string: "https://media1.tenor.com/m/FN9udnZmQU8AAAAd/does-he-know-batman.gif")!
)
}

View File

@@ -8,19 +8,25 @@
import SwiftUI
struct BrowseView: View {
@State private var browseWhat: StickerType = .slackEmoji
@ObservedObject var hoarder: EmojiHoarder
var body: some View {
List {
Picker("", selection: .constant(StickerType.giphyGif)) {
Picker("", selection: $browseWhat) {
ForEach(StickerType.allCases, id: \.self) { type in
Text(type.description)
}
}
.pickerStyle(.segmented)
switch browseWhat {
case .slackEmoji:
ForEach(hoarder.emojis, id: \.self) { emoji in
EmojiRow(hoarder: hoarder, emoji: emoji)
}
case .giphyGif:
Text("hi")
}
}
}
}

View File

@@ -14,13 +14,11 @@ struct EmojiRow: View {
var body: some View {
HStack {
VStack {
HStack(spacing: .zero) {
Text(emoji.name)
}
EmojiPreview(hoarder: hoarder, emoji: emoji)
}
.frame(maxWidth: 100, maxHeight: 100)
.padding(.trailing, 20)
Text(emoji.name)
Spacer()