wip: iOS refactor — iMessage extension, sticker browser, app icon assets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
final class StickerStore {
|
||||
static let shared = StickerStore()
|
||||
@@ -6,6 +7,7 @@ final class StickerStore {
|
||||
private let packsKey = "savedPacks"
|
||||
private let suiteName = "group.de.felixfoertsch.StickerCloner"
|
||||
private let fileManager = FileManager.default
|
||||
private let thumbnailCache = NSCache<NSString, UIImage>()
|
||||
|
||||
private lazy var defaults: UserDefaults = {
|
||||
guard let defaults = UserDefaults(suiteName: suiteName) else {
|
||||
@@ -66,6 +68,7 @@ final class StickerStore {
|
||||
var packs = savedPacks
|
||||
packs.removeAll { $0.name == name }
|
||||
savedPacks = packs
|
||||
thumbnailCache.removeObject(forKey: name as NSString)
|
||||
|
||||
let packDir = packDirectory(name: name)
|
||||
try? fileManager.removeItem(at: packDir)
|
||||
@@ -89,6 +92,14 @@ final class StickerStore {
|
||||
return urls
|
||||
}
|
||||
|
||||
func stickerFileURLs(forPack name: String) -> [URL] {
|
||||
let packDir = packDirectory(name: name)
|
||||
guard let files = try? fileManager.contentsOfDirectory(at: packDir, includingPropertiesForKeys: nil) else { return [] }
|
||||
return files
|
||||
.filter { $0.pathExtension == "png" }
|
||||
.sorted { $0.lastPathComponent < $1.lastPathComponent }
|
||||
}
|
||||
|
||||
func firstStickerURL(forPack name: String) -> URL? {
|
||||
let packDir = packDirectory(name: name)
|
||||
guard let files = try? fileManager.contentsOfDirectory(at: packDir, includingPropertiesForKeys: nil) else { return nil }
|
||||
@@ -98,6 +109,16 @@ final class StickerStore {
|
||||
.first
|
||||
}
|
||||
|
||||
func thumbnail(forPack name: String) -> UIImage? {
|
||||
let key = name as NSString
|
||||
if let cached = thumbnailCache.object(forKey: key) { return cached }
|
||||
guard let url = firstStickerURL(forPack: name),
|
||||
let data = try? Data(contentsOf: url),
|
||||
let image = UIImage(data: data) else { return nil }
|
||||
thumbnailCache.setObject(image, forKey: key)
|
||||
return image
|
||||
}
|
||||
|
||||
// MARK: - Migration from old sandbox
|
||||
|
||||
private func migrateIfNeeded() {
|
||||
|
||||
Reference in New Issue
Block a user