Settings for iOS/macOS

This commit is contained in:
Arkadiusz Fal
2021-09-25 10:18:22 +02:00
parent 433725c5e8
commit a7da3b9468
64 changed files with 1998 additions and 665 deletions

View File

@@ -1,30 +1,46 @@
import Siesta
import SwiftUI
struct SubscriptionsView: View {
@ObservedObject private var store = Store<[Video]>()
@StateObject private var store = Store<[Video]>()
var resource = InvidiousAPI.shared.feed
@EnvironmentObject<InvidiousAPI> private var api
init() {
resource.addObserver(store)
var feed: Resource {
api.feed
}
var body: some View {
VideosView(videos: store.collection)
.onAppear {
if let home = InvidiousAPI.shared.home.loadIfNeeded() {
home.onSuccess { _ in
resource.loadIfNeeded()
}
} else {
resource.loadIfNeeded()
SignInRequiredView(title: "Subscriptions") {
VideosView(videos: store.collection)
.onAppear {
loadResources()
}
.onChange(of: api.account) { _ in
loadResources(force: true)
}
.onChange(of: feed) { _ in
loadResources(force: true)
}
}
.refreshable {
loadResources(force: true)
}
}
fileprivate func loadResources(force: Bool = false) {
feed.addObserver(store)
if let request = force ? api.home.load() : api.home.loadIfNeeded() {
request.onSuccess { _ in
loadFeed(force: force)
}
.refreshable {
resource.load()
}
#if !os(tvOS)
.navigationTitle("Subscriptions")
#endif
} else {
loadFeed(force: force)
}
}
fileprivate func loadFeed(force: Bool = false) {
_ = force ? feed.load() : feed.loadIfNeeded()
}
}