Show badge for channels subscriptions

This commit is contained in:
Arkadiusz Fal
2022-12-13 13:14:20 +01:00
parent d5626b877c
commit b3ddf4a153
5 changed files with 119 additions and 40 deletions

View File

@@ -3,6 +3,7 @@ import SDWebImageSwiftUI
import SwiftUI
struct ChannelsView: View {
@ObservedObject private var feed = FeedModel.shared
@ObservedObject private var subscriptions = SubscribedChannelsModel.shared
@ObservedObject private var accounts = AccountsModel.shared
@@ -23,6 +24,8 @@ struct ChannelsView: View {
Label(channel.name, systemImage: RecentsModel.symbolSystemImage(channel.name))
}
}
.backport
.badge(channelBadge(channel))
}
.contextMenu {
Button {
@@ -78,6 +81,14 @@ struct ChannelsView: View {
#endif
}
func channelBadge(_ channel: Channel) -> Text? {
if let count = feed.unwatchedByChannel[accounts.current]?[channel.id] {
return Text(String(count))
}
return nil
}
var header: some View {
HStack {
#if os(tvOS)

View File

@@ -39,6 +39,10 @@ struct SubscriptionsView: View {
ToolbarItem {
ListingStyleButtons(listingStyle: $subscriptionsListingStyle)
}
ToolbarItem {
toggleWatchedButton
}
}
#endif
}
@@ -53,26 +57,12 @@ struct SubscriptionsView: View {
if subscriptionsViewPage == .feed {
ListingStyleButtons(listingStyle: $subscriptionsListingStyle)
Button {
feed.playUnwatchedFeed()
} label: {
Label("Play unwatched", systemImage: "play")
}
Button {
feed.markAllFeedAsWatched()
} label: {
Label("Mark all as watched", systemImage: "checkmark.circle.fill")
}
Button {
feed.markAllFeedAsUnwatched()
} label: {
Label("Mark all as unwatched", systemImage: "checkmark.circle")
}
}
playUnwatchedButton
toggleWatchedButton
Section {
SettingsButtons()
}
@@ -98,6 +88,40 @@ struct SubscriptionsView: View {
}
}
#endif
var playUnwatchedButton: some View {
Button {
feed.playUnwatchedFeed()
} label: {
Label("Play all unwatched", systemImage: "play")
}
.disabled(!feed.canPlayUnwatchedFeed)
}
@ViewBuilder var toggleWatchedButton: some View {
if feed.canMarkAllFeedAsWatched {
markAllFeedAsWatchedButton
} else {
markAllFeedAsUnwatchedButton
}
}
var markAllFeedAsWatchedButton: some View {
Button {
feed.markAllFeedAsWatched()
} label: {
Label("Mark all as watched", systemImage: "checkmark.circle.fill")
}
.disabled(!feed.canMarkAllFeedAsWatched)
}
var markAllFeedAsUnwatchedButton: some View {
Button {
feed.markAllFeedAsUnwatched()
} label: {
Label("Mark all as unwatched", systemImage: "checkmark.circle")
}
}
}
struct SubscriptionsView_Previews: PreviewProvider {