Extended Piped support

This commit is contained in:
Arkadiusz Fal
2021-10-21 00:21:50 +02:00
parent 2d075e7b3a
commit c3326a56af
46 changed files with 706 additions and 458 deletions

View File

@@ -99,7 +99,7 @@ struct ChannelVideosView: View {
}
var resource: Resource {
let resource = accounts.invidious.channel(channel.id)
let resource = accounts.api.channel(channel.id)
resource.addObserver(store)
return resource
@@ -107,14 +107,16 @@ struct ChannelVideosView: View {
var subscriptionToggleButton: some View {
Group {
if subscriptions.isSubscribing(channel.id) {
Button("Unsubscribe") {
navigation.presentUnsubscribeAlert(channel)
}
} else {
Button("Subscribe") {
subscriptions.subscribe(channel.id) {
navigation.sidebarSectionChanged.toggle()
if accounts.app.supportsSubscriptions && accounts.signedIn {
if subscriptions.isSubscribing(channel.id) {
Button("Unsubscribe") {
navigation.presentUnsubscribeAlert(channel)
}
} else {
Button("Subscribe") {
subscriptions.subscribe(channel.id) {
navigation.sidebarSectionChanged.toggle()
}
}
}
}

View File

@@ -6,16 +6,16 @@ struct PopularView: View {
@EnvironmentObject<AccountsModel> private var accounts
var resource: Resource {
accounts.invidious.popular
var resource: Resource? {
accounts.api.popular
}
var body: some View {
PlayerControlsView {
VideosCellsVertical(videos: store.collection)
.onAppear {
resource.addObserver(store)
resource.loadIfNeeded()
resource?.addObserver(store)
resource?.loadIfNeeded()
}
#if !os(tvOS)
.navigationTitle("Popular")

View File

@@ -19,6 +19,7 @@ struct SearchView: View {
@Environment(\.navigationStyle) private var navigationStyle
@EnvironmentObject<AccountsModel> private var accounts
@EnvironmentObject<RecentsModel> private var recents
@EnvironmentObject<SearchModel> private var state
@@ -37,7 +38,9 @@ struct SearchView: View {
} else {
#if os(tvOS)
ScrollView(.vertical, showsIndicators: false) {
filtersHorizontalStack
if accounts.app.supportsSearchFilters {
filtersHorizontalStack
}
VideosCellsHorizontal(videos: state.store.collection)
}
@@ -61,27 +64,28 @@ struct SearchView: View {
.toolbar {
#if !os(tvOS)
ToolbarItemGroup(placement: toolbarPlacement) {
Section {
#if os(macOS)
HStack {
Text("Sort:")
.foregroundColor(.secondary)
if accounts.app.supportsSearchFilters {
Section {
#if os(macOS)
HStack {
Text("Sort:")
.foregroundColor(.secondary)
searchSortOrderPicker
}
#else
Menu("Sort: \(searchSortOrder.name)") {
searchSortOrderPicker
}
#endif
searchSortOrderPicker
}
#else
Menu("Sort: \(searchSortOrder.name)") {
searchSortOrderPicker
}
#endif
}
.transaction { t in t.animation = .none }
Spacer()
filtersMenu
}
.transaction { t in t.animation = .none }
Spacer()
filtersMenu
}
#endif
}
.onAppear {

View File

@@ -6,12 +6,8 @@ struct SubscriptionsView: View {
@EnvironmentObject<AccountsModel> private var accounts
var api: InvidiousAPI {
accounts.invidious
}
var feed: Resource {
api.feed
var feed: Resource? {
accounts.api.feed
}
var body: some View {
@@ -32,9 +28,9 @@ struct SubscriptionsView: View {
}
fileprivate func loadResources(force: Bool = false) {
feed.addObserver(store)
feed?.addObserver(store)
if let request = force ? api.home.load() : api.home.loadIfNeeded() {
if let request = force ? accounts.api.home?.load() : accounts.api.home?.loadIfNeeded() {
request.onSuccess { _ in
loadFeed(force: force)
}
@@ -44,6 +40,6 @@ struct SubscriptionsView: View {
}
fileprivate func loadFeed(force: Bool = false) {
_ = force ? feed.load() : feed.loadIfNeeded()
_ = force ? feed?.load() : feed?.loadIfNeeded()
}
}

View File

@@ -8,6 +8,7 @@ struct VideoContextMenuView: View {
@Environment(\.inNavigationView) private var inNavigationView
@EnvironmentObject<AccountsModel> private var accounts
@EnvironmentObject<NavigationModel> private var navigation
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<PlaylistsModel> private var playlists
@@ -25,18 +26,22 @@ struct VideoContextMenuView: View {
Section {
openChannelButton
subscriptionButton
if accounts.app.supportsSubscriptions {
subscriptionButton
}
}
Section {
if navigation.tabSelection != .playlists {
addToPlaylistButton
} else if let playlist = playlists.currentPlaylist {
removeFromPlaylistButton(playlistID: playlist.id)
}
if accounts.app.supportsUserPlaylists {
Section {
if navigation.tabSelection != .playlists {
addToPlaylistButton
} else if let playlist = playlists.currentPlaylist {
removeFromPlaylistButton(playlistID: playlist.id)
}
if case let .playlist(id) = navigation.tabSelection {
removeFromPlaylistButton(playlistID: id)
if case let .playlist(id) = navigation.tabSelection {
removeFromPlaylistButton(playlistID: id)
}
}
}