save changed images
This commit is contained in:
1 parent
7c2a031463
commit
d5833dfb81
5 files changed
+36
-19
No files matched your search
@@ -14,7 +14,6 @@ struct CarPlayWallpaper: Identifiable {
|
||||
var darkImage: UIImage
|
||||
var selectedImageDataLight: Data?
|
||||
var selectedImageDataDark: Data?
|
||||
var changed: Bool
|
||||
}
|
||||
|
||||
extension CarPlayWallpaper: Reorderable {
|
||||
|
||||
@@ -278,15 +278,26 @@ class PosterBoardManager: ObservableObject {
|
||||
return nil
|
||||
}
|
||||
|
||||
func getCarPlayPhotosURL() -> URL {
|
||||
let cppURL = SymHandler.getDocumentsDirectory().appendingPathComponent("CarPlayPhotos", conformingTo: .directory)
|
||||
// create it if it doesn't exist
|
||||
if !FileManager.default.fileExists(atPath: cppURL.path()) {
|
||||
try? FileManager.default.createDirectory(at: cppURL, withIntermediateDirectories: true)
|
||||
}
|
||||
return cppURL
|
||||
}
|
||||
|
||||
func applyCarPlay(appHash: String, wallpapers: [CarPlayWallpaper]) throws {
|
||||
// write the image
|
||||
var toRemove: [URL] = []
|
||||
var activeWP: [String] = UserDefaults.standard.array(forKey: "ActiveCarPlayWallpapers") as? [String] ?? []
|
||||
let cppURL = getCarPlayPhotosURL()
|
||||
let cacheVer = getCarPlayCacheVersion()
|
||||
for wallpaper in wallpapers {
|
||||
if let data = wallpaper.selectedImageDataLight, let img = UIImage(data: data) {
|
||||
let imgURL = SymHandler.getDocumentsDirectory().appendingPathComponent("CAR\(wallpaper.name)Dynamic-Light\(cacheVer).cpbitmap")
|
||||
img.writeToCPBitmapFile(to: imgURL.path() as NSString)
|
||||
try? data.write(to: cppURL.appendingPathComponent("\(wallpaper.name)-Light"))
|
||||
toRemove.append(imgURL)
|
||||
if !activeWP.contains(wallpaper.name) {
|
||||
activeWP.append(wallpaper.name)
|
||||
@@ -295,6 +306,7 @@ class PosterBoardManager: ObservableObject {
|
||||
if let data = wallpaper.selectedImageDataDark, let img = UIImage(data: data) {
|
||||
let imgURL = SymHandler.getDocumentsDirectory().appendingPathComponent("CAR\(wallpaper.name)Dynamic-Dark\(cacheVer).cpbitmap")
|
||||
img.writeToCPBitmapFile(to: imgURL.path() as NSString)
|
||||
try? data.write(to: cppURL.appendingPathComponent("\(wallpaper.name)-Dark"))
|
||||
toRemove.append(imgURL)
|
||||
if !activeWP.contains(wallpaper.name) {
|
||||
activeWP.append(wallpaper.name)
|
||||
@@ -303,28 +315,25 @@ class PosterBoardManager: ObservableObject {
|
||||
}
|
||||
|
||||
// symlink and apply
|
||||
// let _ = try SymHandler.createAppSymlink(for: "\(appHash)/Library/Caches/MappedImageCache/com.apple.CarPlayApp.wallpaper-images")
|
||||
// defer {
|
||||
// SymHandler.cleanup()
|
||||
// }
|
||||
// for imgURL in toRemove {
|
||||
// try FileManager.default.trashItem(at: imgURL, resultingItemURL: nil)
|
||||
// }
|
||||
// UserDefaults.standard.set(activeWP, forKey: "ActiveCarPlayWallpapers")
|
||||
// let test = SymHandler.getDocumentsDirectory().appendingPathComponent("Caches")
|
||||
// try Data(count: 0).write(to: test)
|
||||
let hmm = try SymHandler.createAppSymlink(for: "\(appHash)/Library")
|
||||
let _ = try SymHandler.createAppSymlink(for: "\(appHash)/Library/Caches/MappedImageCache/com.apple.CarPlayApp.wallpaper-images")
|
||||
defer {
|
||||
SymHandler.cleanup()
|
||||
}
|
||||
try FileManager.default.removeItem(at: hmm.appendingPathComponent("Caches"))
|
||||
for imgURL in toRemove {
|
||||
try FileManager.default.trashItem(at: imgURL, resultingItemURL: nil)
|
||||
}
|
||||
UserDefaults.standard.set(activeWP, forKey: "ActiveCarPlayWallpapers")
|
||||
let test = SymHandler.getDocumentsDirectory().appendingPathComponent("Caches")
|
||||
try Data(count: 0).write(to: test)
|
||||
}
|
||||
|
||||
static func clearCache() throws {
|
||||
SymHandler.cleanup()
|
||||
let docDir = SymHandler.getDocumentsDirectory()
|
||||
for file in try FileManager.default.contentsOfDirectory(at: docDir, includingPropertiesForKeys: nil) {
|
||||
try FileManager.default.removeItem(at: file)
|
||||
if file.lastPathComponent != "CarPlayPhotos" {
|
||||
try FileManager.default.removeItem(at: file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,6 +103,7 @@ struct CarPlayView: View {
|
||||
// load active wallpapers from user defaults
|
||||
activeWallpapers = UserDefaults.standard.array(forKey: "ActiveCarPlayWallpapers") as? [String] ?? []
|
||||
// load the wallpapers
|
||||
let cppURL = PosterBoardManager.shared.getCarPlayPhotosURL()
|
||||
let frameworkPath = "/System/Library/PrivateFrameworks/CarPlayUIServices.framework"
|
||||
do {
|
||||
for file in try FileManager.default.contentsOfDirectory(at: URL(fileURLWithPath: frameworkPath), includingPropertiesForKeys: nil, options: .skipsHiddenFiles) {
|
||||
@@ -114,7 +115,14 @@ struct CarPlayView: View {
|
||||
darkImg = UIImage(data: darkData) ?? wpImg
|
||||
}
|
||||
let name = file.lastPathComponent.replacingOccurrences(of: "-Light.heic", with: "")
|
||||
wallpapers.append(.init(name: name, lightImage: wpImg, darkImage: darkImg, changed: false))
|
||||
// fetch the selected image if they exist
|
||||
let selectedLight: Data? = try? Data(contentsOf: cppURL.appendingPathComponent("\(name)-Light"))
|
||||
let selectedDark: Data? = try? Data(contentsOf: cppURL.appendingPathComponent("\(name)-Dark"))
|
||||
wallpapers.append(.init(
|
||||
name: name,
|
||||
lightImage: wpImg, darkImage: darkImg,
|
||||
selectedImageDataLight: selectedLight, selectedImageDataDark: selectedDark
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,6 +84,7 @@ struct SettingsView: View {
|
||||
Button(action: {
|
||||
UIImpactFeedbackGenerator(style: .soft).impactOccurred()
|
||||
UserDefaults.standard.set(nil, forKey: "ActiveCarPlayWallpapers")
|
||||
try? FileManager.default.removeItem(at: PosterBoardManager.shared.getCarPlayPhotosURL())
|
||||
Haptic.shared.notify(.success)
|
||||
UIApplication.shared.alert(title: NSLocalizedString("CarPlay Applied Wallpapers Successfully Cleared!", comment: ""), body: "")
|
||||
}) {
|
||||
|
||||
Reference in new issue
Block a user