import Defaults import Foundation extension Defaults.Keys { static let instances = Key<[Instance]>("instances", default: [ .init( app: .piped, id: "default-piped-instance", name: "Kavin", apiURL: "https://pipedapi.kavin.rocks", frontendURL: "https://piped.kavin.rocks" ) ]) static let accounts = Key<[Account]>("accounts", default: []) static let lastAccountID = Key("lastAccountID") static let lastInstanceID = Key("lastInstanceID") static let lastUsedPlaylistID = Key("lastPlaylistID") static let sponsorBlockInstance = Key("sponsorBlockInstance", default: "https://sponsor.ajay.app") static let sponsorBlockCategories = Key>("sponsorBlockCategories", default: Set(SponsorBlockAPI.categories)) static let favorites = Key<[FavoriteItem]>("favorites", default: [ .init(section: .trending("US", "default")), .init(section: .channel("UC-lHJZR3Gqxm24_Vd_AJ5Yw", "PewDiePie")), .init(section: .searchQuery("Apple Pie Recipes", "", "", "")) ]) static let channelOnThumbnail = Key("channelOnThumbnail", default: true) static let timeOnThumbnail = Key("timeOnThumbnail", default: true) static let quality = Key("quality", default: .best) static let playerSidebar = Key("playerSidebar", default: PlayerSidebarSetting.defaultValue) static let playerInstanceID = Key("playerInstance") static let showKeywords = Key("showKeywords", default: false) static let recentlyOpened = Key<[RecentItem]>("recentlyOpened", default: []) static let queue = Key<[PlayerQueueItem]>("queue", default: []) static let history = Key<[PlayerQueueItem]>("history", default: []) static let lastPlayed = Key("lastPlayed") static let saveHistory = Key("saveHistory", default: true) static let trendingCategory = Key("trendingCategory", default: .default) static let trendingCountry = Key("trendingCountry", default: .us) #if os(iOS) static let tabNavigationSection = Key("tabNavigationSection", default: .trending) #endif } enum ResolutionSetting: String, CaseIterable, Defaults.Serializable { case best, hd720p, sd480p, sd360p, sd240p, sd144p var value: Stream.Resolution { switch self { case .best: return .hd720p default: return Stream.Resolution(rawValue: rawValue)! } } var description: String { switch self { case .best: return "Best available" default: return value.name } } } enum PlayerSidebarSetting: String, CaseIterable, Defaults.Serializable { case always, whenFits, never static var defaultValue: Self { #if os(macOS) .always #else .whenFits #endif } } #if os(iOS) enum TabNavigationSectionSetting: String, Defaults.Serializable { case trending, popular } #endif