mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 13:33:42 +00:00
Replace URLImage with AsyncImage
This commit is contained in:
parent
33e102207f
commit
52ffe19324
@ -1,6 +1,3 @@
|
||||
import URLImage
|
||||
import URLImageStore
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct VideoCellView: View {
|
||||
@ -12,13 +9,14 @@ struct VideoCellView: View {
|
||||
Button(action: { navigationState.playVideo(video) }) {
|
||||
VStack(alignment: .leading) {
|
||||
ZStack {
|
||||
if let thumbnail = video.thumbnailURL(quality: .high) {
|
||||
// to replace with AsyncImage when it is fixed with lazy views
|
||||
URLImage(thumbnail) { image in
|
||||
if let url = video.thumbnailURL(quality: .high) {
|
||||
AsyncImage(url: url) { image in
|
||||
image
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(width: 550, height: 310)
|
||||
} placeholder: {
|
||||
ProgressView()
|
||||
}
|
||||
.mask(RoundedRectangle(cornerRadius: 12))
|
||||
} else {
|
||||
|
@ -1,7 +1,6 @@
|
||||
import Defaults
|
||||
import Siesta
|
||||
import SwiftUI
|
||||
import URLImage
|
||||
|
||||
struct VideoDetailsView: View {
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@ -36,13 +35,14 @@ struct VideoDetailsView: View {
|
||||
VStack(alignment: .center) {
|
||||
ZStack(alignment: .bottom) {
|
||||
Group {
|
||||
if let thumbnail = video.thumbnailURL(quality: .maxres) {
|
||||
// to replace with AsyncImage when it is fixed with lazy views
|
||||
URLImage(thumbnail) { image in
|
||||
if let url = video.thumbnailURL(quality: .maxres) {
|
||||
AsyncImage(url: url) { image in
|
||||
image
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(width: 1600, height: 800)
|
||||
} placeholder: {
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,4 @@
|
||||
import SwiftUI
|
||||
import URLImage
|
||||
import URLImageStore
|
||||
|
||||
struct VideoListRowView: View {
|
||||
@EnvironmentObject<NavigationState> private var navigationState
|
||||
@ -166,20 +164,13 @@ struct VideoListRowView: View {
|
||||
) -> some View {
|
||||
Group {
|
||||
if let url = video.thumbnailURL(quality: quality) {
|
||||
URLImage(url) {
|
||||
EmptyView()
|
||||
} inProgress: { _ in
|
||||
ProgressView()
|
||||
.progressViewStyle(CircularProgressViewStyle())
|
||||
} failure: { _, retry in
|
||||
VStack {
|
||||
Button("Retry", action: retry)
|
||||
}
|
||||
} content: { image in
|
||||
AsyncImage(url: url) { image in
|
||||
image
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(minWidth: minWidth, maxWidth: maxWidth, minHeight: minHeight, maxHeight: maxHeight)
|
||||
} placeholder: {
|
||||
ProgressView()
|
||||
}
|
||||
.mask(RoundedRectangle(cornerRadius: 12))
|
||||
} else {
|
||||
@ -201,3 +192,24 @@ struct VideoListRowView: View {
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
struct VideoListRowPreview: PreviewProvider {
|
||||
static var previews: some View {
|
||||
List {
|
||||
VideoListRowView(video: Video.fixture)
|
||||
VideoListRowView(video: Video.fixtureUpcomingWithoutPublishedOrViews)
|
||||
VideoListRowView(video: Video.fixtureLiveWithoutPublishedOrViews)
|
||||
}
|
||||
.frame(maxWidth: 400)
|
||||
|
||||
#if os(iOS)
|
||||
List {
|
||||
VideoListRowView(video: Video.fixture)
|
||||
VideoListRowView(video: Video.fixtureUpcomingWithoutPublishedOrViews)
|
||||
VideoListRowView(video: Video.fixtureLiveWithoutPublishedOrViews)
|
||||
}
|
||||
.environment(\.verticalSizeClass, .compact)
|
||||
.frame(maxWidth: 800)
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -71,8 +71,6 @@
|
||||
377A20AA2693C9A2002842B8 /* TypedContentAccessors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377A20A82693C9A2002842B8 /* TypedContentAccessors.swift */; };
|
||||
377A20AB2693C9A2002842B8 /* TypedContentAccessors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377A20A82693C9A2002842B8 /* TypedContentAccessors.swift */; };
|
||||
377FC7D5267A080300A6BBAF /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7D4267A080300A6BBAF /* SwiftyJSON */; };
|
||||
377FC7D7267A080300A6BBAF /* URLImage in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7D6267A080300A6BBAF /* URLImage */; };
|
||||
377FC7D9267A080300A6BBAF /* URLImageStore in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7D8267A080300A6BBAF /* URLImageStore */; };
|
||||
377FC7DB267A080300A6BBAF /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7DA267A080300A6BBAF /* Logging */; };
|
||||
377FC7DC267A081800A6BBAF /* PopularVideosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27D26737323007FC770 /* PopularVideosView.swift */; };
|
||||
377FC7DD267A081A00A6BBAF /* PopularVideosView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27D26737323007FC770 /* PopularVideosView.swift */; };
|
||||
@ -85,8 +83,6 @@
|
||||
377FC7E4267A084E00A6BBAF /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27F26737550007FC770 /* SearchView.swift */; };
|
||||
377FC7E5267A084E00A6BBAF /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37AAF27F26737550007FC770 /* SearchView.swift */; };
|
||||
377FC7ED267A0A0800A6BBAF /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7EC267A0A0800A6BBAF /* SwiftyJSON */; };
|
||||
377FC7EF267A0A0800A6BBAF /* URLImage in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7EE267A0A0800A6BBAF /* URLImage */; };
|
||||
377FC7F1267A0A0800A6BBAF /* URLImageStore in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7F0267A0A0800A6BBAF /* URLImageStore */; };
|
||||
377FC7F3267A0A0800A6BBAF /* Logging in Frameworks */ = {isa = PBXBuildFile; productRef = 377FC7F2267A0A0800A6BBAF /* Logging */; };
|
||||
3797757D268922D100DD52A8 /* Siesta in Frameworks */ = {isa = PBXBuildFile; productRef = 3797757C268922D100DD52A8 /* Siesta */; };
|
||||
37977583268922F600DD52A8 /* InvidiousAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37977582268922F600DD52A8 /* InvidiousAPI.swift */; };
|
||||
@ -175,8 +171,6 @@
|
||||
37D4B19826717E1500C925CA /* Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D4B19626717E1500C925CA /* Video.swift */; };
|
||||
37D4B19926717E1500C925CA /* Video.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D4B19626717E1500C925CA /* Video.swift */; };
|
||||
37D4B19D2671817900C925CA /* SwiftyJSON in Frameworks */ = {isa = PBXBuildFile; productRef = 37D4B19C2671817900C925CA /* SwiftyJSON */; };
|
||||
37D4B1AB2672580400C925CA /* URLImage in Frameworks */ = {isa = PBXBuildFile; productRef = 37D4B1AA2672580400C925CA /* URLImage */; };
|
||||
37D4B1AD2672580400C925CA /* URLImageStore in Frameworks */ = {isa = PBXBuildFile; productRef = 37D4B1AC2672580400C925CA /* URLImageStore */; };
|
||||
37EAD86B267B9C5600D9E01B /* SponsorBlockAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EAD86A267B9C5600D9E01B /* SponsorBlockAPI.swift */; };
|
||||
37EAD86C267B9C5600D9E01B /* SponsorBlockAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EAD86A267B9C5600D9E01B /* SponsorBlockAPI.swift */; };
|
||||
37EAD86D267B9C5600D9E01B /* SponsorBlockAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EAD86A267B9C5600D9E01B /* SponsorBlockAPI.swift */; };
|
||||
@ -294,10 +288,8 @@
|
||||
files = (
|
||||
37BD07B72698AB2E003EBB87 /* Defaults in Frameworks */,
|
||||
37BADCA52699FB72009BE4FB /* Alamofire in Frameworks */,
|
||||
377FC7D9267A080300A6BBAF /* URLImageStore in Frameworks */,
|
||||
377FC7D5267A080300A6BBAF /* SwiftyJSON in Frameworks */,
|
||||
37BD07B92698AB2E003EBB87 /* Siesta in Frameworks */,
|
||||
377FC7D7267A080300A6BBAF /* URLImage in Frameworks */,
|
||||
37BD07C72698B27B003EBB87 /* Introspect in Frameworks */,
|
||||
377FC7DB267A080300A6BBAF /* Logging in Frameworks */,
|
||||
);
|
||||
@ -309,10 +301,8 @@
|
||||
files = (
|
||||
37BD07BE2698AC96003EBB87 /* Defaults in Frameworks */,
|
||||
37BADCA7269A552E009BE4FB /* Alamofire in Frameworks */,
|
||||
377FC7F1267A0A0800A6BBAF /* URLImageStore in Frameworks */,
|
||||
377FC7ED267A0A0800A6BBAF /* SwiftyJSON in Frameworks */,
|
||||
37BD07C02698AC97003EBB87 /* Siesta in Frameworks */,
|
||||
377FC7EF267A0A0800A6BBAF /* URLImage in Frameworks */,
|
||||
377FC7F3267A0A0800A6BBAF /* Logging in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -337,10 +327,8 @@
|
||||
files = (
|
||||
372915E42687E33E00F5A35B /* Defaults in Frameworks */,
|
||||
37BADCA9269A570B009BE4FB /* Alamofire in Frameworks */,
|
||||
37D4B1AD2672580400C925CA /* URLImageStore in Frameworks */,
|
||||
37D4B19D2671817900C925CA /* SwiftyJSON in Frameworks */,
|
||||
3797757D268922D100DD52A8 /* Siesta in Frameworks */,
|
||||
37D4B1AB2672580400C925CA /* URLImage in Frameworks */,
|
||||
37B767E02678C5BF0098BAA8 /* Logging in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@ -536,8 +524,6 @@
|
||||
name = "Pearvidious (iOS)";
|
||||
packageProductDependencies = (
|
||||
377FC7D4267A080300A6BBAF /* SwiftyJSON */,
|
||||
377FC7D6267A080300A6BBAF /* URLImage */,
|
||||
377FC7D8267A080300A6BBAF /* URLImageStore */,
|
||||
377FC7DA267A080300A6BBAF /* Logging */,
|
||||
37BD07B62698AB2E003EBB87 /* Defaults */,
|
||||
37BD07B82698AB2E003EBB87 /* Siesta */,
|
||||
@ -563,8 +549,6 @@
|
||||
name = "Pearvidious (macOS)";
|
||||
packageProductDependencies = (
|
||||
377FC7EC267A0A0800A6BBAF /* SwiftyJSON */,
|
||||
377FC7EE267A0A0800A6BBAF /* URLImage */,
|
||||
377FC7F0267A0A0800A6BBAF /* URLImageStore */,
|
||||
377FC7F2267A0A0800A6BBAF /* Logging */,
|
||||
37BD07BD2698AC96003EBB87 /* Defaults */,
|
||||
37BD07BF2698AC97003EBB87 /* Siesta */,
|
||||
@ -625,8 +609,6 @@
|
||||
name = "Pearvidious (Apple TV)";
|
||||
packageProductDependencies = (
|
||||
37D4B19C2671817900C925CA /* SwiftyJSON */,
|
||||
37D4B1AA2672580400C925CA /* URLImage */,
|
||||
37D4B1AC2672580400C925CA /* URLImageStore */,
|
||||
37B767DF2678C5BF0098BAA8 /* Logging */,
|
||||
372915E32687E33E00F5A35B /* Defaults */,
|
||||
3797757C268922D100DD52A8 /* Siesta */,
|
||||
@ -698,7 +680,6 @@
|
||||
mainGroup = 37D4B0BC2671614700C925CA;
|
||||
packageReferences = (
|
||||
37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */,
|
||||
37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */,
|
||||
37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */,
|
||||
372915E22687E33E00F5A35B /* XCRemoteSwiftPackageReference "Defaults" */,
|
||||
3797757B268922D100DD52A8 /* XCRemoteSwiftPackageReference "siesta" */,
|
||||
@ -1558,14 +1539,6 @@
|
||||
minimumVersion = 5.0.0;
|
||||
};
|
||||
};
|
||||
37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */ = {
|
||||
isa = XCRemoteSwiftPackageReference;
|
||||
repositoryURL = "https://github.com/dmytro-anokhin/url-image";
|
||||
requirement = {
|
||||
kind = upToNextMajorVersion;
|
||||
minimumVersion = 3.0.0;
|
||||
};
|
||||
};
|
||||
/* End XCRemoteSwiftPackageReference section */
|
||||
|
||||
/* Begin XCSwiftPackageProductDependency section */
|
||||
@ -1579,16 +1552,6 @@
|
||||
package = 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */;
|
||||
productName = SwiftyJSON;
|
||||
};
|
||||
377FC7D6267A080300A6BBAF /* URLImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImage;
|
||||
};
|
||||
377FC7D8267A080300A6BBAF /* URLImageStore */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImageStore;
|
||||
};
|
||||
377FC7DA267A080300A6BBAF /* Logging */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */;
|
||||
@ -1599,16 +1562,6 @@
|
||||
package = 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */;
|
||||
productName = SwiftyJSON;
|
||||
};
|
||||
377FC7EE267A0A0800A6BBAF /* URLImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImage;
|
||||
};
|
||||
377FC7F0267A0A0800A6BBAF /* URLImageStore */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImageStore;
|
||||
};
|
||||
377FC7F2267A0A0800A6BBAF /* Logging */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37B767DE2678C5BF0098BAA8 /* XCRemoteSwiftPackageReference "swift-log" */;
|
||||
@ -1669,16 +1622,6 @@
|
||||
package = 37D4B19B2671817900C925CA /* XCRemoteSwiftPackageReference "SwiftyJSON" */;
|
||||
productName = SwiftyJSON;
|
||||
};
|
||||
37D4B1AA2672580400C925CA /* URLImage */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImage;
|
||||
};
|
||||
37D4B1AC2672580400C925CA /* URLImageStore */ = {
|
||||
isa = XCSwiftPackageProductDependency;
|
||||
package = 37D4B1A92672580400C925CA /* XCRemoteSwiftPackageReference "url-image" */;
|
||||
productName = URLImageStore;
|
||||
};
|
||||
/* End XCSwiftPackageProductDependency section */
|
||||
};
|
||||
rootObject = 37D4B0BD2671614700C925CA /* Project object */;
|
||||
|
@ -20,7 +20,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "siesta",
|
||||
"package": "Siesta",
|
||||
"repositoryURL": "https://github.com/bustoutsolutions/siesta",
|
||||
"state": {
|
||||
"branch": null,
|
||||
@ -38,7 +38,7 @@
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "SwiftUI-Introspect",
|
||||
"package": "Introspect",
|
||||
"repositoryURL": "https://github.com/siteline/SwiftUI-Introspect.git",
|
||||
"state": {
|
||||
"branch": null,
|
||||
@ -54,15 +54,6 @@
|
||||
"revision": "b3dcd7dbd0d488e1a7077cb33b00f2083e382f07",
|
||||
"version": "5.0.1"
|
||||
}
|
||||
},
|
||||
{
|
||||
"package": "url-image",
|
||||
"repositoryURL": "https://github.com/dmytro-anokhin/url-image",
|
||||
"state": {
|
||||
"branch": null,
|
||||
"revision": "a55b6597f6ce67dfbdc136ecfb8c8436b14ca41d",
|
||||
"version": "3.1.0"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -1,15 +1,10 @@
|
||||
import SwiftUI
|
||||
import URLImage
|
||||
import URLImageStore
|
||||
|
||||
@main
|
||||
struct PearvidiousApp: App {
|
||||
var body: some Scene {
|
||||
let urlImageService = URLImageService(fileStore: URLImageFileStore(),
|
||||
inMemoryStore: URLImageInMemoryStore())
|
||||
WindowGroup {
|
||||
ContentView()
|
||||
.environment(\.urlImageService, urlImageService)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
20
Shared/VideoView.swift
Normal file
20
Shared/VideoView.swift
Normal file
@ -0,0 +1,20 @@
|
||||
//
|
||||
// VideoView.swift
|
||||
// VideoView
|
||||
//
|
||||
// Created by Arkadiusz Fal on 26/07/2021.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct VideoView: View {
|
||||
var body: some View {
|
||||
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
|
||||
}
|
||||
}
|
||||
|
||||
struct VideoView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
VideoView()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user