mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 21:43:41 +00:00
Improve channel content type picker
This commit is contained in:
parent
82cd08d44e
commit
220aef65ce
@ -4,7 +4,7 @@ import Foundation
|
|||||||
import SwiftyJSON
|
import SwiftyJSON
|
||||||
|
|
||||||
struct Channel: Identifiable, Hashable {
|
struct Channel: Identifiable, Hashable {
|
||||||
enum ContentType: String, Identifiable {
|
enum ContentType: String, Identifiable, CaseIterable {
|
||||||
case videos
|
case videos
|
||||||
case playlists
|
case playlists
|
||||||
case livestreams
|
case livestreams
|
||||||
@ -15,6 +15,15 @@ struct Channel: Identifiable, Hashable {
|
|||||||
rawValue
|
rawValue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var description: String {
|
||||||
|
switch self {
|
||||||
|
case .livestreams:
|
||||||
|
return "Live Streams".localized()
|
||||||
|
default:
|
||||||
|
return rawValue.capitalized.localized()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var contentItemType: ContentItem.ContentType {
|
var contentItemType: ContentItem.ContentType {
|
||||||
switch self {
|
switch self {
|
||||||
case .videos:
|
case .videos:
|
||||||
@ -29,6 +38,21 @@ struct Channel: Identifiable, Hashable {
|
|||||||
return .channel
|
return .channel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var systemImage: String {
|
||||||
|
switch self {
|
||||||
|
case .videos:
|
||||||
|
return "video"
|
||||||
|
case .playlists:
|
||||||
|
return "list.and.film"
|
||||||
|
case .livestreams:
|
||||||
|
return "dot.radiowaves.left.and.right"
|
||||||
|
case .shorts:
|
||||||
|
return "1.square"
|
||||||
|
case .channels:
|
||||||
|
return "person.3"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Tab: Identifiable, Hashable {
|
struct Tab: Identifiable, Hashable {
|
||||||
@ -80,4 +104,9 @@ struct Channel: Identifiable, Hashable {
|
|||||||
var contentItem: ContentItem {
|
var contentItem: ContentItem {
|
||||||
ContentItem(channel: self)
|
ContentItem(channel: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func hasData(for contentType: ContentType) -> Bool {
|
||||||
|
guard contentType != .videos, contentType != .playlists else { return true }
|
||||||
|
return tabs.contains(where: { $0.contentType == contentType })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,17 +289,10 @@ struct ChannelVideosView: View {
|
|||||||
private var contentTypePicker: some View {
|
private var contentTypePicker: some View {
|
||||||
Picker("Content type", selection: $contentType) {
|
Picker("Content type", selection: $contentType) {
|
||||||
if let channel = presentedChannel {
|
if let channel = presentedChannel {
|
||||||
Text("Videos").tag(Channel.ContentType.videos)
|
ForEach(Channel.ContentType.allCases, id: \.self) { type in
|
||||||
Text("Playlists").tag(Channel.ContentType.playlists)
|
if channel.hasData(for: type) {
|
||||||
|
Label(type.description, systemImage: type.systemImage).tag(type)
|
||||||
if channel.tabs.contains(where: { $0.contentType == .livestreams }) {
|
}
|
||||||
Text("Live streams").tag(Channel.ContentType.livestreams)
|
|
||||||
}
|
|
||||||
if channel.tabs.contains(where: { $0.contentType == .shorts }) {
|
|
||||||
Text("Shorts").tag(Channel.ContentType.shorts)
|
|
||||||
}
|
|
||||||
if channel.tabs.contains(where: { $0.contentType == .channels }) {
|
|
||||||
Text("Channels").tag(Channel.ContentType.channels)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user