Compare commits

...

31 Commits

Author SHA1 Message Date
Arkadiusz Fal
e6a9f39477 Bump build number to 165 2023-10-15 00:46:59 +02:00
Arkadiusz Fal
ff4f80b7ef Update CHANGELOG 2023-10-15 00:46:59 +02:00
Arkadiusz Fal
7e1218ce13 Update packages 2023-10-15 00:46:59 +02:00
Arkadiusz Fal
4c707271c3 Add setting to disable chapters and related, add info section in
player settings
2023-10-15 00:46:59 +02:00
Arkadiusz Fal
04e56638ce Fix possible crash 2023-10-15 00:46:59 +02:00
Arkadiusz Fal
674269c4c1 Fix issue with tvOS screensaver 2023-10-15 00:46:58 +02:00
Arkadiusz Fal
2b4627c3d6 Fix lint 2023-10-15 00:46:58 +02:00
Arkadiusz Fal
4260c6d6b5 Merge pull request #539 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2023-10-15 00:46:13 +02:00
maboroshin
4057021cb9 Translated using Weblate (Japanese)
Currently translated at 99.4% (530 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/ja/
2023-10-10 15:04:11 +00:00
gallegonovato
151a99c2a3 Translated using Weblate (Spanish)
Currently translated at 84.2% (449 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/es/
2023-10-08 12:03:32 +00:00
Radical
bd606a4cf8 Translated using Weblate (Norwegian Bokmål)
Currently translated at 59.6% (318 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/nb_NO/
2023-10-08 12:03:31 +00:00
Ophiushi
4dbf2551d9 Translated using Weblate (French)
Currently translated at 100.0% (533 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/fr/
2023-09-28 19:02:38 +02:00
Arkadiusz Fal
8fefbccc83 Bump build number to 164 2023-09-26 18:19:49 +02:00
Arkadiusz Fal
65bc1e4efe Update CHANGELOG 2023-09-26 18:19:27 +02:00
Arkadiusz Fal
9a257ec897 Fix quality profile form 2023-09-26 18:19:09 +02:00
Arkadiusz Fal
dd0a966a9f Bump build number to 163 2023-09-26 17:57:19 +02:00
Arkadiusz Fal
cec0327293 Update CHANGELOG 2023-09-26 17:47:18 +02:00
Arkadiusz Fal
5b2c94758b Set window min width on macOS 2023-09-26 17:47:00 +02:00
Arkadiusz Fal
2dd1d2ac56 Fix possible crash 2023-09-26 17:44:01 +02:00
Arkadiusz Fal
3be7a5a69f Fix issue with creating quality profile 2023-09-26 17:44:01 +02:00
Arkadiusz Fal
3e6ea2633e Remove unnecessary frameworks 2023-09-26 17:44:01 +02:00
Arkadiusz Fal
2ef692edb8 Migrate to SwiftUIIntrospect 2023-09-26 17:44:01 +02:00
Arkadiusz Fal
3edfa5dfe7 Set focus on search textfield on macOS
Fix #268
2023-09-26 17:44:01 +02:00
Arkadiusz Fal
8976ef04f6 Localization fix 2023-09-26 17:44:00 +02:00
Arkadiusz Fal
cf81aedb60 Merge pull request #538 from weblate/weblate-yattee-localizable-strings
Translations update from Hosted Weblate
2023-09-26 17:43:48 +02:00
joaooliva
78a225cde4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (533 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/pt_BR/
2023-09-26 17:43:26 +02:00
Arkadiusz Fal
efdbbbc1f4 Translated using Weblate (Polish)
Currently translated at 100.0% (533 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/pl/
2023-09-26 17:43:26 +02:00
Anonymous
f82056a358 Translated using Weblate (English)
Currently translated at 100.0% (533 of 533 strings)

Translation: Yattee/Localizable.strings
Translate-URL: https://hosted.weblate.org/projects/yattee/localizable-strings/en/
2023-09-26 17:43:26 +02:00
Arkadiusz Fal
983b9c4ddc Bump build number to 162 2023-09-25 21:39:12 +02:00
Arkadiusz Fal
7a96312a83 Update CHANGELOG 2023-09-25 21:38:54 +02:00
Arkadiusz Fal
9d49f3dd68 Add podcasts and releases tabs for channels in Invidious 2023-09-25 21:37:30 +02:00
26 changed files with 186 additions and 112 deletions

View File

@@ -1,10 +1,15 @@
## Build 161
* Fixed regression with opening videos links
* Fixed issue with deselecting formats in Quality profiles
* Other minor fixes and improvements
## Build 165
* Added Info section in Player settings
Added option to hide chapters
Added option to hide related videos
Moved other previous Info section settings
* Fixed issue where screensaver would turn on while playing video with AVPlayer on tvOS
* Fixed reported crashes
## Previous builds
* Added support for "Podcasts" and "Releases" channel tabs (Invidious)
* Added button in Location settings to add current used public location to "Custom Locations"
* Search text field focuses automatically (macOS)
* Updated mpv and dependencies (using mpvkit library, mpv 0.36.0, ffmpeg 6.0)
* Increased controls timeline/scrubber gesture area for easier handling
* Fixed handling playlist links
@@ -12,6 +17,8 @@
* Fixed issue with handling opening URLs on macOS
* Fixed issue with "Keep channels with unwatched videos on top of subscriptions list" setting not honored in sidebar
* Fixed performance issues with accounts with large amount of subscribed channels
* Fixed regression with opening videos links
* Fixed issue with deselecting formats in Quality profiles
* Fixed compatibility with iOS 17, macOS 14 and tvOS 17
* Dropped support for iOS 14 and macOS 11
* Fixed reported crashes

View File

@@ -8,16 +8,16 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.827.0)
aws-sdk-core (3.183.0)
aws-partitions (1.835.0)
aws-sdk-core (3.185.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.71.0)
aws-sdk-core (~> 3, >= 3.177.0)
aws-sdk-kms (1.72.0)
aws-sdk-core (~> 3, >= 3.184.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.135.0)
aws-sdk-s3 (1.136.0)
aws-sdk-core (~> 3, >= 3.181.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.6)
@@ -36,7 +36,7 @@ GEM
unf (>= 0.0.5, < 1.0.0)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.103.0)
excon (0.104.0)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
@@ -107,7 +107,7 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.49.0)
google-apis-androidpublisher_v3 (0.50.0)
google-apis-core (>= 0.11.0, < 2.a)
google-apis-core (0.11.1)
addressable (~> 2.5, >= 2.5.1)
@@ -192,7 +192,7 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unicode-display_width (2.4.2)
unicode-display_width (2.5.0)
webrick (1.8.1)
word_wrap (1.0.0)
xcodeproj (1.23.0)

View File

@@ -123,7 +123,7 @@ final class InvidiousAPI: Service, ObservableObject, VideosAPI {
content.json.dictionaryValue["videos"]?.arrayValue.map(self.extractVideo) ?? []
}
["latest", "playlists", "streams", "shorts", "channels", "videos"].forEach { type in
["latest", "playlists", "streams", "shorts", "channels", "videos", "releases", "podcasts"].forEach { type in
configureTransformer(pathPattern("channels/*/\(type)"), requestMethods: [.get]) { (content: Entity<JSON>) -> ChannelPage in
self.extractChannelPage(from: content.json)
}

View File

@@ -10,6 +10,8 @@ struct Channel: Identifiable, Hashable {
case livestreams
case shorts
case channels
case releases
case podcasts
static func from(_ name: String) -> Self? {
let rawValueMatch = allCases.first { $0.rawValue == name }
@@ -45,6 +47,10 @@ struct Channel: Identifiable, Hashable {
return "1.square"
case .channels:
return "person.3"
case .releases:
return "square.stack"
case .podcasts:
return "radio"
}
}

View File

@@ -666,6 +666,10 @@ final class AVPlayerBackend: PlayerBackend {
} else {
ScreenSaverManager.shared.enable()
}
#else
DispatchQueue.main.async {
UIApplication.shared.isIdleTimerDisabled = self.model.presentingPlayer && self.isPlaying
}
#endif
self.timeObserverThrottle.execute {

View File

@@ -18,6 +18,12 @@ final class SearchModel: ObservableObject {
@Published var focused = false
#if os(iOS)
var textField: UITextField!
#elseif os(macOS)
var textField: NSTextField!
#endif
var accounts: AccountsModel { .shared }
private var resource: Resource!

View File

@@ -290,8 +290,8 @@ struct Video: Identifiable, Equatable, Hashable {
}
var localStreamIsFile: Bool {
guard let localStream else { return false }
return localStream.localURL.isFileURL
guard let url = localStream?.localURL else { return false }
return url.isFileURL
}
var localStreamIsRemoteURL: Bool {

View File

@@ -263,6 +263,8 @@ extension Defaults.Keys {
static let hideShorts = Key<Bool>("hideShorts", default: false)
static let hideWatched = Key<Bool>("hideWatched", default: false)
static let showInspector = Key<ShowInspectorSetting>("showInspector", default: .onlyLocal)
static let showChapters = Key<Bool>("showChapters", default: true)
static let showRelated = Key<Bool>("showRelated", default: true)
static let widgetsSettings = Key<[WidgetSettings]>("widgetsSettings", default: [])
}

View File

@@ -1,7 +1,7 @@
import Defaults
import SwiftUI
#if os(iOS)
import Introspect
import SwiftUIIntrospect
#endif
struct AppSidebarNavigation: View {
@@ -15,7 +15,7 @@ struct AppSidebarNavigation: View {
var body: some View {
#if os(iOS)
content.introspectViewController { viewController in
content.introspect(.viewController, on: .iOS(.v15, .v16, .v17)) { viewController in
// workaround for an empty supplementary view on launch
// the supplementary view is determined by the default selection inside the
// primary view, but the primary view is not loaded so its selection is not read

View File

@@ -167,6 +167,9 @@ struct ContentView: View {
#if os(iOS)
.statusBarHidden(player.playingFullScreen)
#endif
#if os(macOS)
.frame(minWidth: 1200)
#endif
}
@ViewBuilder var videoPlayer: some View {

View File

@@ -35,7 +35,9 @@ struct Sidebar: View {
}
}
.onChange(of: navigation.sidebarSectionChanged) { _ in
scrollScrollViewToItem(scrollView: scrollView, for: navigation.tabSelection)
if let tabSelection = navigation.tabSelection {
scrollScrollViewToItem(scrollView: scrollView, for: navigation.tabSelection)
}
}
.listStyle(.sidebar)
}

View File

@@ -184,6 +184,8 @@ struct VideoDetails: View {
@Default(.enableReturnYouTubeDislike) private var enableReturnYouTubeDislike
@Default(.playerSidebar) private var playerSidebar
@Default(.showInspector) private var showInspector
@Default(.showChapters) private var showChapters
@Default(.showRelated) private var showRelated
#if !os(tvOS)
@Default(.showScrollToTopInComments) private var showScrollToTopInComments
#endif
@@ -309,29 +311,29 @@ struct VideoDetails: View {
.padding(.horizontal)
}
if player.videoBeingOpened.isNil,
!video.isLocal,
!video.chapters.isEmpty
{
Section(header: chaptersHeader) {
ChaptersView()
if player.videoBeingOpened.isNil {
if showChapters,
!video.isLocal,
!video.chapters.isEmpty
{
Section(header: chaptersHeader) {
ChaptersView()
}
}
}
if player.videoBeingOpened.isNil,
video.isLocal || showInspector == .always
{
InspectorView(video: player.videoForDisplay)
.padding(.horizontal)
}
if showInspector == .always || video.isLocal {
InspectorView(video: player.videoForDisplay)
.padding(.horizontal)
}
if player.videoBeingOpened.isNil,
!sidebarQueue,
!(player.videoForDisplay?.related.isEmpty ?? true)
{
RelatedView()
.padding(.horizontal)
.padding(.top, 20)
if showRelated,
!sidebarQueue,
!(player.videoForDisplay?.related.isEmpty ?? true)
{
RelatedView()
.padding(.horizontal)
.padding(.top, 20)
}
}
}
}

View File

@@ -1,24 +1,27 @@
import Introspect
import Repeat
import SwiftUI
import SwiftUIIntrospect
struct FocusableSearchTextField: View {
@ObservedObject private var state = SearchModel.shared
#if os(iOS)
@State private var textField: UITextField?
#elseif os(macOS)
@State private var textField: NSTextField?
#endif
var body: some View {
SearchTextField()
#if os(iOS)
.introspectTextField { field in
textField = field
#if os(macOS)
.introspect(.textField, on: .macOS(.v12, .v13, .v14)) { textField in
state.textField = textField
}
.onAppear {
DispatchQueue.main.async {
state.textField?.becomeFirstResponder()
}
}
#elseif os(iOS)
.introspect(.textField, on: .iOS(.v15, .v16, .v17)) { textField in
state.textField = textField
}
.onChange(of: state.focused) { newValue in
if newValue, let textField, !textField.isFirstResponder {
if newValue, let textField = state.textField, !textField.isFirstResponder {
textField.becomeFirstResponder()
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
}

View File

@@ -11,7 +11,7 @@ struct AddPublicInstanceButton: View {
_ = InstancesModel.shared.add(app: app, name: "", url: account.urlString)
regenerateID()
} label: {
Label("Add \(account.urlString)", systemImage: "plus")
Label(String(format: "Add %@", account.urlString), systemImage: "plus")
}
.id(id)
}

View File

@@ -30,6 +30,8 @@ struct PlayerSettings: View {
@Default(.enableReturnYouTubeDislike) private var enableReturnYouTubeDislike
@Default(.showInspector) private var showInspector
@Default(.showChapters) private var showChapters
@Default(.showRelated) private var showRelated
@ObservedObject private var accounts = AccountsModel.shared
@@ -73,8 +75,19 @@ struct PlayerSettings: View {
}
#if !os(tvOS)
Section(header: SettingsHeader(text: "Inspector".localized())) {
inspectorVisibilityPicker
Section(header: SettingsHeader(text: "Info".localized())) {
expandVideoDescriptionToggle
showChaptersToggle
showRelatedToggle
#if os(macOS)
HStack {
Text("Inspector")
inspectorVisibilityPicker
}
.padding(.leading, 20)
#else
inspectorVisibilityPicker
#endif
}
#endif
@@ -96,9 +109,6 @@ struct PlayerSettings: View {
showScrollToTopInCommentsToggle
#endif
#if !os(tvOS)
expandVideoDescriptionToggle
#endif
returnYouTubeDislikeToggle
}
}
@@ -240,15 +250,25 @@ struct PlayerSettings: View {
}
#endif
private var inspectorVisibilityPicker: some View {
Picker("Visibility", selection: $showInspector) {
Text("Always").tag(ShowInspectorSetting.always)
Text("Only for local files and URLs").tag(ShowInspectorSetting.onlyLocal)
#if !os(tvOS)
private var inspectorVisibilityPicker: some View {
Picker("Inspector", selection: $showInspector) {
Text("Always").tag(ShowInspectorSetting.always)
Text("Only for local files and URLs").tag(ShowInspectorSetting.onlyLocal)
}
#if os(macOS)
.labelsHidden()
#endif
}
#if os(macOS)
.labelsHidden()
#endif
}
private var showChaptersToggle: some View {
Toggle("Chapters", isOn: $showChapters)
}
private var showRelatedToggle: some View {
Toggle("Related", isOn: $showRelated)
}
#endif
}
struct PlayerSettings_Previews: PreviewProvider {

View File

@@ -227,7 +227,7 @@ struct QualityProfileForm: View {
}
func isFormatSelected(_ format: QualityProfile.Format) -> Bool {
(initialized ? formats : qualityProfile.formats).contains(format)
(initialized || qualityProfile.isNil ? formats : qualityProfile.formats).contains(format)
}
func toggleFormat(_ format: QualityProfile.Format, value: Bool) {

View File

@@ -266,7 +266,7 @@ struct SettingsView: View {
case .browsing:
return 800
case .player:
return 480
return 500
case .controls:
return 920
case .quality:

View File

@@ -595,3 +595,6 @@
"Play Now in AVPlayer" = "Play Now in AVPlayer";
"Show channel avatars in videos lists" = "Show channel avatars in videos lists";
"Show channel avatars in channels lists" = "Show channel avatars in channels lists";
"Podcasts" = "Podcasts";
"Releases" = "Releases";
"Add %@" = "Add %@";

View File

@@ -116,7 +116,7 @@
"Decrease rate" = "Tasa de disminución";
"Decreased opacity" = "Opacidad disminuida";
"High" = "Alto";
"%lld videos" = "%lld videos";
"%lld videos" = "%lld vídeos";
"Explicit reminders to like, subscribe or interact with them on any paid or free platform(s) (e.g. click on a video)." = "Recordatorios explícitos para marquen \"me gusta\", se suscriban o interactúen con ellos en cualquier plataforma de pago o gratuita (por ejemplo, haciendo clic en un vídeo).";
"Formats will be selected in order as listed.\nHLS is an adaptive format (resolution setting does not apply)." = "Los formatos se seleccionarán en orden como se indica.\nHLS es un formato adaptable (no aplica la configuración de resolución).";
"Fullscreen size" = "Tamaño de pantalla completa";
@@ -331,7 +331,7 @@
"Replies" = "Respuestas";
"Reset" = "Reiniciar";
"Save history of searches, channels and playlists" = "Guardar historial de búsquedas, canales y listas de reproducción";
"Search" = "Buscar;
"Search" = "Buscar";
"Seek gesture sensitivity" = "Buscar sensibilidad en los gestos";
"Select location closest to you:" = "Seleccione la ubicación más cercana:";
@@ -502,3 +502,17 @@
"Playback history is empty" = "El historial de reproducción está vacío";
"Copy%@link" = "Copiar%@enlace";
"Share%@link" = "Compartir%@enlace";
"Open expanded" = "Abrir maximizada";
"Single tap gesture" = "Gesto con un solo toque";
"Right click channel thumbnail to open context menu with more actions" = "Haz clic con el botón derecho en la miniatura del canal para abrir el menú contextual con más acciones";
"Short videos: visible" = "Vídeos cortos: visibles";
"Tap and hold channel thumbnail to open context menu with more actions" = "Mantén pulsada la miniatura del canal para abrir el menú contextual con más acciones";
"Maximum width expanded" = "Ancho máximo ampliado";
"Short videos: hidden" = "Vídeos cortos: ocultos";
"Clear all" = "Borrar todo";
"Always show controls buttons" = "Mostrar siempre los botones de control";
"Mark channel feed as unwatched" = "Marcar el canal como no visto";
"Play all unwatched" = "Reproducir todo lo no visto";
"Mark channel feed as watched" = "Marcar el canal como visto";
"Double tap gesture" = "Doble toque";
"Player Bar" = "Barra del reproductor";

View File

@@ -597,3 +597,6 @@
"Play Now in MPV" = "Lire maintenant dans MPV";
"Show channel avatars in videos lists" = "Afficher les avatars des chaînes dans les listes de vidéos";
"Show channel avatars in channels lists" = "Afficher les avatars des chaînes dans les listes de chaînes";
"Podcasts" = "Podcasts";
"Releases" = "Sorties";
"Add %@" = "Ajouter %@";

View File

@@ -597,3 +597,6 @@
"Landscape right" = "右を下に横長";
"Show channel avatars in channels lists" = "チャンネル一覧にチャンネルのアイコンを表示";
"Show channel avatars in videos lists" = "動画一覧にチャンネルのアイコンを表示";
"Podcasts" = "ポッドキャスト";
"Releases" = "リリース";
"Add %@" = "追加 %@";

View File

@@ -271,7 +271,7 @@
"Popular" = "Populært";
"Connection failed" = "Kunne ikke koble til";
"Add Location" = "Legg til sted";
"Always use AVPlayer for live videos" = "AVPlayer for direkte-videoer";
"Always use AVPlayer for live videos" = "Alltid bruk AVPlayer for direktesendinger";
"Apply to all" = "Bruk for alle";
"Automatic" = "Automatisk";
"Autoplaying Next" = "Spiller neste også";

View File

@@ -598,3 +598,6 @@
"Show video context menu options to force selected backend" = "Pokaż opcje menu kontekstowego wideo, aby wymusić wybrany silnik";
"Show channel avatars in videos lists" = "Pokaż awatary kanałów na listach wideo";
"Show channel avatars in channels lists" = "Pokaż awatary kanałów na listach kanałów";
"Podcasts" = "Podkasty";
"Releases" = "Wydania";
"Add %@" = "Dodaj %@";

View File

@@ -597,3 +597,6 @@
"Play Now in MPV" = "Tocar Agora em MPV";
"Show channel avatars in videos lists" = "Mostrar avatares de canais em listas de vídeos";
"Show channel avatars in channels lists" = "Mostrar avatares de canais em listas de canais";
"Podcasts" = "Podcasts";
"Releases" = "Lançamentos";
"Add %@" = "Adicionar %@";

View File

@@ -601,7 +601,6 @@
379DC3D328BA4EB400B09677 /* Seek.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379DC3D028BA4EB400B09677 /* Seek.swift */; };
379E7C332A20FE3900AF8118 /* FocusableSearchTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379E7C322A20FE3900AF8118 /* FocusableSearchTextField.swift */; };
379E7C342A20FE3900AF8118 /* FocusableSearchTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379E7C322A20FE3900AF8118 /* FocusableSearchTextField.swift */; };
379E7C362A2105B900AF8118 /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = 379E7C352A2105B900AF8118 /* Introspect */; };
379EF9E029AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
379EF9E129AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
379EF9E229AA585F009FE6C6 /* HideShortsButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = 379EF9DF29AA585F009FE6C6 /* HideShortsButtons.swift */; };
@@ -698,7 +697,6 @@
37BD07BC2698AB60003EBB87 /* AppSidebarNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BD07BA2698AB60003EBB87 /* AppSidebarNavigation.swift */; };
37BD07C12698AD3B003EBB87 /* TrendingCountry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3705B17F267B4DFB00704544 /* TrendingCountry.swift */; };
37BD07C32698AD4F003EBB87 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BD07B42698AA4D003EBB87 /* ContentView.swift */; };
37BD07C72698B27B003EBB87 /* Introspect in Frameworks */ = {isa = PBXBuildFile; productRef = 37BD07C62698B27B003EBB87 /* Introspect */; };
37BD07C82698B71C003EBB87 /* AppTabNavigation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37D4B0C32671614700C925CA /* AppTabNavigation.swift */; };
37BD07C92698FBDB003EBB87 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BD07B42698AA4D003EBB87 /* ContentView.swift */; };
37BD672426F13D65004BE0C1 /* AppSidebarPlaylists.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BA794A26DC30EC002A0235 /* AppSidebarPlaylists.swift */; };
@@ -729,9 +727,6 @@
37C194C726F6A9C8005D3B96 /* RecentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C194C626F6A9C8005D3B96 /* RecentsModel.swift */; };
37C194C826F6A9C8005D3B96 /* RecentsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C194C626F6A9C8005D3B96 /* RecentsModel.swift */; };
37C2211D27ADA33300305B41 /* MPVViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C2211C27ADA33300305B41 /* MPVViewController.swift */; };
37C2211F27ADA3A200305B41 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2211E27ADA3A200305B41 /* libz.tbd */; };
37C2212127ADA3A600305B41 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2212027ADA3A600305B41 /* libbz2.tbd */; };
37C2212327ADA3F200305B41 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2212227ADA3F200305B41 /* libiconv.tbd */; };
37C2212527ADA40A00305B41 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2212427ADA40A00305B41 /* AudioToolbox.framework */; };
37C2212727ADA41000305B41 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2212627ADA41000305B41 /* CoreFoundation.framework */; };
37C2212927ADA41400305B41 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37C2212827ADA41400305B41 /* CoreMedia.framework */; };
@@ -751,6 +746,8 @@
37C3A251272366440087A57A /* ChannelPlaylistView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C3A250272366440087A57A /* ChannelPlaylistView.swift */; };
37C3A252272366440087A57A /* ChannelPlaylistView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C3A250272366440087A57A /* ChannelPlaylistView.swift */; };
37C3A253272366440087A57A /* ChannelPlaylistView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C3A250272366440087A57A /* ChannelPlaylistView.swift */; };
37C736782AC32B28007630E1 /* SwiftUIIntrospect in Frameworks */ = {isa = PBXBuildFile; productRef = 37C736772AC32B28007630E1 /* SwiftUIIntrospect */; };
37C7367A2AC33010007630E1 /* SwiftUIIntrospect in Frameworks */ = {isa = PBXBuildFile; productRef = 37C736792AC33010007630E1 /* SwiftUIIntrospect */; };
37C7A1D5267BFD9D0010EAD6 /* SponsorBlockSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C7A1D4267BFD9D0010EAD6 /* SponsorBlockSegment.swift */; };
37C7A1D6267BFD9D0010EAD6 /* SponsorBlockSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C7A1D4267BFD9D0010EAD6 /* SponsorBlockSegment.swift */; };
37C7A1D7267BFD9D0010EAD6 /* SponsorBlockSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37C7A1D4267BFD9D0010EAD6 /* SponsorBlockSegment.swift */; };
@@ -1406,11 +1403,8 @@
37C2212727ADA41000305B41 /* CoreFoundation.framework in Frameworks */,
37C2212527ADA40A00305B41 /* AudioToolbox.framework in Frameworks */,
372AA410286D067B0000B1DC /* Repeat in Frameworks */,
37C2212327ADA3F200305B41 /* libiconv.tbd in Frameworks */,
379325D529A265A300181CF1 /* Logging in Frameworks */,
37C2212127ADA3A600305B41 /* libbz2.tbd in Frameworks */,
37EE6DC528A305AD00BFD632 /* Reachability in Frameworks */,
37C2211F27ADA3A200305B41 /* libz.tbd in Frameworks */,
375B8AB128B57F4200397B31 /* KeychainAccess in Frameworks */,
3765917C27237D21009F956E /* PINCache in Frameworks */,
37BD07B72698AB2E003EBB87 /* Defaults in Frameworks */,
@@ -1421,9 +1415,9 @@
3797104928D3D10600D5F53C /* SDWebImageSwiftUI in Frameworks */,
FA97174C2A494700001FF53D /* MPVKit in Frameworks */,
37BD07B92698AB2E003EBB87 /* Siesta in Frameworks */,
37BD07C72698B27B003EBB87 /* Introspect in Frameworks */,
37FB284D2722099E00A57617 /* SDWebImageWebPCoder in Frameworks */,
37CF8B8428535E4F00B71E37 /* SDWebImage in Frameworks */,
37C7367A2AC33010007630E1 /* SwiftUIIntrospect in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1434,12 +1428,12 @@
379325D729A265AE00181CF1 /* Logging in Frameworks */,
372AA414286D06A10000B1DC /* Repeat in Frameworks */,
37F7AB5228A94EB900FB46B5 /* IOKit.framework in Frameworks */,
379E7C362A2105B900AF8118 /* Introspect in Frameworks */,
3703205827D2BAE4007A0CB8 /* Siesta in Frameworks */,
3703206827D2BB45007A0CB8 /* Defaults in Frameworks */,
3703206A27D2BB49007A0CB8 /* Alamofire in Frameworks */,
374D11E72943C56300CB4350 /* Cache in Frameworks */,
3797104B28D3D18800D5F53C /* SDWebImageSwiftUI in Frameworks */,
37C736782AC32B28007630E1 /* SwiftUIIntrospect in Frameworks */,
3703206227D2BB1B007A0CB8 /* SDWebImagePINPlugin in Frameworks */,
371AC0B2294D1C230085989E /* CachedAsyncImage in Frameworks */,
3703206627D2BB35007A0CB8 /* PINCache in Frameworks */,
@@ -2280,7 +2274,6 @@
377FC7D4267A080300A6BBAF /* SwiftyJSON */,
37BD07B62698AB2E003EBB87 /* Defaults */,
37BD07B82698AB2E003EBB87 /* Siesta */,
37BD07C62698B27B003EBB87 /* Introspect */,
37BADCA42699FB72009BE4FB /* Alamofire */,
37FB284C2722099E00A57617 /* SDWebImageWebPCoder */,
37FB285527220D9000A57617 /* SDWebImagePINPlugin */,
@@ -2295,6 +2288,7 @@
371AC0AB294D1A490085989E /* CachedAsyncImage */,
379325D429A265A300181CF1 /* Logging */,
FA97174B2A494700001FF53D /* MPVKit */,
37C736792AC33010007630E1 /* SwiftUIIntrospect */,
);
productName = "Yattee (iOS)";
productReference = 37D4B0C92671614900C925CA /* Yattee.app */;
@@ -2332,8 +2326,8 @@
374D11E62943C56300CB4350 /* Cache */,
371AC0B1294D1C230085989E /* CachedAsyncImage */,
379325D629A265AE00181CF1 /* Logging */,
379E7C352A2105B900AF8118 /* Introspect */,
3704BDFE2ABF260C00370FF7 /* MPVKit */,
37C736772AC32B28007630E1 /* SwiftUIIntrospect */,
);
productName = "Yattee (macOS)";
productReference = 37D4B0CF2671614900C925CA /* Yattee.app */;
@@ -3673,7 +3667,7 @@
CODE_SIGN_ENTITLEMENTS = "Open in Yattee/Open in Yattee.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = "Open in Yattee";
@@ -3704,7 +3698,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "Open in Yattee/Info.plist";
@@ -3735,7 +3729,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -3755,7 +3749,7 @@
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
MACOSX_DEPLOYMENT_TARGET = 11.0;
@@ -3919,7 +3913,7 @@
CODE_SIGN_ENTITLEMENTS = "iOS/Yattee (iOS).entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
@@ -3972,7 +3966,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
GCC_PREPROCESSOR_DEFINITIONS = "GLES_SILENCE_DEPRECATION=1";
@@ -4024,7 +4018,7 @@
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEAD_CODE_STRIPPING = YES;
ENABLE_APP_SANDBOX = YES;
ENABLE_HARDENED_RUNTIME = YES;
@@ -4038,9 +4032,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
MACOSX_DEPLOYMENT_TARGET = 12.0;
MARKETING_VERSION = 1.5;
OTHER_LDFLAGS = "-Wl,-no_compact_unwind";
@@ -4065,7 +4057,7 @@
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "3rd Party Mac Developer Application";
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEAD_CODE_STRIPPING = YES;
"DEVELOPMENT_TEAM[sdk=macosx*]" = 78Z5H3M6RJ;
ENABLE_APP_SANDBOX = YES;
@@ -4080,9 +4072,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "$(inherited)";
MACOSX_DEPLOYMENT_TARGET = 12.0;
MARKETING_VERSION = 1.5;
OTHER_LDFLAGS = "-Wl,-no_compact_unwind";
@@ -4102,7 +4092,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4126,7 +4116,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4152,7 +4142,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4177,7 +4167,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEAD_CODE_STRIPPING = YES;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
@@ -4203,7 +4193,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEVELOPMENT_ASSET_PATHS = "";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
@@ -4243,7 +4233,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
"CODE_SIGN_IDENTITY[sdk=appletvos*]" = "iPhone Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
DEVELOPMENT_ASSET_PATHS = "";
"DEVELOPMENT_TEAM[sdk=appletvos*]" = 78Z5H3M6RJ;
ENABLE_PREVIEWS = YES;
@@ -4284,7 +4274,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -4308,7 +4298,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 161;
CURRENT_PROJECT_VERSION = 165;
GENERATE_INFOPLIST_FILE = YES;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@@ -4825,11 +4815,6 @@
package = 3799AC0728B03CEC001376F9 /* XCRemoteSwiftPackageReference "ActiveLabel.swift" */;
productName = ActiveLabel;
};
379E7C352A2105B900AF8118 /* Introspect */ = {
isa = XCSwiftPackageProductDependency;
package = 37BD07C52698B27B003EBB87 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */;
productName = Introspect;
};
37BADCA42699FB72009BE4FB /* Alamofire */ = {
isa = XCSwiftPackageProductDependency;
package = 37BADCA32699FB72009BE4FB /* XCRemoteSwiftPackageReference "Alamofire" */;
@@ -4850,10 +4835,15 @@
package = 3797757B268922D100DD52A8 /* XCRemoteSwiftPackageReference "siesta" */;
productName = Siesta;
};
37BD07C62698B27B003EBB87 /* Introspect */ = {
37C736772AC32B28007630E1 /* SwiftUIIntrospect */ = {
isa = XCSwiftPackageProductDependency;
package = 37BD07C52698B27B003EBB87 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */;
productName = Introspect;
productName = SwiftUIIntrospect;
};
37C736792AC33010007630E1 /* SwiftUIIntrospect */ = {
isa = XCSwiftPackageProductDependency;
package = 37BD07C52698B27B003EBB87 /* XCRemoteSwiftPackageReference "SwiftUI-Introspect" */;
productName = SwiftUIIntrospect;
};
37CF8B8328535E4F00B71E37 /* SDWebImage */ = {
isa = XCSwiftPackageProductDependency;

View File

@@ -105,7 +105,7 @@
"location" : "https://github.com/SDWebImage/SDWebImage",
"state" : {
"branch" : "master",
"revision" : "936f1c7067728d16c362ba4fb93c17df78b5fd79"
"revision" : "1f06ef5007b6a580b3873ed2adee19e05d3b215a"
}
},
{
@@ -131,8 +131,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/SDWebImage/SDWebImageWebPCoder.git",
"state" : {
"revision" : "3819cb70faa2454b54d8364779bfacd8c216a6e2",
"version" : "0.13.0"
"revision" : "b442fafefeee8d3f489e33e69e0bb9407deb4757",
"version" : "0.14.0"
}
},
{