aboutsummaryrefslogtreecommitdiff
path: root/Hotline/State
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2025-11-07 17:40:59 -0800
committerDustin Mierau <dustin@mierau.me>2025-11-07 17:40:59 -0800
commit637cd9af54a58db0c5dc2062b6c20291afd31147 (patch)
tree19c0168a9ee0a2bcb158fdae6192aab361921475 /Hotline/State
parent6afa5551add4541f376867b3d6527df9a0f793f3 (diff)
Add Kingfisher dependency. Add support for animated GIF banners. Add fast image format detection to Data.
Diffstat (limited to 'Hotline/State')
-rw-r--r--Hotline/State/HotlineState.swift14
1 files changed, 11 insertions, 3 deletions
diff --git a/Hotline/State/HotlineState.swift b/Hotline/State/HotlineState.swift
index d5ab438..4b74df7 100644
--- a/Hotline/State/HotlineState.swift
+++ b/Hotline/State/HotlineState.swift
@@ -206,6 +206,8 @@ class HotlineState: Equatable {
var accountsLoaded: Bool = false
// Banner
+ var bannerFileURL: URL? = nil
+ var bannerImageFormat: Data.ImageFormat = .unknown
#if os(macOS)
var bannerImage: Image? = nil
var bannerColors: ColorArt? = nil
@@ -471,8 +473,10 @@ class HotlineState: Equatable {
self.bannerDownloadTask?.cancel()
self.bannerDownloadTask = nil
self.bannerImage = nil
+ self.bannerImageFormat = .unknown
+ self.bannerFileURL = nil
self.bannerColors = nil
- } else if self.bannerDownloadTask != nil || self.bannerImage != nil {
+ } else if self.bannerDownloadTask != nil || self.bannerFileURL != nil {
return
}
@@ -503,13 +507,16 @@ class HotlineState: Equatable {
)
let fileURL = try await previewClient.preview()
- defer {
- previewClient.cleanup()
+
+ if let oldFileURL = self.bannerFileURL {
+ try? FileManager.default.removeItem(at: oldFileURL)
}
guard self.client != nil else { return }
let data = try Data(contentsOf: fileURL)
+ self.bannerImageFormat = data.detectedImageFormat
+
print("HotlineState: Banner download complete, data size: \(data.count) bytes")
#if os(macOS)
@@ -525,6 +532,7 @@ class HotlineState: Equatable {
}
self.bannerImage = Image(uiImage: image)
#endif
+ self.bannerFileURL = fileURL
self.bannerImage = blah
self.bannerColors = ColorArt.analyze(image: image)