gif previews + handle apple wallpapers

This commit is contained in:
leminlimez committed 2025-07-15 15:13:28 -04:00
1 parent 4d6b093ffd
commit ad280b1a6b
4 files changed
+67 -6

No files matched your search

+17
View File
@@ -10,6 +10,7 @@
6F09B7BB2DEB873F00CDE89C /* ZIPFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = 6F09B7BA2DEB873F00CDE89C /* ZIPFoundation */; };
6F09BA332E00808300CDE89C /* Dynamic in Frameworks */ = {isa = PBXBuildFile; productRef = 6F09BA322E00808300CDE89C /* Dynamic */; };
6FB105552E26D3EC00185A5C /* CachedAsyncImage in Frameworks */ = {isa = PBXBuildFile; productRef = 6FB105542E26D3EC00185A5C /* CachedAsyncImage */; };
6FB105602E26DD0A00185A5C /* Giffy in Frameworks */ = {isa = PBXBuildFile; productRef = 6FB1055F2E26DD0A00185A5C /* Giffy */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -34,6 +35,7 @@
files = (
6FB105552E26D3EC00185A5C /* CachedAsyncImage in Frameworks */,
6F09BA332E00808300CDE89C /* Dynamic in Frameworks */,
6FB105602E26DD0A00185A5C /* Giffy in Frameworks */,
6F09B7BB2DEB873F00CDE89C /* ZIPFoundation in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -80,6 +82,7 @@
6F09B7BA2DEB873F00CDE89C /* ZIPFoundation */,
6F09BA322E00808300CDE89C /* Dynamic */,
6FB105542E26D3EC00185A5C /* CachedAsyncImage */,
6FB1055F2E26DD0A00185A5C /* Giffy */,
);
productName = "Pocket Poster";
productReference = 6F09B79D2DEB694B00CDE89C /* Pocket Poster.app */;
@@ -113,6 +116,7 @@
6F09B7B92DEB873F00CDE89C /* XCRemoteSwiftPackageReference "ZIPFoundation" */,
6F09BA312E00808300CDE89C /* XCRemoteSwiftPackageReference "Dynamic" */,
6FB105532E26D3EC00185A5C /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */,
6FB1055E2E26DD0A00185A5C /* XCRemoteSwiftPackageReference "Giffy" */,
);
preferredProjectObjectVersion = 77;
productRefGroup = 6F09B79E2DEB694B00CDE89C /* Products */;
@@ -378,6 +382,14 @@
minimumVersion = 2.1.1;
};
};
6FB1055E2E26DD0A00185A5C /* XCRemoteSwiftPackageReference "Giffy" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/tfmart/Giffy.git";
requirement = {
branch = main;
kind = branch;
};
};
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
@@ -396,6 +408,11 @@
package = 6FB105532E26D3EC00185A5C /* XCRemoteSwiftPackageReference "swiftui-cached-async-image" */;
productName = CachedAsyncImage;
};
6FB1055F2E26DD0A00185A5C /* Giffy */ = {
isa = XCSwiftPackageProductDependency;
package = 6FB1055E2E26DD0A00185A5C /* XCRemoteSwiftPackageReference "Giffy" */;
productName = Giffy;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 6F09B7952DEB694B00CDE89C /* Project object */;
@@ -1,5 +1,5 @@
{
"originHash" : "73a600cf677d3bb2b929c60349923a2a4e20e6a9ef10509bf043d2ad2229ca95",
"originHash" : "9d3a39dff9bda7be6921bb553210388e3a68059324656c0ace5f2eb2378819b1",
"pins" : [
{
"identity" : "dynamic",
@@ -10,6 +10,24 @@
"version" : "1.2.0"
}
},
{
"identity" : "flanimatedimage",
"kind" : "remoteSourceControl",
"location" : "https://github.com/Flipboard/FLAnimatedImage.git",
"state" : {
"revision" : "d4f07b6f164d53c1212c3e54d6460738b1981e9f",
"version" : "1.0.17"
}
},
{
"identity" : "giffy",
"kind" : "remoteSourceControl",
"location" : "https://github.com/tfmart/Giffy.git",
"state" : {
"branch" : "main",
"revision" : "595bd0a0bc292d32da4b26b8bca4347235ab2556"
}
},
{
"identity" : "swiftui-cached-async-image",
"kind" : "remoteSourceControl",
@@ -7,13 +7,13 @@
class DownloadableWallpaper: Identifiable, Codable {
var name: String
var description: String
var description: String?
var url: String
var preview: String
var authors: String
var authors: String?
var type: WallpaperType?
init(name: String, description: String, authors: String, preview: String, url: String, version: String) {
init(name: String, description: String?, authors: String?, preview: String, url: String, version: String) {
self.name = name
self.description = description
self.authors = authors
@@ -24,4 +24,8 @@ class DownloadableWallpaper: Identifiable, Codable {
enum WallpaperType: String, Codable {
case custom, apple, template
}
func previewIsGif() -> Bool {
return preview.hasSuffix(".gif")
}
}
@@ -7,6 +7,7 @@
import SwiftUI
import CachedAsyncImage
import Giffy
let MIN_SIZE: CGFloat = 165
@@ -50,11 +51,29 @@ struct ExploreView: View {
} else {
LazyVGrid(columns: gridItemLayout) {
ForEach(wallpapers) { wallpaper in
if searchTerm == "" || wallpaper.name.lowercased().contains(searchTerm.lowercased()) || wallpaper.authors.lowercased().contains(searchTerm.lowercased()) {
if searchTerm == "" || wallpaper.name.lowercased().contains(searchTerm.lowercased()) || (wallpaper.authors ?? "").lowercased().contains(searchTerm.lowercased()) {
Button(action: {
DownloadManager.shared.startTendiesDownload(for: cowabungaAPI.getDownloadURLForWallpaper(wallpaper: wallpaper))
}) {
VStack(spacing: 0) {
if wallpaper.previewIsGif() {
AsyncGiffy(url: cowabungaAPI.getPreviewURLForWallpaper(wallpaper: wallpaper)) { phase in
switch phase {
case .loading:
Color.gray
.frame(height: MIN_SIZE)
case .error:
Color.red
.frame(height: MIN_SIZE)
case .success(let giffy):
giffy
.aspectRatio(contentMode: .fill)
.frame(maxWidth: .infinity)
.cornerRadius(10, corners: .topLeft)
.cornerRadius(10, corners: .topRight)
}
}
} else {
CachedAsyncImage(url: cowabungaAPI.getPreviewURLForWallpaper(wallpaper: wallpaper), urlCache: .imageCache) { image in
image
.resizable()
@@ -66,6 +85,7 @@ struct ExploreView: View {
Color.gray
.frame(height: MIN_SIZE)
}
}
HStack {
VStack(spacing: 4) {
HStack {
@@ -74,14 +94,16 @@ struct ExploreView: View {
.minimumScaleFactor(0.5)
Spacer()
}
if let authors = wallpaper.authors {
HStack {
Text(wallpaper.authors)
Text(authors)
.foregroundColor(.secondary)
.font(.caption)
.minimumScaleFactor(0.5)
Spacer()
}
}
}
.lineLimit(1)
Spacer()
Image(systemName: "arrow.down.circle")