diff --git a/StickerSlack/Emoji/Emoji.swift b/StickerSlack/Emoji/Emoji.swift index 0dadb9c..5b8c475 100644 --- a/StickerSlack/Emoji/Emoji.swift +++ b/StickerSlack/Emoji/Emoji.swift @@ -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")! ) } diff --git a/StickerSlack/Gifs/Gif.swift b/StickerSlack/Gifs/Gif.swift index 54ec81b..311cc3e 100644 --- a/StickerSlack/Gifs/Gif.swift +++ b/StickerSlack/Gifs/Gif.swift @@ -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")! + ) +} diff --git a/StickerSlack/SwiftUI/BrowseView.swift b/StickerSlack/SwiftUI/BrowseView.swift index f822c0f..1ee7139 100644 --- a/StickerSlack/SwiftUI/BrowseView.swift +++ b/StickerSlack/SwiftUI/BrowseView.swift @@ -8,18 +8,24 @@ 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) - ForEach(hoarder.emojis, id: \.self) { emoji in - EmojiRow(hoarder: hoarder, emoji: emoji) + switch browseWhat { + case .slackEmoji: + ForEach(hoarder.emojis, id: \.self) { emoji in + EmojiRow(hoarder: hoarder, emoji: emoji) + } + case .giphyGif: + Text("hi") } } } diff --git a/StickerSlack/SwiftUI/Emoji/EmojiRow.swift b/StickerSlack/SwiftUI/Emoji/EmojiRow.swift index 94453aa..1203126 100644 --- a/StickerSlack/SwiftUI/Emoji/EmojiRow.swift +++ b/StickerSlack/SwiftUI/Emoji/EmojiRow.swift @@ -14,13 +14,11 @@ struct EmojiRow: View { var body: some View { HStack { - VStack { - HStack(spacing: .zero) { - Text(emoji.name) - } - EmojiPreview(hoarder: hoarder, emoji: emoji) - } + EmojiPreview(hoarder: hoarder, emoji: emoji) .frame(maxWidth: 100, maxHeight: 100) + .padding(.trailing, 20) + + Text(emoji.name) Spacer()