From 486995b0cfdb98a313ad22f8c0d3e2e553ba3fe5 Mon Sep 17 00:00:00 2001 From: Joe Kribs Date: Tue, 31 Dec 2024 14:16:34 -0700 Subject: [PATCH 1/5] [iOS] Media Item Menu - Identify Media Item (#1369) * WIP * All item types. * V2: Functionally better. UI still weird * Rework! * Organization, new LoadingIcon, remove unnecessary components, and standardize: CancellableLoadingButton * Organization & Static Method Re-Use. * wip * fix tvOS * wip * localize * Update RemoteSearchResultRow.swift * Update Localizable.strings * Update RemoteSearchResultRow.swift --------- Co-authored-by: Ethan Pippin --- .../Coordinators/ItemEditorCoordinator.swift | 7 + .../JellyfinAPI/RemoteSearchResult.swift | 56 +++++ Shared/Extensions/Optional.swift | 4 + Shared/Extensions/String.swift | 8 + Shared/Extensions/URL.swift | 8 + Shared/Services/Notifications.swift | 5 +- Shared/Strings/Strings.swift | 12 + .../IdentifyItemViewModel.swift | 224 ++++++++++++++++++ .../ItemViewModel/ItemViewModel.swift | 19 +- Swiftfin.xcodeproj/project.pbxproj | 52 +++- Swiftfin/Components/ListRowButton.swift | 16 +- .../Components/RemoteSearchResultRow.swift | 56 +++++ .../Components/RemoteSearchResultView.swift | 107 +++++++++ .../IdentifyItemView/IdentifyItemView.swift | 191 +++++++++++++++ .../Views/ItemEditorView/ItemEditorView.swift | 6 + .../AddItemElementView.swift | 0 .../Components/NameInput.swift | 0 .../Components/SearchResultsSection.swift | 0 .../Components/EditItemElementRow.swift | 0 .../EditItemElementView.swift | 0 .../Components/AboutView/AboutView.swift | 23 +- Swiftfin/Views/ItemView/ItemView.swift | 2 +- Translations/en.lproj/Localizable.strings | 15 +- 23 files changed, 779 insertions(+), 32 deletions(-) create mode 100644 Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift create mode 100644 Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift create mode 100644 Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift rename Swiftfin/Views/ItemEditorView/{ => ItemElements}/AddItemElementView/AddItemElementView.swift (100%) rename Swiftfin/Views/ItemEditorView/{ => ItemElements}/AddItemElementView/Components/NameInput.swift (100%) rename Swiftfin/Views/ItemEditorView/{ => ItemElements}/AddItemElementView/Components/SearchResultsSection.swift (100%) rename Swiftfin/Views/ItemEditorView/{ => ItemElements}/EditItemElementView/Components/EditItemElementRow.swift (100%) rename Swiftfin/Views/ItemEditorView/{ => ItemElements}/EditItemElementView/EditItemElementView.swift (100%) diff --git a/Shared/Coordinators/ItemEditorCoordinator.swift b/Shared/Coordinators/ItemEditorCoordinator.swift index 37e698eac..930f6bfe0 100644 --- a/Shared/Coordinators/ItemEditorCoordinator.swift +++ b/Shared/Coordinators/ItemEditorCoordinator.swift @@ -21,6 +21,8 @@ final class ItemEditorCoordinator: ObservableObject, NavigationCoordinatable { // MARK: - Route to Metadata + @Route(.push) + var identifyItem = makeIdentifyItem @Route(.modal) var editMetadata = makeEditMetadata @@ -60,6 +62,11 @@ final class ItemEditorCoordinator: ObservableObject, NavigationCoordinatable { // MARK: - Item Metadata + @ViewBuilder + func makeIdentifyItem(item: BaseItemDto) -> some View { + IdentifyItemView(item: item) + } + func makeEditMetadata(item: BaseItemDto) -> NavigationViewCoordinator { NavigationViewCoordinator { EditMetadataView(viewModel: ItemEditorViewModel(item: item)) diff --git a/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift b/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift new file mode 100644 index 000000000..9ea81b501 --- /dev/null +++ b/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import Foundation +import JellyfinAPI +import SwiftUI + +extension RemoteSearchResult: Displayable { + + var displayTitle: String { + name ?? L10n.unknown + } +} + +// TODO: fix in SDK, should already be equatable +extension RemoteSearchResult: @retroactive Hashable, @retroactive Identifiable { + + public var id: Int { + hashValue + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(albumArtist) + hasher.combine(artists) + hasher.combine(imageURL) + hasher.combine(indexNumber) + hasher.combine(indexNumberEnd) + hasher.combine(name) + hasher.combine(overview) + hasher.combine(parentIndexNumber) + hasher.combine(premiereDate) + hasher.combine(productionYear) + hasher.combine(providerIDs) + hasher.combine(searchProviderName) + } + + public static func == (lhs: RemoteSearchResult, rhs: RemoteSearchResult) -> Bool { + lhs.albumArtist == rhs.albumArtist && + lhs.artists == rhs.artists && + lhs.imageURL == rhs.imageURL && + lhs.indexNumber == rhs.indexNumber && + lhs.indexNumberEnd == rhs.indexNumberEnd && + lhs.name == rhs.name && + lhs.overview == rhs.overview && + lhs.parentIndexNumber == rhs.parentIndexNumber && + lhs.premiereDate == rhs.premiereDate && + lhs.productionYear == rhs.productionYear && + lhs.providerIDs == rhs.providerIDs && + lhs.searchProviderName == rhs.searchProviderName + } +} diff --git a/Shared/Extensions/Optional.swift b/Shared/Extensions/Optional.swift index fff501843..82234f9a5 100644 --- a/Shared/Extensions/Optional.swift +++ b/Shared/Extensions/Optional.swift @@ -10,6 +10,10 @@ import Foundation extension Optional where Wrapped: Collection { + var isNilOrEmpty: Bool { + self?.isEmpty ?? true + } + mutating func appendedOrInit(_ element: Wrapped.Element) -> [Wrapped.Element] { if let self { return self + [element] diff --git a/Shared/Extensions/String.swift b/Shared/Extensions/String.swift index a19d80791..cffd79c2e 100644 --- a/Shared/Extensions/String.swift +++ b/Shared/Extensions/String.swift @@ -35,6 +35,14 @@ extension String { self + String(element) } + func appending(_ element: @autoclosure () -> String, if condition: Bool) -> String { + if condition { + return self + element() + } else { + return self + } + } + func prepending(_ element: String) -> String { element + self } diff --git a/Shared/Extensions/URL.swift b/Shared/Extensions/URL.swift index 8802c353c..e11a938e3 100644 --- a/Shared/Extensions/URL.swift +++ b/Shared/Extensions/URL.swift @@ -15,6 +15,14 @@ extension URL: Identifiable { } } +extension URL { + + init?(string: String?) { + guard let string = string else { return nil } + self.init(string: string) + } +} + extension URL { static var documents: URL { diff --git a/Shared/Services/Notifications.swift b/Shared/Services/Notifications.swift index 003287fec..35794ff95 100644 --- a/Shared/Services/Notifications.swift +++ b/Shared/Services/Notifications.swift @@ -124,12 +124,15 @@ extension Notifications.Key { // MARK: - Media Items + // TODO: come up with a cleaner, more defined way for item update notifications + /// - Payload: The new item with updated metadata. static var itemMetadataDidChange: Key { Key("itemMetadataDidChange") } - static var itemShouldRefresh: Key<(itemID: String, parentID: String?)> { + /// - Payload: The ID of the item that should refresh + static var itemShouldRefreshMetadata: Key { Key("itemShouldRefresh") } diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index 862150a06..9d0726798 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -106,6 +106,8 @@ internal enum L10n { internal static let appIcon = L10n.tr("Localizable", "appIcon", fallback: "App Icon") /// Application Name internal static let applicationName = L10n.tr("Localizable", "applicationName", fallback: "Application Name") + /// Applying media information + internal static let applyingMediaInformation = L10n.tr("Localizable", "applyingMediaInformation", fallback: "Applying media information") /// Arranger internal static let arranger = L10n.tr("Localizable", "arranger", fallback: "Arranger") /// Artist @@ -602,6 +604,10 @@ internal enum L10n { internal static let home = L10n.tr("Localizable", "home", fallback: "Home") /// Hours internal static let hours = L10n.tr("Localizable", "hours", fallback: "Hours") + /// ID + internal static let id = L10n.tr("Localizable", "id", fallback: "ID") + /// Identify + internal static let identify = L10n.tr("Localizable", "identify", fallback: "Identify") /// Idle internal static let idle = L10n.tr("Localizable", "idle", fallback: "Idle") /// Illustrator @@ -906,6 +912,8 @@ internal enum L10n { internal static let production = L10n.tr("Localizable", "production", fallback: "Production") /// Production Locations internal static let productionLocations = L10n.tr("Localizable", "productionLocations", fallback: "Production Locations") + /// Production Year + internal static let productionYear = L10n.tr("Localizable", "productionYear", fallback: "Production Year") /// Profile Image internal static let profileImage = L10n.tr("Localizable", "profileImage", fallback: "Profile Image") /// Profiles @@ -914,6 +922,8 @@ internal enum L10n { internal static let programs = L10n.tr("Localizable", "programs", fallback: "Programs") /// Progress internal static let progress = L10n.tr("Localizable", "progress", fallback: "Progress") + /// Provider + internal static let provider = L10n.tr("Localizable", "provider", fallback: "Provider") /// Public Users internal static let publicUsers = L10n.tr("Localizable", "publicUsers", fallback: "Public Users") /// Quick Connect @@ -1298,6 +1308,8 @@ internal enum L10n { internal static let unsavedChangesMessage = L10n.tr("Localizable", "unsavedChangesMessage", fallback: "You have unsaved changes. Are you sure you want to discard them?") /// URL internal static let url = L10n.tr("Localizable", "url", fallback: "URL") + /// Use as item + internal static let useAsItem = L10n.tr("Localizable", "useAsItem", fallback: "Use as item") /// Use as Transcoding Profile internal static let useAsTranscodingProfile = L10n.tr("Localizable", "useAsTranscodingProfile", fallback: "Use as Transcoding Profile") /// Use Primary Image diff --git a/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift b/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift new file mode 100644 index 000000000..55e3419bb --- /dev/null +++ b/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift @@ -0,0 +1,224 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import Combine +import Foundation +import Get +import JellyfinAPI +import OrderedCollections + +class IdentifyItemViewModel: ViewModel, Stateful, Eventful { + + // MARK: - Events + + enum Event: Equatable { + case updated + case cancelled + case error(JellyfinAPIError) + } + + // MARK: - Actions + + enum Action: Equatable { + case cancel + case search(name: String? = nil, originalTitle: String? = nil, year: Int? = nil) + case update(RemoteSearchResult) + } + + // MARK: - State + + enum State: Hashable { + case content + case searching + case updating + } + + @Published + var item: BaseItemDto + @Published + var searchResults: [RemoteSearchResult] = [] + @Published + var state: State = .content + + private var updateTask: AnyCancellable? + private var searchTask: AnyCancellable? + + private let eventSubject = PassthroughSubject() + + var events: AnyPublisher { + eventSubject + .receive(on: RunLoop.main) + .eraseToAnyPublisher() + } + + // MARK: - Initializer + + init(item: BaseItemDto) { + self.item = item + super.init() + } + + // MARK: - Respond to Actions + + func respond(to action: Action) -> State { + switch action { + + case .cancel: + updateTask?.cancel() + searchTask?.cancel() + + return .content + + case let .search(name, originalTitle, year): + searchTask?.cancel() + + searchTask = Task { + do { + let newResults = try await self.searchItem( + name: name, + originalTitle: originalTitle, + year: year + ) + + await MainActor.run { + self.searchResults = newResults + self.state = .content + } + } catch { + let apiError = JellyfinAPIError(error.localizedDescription) + await MainActor.run { + self.state = .content + self.eventSubject.send(.error(apiError)) + } + } + }.asAnyCancellable() + return .searching + + case let .update(searchResult): + updateTask?.cancel() + + updateTask = Task { + do { + try await updateItem(searchResult) + + await MainActor.run { + self.state = .content + self.eventSubject.send(.updated) + } + } catch { + let apiError = JellyfinAPIError(error.localizedDescription) + await MainActor.run { + self.state = .content + self.eventSubject.send(.error(apiError)) + } + } + }.asAnyCancellable() + + return .updating + } + } + + // MARK: - Return Matching Elements (To Be Overridden) + + private func searchItem( + name: String?, + originalTitle: String?, + year: Int? + ) async throws -> [RemoteSearchResult] { + + guard let itemID = item.id, let itemType = item.type else { + return [] + } + + switch itemType { + case .boxSet: + let parameters = BoxSetInfoRemoteSearchQuery( + itemID: itemID, + searchInfo: BoxSetInfo( + name: name, + originalTitle: originalTitle, + year: year + ) + ) + let request = Paths.getBoxSetRemoteSearchResults(parameters) + let response = try await userSession.client.send(request) + + return response.value + + case .movie: + let parameters = MovieInfoRemoteSearchQuery( + itemID: itemID, + searchInfo: MovieInfo( + name: name, + originalTitle: originalTitle, + year: year + ) + ) + let request = Paths.getMovieRemoteSearchResults(parameters) + let response = try await userSession.client.send(request) + + return response.value + + case .person: + let parameters = PersonLookupInfoRemoteSearchQuery( + itemID: itemID, + searchInfo: PersonLookupInfo( + name: name, + originalTitle: originalTitle, + year: year + ) + ) + let request = Paths.getPersonRemoteSearchResults(parameters) + let response = try await userSession.client.send(request) + + return response.value + + case .series: + let parameters = SeriesInfoRemoteSearchQuery( + itemID: itemID, + searchInfo: SeriesInfo( + name: name, + originalTitle: originalTitle, + year: year + ) + ) + let request = Paths.getSeriesRemoteSearchResults(parameters) + let response = try await userSession.client.send(request) + + return response.value + + default: + return [] + } + } + + // MARK: - Save Updated Item to Server + + private func updateItem(_ match: RemoteSearchResult) async throws { + guard let itemID = item.id else { return } + + let request = Paths.applySearchCriteria(itemID: itemID, match) + _ = try await userSession.client.send(request) + + try await refreshItem() + } + + // MARK: - Refresh Item + + private func refreshItem() async throws { + guard let itemID = item.id else { return } + + let request = Paths.getItem(userID: userSession.user.id, itemID: itemID) + let response = try await userSession.client.send(request) + + await MainActor.run { + self.item = response.value + Notifications[.itemShouldRefreshMetadata].post(itemID) + } + } +} diff --git a/Shared/ViewModels/ItemViewModel/ItemViewModel.swift b/Shared/ViewModels/ItemViewModel/ItemViewModel.swift index cebab7706..80dc78553 100644 --- a/Shared/ViewModels/ItemViewModel/ItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/ItemViewModel.swift @@ -14,6 +14,8 @@ import JellyfinAPI import OrderedCollections import UIKit +// TODO: come up with a cleaner, more defined way for item update notifications + class ItemViewModel: ViewModel, Stateful { // MARK: Action @@ -89,10 +91,10 @@ class ItemViewModel: ViewModel, Stateful { self.item = item super.init() - Notifications[.itemShouldRefresh] + Notifications[.itemShouldRefreshMetadata] .publisher - .sink { itemID, parentID in - guard itemID == self.item.id || parentID == self.item.id else { return } + .sink { itemID in + guard itemID == self.item.id else { return } Task { await self.send(.backgroundRefresh) @@ -141,9 +143,16 @@ class ItemViewModel: ViewModel, Stateful { await MainActor.run { self.backgroundStates.remove(.refresh) - self.item = results.fullItem + + // see TODO, as the item will be set in + // itemMetadataDidChange notification but + // is a bit redundant +// self.item = results.fullItem + self.similarItems = results.similarItems self.specialFeatures = results.specialFeatures + + Notifications[.itemMetadataDidChange].post(results.fullItem) } } catch { guard !Task.isCancelled else { return } @@ -332,7 +341,7 @@ class ItemViewModel: ViewModel, Stateful { } let _ = try await userSession.client.send(request) - Notifications[.itemShouldRefresh].post((itemID, nil)) + Notifications[.itemShouldRefreshMetadata].post(itemID) } private func setIsFavorite(_ isFavorite: Bool) async throws { diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj index 38ad6ae09..1a053995f 100644 --- a/Swiftfin.xcodeproj/project.pbxproj +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -216,6 +216,13 @@ 4EE07CBB2D08B19700B0B636 /* ErrorMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE07CBA2D08B19100B0B636 /* ErrorMessage.swift */; }; 4EE07CBC2D08B19700B0B636 /* ErrorMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE07CBA2D08B19100B0B636 /* ErrorMessage.swift */; }; 4EE141692C8BABDF0045B661 /* ActiveSessionProgressSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE141682C8BABDF0045B661 /* ActiveSessionProgressSection.swift */; }; + 4EE766F52D131FBC009658F0 /* IdentifyItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE766F42D131FB7009658F0 /* IdentifyItemView.swift */; }; + 4EE766F72D132054009658F0 /* IdentifyItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE766F62D132043009658F0 /* IdentifyItemViewModel.swift */; }; + 4EE766F82D132054009658F0 /* IdentifyItemViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE766F62D132043009658F0 /* IdentifyItemViewModel.swift */; }; + 4EE766FA2D132954009658F0 /* RemoteSearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE766F92D13294F009658F0 /* RemoteSearchResult.swift */; }; + 4EE766FB2D132954009658F0 /* RemoteSearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE766F92D13294F009658F0 /* RemoteSearchResult.swift */; }; + 4EE767082D13403F009658F0 /* RemoteSearchResultRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE767072D134020009658F0 /* RemoteSearchResultRow.swift */; }; + 4EE7670A2D135CBA009658F0 /* RemoteSearchResultView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE767092D135CAC009658F0 /* RemoteSearchResultView.swift */; }; 4EED874A2CBF824B002354D2 /* DeviceRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED87462CBF824B002354D2 /* DeviceRow.swift */; }; 4EED874B2CBF824B002354D2 /* DevicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED87482CBF824B002354D2 /* DevicesView.swift */; }; 4EED87512CBF84AD002354D2 /* DevicesViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EED874F2CBF84AD002354D2 /* DevicesViewModel.swift */; }; @@ -1339,6 +1346,11 @@ 4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionInfo.swift; sourceTree = ""; }; 4EE07CBA2D08B19100B0B636 /* ErrorMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorMessage.swift; sourceTree = ""; }; 4EE141682C8BABDF0045B661 /* ActiveSessionProgressSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveSessionProgressSection.swift; sourceTree = ""; }; + 4EE766F42D131FB7009658F0 /* IdentifyItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentifyItemView.swift; sourceTree = ""; }; + 4EE766F62D132043009658F0 /* IdentifyItemViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IdentifyItemViewModel.swift; sourceTree = ""; }; + 4EE766F92D13294F009658F0 /* RemoteSearchResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteSearchResult.swift; sourceTree = ""; }; + 4EE767072D134020009658F0 /* RemoteSearchResultRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteSearchResultRow.swift; sourceTree = ""; }; + 4EE767092D135CAC009658F0 /* RemoteSearchResultView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemoteSearchResultView.swift; sourceTree = ""; }; 4EED87462CBF824B002354D2 /* DeviceRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceRow.swift; sourceTree = ""; }; 4EED87482CBF824B002354D2 /* DevicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DevicesView.swift; sourceTree = ""; }; 4EED874F2CBF84AD002354D2 /* DevicesViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DevicesViewModel.swift; sourceTree = ""; }; @@ -2245,6 +2257,15 @@ path = ServerLogsView; sourceTree = ""; }; + 4E3766192D2144BA00C5D7A5 /* ItemElements */ = { + isa = PBXGroup; + children = ( + 4E5071E22CFCEFC3003FA2AD /* AddItemElementView */, + 4E31EFA22CFFFB410053DFE7 /* EditItemElementView */, + ); + path = ItemElements; + sourceTree = ""; + }; 4E3A785D2C3B87A400D33C11 /* PlaybackBitrate */ = { isa = PBXGroup; children = ( @@ -2489,11 +2510,11 @@ 4E8F74A32CE03D3100CC8969 /* ItemEditorView */ = { isa = PBXGroup; children = ( - 4E5071E22CFCEFC3003FA2AD /* AddItemElementView */, 4E8F74A62CE03D4C00CC8969 /* Components */, - 4E31EFA22CFFFB410053DFE7 /* EditItemElementView */, 4E6619FF2CEFE39000025C99 /* EditMetadataView */, + 4EE766F32D131F6E009658F0 /* IdentifyItemView */, 4E8F74A42CE03D3800CC8969 /* ItemEditorView.swift */, + 4E3766192D2144BA00C5D7A5 /* ItemElements */, ); path = ItemEditorView; sourceTree = ""; @@ -2511,6 +2532,7 @@ children = ( 4E8F74AA2CE03DC600CC8969 /* DeleteItemViewModel.swift */, 4E5071D52CFCEB03003FA2AD /* ItemEditorViewModel */, + 4EE766F62D132043009658F0 /* IdentifyItemViewModel.swift */, 4E8F74B02CE03EAF00CC8969 /* RefreshMetadataViewModel.swift */, ); path = ItemAdministration; @@ -2768,6 +2790,24 @@ path = EditAccessScheduleView; sourceTree = ""; }; + 4EE766F32D131F6E009658F0 /* IdentifyItemView */ = { + isa = PBXGroup; + children = ( + 4EE767062D13401C009658F0 /* Components */, + 4EE766F42D131FB7009658F0 /* IdentifyItemView.swift */, + ); + path = IdentifyItemView; + sourceTree = ""; + }; + 4EE767062D13401C009658F0 /* Components */ = { + isa = PBXGroup; + children = ( + 4EE767092D135CAC009658F0 /* RemoteSearchResultView.swift */, + 4EE767072D134020009658F0 /* RemoteSearchResultRow.swift */, + ); + path = Components; + sourceTree = ""; + }; 4EED87472CBF824B002354D2 /* Components */ = { isa = PBXGroup; children = ( @@ -4389,6 +4429,7 @@ 4EFE0C7C2D0156A500D4834D /* PersonKind.swift */, E1ED7FDA2CAA4B6D00ACB6E3 /* PlayerStateInfo.swift */, 4E2182E42CAF67EF0094806B /* PlayMethod.swift */, + 4EE766F92D13294F009658F0 /* RemoteSearchResult.swift */, 4E35CE652CBED8B300DBD886 /* ServerTicks.swift */, 4EB4ECE22CBEFC49002FF2FC /* SessionInfo.swift */, 4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */, @@ -5170,6 +5211,7 @@ 4E98F7D22D123AD4001E7518 /* NavigationBarMenuButton.swift in Sources */, 4E98F7D32D123AD4001E7518 /* View-tvOS.swift in Sources */, C46DD8EF2A8FB56E0046A504 /* LiveBottomBarView.swift in Sources */, + 4EE766FB2D132954009658F0 /* RemoteSearchResult.swift in Sources */, C46DD8EA2A8FB45C0046A504 /* LiveOverlay.swift in Sources */, E11E376D293E9CC1009EF240 /* VideoPlayerCoordinator.swift in Sources */, E1575E6F293E77B5001665B1 /* GestureAction.swift in Sources */, @@ -5261,6 +5303,7 @@ E1A7F0E02BD4EC7400620DDD /* Dictionary.swift in Sources */, E1CAF6602BA345830087D991 /* MediaViewModel.swift in Sources */, E19D41A82BEEDC5F0082B8B2 /* UserLocalSecurityViewModel.swift in Sources */, + 4EE766F82D132054009658F0 /* IdentifyItemViewModel.swift in Sources */, E111D8FA28D0400900400001 /* PagingLibraryView.swift in Sources */, E1EA9F6B28F8A79E00BEC442 /* VideoPlayerManager.swift in Sources */, BD0BA22F2AD6508C00306A8D /* DownloadVideoPlayerManager.swift in Sources */, @@ -5676,6 +5719,7 @@ 4E661A102CEFE46300025C99 /* TitleSection.swift in Sources */, 4E661A112CEFE46300025C99 /* LockMetadataSection.swift in Sources */, 4E661A122CEFE46300025C99 /* MediaFormatSection.swift in Sources */, + 4EE766F52D131FBC009658F0 /* IdentifyItemView.swift in Sources */, 4E661A132CEFE46300025C99 /* EpisodeSection.swift in Sources */, 4E661A142CEFE46300025C99 /* DisplayOrderSection.swift in Sources */, 4E661A152CEFE46300025C99 /* LocalizationSection.swift in Sources */, @@ -5686,6 +5730,7 @@ E1A3E4CD2BB7D8C8005C59F8 /* Label-iOS.swift in Sources */, E13DD3EC27178A54009D4DAF /* UserSignInViewModel.swift in Sources */, E12CC1BE28D11F4500678D5D /* RecentlyAddedView.swift in Sources */, + 4EE767082D13403F009658F0 /* RemoteSearchResultRow.swift in Sources */, E1ED7FD92CA8AF7400ACB6E3 /* ServerTaskObserver.swift in Sources */, E17AC96A2954D00E003D2BC2 /* URLResponse.swift in Sources */, 4EB538C52CE3E25700EB72D5 /* ExternalAccessSection.swift in Sources */, @@ -5709,6 +5754,7 @@ E111D8F828D03BF900400001 /* PagingLibraryView.swift in Sources */, E187F7672B8E6A1C005400FE /* EnvironmentValue+Values.swift in Sources */, 4E10C8172CC0455A0012CC9F /* CompatibilitiesSection.swift in Sources */, + 4EE7670A2D135CBA009658F0 /* RemoteSearchResultView.swift in Sources */, E1FA891B289A302300176FEB /* iPadOSCollectionItemView.swift in Sources */, E14E9DF12BCF7A99004E3371 /* ItemLetter.swift in Sources */, E1B5861229E32EEF00E45D6E /* Sequence.swift in Sources */, @@ -6087,6 +6133,7 @@ E1AD105F26D9ADDD003E4A08 /* NameGuidPair.swift in Sources */, 4E556AB02D036F6900733377 /* UserPermissions.swift in Sources */, E18A8E7D28D606BE00333B9A /* BaseItemDto+VideoPlayerViewModel.swift in Sources */, + 4EE766F72D132054009658F0 /* IdentifyItemViewModel.swift in Sources */, 4EC2B19B2CC96E7400D866BE /* ServerUsersView.swift in Sources */, E18E01F1288747230022598C /* PlayButton.swift in Sources */, E129429028F0BDC300796AC6 /* TimeStampType.swift in Sources */, @@ -6107,6 +6154,7 @@ E1E5D54C2783E27200692DFE /* ExperimentalSettingsView.swift in Sources */, E111D8F528D03B7500400001 /* PagingLibraryViewModel.swift in Sources */, E16AF11C292C98A7001422A8 /* GestureSettingsView.swift in Sources */, + 4EE766FA2D132954009658F0 /* RemoteSearchResult.swift in Sources */, E1581E27291EF59800D6C640 /* SplitContentView.swift in Sources */, C46DD8DC2A8DC3420046A504 /* LiveVideoPlayer.swift in Sources */, E11BDF972B865F550045C54A /* ItemTag.swift in Sources */, diff --git a/Swiftfin/Components/ListRowButton.swift b/Swiftfin/Components/ListRowButton.swift index da110b833..ebd108133 100644 --- a/Swiftfin/Components/ListRowButton.swift +++ b/Swiftfin/Components/ListRowButton.swift @@ -22,21 +22,23 @@ struct ListRowButton: View { } var body: some View { - Button(title) { - action() - } - .font(.body.weight(.bold)) - .buttonStyle(ListRowButtonStyle()) - .listRowInsets(.init(.zero)) + Button(title, action: action) + .font(.body.weight(.bold)) + .buttonStyle(ListRowButtonStyle()) + .listRowInsets(.init(.zero)) } } +// TODO: implement `role` private struct ListRowButtonStyle: ButtonStyle { + @Environment(\.isEnabled) + private var isEnabled + func makeBody(configuration: Configuration) -> some View { ZStack { Rectangle() - .foregroundStyle(.secondary) + .foregroundStyle(isEnabled ? AnyShapeStyle(HierarchicalShapeStyle.secondary) : AnyShapeStyle(Color.gray)) configuration.label .foregroundStyle(.primary) diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift new file mode 100644 index 000000000..11edd4665 --- /dev/null +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift @@ -0,0 +1,56 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import Combine +import JellyfinAPI +import SwiftUI + +extension IdentifyItemView { + + struct RemoteSearchResultRow: View { + + // MARK: - Remote Search Result Variable + + let result: RemoteSearchResult + + // MARK: - Remote Search Result Action + + let onSelect: () -> Void + + // MARK: - Result Title + + private var resultTitle: String { + result.displayTitle + .appending(" (\(result.premiereDate!.formatted(.dateTime.year())))", if: result.premiereDate != nil) + } + + // MARK: - Body + + var body: some View { + ListRow { + IdentifyItemView.resultImage(URL(string: result.imageURL)) + .frame(width: 60) + } content: { + VStack(alignment: .leading) { + Text(resultTitle) + .font(.headline) + .foregroundStyle(.primary) + + if let overview = result.overview { + Text(overview) + .lineLimit(3) + .font(.subheadline) + .foregroundStyle(.secondary) + } + } + } + .onSelect(perform: onSelect) + .isSeparatorVisible(false) + } + } +} diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift new file mode 100644 index 000000000..a08c49a14 --- /dev/null +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift @@ -0,0 +1,107 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension IdentifyItemView { + + struct RemoteSearchResultView: View { + + // MARK: - Item Info Variables + + let result: RemoteSearchResult + + // MARK: - Item Info Actions + + let onSave: () -> Void + let onClose: () -> Void + + // MARK: - Body + + @ViewBuilder + private var header: some View { + Section { + HStack(alignment: .bottom, spacing: 12) { + IdentifyItemView.resultImage(URL(string: result.imageURL)) + .frame(width: 100) + .accessibilityIgnoresInvertColors() + + Text(result.displayTitle) + .font(.title2) + .fontWeight(.semibold) + .foregroundStyle(.primary) + .lineLimit(2) + .padding(.bottom) + } + } + .listRowBackground(Color.clear) + .listRowCornerRadius(0) + .listRowInsets(.zero) + } + + @ViewBuilder + private var resultDetails: some View { + Section(L10n.details) { + + if let premiereDate = result.premiereDate { + TextPairView( + L10n.premiereDate, + value: Text(premiereDate.formatted(.dateTime.year().month().day())) + ) + } + + if let productionYear = result.productionYear { + TextPairView( + L10n.productionYear, + value: Text(productionYear, format: .number.grouping(.never)) + ) + } + + if let provider = result.searchProviderName { + TextPairView( + leading: L10n.provider, + trailing: provider + ) + } + + if let providerID = result.providerIDs?.values.first { + TextPairView( + leading: L10n.id, + trailing: providerID + ) + } + } + + if let overview = result.overview { + Section(L10n.overview) { + Text(overview) + } + } + } + + var body: some View { + NavigationView { + List { + header + + resultDetails + } + .navigationTitle(L10n.identify) + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton { + onClose() + } + .topBarTrailing { + Button(L10n.save, action: onSave) + .buttonStyle(.toolbarPill) + } + } + } + } +} diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift new file mode 100644 index 000000000..3f61017da --- /dev/null +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift @@ -0,0 +1,191 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import JellyfinAPI +import SwiftUI + +struct IdentifyItemView: View { + + private struct SearchFields: Equatable { + var name: String? + var originalTitle: String? + var year: Int? + + var isEmpty: Bool { + name.isNilOrEmpty && + originalTitle.isNilOrEmpty && + year == nil + } + } + + @Default(.accentColor) + private var accentColor + + @FocusState + private var isTitleFocused: Bool + + // MARK: - Observed & Environment Objects + + @EnvironmentObject + private var router: ItemEditorCoordinator.Router + + @StateObject + private var viewModel: IdentifyItemViewModel + + // MARK: - Identity Variables + + @State + private var selectedResult: RemoteSearchResult? + + // MARK: - Error State + + @State + private var error: Error? + + // MARK: - Lookup States + + @State + private var search = SearchFields() + + // MARK: - Initializer + + init(item: BaseItemDto) { + self._viewModel = StateObject(wrappedValue: IdentifyItemViewModel(item: item)) + } + + // MARK: - Body + + var body: some View { + Group { + switch viewModel.state { + case .content, .searching: + contentView + case .updating: + ProgressView() + } + } + .navigationTitle(L10n.identify) + .navigationBarTitleDisplayMode(.inline) + .navigationBarBackButtonHidden(viewModel.state == .updating) + .sheet(item: $selectedResult) { result in + RemoteSearchResultView(result: result) { + selectedResult = nil + viewModel.send(.update(result)) + } onClose: { + selectedResult = nil + } + } + .onReceive(viewModel.events) { events in + switch events { + case let .error(eventError): + error = eventError + case .cancelled: + selectedResult = nil + case .updated: + router.pop() + } + } + .errorMessage($error) + .onFirstAppear { + isTitleFocused = true + } + } + + // MARK: - Content View + + @ViewBuilder + private var contentView: some View { + Form { + searchView + + resultsView + } + } + + // MARK: - Search View + + @ViewBuilder + private var searchView: some View { + Section(L10n.search) { + TextField( + L10n.title, + text: $search.name.coalesce("") + ) + .focused($isTitleFocused) + + TextField( + L10n.originalTitle, + text: $search.originalTitle.coalesce("") + ) + + TextField( + L10n.year, + text: $search.year + .map( + getter: { $0 == nil ? "" : "\($0!)" }, + setter: { Int($0) } + ) + ) + .keyboardType(.numberPad) + } + + if viewModel.state == .searching { + ListRowButton(L10n.cancel) { + viewModel.send(.cancel) + } + .foregroundStyle(.red, .red.opacity(0.2)) + } else { + ListRowButton(L10n.search) { + viewModel.send(.search( + name: search.name, + originalTitle: search.originalTitle, + year: search.year + )) + } + .disabled(search.isEmpty) + .foregroundStyle( + accentColor.overlayColor, + accentColor + ) + } + } + + // MARK: - Results View + + @ViewBuilder + private var resultsView: some View { + if viewModel.searchResults.isNotEmpty { + Section(L10n.items) { + ForEach(viewModel.searchResults) { result in + RemoteSearchResultRow(result: result) { + selectedResult = result + } + } + } + } + } + + // MARK: - Result Image + + @ViewBuilder + static func resultImage(_ url: URL?) -> some View { + ZStack { + Color.clear + + ImageView(url) + .failure { + Image(systemName: "questionmark") + .foregroundStyle(.primary) + } + } + .posterStyle(.portrait) + .posterShadow() + } +} diff --git a/Swiftfin/Views/ItemEditorView/ItemEditorView.swift b/Swiftfin/Views/ItemEditorView/ItemEditorView.swift index f926dd576..01cd7ee7f 100644 --- a/Swiftfin/Views/ItemEditorView/ItemEditorView.swift +++ b/Swiftfin/Views/ItemEditorView/ItemEditorView.swift @@ -98,6 +98,12 @@ struct ItemEditorView: View { @ViewBuilder private var editView: some View { Section(L10n.edit) { + if [.boxSet, .movie, .person, .series].contains(viewModel.item.type) { + ChevronButton(L10n.identify) + .onSelect { + router.route(to: \.identifyItem, viewModel.item) + } + } ChevronButton(L10n.metadata) .onSelect { router.route(to: \.editMetadata, viewModel.item) diff --git a/Swiftfin/Views/ItemEditorView/AddItemElementView/AddItemElementView.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift similarity index 100% rename from Swiftfin/Views/ItemEditorView/AddItemElementView/AddItemElementView.swift rename to Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift diff --git a/Swiftfin/Views/ItemEditorView/AddItemElementView/Components/NameInput.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift similarity index 100% rename from Swiftfin/Views/ItemEditorView/AddItemElementView/Components/NameInput.swift rename to Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift diff --git a/Swiftfin/Views/ItemEditorView/AddItemElementView/Components/SearchResultsSection.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift similarity index 100% rename from Swiftfin/Views/ItemEditorView/AddItemElementView/Components/SearchResultsSection.swift rename to Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift diff --git a/Swiftfin/Views/ItemEditorView/EditItemElementView/Components/EditItemElementRow.swift b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift similarity index 100% rename from Swiftfin/Views/ItemEditorView/EditItemElementView/Components/EditItemElementRow.swift rename to Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift diff --git a/Swiftfin/Views/ItemEditorView/EditItemElementView/EditItemElementView.swift b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift similarity index 100% rename from Swiftfin/Views/ItemEditorView/EditItemElementView/EditItemElementView.swift rename to Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift diff --git a/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift b/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift index f3bfcb06a..78ba39dce 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift @@ -8,8 +8,8 @@ import CollectionHStack import Defaults +import IdentifiedCollections import JellyfinAPI -import OrderedCollections import SwiftUI // TODO: rename `AboutItemView` @@ -22,8 +22,7 @@ extension ItemView { struct AboutView: View { - private enum AboutViewItem: Hashable, Identifiable { - + private enum AboutViewItem: Identifiable { case image case overview case mediaSource(MediaSourceInfo) @@ -43,21 +42,14 @@ extension ItemView { } } - @Default(.accentColor) - private var accentColor - @ObservedObject var viewModel: ItemViewModel @State private var contentSize: CGSize = .zero - @State - private var items: OrderedSet - - init(viewModel: ItemViewModel) { - self.viewModel = viewModel - var items: OrderedSet = [ + private var items: [AboutViewItem] { + var items: [AboutViewItem] = [ .image, .overview, ] @@ -70,7 +62,11 @@ extension ItemView { items.append(.ratings) } - self._items = State(initialValue: items) + return items + } + + init(viewModel: ItemViewModel) { + self.viewModel = viewModel } // TODO: break out into a general solution for general use? @@ -161,6 +157,7 @@ extension ItemView { .scrollBehavior(.continuousLeadingEdge) } .trackingSize($contentSize) + .id(viewModel.item.hashValue) } } } diff --git a/Swiftfin/Views/ItemView/ItemView.swift b/Swiftfin/Views/ItemView/ItemView.swift index 78aaf8b4f..56416934d 100644 --- a/Swiftfin/Views/ItemView/ItemView.swift +++ b/Swiftfin/Views/ItemView/ItemView.swift @@ -122,7 +122,7 @@ struct ItemView: View { } var body: some View { - WrappedView { + ZStack { switch viewModel.state { case .content: contentView diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index 4ca18cb6f..e68488169 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -7,9 +7,6 @@ /// Accent Color "accentColor" = "Accent Color"; -/// Some views may need an app restart to update. -"accentColorDescription" = "Some views may need an app restart to update."; - /// Access "access" = "Access"; @@ -847,6 +844,12 @@ /// Hours "hours" = "Hours"; +/// ID +"id" = "ID"; + +/// Identify +"identify" = "Identify"; + /// Idle "idle" = "Idle"; @@ -1291,6 +1294,9 @@ /// Production Locations "productionLocations" = "Production Locations"; +/// Production Year +"productionYear" = "Production Year"; + /// Profile Image "profileImage" = "Profile Image"; @@ -1303,6 +1309,9 @@ /// Progress "progress" = "Progress"; +/// Provider +"provider" = "Provider"; + /// Public Users "publicUsers" = "Public Users"; From cd94142a8a4e07d0c835ff6ef3ef6be745959584 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Tue, 31 Dec 2024 15:19:23 -0600 Subject: [PATCH 2/5] [tvOS] Delete User from User Selection Screen (#1359) * Extract handlers into function * Color Improvements to move away from UIColor * Bring over edit user feature from iOS * Fix UserGridButton overlay when editing * Move advanced menu to be near server select menu * Re-enable context menu * Add bottom button bar * hook up user deletion * improvements * Refactor buttons for highlight hover effect * Pass in user count * Don't cancel editing if delete alert is cancelled * cleanup * Pad bottom of buttons * Cancel editing after user deletion * Revert ServerSelectionMenu back to button * Remove padding that pushed the server selection menu up too far * Make delete button red to match iOS * Update SelectUserView.swift * workaround Menu layout issues * Bring select/deselect all users behavior from iOS * Fixes after merge with main * Fix vertical focus --------- Co-authored-by: chickdan <=> Co-authored-by: Ethan Pippin --- Shared/Extensions/Color.swift | 6 +- .../ViewExtensions/Backport/Backport.swift | 2 +- .../Components/AddUserButton.swift | 25 +-- .../Components/SelectUserBottomBar.swift | 151 ++++++++++++++++++ .../Components/ServerSelectionMenu.swift | 5 +- .../Components/UserGridButton.swift | 91 ++++++----- .../Views/SelectUserView/SelectUserView.swift | 149 +++++++++++------ Swiftfin.xcodeproj/project.pbxproj | 4 + 8 files changed, 319 insertions(+), 114 deletions(-) create mode 100644 Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift diff --git a/Shared/Extensions/Color.swift b/Shared/Extensions/Color.swift index a8940949d..16bc9b311 100644 --- a/Shared/Extensions/Color.swift +++ b/Shared/Extensions/Color.swift @@ -22,9 +22,9 @@ extension Color { // TODO: Correct and add colors #if os(tvOS) // tvOS doesn't have these - static let systemFill = Color(UIColor.white) - static let secondarySystemFill = Color(UIColor.gray) - static let tertiarySystemFill = Color(UIColor.black) + static let systemFill = Color.white + static let secondarySystemFill = Color.gray + static let tertiarySystemFill = Color.black static let lightGray = Color(UIColor.lightGray) #else diff --git a/Shared/Extensions/ViewExtensions/Backport/Backport.swift b/Shared/Extensions/ViewExtensions/Backport/Backport.swift index f3b8b369f..30844f154 100644 --- a/Shared/Extensions/ViewExtensions/Backport/Backport.swift +++ b/Shared/Extensions/ViewExtensions/Backport/Backport.swift @@ -109,7 +109,7 @@ extension Backport where Content: View { extension ButtonBorderShape { static let circleBackport: ButtonBorderShape = { - if #available(iOS 17, tvOS 16.4, *) { + if #available(iOS 17, *) { return ButtonBorderShape.circle } else { return ButtonBorderShape.roundedRectangle diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift index aad19c6ae..1ee50028c 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift @@ -57,21 +57,22 @@ extension SelectUserView { } .clipShape(.circle) .aspectRatio(1, contentMode: .fill) - } - .buttonStyle(.card) - .buttonBorderShape(.circleBackport) - .disabled(!isEnabled) + .hoverEffect(.highlight) - Text(L10n.addUser) - .font(.title3) - .fontWeight(.semibold) - .foregroundStyle(isEnabled ? .primary : .secondary) + Text(L10n.addUser) + .font(.title3) + .fontWeight(.semibold) + .foregroundStyle(isEnabled ? .primary : .secondary) - if serverSelection == .all { - Text(L10n.hidden) - .font(.footnote) - .hidden() + if serverSelection == .all { + Text(L10n.hidden) + .font(.footnote) + .hidden() + } } + .buttonStyle(.borderless) + .buttonBorderShape(.circle) + .disabled(!isEnabled) } } } diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift new file mode 100644 index 000000000..9761c4449 --- /dev/null +++ b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift @@ -0,0 +1,151 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// + +import SwiftUI + +extension SelectUserView { + + struct SelectUserBottomBar: View { + + @Binding + private var isEditing: Bool + + @Binding + private var serverSelection: SelectUserServerSelection + + @ObservedObject + private var viewModel: SelectUserViewModel + + private let areUsersSelected: Bool + private let userCount: Int + + private let onDelete: () -> Void + private let toggleAllUsersSelected: () -> Void + + // MARK: - Advanced Menu + + @ViewBuilder + private var advancedMenu: some View { + Menu(L10n.advanced, systemImage: "gearshape.fill") { + + Button(L10n.editUsers, systemImage: "person.crop.circle") { + isEditing.toggle() + } + + // TODO: Do we want to support a grid view and list view like iOS? +// if !viewModel.servers.isEmpty { +// Picker(selection: $userListDisplayType) { +// ForEach(LibraryDisplayType.allCases, id: \.hashValue) { +// Label($0.displayTitle, systemImage: $0.systemImage) +// .tag($0) +// } +// } label: { +// Text(L10n.layout) +// Text(userListDisplayType.displayTitle) +// Image(systemName: userListDisplayType.systemImage) +// } +// .pickerStyle(.menu) +// } + + // TODO: Advanced settings on tvOS? +// Section { +// Button(L10n.advanced, systemImage: "gearshape.fill") { +// router.route(to: \.advancedSettings) +// } +// } + } + .labelStyle(.iconOnly) + } + + private var deleteUsersButton: some View { + Button { + onDelete() + } label: { + ZStack { + Color.red + + Text(L10n.delete) + .font(.body.weight(.semibold)) + .foregroundStyle(areUsersSelected ? .primary : .secondary) + + if !areUsersSelected { + Color.black + .opacity(0.5) + } + } + .frame(width: 400, height: 65) + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + .disabled(!areUsersSelected) + .buttonStyle(.card) + } + + init( + isEditing: Binding, + serverSelection: Binding, + areUsersSelected: Bool, + viewModel: SelectUserViewModel, + userCount: Int, + onDelete: @escaping () -> Void, + toggleAllUsersSelected: @escaping () -> Void + ) { + self._isEditing = isEditing + self._serverSelection = serverSelection + self.viewModel = viewModel + self.areUsersSelected = areUsersSelected + self.userCount = userCount + self.onDelete = onDelete + self.toggleAllUsersSelected = toggleAllUsersSelected + } + + @ViewBuilder + private var contentView: some View { + HStack(alignment: .center) { + if isEditing { + deleteUsersButton + + Button { + toggleAllUsersSelected() + } label: { + Text(areUsersSelected ? L10n.removeAll : L10n.selectAll) + .font(.body.weight(.semibold)) + .foregroundStyle(Color.primary) + } + + Button { + isEditing = false + } label: { + L10n.cancel.text + .font(.body.weight(.semibold)) + .foregroundStyle(Color.primary) + } + } else { + ServerSelectionMenu( + selection: $serverSelection, + viewModel: viewModel + ) + + if userCount > 1 { + advancedMenu + } + } + } + } + + var body: some View { + // `Menu` with custom label has some weird additional + // frame/padding that differs from default label style + AlternateLayoutView(alignment: .top) { + Color.clear + .frame(height: 100) + } content: { + contentView + } + } + } +} diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift index 30c3b344a..e9d4b8960 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift @@ -90,12 +90,9 @@ extension SelectUserView { } .font(.body.weight(.semibold)) .foregroundStyle(Color.primary) - .frame(height: 50) - .frame(maxWidth: 400) - .clipShape(RoundedRectangle(cornerRadius: 10)) + .frame(width: 400, height: 50) } .menuOrder(.fixed) - .padding() } } } diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift index af8a5e8dd..f92e1a715 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift @@ -60,62 +60,61 @@ extension SelectUserView { .aspectRatio(1, contentMode: .fill) } + @ViewBuilder + private var userImage: some View { + UserProfileImage( + userID: user.id, + source: user.profileImageSource( + client: server.client, + maxWidth: 120 + ) + ) + .aspectRatio(1, contentMode: .fill) + .overlay { + if isEditing { + Color.black + .opacity(isSelected ? 0 : 0.5) + .clipShape(.circle) + } + } + } + var body: some View { VStack { Button { action() } label: { - VStack(alignment: .center) { - ZStack { - Color.clear - - UserProfileImage( - userID: user.id, - source: user.profileImageSource( - client: server.client, - maxWidth: 120 - ) - ) - } - .aspectRatio(1, contentMode: .fill) + userImage + .hoverEffect(.highlight) + + Text(user.username) + .font(.title3) + .fontWeight(.semibold) + .foregroundStyle(labelForegroundStyle) + .lineLimit(1) + + if showServer { + Text(server.name) + .font(.footnote) + .foregroundStyle(.secondary) } } - .buttonStyle(.card) - .buttonBorderShape(.circleBackport) - // .contextMenu { - // Button(L10n.delete, role: .destructive) { - // onDelete() - // } - // } - - Text(user.username) - .font(.title3) - .fontWeight(.semibold) - .foregroundStyle(labelForegroundStyle) - .lineLimit(1) - - if showServer { - Text(server.name) - .font(.footnote) - .foregroundStyle(.secondary) + .buttonStyle(.borderless) + .buttonBorderShape(.circle) + .contextMenu { + Button("Delete", role: .destructive) { + onDelete() + } } } .overlay { - if isEditing { - ZStack(alignment: .bottomTrailing) { - Color.black - .opacity(isSelected ? 0 : 0.5) - .clipShape(.circle) - - if isSelected { - Image(systemName: "checkmark.circle.fill") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 40, height: 40, alignment: .bottomTrailing) - .symbolRenderingMode(.palette) - .foregroundStyle(accentColor.overlayColor, accentColor) - } - } + if isEditing && isSelected { + Image(systemName: "checkmark.circle.fill") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 40, height: 40, alignment: .bottomTrailing) + .symbolRenderingMode(.palette) + .foregroundStyle(accentColor.overlayColor, accentColor) } } } diff --git a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift index 9e4eda117..5aa17a6c0 100644 --- a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift +++ b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift @@ -17,11 +17,6 @@ import SwiftUI struct SelectUserView: View { - // MARK: - Defaults - - @Default(.selectUserServerSelection) - private var serverSelection - // MARK: - User Grid Item Enum private enum UserGridItem: Hashable { @@ -29,6 +24,16 @@ struct SelectUserView: View { case addUser } + // MARK: - Defaults + + @Default(.selectUserServerSelection) + private var serverSelection + + // MARK: - Environment Variable + + @Environment(\.colorScheme) + private var colorScheme + // MARK: - State & Environment Objects @EnvironmentObject @@ -46,14 +51,31 @@ struct SelectUserView: View { @State private var gridItemSize: CGSize = .zero @State + private var isEditingUsers: Bool = false + @State private var padGridItemColumnCount: Int = 1 @State private var scrollViewOffset: CGFloat = 0 @State + private var selectedUsers: Set = [] + @State private var splashScreenImageSource: ImageSource? = nil + private var users: [UserState] { + gridItems.compactMap { item in + switch item { + case let .user(user, _): + return user + default: + return nil + } + } + } + // MARK: - Dialog States + @State + private var isPresentingConfirmDeleteUsers = false @State private var isPresentingServers: Bool = false @@ -175,17 +197,17 @@ struct SelectUserView: View { server: server, showServer: serverSelection == .all ) { -// if isEditingUsers { -// selectedUsers.toggle(value: user) -// } else { - viewModel.send(.signIn(user, pin: "")) -// } + if isEditingUsers { + selectedUsers.toggle(value: user) + } else { + viewModel.send(.signIn(user, pin: "")) + } } onDelete: { -// selectedUsers.insert(user) -// isPresentingConfirmDeleteUsers = true + selectedUsers.insert(user) + isPresentingConfirmDeleteUsers = true } -// .environment(\.isEditing, isEditingUsers) -// .environment(\.isSelected, selectedUsers.contains(user)) + .environment(\.isEditing, isEditingUsers) + .environment(\.isSelected, selectedUsers.contains(user)) case .addUser: AddUserButton( serverSelection: $serverSelection, @@ -193,6 +215,7 @@ struct SelectUserView: View { ) { server in router.route(to: \.userSignIn, server) } + .environment(\.isEnabled, !isEditingUsers) } } @@ -211,24 +234,34 @@ struct SelectUserView: View { .frame(height: 100) gridContentView + .focusSection() } .scrollIfLargerThanContainer(padding: 100) .scrollViewOffset($scrollViewOffset) } - HStack { - ServerSelectionMenu( - selection: $serverSelection, - viewModel: viewModel - ) + SelectUserBottomBar( + isEditing: $isEditingUsers, + serverSelection: $serverSelection, + areUsersSelected: selectedUsers.isNotEmpty, + viewModel: viewModel, + userCount: gridItems.count, + onDelete: { + isPresentingConfirmDeleteUsers = true + } + ) { + if selectedUsers.count == users.count { + selectedUsers.removeAll() + } else { + selectedUsers.insert(contentsOf: users) + } } + .focusSection() } .animation(.linear(duration: 0.1), value: scrollViewOffset) .background { if let splashScreenImageSource { ZStack { - Color.clear - ImageView(splashScreenImageSource) .aspectRatio(contentMode: .fill) .id(splashScreenImageSource) @@ -278,6 +311,32 @@ struct SelectUserView: View { } } + // MARK: - Functions + + private func didDelete(_ server: ServerState) { + viewModel.send(.getServers) + + if case let SelectUserServerSelection.server(id: id) = serverSelection, server.id == id { + if viewModel.servers.keys.count == 1, let first = viewModel.servers.keys.first { + serverSelection = .server(id: first.id) + } else { + serverSelection = .all + } + } + + // change splash screen selection if necessary +// selectUserAllServersSplashscreen = serverSelection + } + + private func didAppear() { + viewModel.send(.getServers) + + splashScreenImageSource = makeSplashScreenImageSource( + serverSelection: serverSelection, + allServersSelection: .all + ) + } + // MARK: - Body var body: some View { @@ -291,22 +350,11 @@ struct SelectUserView: View { .ignoresSafeArea() .navigationBarBranding() .onAppear { - viewModel.send(.getServers) - - splashScreenImageSource = makeSplashScreenImageSource( - serverSelection: serverSelection, - allServersSelection: .all - ) - -// gridItems = OrderedSet( -// (0 ..< 20) -// .map { i in -// UserState(accessToken: "", id: "\(i)", serverID: "", username: "\(i)") -// } -// .map { u in -// UserGridItem.user(u, server: .init(urls: [], currentURL: URL(string: "/")!, name: "Test", id: "", usersIDs: [])) -// } -// ) + didAppear() + } + .onChange(of: isEditingUsers) { _, newValue in + guard !newValue else { return } + selectedUsers.removeAll() } .onChange(of: serverSelection) { _, newValue in gridItems = makeGridItems(for: newValue) @@ -343,18 +391,23 @@ struct SelectUserView: View { serverSelection = .server(id: server.id) } .onNotification(.didDeleteServer) { server in - viewModel.send(.getServers) - - if case let SelectUserServerSelection.server(id: id) = serverSelection, server.id == id { - if viewModel.servers.keys.count == 1, let first = viewModel.servers.keys.first { - serverSelection = .server(id: first.id) - } else { - serverSelection = .all - } + didDelete(server) + } + .confirmationDialog( + Text(L10n.deleteUser), + isPresented: $isPresentingConfirmDeleteUsers, + presenting: selectedUsers + ) { selectedUsers in + Button(L10n.delete, role: .destructive) { + viewModel.send(.deleteUsers(Array(selectedUsers))) + isEditingUsers = false + } + } message: { selectedUsers in + if selectedUsers.count == 1, let first = selectedUsers.first { + Text(L10n.deleteUserSingleConfirmation(first.username)) + } else { + Text(L10n.deleteUserMultipleConfirmation(selectedUsers.count)) } - - // change splash screen selection if necessary -// selectUserAllServersSplashscreen = serverSelection } .errorMessage($error) } diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj index 1a053995f..f57561bd0 100644 --- a/Swiftfin.xcodeproj/project.pbxproj +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -373,6 +373,7 @@ BD3957792C113EC40078CEF8 /* SubtitleSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD3957782C113EC40078CEF8 /* SubtitleSection.swift */; }; BD39577C2C113FAA0078CEF8 /* TimestampSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD39577B2C113FAA0078CEF8 /* TimestampSection.swift */; }; BD39577E2C1140810078CEF8 /* TransitionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD39577D2C1140810078CEF8 /* TransitionSection.swift */; }; + BDA623532D0D0854009A157F /* SelectUserBottomBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA623522D0D0854009A157F /* SelectUserBottomBar.swift */; }; C40CD926271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40CD924271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift */; }; C44FA6E02AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44FA6DE2AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift */; }; C44FA6E12AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44FA6DF2AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift */; }; @@ -1485,6 +1486,7 @@ BD3957782C113EC40078CEF8 /* SubtitleSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubtitleSection.swift; sourceTree = ""; }; BD39577B2C113FAA0078CEF8 /* TimestampSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimestampSection.swift; sourceTree = ""; }; BD39577D2C1140810078CEF8 /* TransitionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransitionSection.swift; sourceTree = ""; }; + BDA623522D0D0854009A157F /* SelectUserBottomBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectUserBottomBar.swift; sourceTree = ""; }; C40CD924271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTypeLibraryViewModel.swift; sourceTree = ""; }; C44FA6DE2AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveSmallPlaybackButton.swift; sourceTree = ""; }; C44FA6DF2AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveLargePlaybackButtons.swift; sourceTree = ""; }; @@ -4027,6 +4029,7 @@ E1763A282BF3046A004DF6AB /* AddUserButton.swift */, E1763A262BF303C9004DF6AB /* ServerSelectionMenu.swift */, E1763A2A2BF3046E004DF6AB /* UserGridButton.swift */, + BDA623522D0D0854009A157F /* SelectUserBottomBar.swift */, ); path = Components; sourceTree = ""; @@ -5572,6 +5575,7 @@ E1D90D772C051D44000EA787 /* BackPort+ScrollIndicatorVisibility.swift in Sources */, E10231582BCF8AF8009D71FC /* WideChannelGridItem.swift in Sources */, E15D4F082B1B12C300442DB8 /* Backport.swift in Sources */, + BDA623532D0D0854009A157F /* SelectUserBottomBar.swift in Sources */, E1D4BF8F271A079A00A11E64 /* BasicAppSettingsView.swift in Sources */, E1575E9A293E7B1E001665B1 /* Array.swift in Sources */, E1575E8D293E7B1E001665B1 /* URLComponents.swift in Sources */, From adec8de122559e3424d6adf7f0872eadf1f38b71 Mon Sep 17 00:00:00 2001 From: Joe Kribs Date: Thu, 2 Jan 2025 16:05:15 -0700 Subject: [PATCH 3/5] [Meta] 2025 Disclaimer (#1381) --- PreferencesView/Sources/PreferencesView/Box.swift | 2 +- .../Sources/PreferencesView/KeyCommandAction.swift | 2 +- .../Sources/PreferencesView/KeyCommandsBuilder.swift | 2 +- .../Sources/PreferencesView/PreferenceKeys.swift | 2 +- .../Sources/PreferencesView/PreferencesView.swift | 2 +- .../Sources/PreferencesView/PressCommandAction.swift | 2 +- .../Sources/PreferencesView/PressCommandBuilder.swift | 2 +- .../PreferencesView/UIPreferencesHostingController.swift | 2 +- .../PreferencesView/UIViewController+Swizzling.swift | 2 +- .../Sources/PreferencesView/ViewExtensions.swift | 2 +- RedrawOnNotificationView.swift | 2 +- Scripts/Translations/AlphabetizeStrings.swift | 2 +- Scripts/Translations/PurgeUnusedStrings.swift | 2 +- Shared/AppIcons/AppIcons.swift | 2 +- Shared/AppIcons/DarkAppIcon.swift | 2 +- Shared/AppIcons/InvertedDarkAppIcon.swift | 2 +- Shared/AppIcons/InvertedLightAppIcon.swift | 2 +- Shared/AppIcons/LightAppIcon.swift | 2 +- Shared/AppIcons/PrimaryAppIcon.swift | 2 +- Shared/Components/AlternateLayoutView.swift | 2 +- Shared/Components/AssertionFailureView.swift | 2 +- Shared/Components/BlurView.swift | 2 +- Shared/Components/BulletedList.swift | 2 +- Shared/Components/ChevronAlertButton.swift | 2 +- Shared/Components/ChevronButton.swift | 2 +- Shared/Components/FastSVGView.swift | 2 +- Shared/Components/ImageView.swift | 2 +- Shared/Components/LetterPickerOrientation.swift | 2 +- Shared/Components/ListRowCheckbox.swift | 2 +- Shared/Components/MaxHeightText.swift | 2 +- Shared/Components/PosterIndicators/FavoriteIndicator.swift | 2 +- Shared/Components/PosterIndicators/ProgressIndicator.swift | 2 +- Shared/Components/PosterIndicators/UnwatchedIndicator.swift | 2 +- Shared/Components/PosterIndicators/WatchedIndicator.swift | 2 +- Shared/Components/ProgressBar.swift | 2 +- Shared/Components/RotateContentView.swift | 2 +- Shared/Components/RowDivider.swift | 2 +- Shared/Components/SelectorView.swift | 2 +- Shared/Components/SeparatorHStack.swift | 2 +- Shared/Components/SeparatorVStack.swift | 2 +- Shared/Components/SystemImageContentView.swift | 2 +- Shared/Components/TextPairView.swift | 2 +- Shared/Components/TruncatedText.swift | 2 +- .../Components/UserProfileImage/UserProfileHeroImage.swift | 2 +- Shared/Components/UserProfileImage/UserProfileImage.swift | 2 +- Shared/Components/WrappedView.swift | 2 +- Shared/Coordinators/AdminDashboardCoordinator.swift | 2 +- Shared/Coordinators/AppSettingsCoordinator.swift | 2 +- Shared/Coordinators/BasicNavigationCoordinator.swift | 2 +- Shared/Coordinators/CustomDeviceProfileCoordinator.swift | 2 +- Shared/Coordinators/CustomizeSettingsCoordinator.swift | 2 +- Shared/Coordinators/DownloadListCoordinator.swift | 2 +- Shared/Coordinators/DownloadTaskCoordinator.swift | 2 +- .../Coordinators/EditCustomDeviceProfileCoordinator.swift | 2 +- Shared/Coordinators/FilterCoordinator.swift | 2 +- Shared/Coordinators/HomeCoordinator.swift | 2 +- Shared/Coordinators/ItemCoordinator.swift | 2 +- Shared/Coordinators/ItemEditorCoordinator.swift | 2 +- Shared/Coordinators/LibraryCoordinator.swift | 2 +- .../LiveTVCoordinator/iOSLiveTVCoordinator.swift | 2 +- .../LiveTVCoordinator/tvOSLiveTVCoordinator.swift | 2 +- Shared/Coordinators/LiveVideoPlayerCoordinator.swift | 2 +- .../Coordinators/MainCoordinator/iOSMainCoordinator.swift | 2 +- .../MainCoordinator/iOSMainTabCoordinator.swift | 2 +- .../Coordinators/MainCoordinator/tvOSMainCoordinator.swift | 2 +- .../MainCoordinator/tvOSMainTabCoordinator.swift | 2 +- Shared/Coordinators/MediaCoordinator.swift | 2 +- Shared/Coordinators/MediaSourceInfoCoordinator.swift | 2 +- .../Coordinators/PlaybackQualitySettingsCoordinator.swift | 2 +- Shared/Coordinators/PlaybackSettingsCoordinator.swift | 2 +- Shared/Coordinators/SearchCoordinator.swift | 2 +- Shared/Coordinators/SelectUserCoordinator.swift | 2 +- Shared/Coordinators/SettingsCoordinator.swift | 2 +- Shared/Coordinators/UserProfileImageCoordinator.swift | 2 +- Shared/Coordinators/UserSignInCoordinator.swift | 2 +- Shared/Coordinators/VideoPlayerCoordinator.swift | 2 +- Shared/Coordinators/VideoPlayerSettingsCoordinator.swift | 2 +- Shared/Coordinators/VideoPlayerWrapperCoordinator.swift | 2 +- Shared/Errors/NetworkError.swift | 2 +- Shared/Extensions/Array.swift | 2 +- Shared/Extensions/Binding.swift | 2 +- Shared/Extensions/Button.swift | 2 +- Shared/Extensions/CGPoint.swift | 2 +- Shared/Extensions/CGSize.swift | 2 +- Shared/Extensions/Collection.swift | 2 +- Shared/Extensions/Color.swift | 2 +- Shared/Extensions/CoreStore.swift | 2 +- Shared/Extensions/Dictionary.swift | 2 +- Shared/Extensions/Double.swift | 2 +- Shared/Extensions/Edge.swift | 2 +- Shared/Extensions/EdgeInsets.swift | 2 +- .../Extensions/EnvironmentValue/EnvironmentValue+Keys.swift | 2 +- .../EnvironmentValue/EnvironmentValue+Values.swift | 2 +- Shared/Extensions/Equatable.swift | 2 +- Shared/Extensions/Files.swift | 2 +- Shared/Extensions/Font.swift | 2 +- Shared/Extensions/FormatStyle.swift | 2 +- Shared/Extensions/Hashable.swift | 2 +- Shared/Extensions/HorizontalAlignment.swift | 2 +- Shared/Extensions/Int.swift | 2 +- Shared/Extensions/JellyfinAPI/ActiveSessionsPolicy.swift | 2 +- .../JellyfinAPI/BaseItemDto/BaseItemDto+Images.swift | 2 +- .../JellyfinAPI/BaseItemDto/BaseItemDto+Poster.swift | 2 +- .../BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift | 2 +- Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto.swift | 2 +- .../JellyfinAPI/BaseItemPerson/BaseItemPerson+Poster.swift | 2 +- .../JellyfinAPI/BaseItemPerson/BaseItemPerson.swift | 2 +- Shared/Extensions/JellyfinAPI/ChapterInfo.swift | 2 +- Shared/Extensions/JellyfinAPI/CodecProfile.swift | 2 +- Shared/Extensions/JellyfinAPI/DayOfWeek.swift | 2 +- Shared/Extensions/JellyfinAPI/DeviceInfo.swift | 2 +- Shared/Extensions/JellyfinAPI/DeviceProfile.swift | 2 +- Shared/Extensions/JellyfinAPI/DeviceType.swift | 2 +- Shared/Extensions/JellyfinAPI/DirectPlayProfile.swift | 2 +- Shared/Extensions/JellyfinAPI/DynamicDayOfWeek.swift | 2 +- Shared/Extensions/JellyfinAPI/ImageBlurHashes.swift | 2 +- Shared/Extensions/JellyfinAPI/ItemFields.swift | 2 +- Shared/Extensions/JellyfinAPI/ItemFilter+ItemTrait.swift | 2 +- Shared/Extensions/JellyfinAPI/JellyfinAPIError.swift | 2 +- Shared/Extensions/JellyfinAPI/JellyfinClient.swift | 2 +- Shared/Extensions/JellyfinAPI/LoginFailurePolicy.swift | 2 +- Shared/Extensions/JellyfinAPI/MaxBitratePolicy.swift | 2 +- .../MediaSourceInfo+ItemVideoPlayerViewModel.swift | 2 +- .../JellyfinAPI/MediaSourceInfo/MediaSourceInfo.swift | 2 +- Shared/Extensions/JellyfinAPI/MediaStream.swift | 2 +- Shared/Extensions/JellyfinAPI/MetadataField.swift | 2 +- Shared/Extensions/JellyfinAPI/NameGuidPair.swift | 2 +- Shared/Extensions/JellyfinAPI/ParentalRating.swift | 2 +- Shared/Extensions/JellyfinAPI/PersonKind.swift | 2 +- Shared/Extensions/JellyfinAPI/PlayMethod.swift | 2 +- Shared/Extensions/JellyfinAPI/PlayerStateInfo.swift | 2 +- Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift | 2 +- Shared/Extensions/JellyfinAPI/ServerTicks.swift | 2 +- Shared/Extensions/JellyfinAPI/SessionInfo.swift | 2 +- Shared/Extensions/JellyfinAPI/SortOrder+ItemSortOrder.swift | 2 +- Shared/Extensions/JellyfinAPI/SpecialFeatureType.swift | 2 +- Shared/Extensions/JellyfinAPI/SubtitleProfile.swift | 2 +- Shared/Extensions/JellyfinAPI/SyncPlayUserAccessType.swift | 2 +- Shared/Extensions/JellyfinAPI/TaskCompletionStatus.swift | 2 +- Shared/Extensions/JellyfinAPI/TaskState.swift | 2 +- Shared/Extensions/JellyfinAPI/TaskTriggerType.swift | 2 +- Shared/Extensions/JellyfinAPI/TranscodeReason.swift | 2 +- Shared/Extensions/JellyfinAPI/TranscodingProfile.swift | 2 +- Shared/Extensions/JellyfinAPI/UserDto.swift | 2 +- Shared/Extensions/JellyfinAPI/Video3DFormat.swift | 2 +- Shared/Extensions/NavigationCoordinatable.swift | 2 +- Shared/Extensions/Nuke/DataCache.swift | 2 +- Shared/Extensions/Nuke/ImagePipeline.swift | 2 +- Shared/Extensions/Optional.swift | 2 +- Shared/Extensions/OrderedDictionary.swift | 2 +- Shared/Extensions/PersistentLogHandler.swift | 2 +- Shared/Extensions/Sequence.swift | 2 +- Shared/Extensions/Set.swift | 2 +- Shared/Extensions/String.swift | 2 +- Shared/Extensions/Task.swift | 2 +- Shared/Extensions/Text.swift | 2 +- Shared/Extensions/UIApplication.swift | 2 +- Shared/Extensions/UIColor.swift | 2 +- Shared/Extensions/UIDevice.swift | 2 +- Shared/Extensions/UIGestureRecognizer.swift | 2 +- Shared/Extensions/UIHostingController.swift | 2 +- Shared/Extensions/UIScreen.swift | 2 +- Shared/Extensions/URL.swift | 2 +- Shared/Extensions/URLComponents.swift | 2 +- Shared/Extensions/URLResponse.swift | 2 +- Shared/Extensions/URLSessionConfiguration.swift | 2 +- Shared/Extensions/VerticalAlignment.swift | 2 +- .../Backport/BackPort+ScrollIndicatorVisibility.swift | 2 +- Shared/Extensions/ViewExtensions/Backport/Backport.swift | 2 +- .../ViewExtensions/Modifiers/AttributeStyleModifier.swift | 2 +- .../Modifiers/BackgroundParallaxHeaderModifier.swift | 2 +- .../Modifiers/BottomEdgeGradientModifier.swift | 2 +- .../Extensions/ViewExtensions/Modifiers/ErrorMessage.swift | 2 +- .../ViewExtensions/Modifiers/OnFinalDisappearModifier.swift | 2 +- .../ViewExtensions/Modifiers/OnFirstAppearModifier.swift | 2 +- .../Modifiers/OnReceiveNotificationModifier.swift | 2 +- .../Modifiers/OnScenePhaseChangedModifier.swift | 2 +- .../ViewExtensions/Modifiers/OnSizeChangedModifier.swift | 2 +- .../Modifiers/ScrollIfLargerThanContainerModifier.swift | 2 +- .../ViewExtensions/Modifiers/ScrollViewOffsetModifier.swift | 2 +- .../Modifiers/SinceLastDisappearModifier.swift | 2 +- Shared/Extensions/ViewExtensions/PreferenceKeys.swift | 2 +- Shared/Extensions/ViewExtensions/ViewExtensions.swift | 2 +- Shared/Objects/AppAppearance.swift | 2 +- Shared/Objects/ArrayBuilder.swift | 2 +- Shared/Objects/BindingBox.swift | 2 +- Shared/Objects/CaseIterablePicker.swift | 2 +- Shared/Objects/ChannelProgram.swift | 2 +- Shared/Objects/CommaStringBuilder.swift | 2 +- Shared/Objects/CurrentDate.swift | 2 +- Shared/Objects/CustomDeviceProfileAction.swift | 2 +- Shared/Objects/DisplayOrder/BoxSetDisplayOrder.swift | 2 +- Shared/Objects/DisplayOrder/SeriesDisplayOrder.swift | 2 +- Shared/Objects/Displayable.swift | 2 +- Shared/Objects/Eventful.swift | 2 +- Shared/Objects/GestureAction.swift | 2 +- Shared/Objects/ImageSource.swift | 2 +- Shared/Objects/ItemArrayElements.swift | 2 +- Shared/Objects/ItemFilter/AnyItemFilter.swift | 2 +- Shared/Objects/ItemFilter/ItemFilter.swift | 2 +- Shared/Objects/ItemFilter/ItemFilterCollection.swift | 2 +- Shared/Objects/ItemFilter/ItemFilterType.swift | 2 +- Shared/Objects/ItemFilter/ItemGenre.swift | 2 +- Shared/Objects/ItemFilter/ItemLetter.swift | 2 +- Shared/Objects/ItemFilter/ItemSortBy.swift | 2 +- Shared/Objects/ItemFilter/ItemTag.swift | 2 +- Shared/Objects/ItemFilter/ItemYear.swift | 2 +- Shared/Objects/ItemViewType.swift | 2 +- Shared/Objects/LibraryDisplayType.swift | 2 +- Shared/Objects/LibraryParent/LibraryParent.swift | 2 +- Shared/Objects/LibraryParent/TitledLibraryParent.swift | 2 +- Shared/Objects/MediaComponents/AudoCodec.swift | 2 +- Shared/Objects/MediaComponents/MediaContainer.swift | 2 +- Shared/Objects/MediaComponents/SubtitleFormat.swift | 2 +- Shared/Objects/MediaComponents/VideoCodec.swift | 2 +- Shared/Objects/NotificationSet.swift | 2 +- Shared/Objects/OverlayType.swift | 2 +- Shared/Objects/PanDirectionGestureRecognizer.swift | 2 +- Shared/Objects/PlaybackBitrate/PlaybackBitrate.swift | 2 +- .../Objects/PlaybackBitrate/PlaybackBitrateTestSize.swift | 2 +- .../PlaybackCompatibility/PlaybackCompatibility+Video.swift | 2 +- .../PlaybackCompatibility/PlaybackCompatibility.swift | 2 +- Shared/Objects/PlaybackDeviceProfile.swift | 2 +- Shared/Objects/PlaybackSpeed.swift | 2 +- Shared/Objects/Poster.swift | 2 +- Shared/Objects/PosterDisplayType.swift | 2 +- Shared/Objects/RepeatingTimer.swift | 2 +- Shared/Objects/RoundedCorner.swift | 2 +- Shared/Objects/ScalingButtonStyle.swift | 2 +- Shared/Objects/SelectUserServerSelection.swift | 2 +- Shared/Objects/SeriesStatus.swift | 2 +- Shared/Objects/SliderType.swift | 2 +- Shared/Objects/Stateful.swift | 2 +- Shared/Objects/Storable.swift | 2 +- Shared/Objects/StreamType.swift | 2 +- Shared/Objects/SupportedCaseIterable.swift | 2 +- Shared/Objects/SystemImageable.swift | 2 +- Shared/Objects/TextPair.swift | 2 +- Shared/Objects/TimeStampType.swift | 2 +- Shared/Objects/TimerProxy.swift | 2 +- Shared/Objects/TrailingTimestampType.swift | 2 +- Shared/Objects/Trie.swift | 2 +- Shared/Objects/UserAccessPolicy.swift | 2 +- Shared/Objects/UserPermissions.swift | 2 +- Shared/Objects/UserSignInState.swift | 2 +- Shared/Objects/Utilities.swift | 2 +- Shared/Objects/VideoPlayerActionButton.swift | 2 +- Shared/Objects/VideoPlayerJumpLength.swift | 2 +- Shared/Objects/VideoPlayerType/VideoPlayerType+Native.swift | 2 +- Shared/Objects/VideoPlayerType/VideoPlayerType+Shared.swift | 2 +- .../Objects/VideoPlayerType/VideoPlayerType+Swiftfin.swift | 2 +- Shared/Objects/VideoPlayerType/VideoPlayerType.swift | 2 +- Shared/ServerDiscovery/ServerDiscovery.swift | 2 +- Shared/ServerDiscovery/ServerResponse.swift | 2 +- Shared/Services/DownloadManager.swift | 2 +- Shared/Services/DownloadTask.swift | 2 +- Shared/Services/Keychain.swift | 2 +- Shared/Services/LogManager.swift | 2 +- Shared/Services/Notifications.swift | 2 +- Shared/Services/SwiftfinDefaults.swift | 2 +- Shared/Services/UserSession.swift | 2 +- Shared/Strings/Strings.swift | 6 ------ Shared/SwiftfinStore/StoredValue/StoredValue.swift | 2 +- Shared/SwiftfinStore/StoredValue/StoredValues+Server.swift | 2 +- Shared/SwiftfinStore/StoredValue/StoredValues+Temp.swift | 2 +- Shared/SwiftfinStore/StoredValue/StoredValues+User.swift | 2 +- Shared/SwiftfinStore/SwiftfinStore+Mappings.swift | 2 +- Shared/SwiftfinStore/SwiftfinStore+ServerState.swift | 2 +- Shared/SwiftfinStore/SwiftfinStore.swift | 2 +- Shared/SwiftfinStore/SwiftinStore+UserState.swift | 2 +- Shared/SwiftfinStore/V1Schema/SwiftfinStore+V1.swift | 2 +- Shared/SwiftfinStore/V1Schema/V1ServerModel.swift | 2 +- Shared/SwiftfinStore/V1Schema/V1UserModel.swift | 2 +- Shared/SwiftfinStore/V2Schema/SwiftfinStore+V2.swift | 2 +- Shared/SwiftfinStore/V2Schema/V2AnyData.swift | 2 +- Shared/SwiftfinStore/V2Schema/V2ServerModel.swift | 2 +- Shared/SwiftfinStore/V2Schema/V2UserModel.swift | 2 +- Shared/ViewModels/AdminDashboard/APIKeysViewModel.swift | 2 +- .../ViewModels/AdminDashboard/ActiveSessionsViewModel.swift | 2 +- .../ViewModels/AdminDashboard/AddServerUserViewModel.swift | 2 +- .../ViewModels/AdminDashboard/DeviceDetailViewModel.swift | 2 +- Shared/ViewModels/AdminDashboard/DevicesViewModel.swift | 2 +- Shared/ViewModels/AdminDashboard/ServerTaskObserver.swift | 2 +- Shared/ViewModels/AdminDashboard/ServerTasksViewModel.swift | 2 +- .../AdminDashboard/ServerUserAdminViewModel.swift | 2 +- Shared/ViewModels/AdminDashboard/ServerUsersViewModel.swift | 2 +- Shared/ViewModels/ChannelLibraryViewModel.swift | 2 +- Shared/ViewModels/ConnectToServerViewModel.swift | 2 +- Shared/ViewModels/DownloadListViewModel.swift | 2 +- Shared/ViewModels/FilterViewModel.swift | 2 +- Shared/ViewModels/HomeViewModel.swift | 2 +- .../ViewModels/ItemAdministration/DeleteItemViewModel.swift | 2 +- .../ItemAdministration/IdentifyItemViewModel.swift | 2 +- .../ItemEditorViewModel/GenreEditorViewModel.swift | 2 +- .../ItemEditorViewModel/ItemEditorViewModel.swift | 2 +- .../ItemEditorViewModel/PeopleEditorViewModel.swift | 2 +- .../ItemEditorViewModel/StudioEditorViewModel.swift | 2 +- .../ItemEditorViewModel/TagEditorViewModel.swift | 2 +- .../ItemAdministration/RefreshMetadataViewModel.swift | 2 +- .../ViewModels/ItemViewModel/CollectionItemViewModel.swift | 2 +- Shared/ViewModels/ItemViewModel/EpisodeItemViewModel.swift | 2 +- Shared/ViewModels/ItemViewModel/ItemViewModel.swift | 2 +- Shared/ViewModels/ItemViewModel/MovieItemViewModel.swift | 2 +- Shared/ViewModels/ItemViewModel/SeasonItemViewModel.swift | 2 +- Shared/ViewModels/ItemViewModel/SeriesItemViewModel.swift | 2 +- .../ViewModels/LibraryViewModel/ItemLibraryViewModel.swift | 2 +- .../LibraryViewModel/ItemTypeLibraryViewModel.swift | 2 +- .../LibraryViewModel/LatestInLibraryViewModel.swift | 2 +- .../LibraryViewModel/NextUpLibraryViewModel.swift | 2 +- .../LibraryViewModel/PagingLibraryViewModel.swift | 2 +- .../LibraryViewModel/RecentlyAddedViewModel.swift | 2 +- Shared/ViewModels/LiveVideoPlayerManager.swift | 2 +- Shared/ViewModels/MediaViewModel/MediaType.swift | 2 +- Shared/ViewModels/MediaViewModel/MediaViewModel.swift | 2 +- Shared/ViewModels/ParentalRatingsViewModel.swift | 2 +- Shared/ViewModels/ProgramsViewModel.swift | 2 +- Shared/ViewModels/QuickConnectAuthorizeViewModel.swift | 2 +- Shared/ViewModels/ResetUserPasswordViewModel.swift | 2 +- Shared/ViewModels/SearchViewModel.swift | 2 +- Shared/ViewModels/SelectUserViewModel.swift | 2 +- Shared/ViewModels/ServerCheckViewModel.swift | 2 +- Shared/ViewModels/ServerConnectionViewModel.swift | 2 +- Shared/ViewModels/ServerLogsViewModel.swift | 2 +- Shared/ViewModels/SettingsViewModel.swift | 2 +- Shared/ViewModels/UserLocalSecurityViewModel.swift | 2 +- Shared/ViewModels/UserProfileImageViewModel.swift | 2 +- Shared/ViewModels/UserSignInViewModel.swift | 2 +- .../VideoPlayerManager/DownloadVideoPlayerManager.swift | 2 +- .../VideoPlayerManager/OnlineVideoPlayerManager.swift | 2 +- .../ViewModels/VideoPlayerManager/VideoPlayerManager.swift | 2 +- Shared/ViewModels/VideoPlayerViewModel.swift | 2 +- Shared/ViewModels/ViewModel.swift | 2 +- .../PreferenceUIHosting/PreferenceUIHostingController.swift | 2 +- .../PreferenceUIHosting/PreferenceUIHostingSwizzling.swift | 2 +- Swiftfin tvOS/App/SwiftfinApp.swift | 2 +- Swiftfin tvOS/Components/CinematicBackgroundView.swift | 2 +- Swiftfin tvOS/Components/CinematicItemSelector.swift | 2 +- Swiftfin tvOS/Components/DotHStack.swift | 2 +- Swiftfin tvOS/Components/EnumPickerView.swift | 2 +- Swiftfin tvOS/Components/InlineEnumToggle.swift | 2 +- Swiftfin tvOS/Components/LandscapePosterProgressBar.swift | 2 +- Swiftfin tvOS/Components/ListRowButton.swift | 2 +- Swiftfin tvOS/Components/NonePosterButton.swift | 2 +- Swiftfin tvOS/Components/OrderedSectionSelectorView.swift | 2 +- Swiftfin tvOS/Components/PosterButton.swift | 2 +- Swiftfin tvOS/Components/PosterHStack.swift | 2 +- Swiftfin tvOS/Components/SFSymbolButton.swift | 2 +- Swiftfin tvOS/Components/SeeAllPosterButton.swift | 2 +- Swiftfin tvOS/Components/ServerButton.swift | 2 +- Swiftfin tvOS/Components/SplitFormWindowView.swift | 2 +- Swiftfin tvOS/Components/SplitLoginWindowView.swift | 2 +- Swiftfin tvOS/Components/StepperView.swift | 2 +- .../Extensions/View/Modifiers/NavigationBarMenuButton.swift | 2 +- Swiftfin tvOS/Extensions/View/View-tvOS.swift | 2 +- Swiftfin tvOS/ImageButtonStyle.swift | 2 +- Swiftfin tvOS/Objects/FocusGuide.swift | 2 +- Swiftfin tvOS/Views/AppLoadingView.swift | 2 +- Swiftfin tvOS/Views/BasicAppSettingsView.swift | 2 +- .../Views/ChannelLibraryView/ChannelLibraryView.swift | 2 +- .../ChannelLibraryView/Components/WideChannelGridItem.swift | 2 +- .../ConnectToServerView/Components/LocalServerButton.swift | 2 +- .../Views/ConnectToServerView/ConnectToServerView.swift | 2 +- Swiftfin tvOS/Views/FontPickerView.swift | 2 +- .../HomeView/Components/CinematicRecentlyAddedView.swift | 2 +- .../Views/HomeView/Components/CinematicResumeItemView.swift | 2 +- .../Views/HomeView/Components/LatestInLibraryView.swift | 2 +- Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift | 2 +- .../Views/HomeView/Components/RecentlyAddedView.swift | 2 +- Swiftfin tvOS/Views/HomeView/HomeErrorView.swift | 2 +- Swiftfin tvOS/Views/HomeView/HomeView.swift | 2 +- Swiftfin tvOS/Views/ItemOverviewView.swift | 2 +- .../Views/ItemView/CinematicCollectionItemView.swift | 2 +- Swiftfin tvOS/Views/ItemView/CinematicEpisodeItemView.swift | 2 +- Swiftfin tvOS/Views/ItemView/CinematicItemAboutView.swift | 2 +- Swiftfin tvOS/Views/ItemView/CinematicItemViewTopRow.swift | 2 +- Swiftfin tvOS/Views/ItemView/CinematicSeasonItemView.swift | 2 +- .../CollectionItemView/CollectionItemContentView.swift | 2 +- .../ItemView/CollectionItemView/CollectionItemView.swift | 2 +- .../Views/ItemView/Components/AboutView/AboutView.swift | 2 +- .../Components/AboutView/Components/AboutViewCard.swift | 2 +- .../Components/AboutView/Components/MediaSourcesCard.swift | 2 +- .../Components/AboutView/Components/OverviewCard.swift | 2 +- .../Components/AboutView/Components/RatingsCard.swift | 2 +- .../ItemView/Components/ActionButtons/ActionButton.swift | 2 +- .../Components/ActionButtons/ActionButtonHStack.swift | 2 +- .../ItemView/Components/ActionButtons/ActionMenu.swift | 2 +- .../Components/ActionButtons/RefreshMetadataButton.swift | 2 +- .../Views/ItemView/Components/AttributeHStack.swift | 2 +- .../Views/ItemView/Components/CastAndCrewHStack.swift | 2 +- .../Components/EpisodeSelector/Components/EpisodeCard.swift | 2 +- .../EpisodeSelector/Components/EpisodeContent.swift | 2 +- .../EpisodeSelector/Components/EpisodeHStack.swift | 2 +- .../Components/EpisodeSelector/Components/ErrorCard.swift | 2 +- .../Components/EpisodeSelector/Components/LoadingCard.swift | 2 +- .../Components/EpisodeSelector/EpisodeSelector.swift | 2 +- Swiftfin tvOS/Views/ItemView/Components/PlayButton.swift | 2 +- .../Views/ItemView/Components/SimilarItemsHStack.swift | 2 +- .../Views/ItemView/Components/SpecialFeaturesHStack.swift | 2 +- .../ItemView/EpisodeItemView/EpisodeItemContentView.swift | 2 +- .../Views/ItemView/EpisodeItemView/EpisodeItemView.swift | 2 +- Swiftfin tvOS/Views/ItemView/ItemView.swift | 2 +- .../Views/ItemView/MovieItemView/MovieItemContentView.swift | 2 +- .../Views/ItemView/MovieItemView/MovieItemView.swift | 2 +- .../Views/ItemView/ScrollViews/CinematicScrollView.swift | 2 +- .../ItemView/SeriesItemView/SeriesItemContentView.swift | 2 +- .../Views/ItemView/SeriesItemView/SeriesItemView.swift | 2 +- Swiftfin tvOS/Views/LearnMoreModal.swift | 2 +- Swiftfin tvOS/Views/MediaSourceInfoView.swift | 2 +- Swiftfin tvOS/Views/MediaView/Components/MediaItem.swift | 2 +- Swiftfin tvOS/Views/MediaView/MediaView.swift | 2 +- .../Views/PagingLibraryView/Components/LibraryRow.swift | 2 +- .../Views/PagingLibraryView/Components/ListRow.swift | 2 +- .../Views/PagingLibraryView/PagingLibraryView.swift | 2 +- .../ProgramsView/Components/ProgramButtonContent.swift | 2 +- .../ProgramsView/Components/ProgramProgressOverlay.swift | 2 +- Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift | 2 +- Swiftfin tvOS/Views/QuickConnectView.swift | 2 +- Swiftfin tvOS/Views/SearchView.swift | 2 +- .../Views/SelectUserView/Components/AddUserButton.swift | 2 +- .../SelectUserView/Components/SelectUserBottomBar.swift | 2 +- .../SelectUserView/Components/ServerSelectionMenu.swift | 2 +- .../Views/SelectUserView/Components/UserGridButton.swift | 2 +- Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift | 2 +- Swiftfin tvOS/Views/ServerDetailView.swift | 2 +- .../Components/CustomProfileButton.swift | 2 +- .../Components/EditCustomDeviceProfileView.swift | 2 +- .../CustomDeviceProfileSettingsView.swift | 2 +- .../Components/ListColumnsPickerView.swift | 2 +- .../Components/Sections/HomeSection.swift | 2 +- .../Components/Sections/ItemSection.swift | 2 +- .../CustomizeViewsSettings/CustomizeViewsSettings.swift | 2 +- .../Views/SettingsView/ExperimentalSettingsView.swift | 2 +- .../Views/SettingsView/IndicatorSettingsView.swift | 2 +- .../Views/SettingsView/PlaybackQualitySettingsView.swift | 2 +- Swiftfin tvOS/Views/SettingsView/SettingsView.swift | 2 +- .../Views/SettingsView/VideoPlayerSettingsView.swift | 2 +- .../Views/UserSignInView/Components/PublicUserButton.swift | 2 +- Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift | 2 +- .../Views/VideoPlayer/Components/LoadingView.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift | 2 +- .../LiveOverlays/Components/LiveBottomBarView.swift | 2 +- .../Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift | 2 +- .../Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift | 2 +- .../Views/VideoPlayer/LiveOverlays/LiveOverlay.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/LiveVideoPlayer.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/NativeVideoPlayer.swift | 2 +- .../Views/VideoPlayer/Overlays/ChapterOverlay.swift | 2 +- .../Overlays/Components/ActionButtons/ActionButtons.swift | 2 +- .../Components/ActionButtons/AutoPlayActionButton.swift | 2 +- .../Components/ActionButtons/ChaptersActionButton.swift | 2 +- .../Components/ActionButtons/PlayNextItemActionButton.swift | 2 +- .../ActionButtons/PlayPreviousItemActionButton.swift | 2 +- .../Overlays/Components/ActionButtons/SubtitleButton.swift | 2 +- .../VideoPlayer/Overlays/Components/BarActionButtons.swift | 2 +- .../VideoPlayer/Overlays/Components/BottomBarView.swift | 2 +- .../Overlays/Components/tvOSSLider/SliderView.swift | 2 +- .../Overlays/Components/tvOSSLider/tvOSSlider.swift | 2 +- .../Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/Overlays/Overlay.swift | 2 +- .../Views/VideoPlayer/Overlays/SmallMenuOverlay.swift | 2 +- Swiftfin tvOS/Views/VideoPlayer/VideoPlayer.swift | 2 +- Swiftfin/App/AppDelegate.swift | 2 +- Swiftfin/App/SwiftfinApp+ValueObservation.swift | 2 +- Swiftfin/App/SwiftfinApp.swift | 2 +- Swiftfin/Components/BasicStepper.swift | 2 +- Swiftfin/Components/CircularProgressView.swift | 2 +- Swiftfin/Components/CountryPicker.swift | 2 +- Swiftfin/Components/DelayedProgressView.swift | 2 +- Swiftfin/Components/DotHStack.swift | 2 +- Swiftfin/Components/ErrorView.swift | 2 +- Swiftfin/Components/GestureView.swift | 2 +- Swiftfin/Components/HourMinutePicker.swift | 2 +- Swiftfin/Components/LandscapePosterProgressBar.swift | 2 +- Swiftfin/Components/LanguagePicker.swift | 2 +- Swiftfin/Components/LearnMoreButton.swift | 2 +- .../LetterPickerBar/Components/LetterPickerButton.swift | 2 +- Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift | 2 +- Swiftfin/Components/ListRow.swift | 2 +- Swiftfin/Components/ListRowButton.swift | 2 +- Swiftfin/Components/ListTitleSection.swift | 2 +- .../NavigationBarFilterDrawer/FilterDrawerButton.swift | 2 +- .../NavigationBarFilterDrawer.swift | 2 +- Swiftfin/Components/OrderedSectionSelectorView.swift | 2 +- Swiftfin/Components/PillHStack.swift | 2 +- Swiftfin/Components/PosterButton.swift | 2 +- Swiftfin/Components/PosterHStack.swift | 2 +- Swiftfin/Components/PrimaryButton.swift | 2 +- Swiftfin/Components/SeeAllButton.swift | 2 +- Swiftfin/Components/SettingsBarButton.swift | 2 +- Swiftfin/Components/Slider/CapsuleSlider.swift | 2 +- Swiftfin/Components/Slider/Slider.swift | 2 +- Swiftfin/Components/Slider/ThumbSlider.swift | 2 +- Swiftfin/Components/SplitContentView.swift | 2 +- Swiftfin/Components/UnmaskSecureField.swift | 2 +- Swiftfin/Components/UpdateView.swift | 2 +- Swiftfin/Components/Video3DFormatPicker.swift | 2 +- Swiftfin/Components/iOS15View.swift | 2 +- Swiftfin/Extensions/ButtonStyle-iOS.swift | 2 +- Swiftfin/Extensions/Label-iOS.swift | 2 +- .../View/Modifiers/DetectOrientationModifier.swift | 2 +- .../View/Modifiers/NavigationBarCloseButton.swift | 2 +- .../NavigationBarDrawerModifier.swift | 2 +- .../NavigationBarDrawerView.swift | 2 +- .../Extensions/View/Modifiers/NavigationBarMenuButton.swift | 2 +- .../NavigationBarOffset/NavigationBarOffsetModifier.swift | 2 +- .../NavigationBarOffset/NavigationBarOffsetView.swift | 2 +- Swiftfin/Extensions/View/View-iOS.swift | 2 +- Swiftfin/Objects/AppURLHandler.swift | 2 +- Swiftfin/Objects/DeepLink.swift | 2 +- Swiftfin/Views/AboutAppView.swift | 2 +- .../Views/AdminDashboardView/APIKeyView/APIKeysView.swift | 2 +- .../APIKeyView/Components/APIKeysRow.swift | 2 +- .../ActiveSessionDetailView/ActiveSessionDetailView.swift | 2 +- .../ActiveSessionDetailView/Components/StreamSection.swift | 2 +- .../Components/TranscodeSection.swift | 2 +- .../ActiveSessionsView/ActiveSessionsView.swift | 2 +- .../Components/ActiveSessionProgressSection.swift | 2 +- .../ActiveSessionsView/Components/ActiveSessionRow.swift | 2 +- .../AddServerUserView/AddServerUserView.swift | 2 +- Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift | 2 +- .../Views/AdminDashboardView/Components/DeviceSection.swift | 2 +- .../Views/AdminDashboardView/Components/UserSection.swift | 2 +- .../Components/Sections/CompatibilitiesSection.swift | 2 +- .../Components/Sections/CustomDeviceNameSection.swift | 2 +- .../DeviceDetailsView/DeviceDetailsView.swift | 2 +- .../DevicesView/Components/DeviceRow.swift | 2 +- .../Views/AdminDashboardView/DevicesView/DevicesView.swift | 2 +- .../AdminDashboardView/ServerLogsView/ServerLogsView.swift | 2 +- .../ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift | 2 +- .../AddTaskTriggerView/Components/DayOfWeekRow.swift | 2 +- .../AddTaskTriggerView/Components/IntervalRow.swift | 2 +- .../AddTaskTriggerView/Components/TimeLimitSection.swift | 2 +- .../ServerTasks/AddTaskTriggerView/Components/TimeRow.swift | 2 +- .../AddTaskTriggerView/Components/TriggerTypeRow.swift | 2 +- .../Components/Sections/DetailsSection.swift | 2 +- .../Components/Sections/LastErrorSection.swift | 2 +- .../Components/Sections/LastRunSection.swift | 2 +- .../Components/Sections/ServerTaskProgressSection.swift | 2 +- .../Components/Sections/TriggersSection.swift | 2 +- .../EditServerTaskView/Components/TriggerRow.swift | 2 +- .../ServerTasks/EditServerTaskView/EditServerTaskView.swift | 2 +- .../ServerTasksView/Components/DestructiveServerTask.swift | 2 +- .../ServerTasksView/Components/ServerTaskRow.swift | 2 +- .../ServerTasks/ServerTasksView/ServerTasksView.swift | 2 +- .../AddAccessScheduleView/AddAccessScheduleView.swift | 2 +- .../Components/EditAccessScheduleRow.swift | 2 +- .../EditAccessScheduleView/EditAccessScheduleView.swift | 2 +- .../ServerUserAccessView/ServerUserAccessView.swift | 2 +- .../ServerUserDetailsView/ServerUserDetailsView.swift | 2 +- .../ServerUserDeviceAccessView.swift | 2 +- .../ServerUserLiveTVAccessView.swift | 2 +- .../ServerUserParentalRatingView.swift | 2 +- .../Components/Sections/ExternalAccessSection.swift | 2 +- .../Components/Sections/ManagementSection.swift | 2 +- .../Components/Sections/MediaPlaybackSection.swift | 2 +- .../Components/Sections/PermissionSection.swift | 2 +- .../Components/Sections/RemoteControlSection.swift | 2 +- .../Components/Sections/SessionsSection.swift | 2 +- .../Components/Sections/StatusSection.swift | 2 +- .../Components/Sections/SyncPlaySection.swift | 2 +- .../ServerUserPermissionsView.swift | 2 +- .../ServerUsersView/Components/ServerUsersRow.swift | 2 +- .../ServerUsersView/ServerUsersView.swift | 2 +- Swiftfin/Views/AppIconSelectorView.swift | 2 +- Swiftfin/Views/AppLoadingView.swift | 2 +- Swiftfin/Views/AppSettingsView/AppSettingsView.swift | 2 +- .../AppSettingsView/Components/SignOutIntervalSection.swift | 2 +- Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift | 2 +- .../ChannelLibraryView/Components/CompactChannelView.swift | 2 +- .../ChannelLibraryView/Components/DetailedChannelView.swift | 2 +- Swiftfin/Views/ConnectToServerView.swift | 2 +- Swiftfin/Views/DownloadListView.swift | 2 +- .../Views/DownloadTaskView/DownloadTaskContentView.swift | 2 +- Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift | 2 +- Swiftfin/Views/EditServerView.swift | 2 +- Swiftfin/Views/FilterView.swift | 2 +- Swiftfin/Views/FontPickerView.swift | 2 +- .../Views/HomeView/Components/ContinueWatchingView.swift | 2 +- .../Views/HomeView/Components/LatestInLibraryView.swift | 2 +- Swiftfin/Views/HomeView/Components/NextUpView.swift | 2 +- Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift | 2 +- Swiftfin/Views/HomeView/HomeView.swift | 2 +- .../ItemEditorView/Components/RefreshMetadataButton.swift | 2 +- .../EditMetadataView/Components/Sections/DateSection.swift | 2 +- .../Components/Sections/DisplayOrderSection.swift | 2 +- .../Components/Sections/EpisodeSection.swift | 2 +- .../Components/Sections/LocalizationSection.swift | 2 +- .../Components/Sections/LockMetadataSection.swift | 2 +- .../Components/Sections/MediaFormatSection.swift | 2 +- .../Components/Sections/OverviewSection.swift | 2 +- .../Components/Sections/ParentialRatingsSection.swift | 2 +- .../Components/Sections/ReviewsSection.swift | 2 +- .../Components/Sections/SeriesSection.swift | 2 +- .../EditMetadataView/Components/Sections/TitleSection.swift | 2 +- .../ItemEditorView/EditMetadataView/EditMetadataView.swift | 2 +- .../IdentifyItemView/Components/RemoteSearchResultRow.swift | 2 +- .../Components/RemoteSearchResultView.swift | 2 +- .../ItemEditorView/IdentifyItemView/IdentifyItemView.swift | 2 +- Swiftfin/Views/ItemEditorView/ItemEditorView.swift | 2 +- .../AddItemElementView/AddItemElementView.swift | 2 +- .../AddItemElementView/Components/NameInput.swift | 2 +- .../Components/SearchResultsSection.swift | 2 +- .../EditItemElementView/Components/EditItemElementRow.swift | 2 +- .../EditItemElementView/EditItemElementView.swift | 2 +- Swiftfin/Views/ItemOverviewView.swift | 2 +- .../Views/ItemView/Components/AboutView/AboutView.swift | 2 +- .../Components/AboutView/Components/AboutView+Card.swift | 2 +- .../Components/AboutView/Components/MediaSourcesCard.swift | 2 +- .../Components/AboutView/Components/OverviewCard.swift | 2 +- .../Components/AboutView/Components/RatingsCard.swift | 2 +- Swiftfin/Views/ItemView/Components/ActionButtonHStack.swift | 2 +- Swiftfin/Views/ItemView/Components/AttributeHStack.swift | 2 +- Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift | 2 +- Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift | 2 +- .../Components/EpisodeSelector/Components/EmptyCard.swift | 2 +- .../Components/EpisodeSelector/Components/EpisodeCard.swift | 2 +- .../EpisodeSelector/Components/EpisodeContent.swift | 2 +- .../EpisodeSelector/Components/EpisodeHStack.swift | 2 +- .../Components/EpisodeSelector/Components/ErrorCard.swift | 2 +- .../Components/EpisodeSelector/Components/LoadingCard.swift | 2 +- .../Components/EpisodeSelector/EpisodeSelector.swift | 2 +- Swiftfin/Views/ItemView/Components/GenresHStack.swift | 2 +- Swiftfin/Views/ItemView/Components/OffsetScrollView.swift | 2 +- Swiftfin/Views/ItemView/Components/OverviewView.swift | 2 +- Swiftfin/Views/ItemView/Components/PlayButton.swift | 2 +- Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift | 2 +- .../Views/ItemView/Components/SpecialFeatureHStack.swift | 2 +- Swiftfin/Views/ItemView/Components/StudiosHStack.swift | 2 +- Swiftfin/Views/ItemView/ItemView.swift | 2 +- .../iOS/CollectionItemView/CollectionItemContentView.swift | 2 +- .../iOS/CollectionItemView/CollectionItemView.swift | 2 +- .../iOS/EpisodeItemView/EpisodeItemContentView.swift | 2 +- .../ItemView/iOS/EpisodeItemView/EpisodeItemView.swift | 2 +- .../ItemView/iOS/MovieItemView/MovieItemContentView.swift | 2 +- .../Views/ItemView/iOS/MovieItemView/MovieItemView.swift | 2 +- .../ItemView/iOS/ScrollViews/CinematicScrollView.swift | 2 +- .../ItemView/iOS/ScrollViews/CompactLogoScrollView.swift | 2 +- .../iOS/ScrollViews/CompactPortraitScrollView.swift | 2 +- .../ItemView/iOS/SeriesItemView/SeriesItemContentView.swift | 2 +- .../Views/ItemView/iOS/SeriesItemView/SeriesItemView.swift | 2 +- .../iPadOSCollectionItemContentView.swift | 2 +- .../CollectionItemView/iPadOSCollectionItemView.swift | 2 +- .../iPadOS/EpisodeItemView/iPadOSEpisodeContentView.swift | 2 +- .../iPadOS/EpisodeItemView/iPadOSEpisodeItemView.swift | 2 +- .../iPadOS/MovieItemView/iPadOSMovieItemContentView.swift | 2 +- .../ItemView/iPadOS/MovieItemView/iPadOSMovieItemView.swift | 2 +- .../iPadOS/ScrollViews/iPadOSCinematicScrollView.swift | 2 +- .../iPadOS/SeriesItemView/iPadOSSeriesItemContentView.swift | 2 +- .../iPadOS/SeriesItemView/iPadOSSeriesItemView.swift | 2 +- Swiftfin/Views/MediaSourceInfoView.swift | 2 +- Swiftfin/Views/MediaStreamInfoView.swift | 2 +- Swiftfin/Views/MediaView/Components/MediaItem.swift | 2 +- Swiftfin/Views/MediaView/MediaView.swift | 2 +- .../Views/PagingLibraryView/Components/LibraryRow.swift | 2 +- .../Components/LibraryViewTypeToggle.swift | 2 +- Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift | 2 +- .../ProgramsView/Components/ProgramButtonContent.swift | 2 +- .../ProgramsView/Components/ProgramProgressOverlay.swift | 2 +- Swiftfin/Views/ProgramsView/ProgramsView.swift | 2 +- Swiftfin/Views/QuickConnectView.swift | 2 +- .../Views/ResetUserPasswordView/ResetUserPasswordView.swift | 2 +- Swiftfin/Views/SearchView.swift | 2 +- .../Views/SelectUserView/Components/AddUserButton.swift | 2 +- Swiftfin/Views/SelectUserView/Components/AddUserRow.swift | 2 +- .../SelectUserView/Components/ServerSelectionMenu.swift | 2 +- .../Views/SelectUserView/Components/UserGridButton.swift | 2 +- Swiftfin/Views/SelectUserView/Components/UserRow.swift | 2 +- Swiftfin/Views/SelectUserView/SelectUserView.swift | 2 +- Swiftfin/Views/ServerCheckView.swift | 2 +- .../Components/CustomProfileButton.swift | 2 +- .../Components/EditCustomDeviceProfileView.swift | 2 +- .../CustomDeviceProfileSettingsView.swift | 2 +- .../Components/Sections/HomeSection.swift | 2 +- .../Components/Sections/ItemSection.swift | 2 +- .../CustomizeViewsSettings/CustomizeViewsSettings.swift | 2 +- Swiftfin/Views/SettingsView/DebugSettingsView.swift | 2 +- Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift | 2 +- Swiftfin/Views/SettingsView/GestureSettingsView.swift | 2 +- Swiftfin/Views/SettingsView/IndicatorSettingsView.swift | 2 +- .../Views/SettingsView/NativeVideoPlayerSettingsView.swift | 2 +- .../Views/SettingsView/PlaybackQualitySettingsView.swift | 2 +- .../SettingsView/Components/UserProfileRow.swift | 2 +- Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift | 2 +- .../UserProfileSettingsView/QuickConnectAuthorizeView.swift | 2 +- .../UserProfileSettingsView/UserLocalSecurityView.swift | 2 +- .../UserProfileSettingsView/UserProfileSettingsView.swift | 2 +- .../Components/ActionButtonSelectorView.swift | 2 +- .../Components/Sections/ButtonSection.swift | 2 +- .../Components/Sections/SliderSection.swift | 2 +- .../Components/Sections/SubtitleSection.swift | 2 +- .../Components/Sections/TimestampSection.swift | 2 +- .../Components/Sections/TransitionSection.swift | 2 +- .../VideoPlayerSettingsView/VideoPlayerSettingsView.swift | 2 +- .../UserProfileImagePicker/Components/PhotoPicker.swift | 2 +- .../Components/SquareImageCropView.swift | 2 +- .../UserProfileImagePicker/UserProfileImagePicker.swift | 2 +- .../Views/UserSignInView/Components/PublicUserRow.swift | 2 +- .../UserSignInView/Components/UserSignInSecurityView.swift | 2 +- Swiftfin/Views/UserSignInView/UserSignInView.swift | 2 +- Swiftfin/Views/VideoPlayer/Components/LoadingView.swift | 2 +- .../Views/VideoPlayer/Components/PlaybackSettingsView.swift | 2 +- Swiftfin/Views/VideoPlayer/LiveNativeVideoPlayer.swift | 2 +- .../LiveOverlays/Components/LiveBottomBarView.swift | 2 +- .../LiveOverlays/Components/LiveTopBarView.swift | 2 +- .../PlaybackButtons/LiveLargePlaybackButtons.swift | 2 +- .../PlaybackButtons/LiveSmallPlaybackButton.swift | 2 +- .../Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift | 2 +- Swiftfin/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift | 2 +- Swiftfin/Views/VideoPlayer/LiveVideoPlayer.swift | 2 +- Swiftfin/Views/VideoPlayer/NativeVideoPlayer.swift | 2 +- Swiftfin/Views/VideoPlayer/Overlays/ChapterOverlay.swift | 2 +- .../Overlays/Components/ActionButtons/ActionButtons.swift | 2 +- .../Components/ActionButtons/AdvancedActionButton.swift | 2 +- .../Components/ActionButtons/AspectFillActionButton.swift | 2 +- .../Components/ActionButtons/AudioActionButton.swift | 2 +- .../Components/ActionButtons/AutoPlayActionButton.swift | 2 +- .../Components/ActionButtons/ChaptersActionButton.swift | 2 +- .../Components/ActionButtons/PlayNextItemActionButton.swift | 2 +- .../ActionButtons/PlayPreviousItemActionButton.swift | 2 +- .../ActionButtons/PlaybackSpeedActionButton.swift | 2 +- .../Components/ActionButtons/SubtitleActionButton.swift | 2 +- .../VideoPlayer/Overlays/Components/BarActionButtons.swift | 2 +- .../VideoPlayer/Overlays/Components/BottomBarView.swift | 2 +- .../VideoPlayer/Overlays/Components/ChapterTrack.swift | 2 +- .../Views/VideoPlayer/Overlays/Components/OverlayMenu.swift | 2 +- .../Components/PlaybackButtons/LargePlaybackButtons.swift | 2 +- .../Components/PlaybackButtons/SmallPlaybackButtons.swift | 2 +- .../Overlays/Components/Timestamp/CompactTimeStamp.swift | 2 +- .../Overlays/Components/Timestamp/SplitTimestamp.swift | 2 +- .../Views/VideoPlayer/Overlays/Components/TopBarView.swift | 2 +- Swiftfin/Views/VideoPlayer/Overlays/MainOverlay.swift | 2 +- Swiftfin/Views/VideoPlayer/Overlays/Overlay.swift | 2 +- Swiftfin/Views/VideoPlayer/VideoPlayer+Actions.swift | 2 +- Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.swift | 2 +- Swiftfin/Views/VideoPlayer/VideoPlayer.swift | 2 +- 736 files changed, 735 insertions(+), 741 deletions(-) diff --git a/PreferencesView/Sources/PreferencesView/Box.swift b/PreferencesView/Sources/PreferencesView/Box.swift index dc054e087..99f822a1c 100644 --- a/PreferencesView/Sources/PreferencesView/Box.swift +++ b/PreferencesView/Sources/PreferencesView/Box.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // class Box { diff --git a/PreferencesView/Sources/PreferencesView/KeyCommandAction.swift b/PreferencesView/Sources/PreferencesView/KeyCommandAction.swift index 1227f481a..484d4a73f 100644 --- a/PreferencesView/Sources/PreferencesView/KeyCommandAction.swift +++ b/PreferencesView/Sources/PreferencesView/KeyCommandAction.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/PreferencesView/Sources/PreferencesView/KeyCommandsBuilder.swift b/PreferencesView/Sources/PreferencesView/KeyCommandsBuilder.swift index f287d5fa2..41da3f77b 100644 --- a/PreferencesView/Sources/PreferencesView/KeyCommandsBuilder.swift +++ b/PreferencesView/Sources/PreferencesView/KeyCommandsBuilder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/PreferencesView/Sources/PreferencesView/PreferenceKeys.swift b/PreferencesView/Sources/PreferencesView/PreferenceKeys.swift index a19e44797..16b4150c6 100644 --- a/PreferencesView/Sources/PreferencesView/PreferenceKeys.swift +++ b/PreferencesView/Sources/PreferencesView/PreferenceKeys.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/PreferencesView/Sources/PreferencesView/PreferencesView.swift b/PreferencesView/Sources/PreferencesView/PreferencesView.swift index 2ed71ce90..031180aaa 100644 --- a/PreferencesView/Sources/PreferencesView/PreferencesView.swift +++ b/PreferencesView/Sources/PreferencesView/PreferencesView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/PreferencesView/Sources/PreferencesView/PressCommandAction.swift b/PreferencesView/Sources/PreferencesView/PressCommandAction.swift index f9e5af83f..98d028ba7 100644 --- a/PreferencesView/Sources/PreferencesView/PressCommandAction.swift +++ b/PreferencesView/Sources/PreferencesView/PressCommandAction.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/PreferencesView/Sources/PreferencesView/PressCommandBuilder.swift b/PreferencesView/Sources/PreferencesView/PressCommandBuilder.swift index 5d67c31c9..ddc7d2b97 100644 --- a/PreferencesView/Sources/PreferencesView/PressCommandBuilder.swift +++ b/PreferencesView/Sources/PreferencesView/PressCommandBuilder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/PreferencesView/Sources/PreferencesView/UIPreferencesHostingController.swift b/PreferencesView/Sources/PreferencesView/UIPreferencesHostingController.swift index abe471a97..8bc6bac58 100644 --- a/PreferencesView/Sources/PreferencesView/UIPreferencesHostingController.swift +++ b/PreferencesView/Sources/PreferencesView/UIPreferencesHostingController.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/PreferencesView/Sources/PreferencesView/UIViewController+Swizzling.swift b/PreferencesView/Sources/PreferencesView/UIViewController+Swizzling.swift index b35c85c38..b4f53b3bc 100644 --- a/PreferencesView/Sources/PreferencesView/UIViewController+Swizzling.swift +++ b/PreferencesView/Sources/PreferencesView/UIViewController+Swizzling.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwizzleSwift diff --git a/PreferencesView/Sources/PreferencesView/ViewExtensions.swift b/PreferencesView/Sources/PreferencesView/ViewExtensions.swift index 39ce78302..33e434f94 100644 --- a/PreferencesView/Sources/PreferencesView/ViewExtensions.swift +++ b/PreferencesView/Sources/PreferencesView/ViewExtensions.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/RedrawOnNotificationView.swift b/RedrawOnNotificationView.swift index fb0cda448..1f1881af0 100644 --- a/RedrawOnNotificationView.swift +++ b/RedrawOnNotificationView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Scripts/Translations/AlphabetizeStrings.swift b/Scripts/Translations/AlphabetizeStrings.swift index ffd94657a..bacdb0b48 100644 --- a/Scripts/Translations/AlphabetizeStrings.swift +++ b/Scripts/Translations/AlphabetizeStrings.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Scripts/Translations/PurgeUnusedStrings.swift b/Scripts/Translations/PurgeUnusedStrings.swift index cddfbadc3..ff9c9cc3d 100755 --- a/Scripts/Translations/PurgeUnusedStrings.swift +++ b/Scripts/Translations/PurgeUnusedStrings.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/AppIcons.swift b/Shared/AppIcons/AppIcons.swift index 743fc9873..847d22756 100644 --- a/Shared/AppIcons/AppIcons.swift +++ b/Shared/AppIcons/AppIcons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/DarkAppIcon.swift b/Shared/AppIcons/DarkAppIcon.swift index 443ce9b92..5192e9ef8 100644 --- a/Shared/AppIcons/DarkAppIcon.swift +++ b/Shared/AppIcons/DarkAppIcon.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/InvertedDarkAppIcon.swift b/Shared/AppIcons/InvertedDarkAppIcon.swift index 20c3b1802..70ec89094 100644 --- a/Shared/AppIcons/InvertedDarkAppIcon.swift +++ b/Shared/AppIcons/InvertedDarkAppIcon.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/InvertedLightAppIcon.swift b/Shared/AppIcons/InvertedLightAppIcon.swift index d9ca8fd70..3dacdfbbb 100644 --- a/Shared/AppIcons/InvertedLightAppIcon.swift +++ b/Shared/AppIcons/InvertedLightAppIcon.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/LightAppIcon.swift b/Shared/AppIcons/LightAppIcon.swift index 02dc79de6..8a5b6244a 100644 --- a/Shared/AppIcons/LightAppIcon.swift +++ b/Shared/AppIcons/LightAppIcon.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/AppIcons/PrimaryAppIcon.swift b/Shared/AppIcons/PrimaryAppIcon.swift index e0c0ca5f8..45de9b8f2 100644 --- a/Shared/AppIcons/PrimaryAppIcon.swift +++ b/Shared/AppIcons/PrimaryAppIcon.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Components/AlternateLayoutView.swift b/Shared/Components/AlternateLayoutView.swift index 6f0e2608c..ef3da0c41 100644 --- a/Shared/Components/AlternateLayoutView.swift +++ b/Shared/Components/AlternateLayoutView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/AssertionFailureView.swift b/Shared/Components/AssertionFailureView.swift index b98205315..52f1e2935 100644 --- a/Shared/Components/AssertionFailureView.swift +++ b/Shared/Components/AssertionFailureView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/BlurView.swift b/Shared/Components/BlurView.swift index 5809525ad..e428860eb 100644 --- a/Shared/Components/BlurView.swift +++ b/Shared/Components/BlurView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/BulletedList.swift b/Shared/Components/BulletedList.swift index 8a760a085..8d3220cd4 100644 --- a/Shared/Components/BulletedList.swift +++ b/Shared/Components/BulletedList.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/ChevronAlertButton.swift b/Shared/Components/ChevronAlertButton.swift index 91b6d0dc1..dd157b7f7 100644 --- a/Shared/Components/ChevronAlertButton.swift +++ b/Shared/Components/ChevronAlertButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/ChevronButton.swift b/Shared/Components/ChevronButton.swift index 46be21aa1..c5fb3d3a9 100644 --- a/Shared/Components/ChevronButton.swift +++ b/Shared/Components/ChevronButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/FastSVGView.swift b/Shared/Components/FastSVGView.swift index 3a4c2f180..866f77def 100644 --- a/Shared/Components/FastSVGView.swift +++ b/Shared/Components/FastSVGView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SVGKit diff --git a/Shared/Components/ImageView.swift b/Shared/Components/ImageView.swift index 11eda88de..793d2db5a 100644 --- a/Shared/Components/ImageView.swift +++ b/Shared/Components/ImageView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Shared/Components/LetterPickerOrientation.swift b/Shared/Components/LetterPickerOrientation.swift index c5e55ecb6..0a7f9aa47 100644 --- a/Shared/Components/LetterPickerOrientation.swift +++ b/Shared/Components/LetterPickerOrientation.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/ListRowCheckbox.swift b/Shared/Components/ListRowCheckbox.swift index 01b01a70a..755b8ce83 100644 --- a/Shared/Components/ListRowCheckbox.swift +++ b/Shared/Components/ListRowCheckbox.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/MaxHeightText.swift b/Shared/Components/MaxHeightText.swift index a31126858..772c748a7 100644 --- a/Shared/Components/MaxHeightText.swift +++ b/Shared/Components/MaxHeightText.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/PosterIndicators/FavoriteIndicator.swift b/Shared/Components/PosterIndicators/FavoriteIndicator.swift index 0121117ad..7e9f67ce6 100644 --- a/Shared/Components/PosterIndicators/FavoriteIndicator.swift +++ b/Shared/Components/PosterIndicators/FavoriteIndicator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/PosterIndicators/ProgressIndicator.swift b/Shared/Components/PosterIndicators/ProgressIndicator.swift index d01857f54..09477c30c 100644 --- a/Shared/Components/PosterIndicators/ProgressIndicator.swift +++ b/Shared/Components/PosterIndicators/ProgressIndicator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/PosterIndicators/UnwatchedIndicator.swift b/Shared/Components/PosterIndicators/UnwatchedIndicator.swift index b8838cc9c..9d0abfc26 100644 --- a/Shared/Components/PosterIndicators/UnwatchedIndicator.swift +++ b/Shared/Components/PosterIndicators/UnwatchedIndicator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/PosterIndicators/WatchedIndicator.swift b/Shared/Components/PosterIndicators/WatchedIndicator.swift index 1efd10271..8744feb22 100644 --- a/Shared/Components/PosterIndicators/WatchedIndicator.swift +++ b/Shared/Components/PosterIndicators/WatchedIndicator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/ProgressBar.swift b/Shared/Components/ProgressBar.swift index 5b505e7cb..b0b1816aa 100644 --- a/Shared/Components/ProgressBar.swift +++ b/Shared/Components/ProgressBar.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/RotateContentView.swift b/Shared/Components/RotateContentView.swift index 2ab74fcc1..8dd8625cb 100644 --- a/Shared/Components/RotateContentView.swift +++ b/Shared/Components/RotateContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/RowDivider.swift b/Shared/Components/RowDivider.swift index 50e62ca45..0d58f07fd 100644 --- a/Shared/Components/RowDivider.swift +++ b/Shared/Components/RowDivider.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/SelectorView.swift b/Shared/Components/SelectorView.swift index a8c7666d2..ba7d2a2d8 100644 --- a/Shared/Components/SelectorView.swift +++ b/Shared/Components/SelectorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/SeparatorHStack.swift b/Shared/Components/SeparatorHStack.swift index c9b732ced..500227418 100644 --- a/Shared/Components/SeparatorHStack.swift +++ b/Shared/Components/SeparatorHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/SeparatorVStack.swift b/Shared/Components/SeparatorVStack.swift index 44721f997..b7db46b2c 100644 --- a/Shared/Components/SeparatorVStack.swift +++ b/Shared/Components/SeparatorVStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/SystemImageContentView.swift b/Shared/Components/SystemImageContentView.swift index dcf237ccf..b32c9eb6d 100644 --- a/Shared/Components/SystemImageContentView.swift +++ b/Shared/Components/SystemImageContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/TextPairView.swift b/Shared/Components/TextPairView.swift index 66c9ace9f..284063f3e 100644 --- a/Shared/Components/TextPairView.swift +++ b/Shared/Components/TextPairView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Components/TruncatedText.swift b/Shared/Components/TruncatedText.swift index a5ba38c50..d042a9239 100644 --- a/Shared/Components/TruncatedText.swift +++ b/Shared/Components/TruncatedText.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/UserProfileImage/UserProfileHeroImage.swift b/Shared/Components/UserProfileImage/UserProfileHeroImage.swift index 01352720f..15d1b4fba 100644 --- a/Shared/Components/UserProfileImage/UserProfileHeroImage.swift +++ b/Shared/Components/UserProfileImage/UserProfileHeroImage.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/UserProfileImage/UserProfileImage.swift b/Shared/Components/UserProfileImage/UserProfileImage.swift index aab0aa755..eeabb7e72 100644 --- a/Shared/Components/UserProfileImage/UserProfileImage.swift +++ b/Shared/Components/UserProfileImage/UserProfileImage.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Components/WrappedView.swift b/Shared/Components/WrappedView.swift index eaca6e7e2..38d78f23d 100644 --- a/Shared/Components/WrappedView.swift +++ b/Shared/Components/WrappedView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Coordinators/AdminDashboardCoordinator.swift b/Shared/Coordinators/AdminDashboardCoordinator.swift index 4dfcecb9d..5c7705687 100644 --- a/Shared/Coordinators/AdminDashboardCoordinator.swift +++ b/Shared/Coordinators/AdminDashboardCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Coordinators/AppSettingsCoordinator.swift b/Shared/Coordinators/AppSettingsCoordinator.swift index 8cc419a79..3c897e21c 100644 --- a/Shared/Coordinators/AppSettingsCoordinator.swift +++ b/Shared/Coordinators/AppSettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import PulseUI diff --git a/Shared/Coordinators/BasicNavigationCoordinator.swift b/Shared/Coordinators/BasicNavigationCoordinator.swift index b3093cc75..86d00749e 100644 --- a/Shared/Coordinators/BasicNavigationCoordinator.swift +++ b/Shared/Coordinators/BasicNavigationCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/CustomDeviceProfileCoordinator.swift b/Shared/Coordinators/CustomDeviceProfileCoordinator.swift index 7af5a547a..998e110c5 100644 --- a/Shared/Coordinators/CustomDeviceProfileCoordinator.swift +++ b/Shared/Coordinators/CustomDeviceProfileCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/CustomizeSettingsCoordinator.swift b/Shared/Coordinators/CustomizeSettingsCoordinator.swift index 259bd0334..91cc4869a 100644 --- a/Shared/Coordinators/CustomizeSettingsCoordinator.swift +++ b/Shared/Coordinators/CustomizeSettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/DownloadListCoordinator.swift b/Shared/Coordinators/DownloadListCoordinator.swift index fc9af3622..6706f84b0 100644 --- a/Shared/Coordinators/DownloadListCoordinator.swift +++ b/Shared/Coordinators/DownloadListCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // #if os(iOS) diff --git a/Shared/Coordinators/DownloadTaskCoordinator.swift b/Shared/Coordinators/DownloadTaskCoordinator.swift index 6a9b72bc0..b3eaa133d 100644 --- a/Shared/Coordinators/DownloadTaskCoordinator.swift +++ b/Shared/Coordinators/DownloadTaskCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // #if os(iOS) diff --git a/Shared/Coordinators/EditCustomDeviceProfileCoordinator.swift b/Shared/Coordinators/EditCustomDeviceProfileCoordinator.swift index f84149b5f..c414e2411 100644 --- a/Shared/Coordinators/EditCustomDeviceProfileCoordinator.swift +++ b/Shared/Coordinators/EditCustomDeviceProfileCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/FilterCoordinator.swift b/Shared/Coordinators/FilterCoordinator.swift index be8c8fae0..851f57891 100644 --- a/Shared/Coordinators/FilterCoordinator.swift +++ b/Shared/Coordinators/FilterCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/HomeCoordinator.swift b/Shared/Coordinators/HomeCoordinator.swift index d4fc91f48..aba2cbe8b 100644 --- a/Shared/Coordinators/HomeCoordinator.swift +++ b/Shared/Coordinators/HomeCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/ItemCoordinator.swift b/Shared/Coordinators/ItemCoordinator.swift index ff902321e..9a68e28a3 100644 --- a/Shared/Coordinators/ItemCoordinator.swift +++ b/Shared/Coordinators/ItemCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/ItemEditorCoordinator.swift b/Shared/Coordinators/ItemEditorCoordinator.swift index 930f6bfe0..d97201df3 100644 --- a/Shared/Coordinators/ItemEditorCoordinator.swift +++ b/Shared/Coordinators/ItemEditorCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Coordinators/LibraryCoordinator.swift b/Shared/Coordinators/LibraryCoordinator.swift index 950263f25..0b708424f 100644 --- a/Shared/Coordinators/LibraryCoordinator.swift +++ b/Shared/Coordinators/LibraryCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Coordinators/LiveTVCoordinator/iOSLiveTVCoordinator.swift b/Shared/Coordinators/LiveTVCoordinator/iOSLiveTVCoordinator.swift index 12ccd6fe6..fb5125e48 100644 --- a/Shared/Coordinators/LiveTVCoordinator/iOSLiveTVCoordinator.swift +++ b/Shared/Coordinators/LiveTVCoordinator/iOSLiveTVCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/LiveTVCoordinator/tvOSLiveTVCoordinator.swift b/Shared/Coordinators/LiveTVCoordinator/tvOSLiveTVCoordinator.swift index 1e091649c..294146d28 100644 --- a/Shared/Coordinators/LiveTVCoordinator/tvOSLiveTVCoordinator.swift +++ b/Shared/Coordinators/LiveTVCoordinator/tvOSLiveTVCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/LiveVideoPlayerCoordinator.swift b/Shared/Coordinators/LiveVideoPlayerCoordinator.swift index 16c449ec8..cda151b2b 100644 --- a/Shared/Coordinators/LiveVideoPlayerCoordinator.swift +++ b/Shared/Coordinators/LiveVideoPlayerCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Coordinators/MainCoordinator/iOSMainCoordinator.swift b/Shared/Coordinators/MainCoordinator/iOSMainCoordinator.swift index 71c868c7f..d5566c06b 100644 --- a/Shared/Coordinators/MainCoordinator/iOSMainCoordinator.swift +++ b/Shared/Coordinators/MainCoordinator/iOSMainCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Coordinators/MainCoordinator/iOSMainTabCoordinator.swift b/Shared/Coordinators/MainCoordinator/iOSMainTabCoordinator.swift index 39d3f9b24..048b3e8e3 100644 --- a/Shared/Coordinators/MainCoordinator/iOSMainTabCoordinator.swift +++ b/Shared/Coordinators/MainCoordinator/iOSMainTabCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/MainCoordinator/tvOSMainCoordinator.swift b/Shared/Coordinators/MainCoordinator/tvOSMainCoordinator.swift index 2e93413d3..d23fc771a 100644 --- a/Shared/Coordinators/MainCoordinator/tvOSMainCoordinator.swift +++ b/Shared/Coordinators/MainCoordinator/tvOSMainCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift b/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift index 3e9f28fe4..255af5158 100644 --- a/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift +++ b/Shared/Coordinators/MainCoordinator/tvOSMainTabCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/MediaCoordinator.swift b/Shared/Coordinators/MediaCoordinator.swift index dcf178a09..83d0280df 100644 --- a/Shared/Coordinators/MediaCoordinator.swift +++ b/Shared/Coordinators/MediaCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/MediaSourceInfoCoordinator.swift b/Shared/Coordinators/MediaSourceInfoCoordinator.swift index b1d0df0a5..34bc36dda 100644 --- a/Shared/Coordinators/MediaSourceInfoCoordinator.swift +++ b/Shared/Coordinators/MediaSourceInfoCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Coordinators/PlaybackQualitySettingsCoordinator.swift b/Shared/Coordinators/PlaybackQualitySettingsCoordinator.swift index 88d388b6e..2cc4d9d8c 100644 --- a/Shared/Coordinators/PlaybackQualitySettingsCoordinator.swift +++ b/Shared/Coordinators/PlaybackQualitySettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/PlaybackSettingsCoordinator.swift b/Shared/Coordinators/PlaybackSettingsCoordinator.swift index 28015f185..5c0b4cb5a 100644 --- a/Shared/Coordinators/PlaybackSettingsCoordinator.swift +++ b/Shared/Coordinators/PlaybackSettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Coordinators/SearchCoordinator.swift b/Shared/Coordinators/SearchCoordinator.swift index 4f6f1e3f0..2e03217ae 100644 --- a/Shared/Coordinators/SearchCoordinator.swift +++ b/Shared/Coordinators/SearchCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/SelectUserCoordinator.swift b/Shared/Coordinators/SelectUserCoordinator.swift index d12d11983..fc0e5459d 100644 --- a/Shared/Coordinators/SelectUserCoordinator.swift +++ b/Shared/Coordinators/SelectUserCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/SettingsCoordinator.swift b/Shared/Coordinators/SettingsCoordinator.swift index e4517738d..00c566f01 100644 --- a/Shared/Coordinators/SettingsCoordinator.swift +++ b/Shared/Coordinators/SettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Coordinators/UserProfileImageCoordinator.swift b/Shared/Coordinators/UserProfileImageCoordinator.swift index 3cbe0a51a..d9b217839 100644 --- a/Shared/Coordinators/UserProfileImageCoordinator.swift +++ b/Shared/Coordinators/UserProfileImageCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Coordinators/UserSignInCoordinator.swift b/Shared/Coordinators/UserSignInCoordinator.swift index adf88edc0..ecbbb3338 100644 --- a/Shared/Coordinators/UserSignInCoordinator.swift +++ b/Shared/Coordinators/UserSignInCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Coordinators/VideoPlayerCoordinator.swift b/Shared/Coordinators/VideoPlayerCoordinator.swift index b5dcb37df..59fa79999 100644 --- a/Shared/Coordinators/VideoPlayerCoordinator.swift +++ b/Shared/Coordinators/VideoPlayerCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Coordinators/VideoPlayerSettingsCoordinator.swift b/Shared/Coordinators/VideoPlayerSettingsCoordinator.swift index 0133f055b..5ed3b9100 100644 --- a/Shared/Coordinators/VideoPlayerSettingsCoordinator.swift +++ b/Shared/Coordinators/VideoPlayerSettingsCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Coordinators/VideoPlayerWrapperCoordinator.swift b/Shared/Coordinators/VideoPlayerWrapperCoordinator.swift index 4ca46fe70..8d04118b7 100644 --- a/Shared/Coordinators/VideoPlayerWrapperCoordinator.swift +++ b/Shared/Coordinators/VideoPlayerWrapperCoordinator.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Errors/NetworkError.swift b/Shared/Errors/NetworkError.swift index 8644e4529..9a7384586 100644 --- a/Shared/Errors/NetworkError.swift +++ b/Shared/Errors/NetworkError.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Array.swift b/Shared/Extensions/Array.swift index 202b471b8..3ec15df30 100644 --- a/Shared/Extensions/Array.swift +++ b/Shared/Extensions/Array.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Binding.swift b/Shared/Extensions/Binding.swift index 06a00e359..c698e748b 100644 --- a/Shared/Extensions/Binding.swift +++ b/Shared/Extensions/Binding.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/Button.swift b/Shared/Extensions/Button.swift index 8e9358a4f..6428120be 100644 --- a/Shared/Extensions/Button.swift +++ b/Shared/Extensions/Button.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/CGPoint.swift b/Shared/Extensions/CGPoint.swift index e7de1d28e..6685e385e 100644 --- a/Shared/Extensions/CGPoint.swift +++ b/Shared/Extensions/CGPoint.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/CGSize.swift b/Shared/Extensions/CGSize.swift index fa2e9a3a7..68ce49b44 100644 --- a/Shared/Extensions/CGSize.swift +++ b/Shared/Extensions/CGSize.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/Collection.swift b/Shared/Extensions/Collection.swift index c56236a57..68089011e 100644 --- a/Shared/Extensions/Collection.swift +++ b/Shared/Extensions/Collection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Color.swift b/Shared/Extensions/Color.swift index 16bc9b311..49b865ee5 100644 --- a/Shared/Extensions/Color.swift +++ b/Shared/Extensions/Color.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/CoreStore.swift b/Shared/Extensions/CoreStore.swift index 6e5d27c9d..a8d2d4d38 100644 --- a/Shared/Extensions/CoreStore.swift +++ b/Shared/Extensions/CoreStore.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/Extensions/Dictionary.swift b/Shared/Extensions/Dictionary.swift index 7364e2766..710194807 100644 --- a/Shared/Extensions/Dictionary.swift +++ b/Shared/Extensions/Dictionary.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Double.swift b/Shared/Extensions/Double.swift index 7840f9271..bdeb29c10 100644 --- a/Shared/Extensions/Double.swift +++ b/Shared/Extensions/Double.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Edge.swift b/Shared/Extensions/Edge.swift index bc505bf4d..1c6915332 100644 --- a/Shared/Extensions/Edge.swift +++ b/Shared/Extensions/Edge.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/EdgeInsets.swift b/Shared/Extensions/EdgeInsets.swift index 65a2a671d..3118d74a5 100644 --- a/Shared/Extensions/EdgeInsets.swift +++ b/Shared/Extensions/EdgeInsets.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/EnvironmentValue/EnvironmentValue+Keys.swift b/Shared/Extensions/EnvironmentValue/EnvironmentValue+Keys.swift index f39ae4533..11d15b73e 100644 --- a/Shared/Extensions/EnvironmentValue/EnvironmentValue+Keys.swift +++ b/Shared/Extensions/EnvironmentValue/EnvironmentValue+Keys.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Extensions/EnvironmentValue/EnvironmentValue+Values.swift b/Shared/Extensions/EnvironmentValue/EnvironmentValue+Values.swift index 6a0df59ce..bb197f892 100644 --- a/Shared/Extensions/EnvironmentValue/EnvironmentValue+Values.swift +++ b/Shared/Extensions/EnvironmentValue/EnvironmentValue+Values.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/Equatable.swift b/Shared/Extensions/Equatable.swift index 23ce2b585..25925e3ea 100644 --- a/Shared/Extensions/Equatable.swift +++ b/Shared/Extensions/Equatable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Files.swift b/Shared/Extensions/Files.swift index 58e320e4b..d7f2dc77c 100644 --- a/Shared/Extensions/Files.swift +++ b/Shared/Extensions/Files.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Font.swift b/Shared/Extensions/Font.swift index 0338ef117..a27d6911d 100644 --- a/Shared/Extensions/Font.swift +++ b/Shared/Extensions/Font.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/FormatStyle.swift b/Shared/Extensions/FormatStyle.swift index 95652cdc9..78fa3bc69 100644 --- a/Shared/Extensions/FormatStyle.swift +++ b/Shared/Extensions/FormatStyle.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/Hashable.swift b/Shared/Extensions/Hashable.swift index 13970de47..49bbb6a6d 100644 --- a/Shared/Extensions/Hashable.swift +++ b/Shared/Extensions/Hashable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/HorizontalAlignment.swift b/Shared/Extensions/HorizontalAlignment.swift index 3cce5dd34..d9aa92a04 100644 --- a/Shared/Extensions/HorizontalAlignment.swift +++ b/Shared/Extensions/HorizontalAlignment.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/Int.swift b/Shared/Extensions/Int.swift index 227c9e8cf..a0942a732 100644 --- a/Shared/Extensions/Int.swift +++ b/Shared/Extensions/Int.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ActiveSessionsPolicy.swift b/Shared/Extensions/JellyfinAPI/ActiveSessionsPolicy.swift index 1506ac82e..c7b2469e2 100644 --- a/Shared/Extensions/JellyfinAPI/ActiveSessionsPolicy.swift +++ b/Shared/Extensions/JellyfinAPI/ActiveSessionsPolicy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Images.swift b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Images.swift index cef5fef00..b3225015a 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Images.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Images.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Poster.swift b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Poster.swift index 18e56f43a..03c20900d 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Poster.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+Poster.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift index e4271a954..30294d02d 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto+VideoPlayerViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto.swift b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto.swift index 98c541abe..0f0d267fb 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemDto/BaseItemDto.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Algorithms diff --git a/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson+Poster.swift b/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson+Poster.swift index 3c7c7044b..df5c47a12 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson+Poster.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson+Poster.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson.swift b/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson.swift index f21d27bb9..7d93f69fc 100644 --- a/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson.swift +++ b/Shared/Extensions/JellyfinAPI/BaseItemPerson/BaseItemPerson.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ChapterInfo.swift b/Shared/Extensions/JellyfinAPI/ChapterInfo.swift index 86de41999..a044d06d2 100644 --- a/Shared/Extensions/JellyfinAPI/ChapterInfo.swift +++ b/Shared/Extensions/JellyfinAPI/ChapterInfo.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/CodecProfile.swift b/Shared/Extensions/JellyfinAPI/CodecProfile.swift index b67674d96..c70de069c 100644 --- a/Shared/Extensions/JellyfinAPI/CodecProfile.swift +++ b/Shared/Extensions/JellyfinAPI/CodecProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/DayOfWeek.swift b/Shared/Extensions/JellyfinAPI/DayOfWeek.swift index 75bfb3195..0959e1b9b 100644 --- a/Shared/Extensions/JellyfinAPI/DayOfWeek.swift +++ b/Shared/Extensions/JellyfinAPI/DayOfWeek.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/DeviceInfo.swift b/Shared/Extensions/JellyfinAPI/DeviceInfo.swift index 9876bc15d..0dd2b9f2c 100644 --- a/Shared/Extensions/JellyfinAPI/DeviceInfo.swift +++ b/Shared/Extensions/JellyfinAPI/DeviceInfo.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/DeviceProfile.swift b/Shared/Extensions/JellyfinAPI/DeviceProfile.swift index df1ab0db5..8636feec2 100644 --- a/Shared/Extensions/JellyfinAPI/DeviceProfile.swift +++ b/Shared/Extensions/JellyfinAPI/DeviceProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Extensions/JellyfinAPI/DeviceType.swift b/Shared/Extensions/JellyfinAPI/DeviceType.swift index 48a94ce45..143acbf82 100644 --- a/Shared/Extensions/JellyfinAPI/DeviceType.swift +++ b/Shared/Extensions/JellyfinAPI/DeviceType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/JellyfinAPI/DirectPlayProfile.swift b/Shared/Extensions/JellyfinAPI/DirectPlayProfile.swift index 2c4c1d838..cbae5ec4e 100644 --- a/Shared/Extensions/JellyfinAPI/DirectPlayProfile.swift +++ b/Shared/Extensions/JellyfinAPI/DirectPlayProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/DynamicDayOfWeek.swift b/Shared/Extensions/JellyfinAPI/DynamicDayOfWeek.swift index 62735b664..9cb3c6a02 100644 --- a/Shared/Extensions/JellyfinAPI/DynamicDayOfWeek.swift +++ b/Shared/Extensions/JellyfinAPI/DynamicDayOfWeek.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ImageBlurHashes.swift b/Shared/Extensions/JellyfinAPI/ImageBlurHashes.swift index 63a6d99ed..b27087f96 100644 --- a/Shared/Extensions/JellyfinAPI/ImageBlurHashes.swift +++ b/Shared/Extensions/JellyfinAPI/ImageBlurHashes.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ItemFields.swift b/Shared/Extensions/JellyfinAPI/ItemFields.swift index 1e299f98e..974df1873 100644 --- a/Shared/Extensions/JellyfinAPI/ItemFields.swift +++ b/Shared/Extensions/JellyfinAPI/ItemFields.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ItemFilter+ItemTrait.swift b/Shared/Extensions/JellyfinAPI/ItemFilter+ItemTrait.swift index f9a32404d..d234dad9f 100644 --- a/Shared/Extensions/JellyfinAPI/ItemFilter+ItemTrait.swift +++ b/Shared/Extensions/JellyfinAPI/ItemFilter+ItemTrait.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/JellyfinAPIError.swift b/Shared/Extensions/JellyfinAPI/JellyfinAPIError.swift index 0e8eb714c..6b7ababac 100644 --- a/Shared/Extensions/JellyfinAPI/JellyfinAPIError.swift +++ b/Shared/Extensions/JellyfinAPI/JellyfinAPIError.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/JellyfinClient.swift b/Shared/Extensions/JellyfinAPI/JellyfinClient.swift index bd238dc70..38155236c 100644 --- a/Shared/Extensions/JellyfinAPI/JellyfinClient.swift +++ b/Shared/Extensions/JellyfinAPI/JellyfinClient.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/LoginFailurePolicy.swift b/Shared/Extensions/JellyfinAPI/LoginFailurePolicy.swift index f8354c758..728163db8 100644 --- a/Shared/Extensions/JellyfinAPI/LoginFailurePolicy.swift +++ b/Shared/Extensions/JellyfinAPI/LoginFailurePolicy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/MaxBitratePolicy.swift b/Shared/Extensions/JellyfinAPI/MaxBitratePolicy.swift index eb6435172..5988a749f 100644 --- a/Shared/Extensions/JellyfinAPI/MaxBitratePolicy.swift +++ b/Shared/Extensions/JellyfinAPI/MaxBitratePolicy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift index 15ff3815f..0f0c321dd 100644 --- a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift +++ b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo+ItemVideoPlayerViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo.swift b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo.swift index d237c8821..117c55b1a 100644 --- a/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo.swift +++ b/Shared/Extensions/JellyfinAPI/MediaSourceInfo/MediaSourceInfo.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/MediaStream.swift b/Shared/Extensions/JellyfinAPI/MediaStream.swift index 7b702acf9..c9652a6a4 100644 --- a/Shared/Extensions/JellyfinAPI/MediaStream.swift +++ b/Shared/Extensions/JellyfinAPI/MediaStream.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Extensions/JellyfinAPI/MetadataField.swift b/Shared/Extensions/JellyfinAPI/MetadataField.swift index a1c719072..fcee7c435 100644 --- a/Shared/Extensions/JellyfinAPI/MetadataField.swift +++ b/Shared/Extensions/JellyfinAPI/MetadataField.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/NameGuidPair.swift b/Shared/Extensions/JellyfinAPI/NameGuidPair.swift index f9b81bbfd..c5c32a6ae 100644 --- a/Shared/Extensions/JellyfinAPI/NameGuidPair.swift +++ b/Shared/Extensions/JellyfinAPI/NameGuidPair.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ParentalRating.swift b/Shared/Extensions/JellyfinAPI/ParentalRating.swift index dc57c7120..43ce6a667 100644 --- a/Shared/Extensions/JellyfinAPI/ParentalRating.swift +++ b/Shared/Extensions/JellyfinAPI/ParentalRating.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/PersonKind.swift b/Shared/Extensions/JellyfinAPI/PersonKind.swift index bdd953118..243fa8a74 100644 --- a/Shared/Extensions/JellyfinAPI/PersonKind.swift +++ b/Shared/Extensions/JellyfinAPI/PersonKind.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/PlayMethod.swift b/Shared/Extensions/JellyfinAPI/PlayMethod.swift index f18618c40..6fa9c3ef4 100644 --- a/Shared/Extensions/JellyfinAPI/PlayMethod.swift +++ b/Shared/Extensions/JellyfinAPI/PlayMethod.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/PlayerStateInfo.swift b/Shared/Extensions/JellyfinAPI/PlayerStateInfo.swift index f0058a7c7..c33d5e172 100644 --- a/Shared/Extensions/JellyfinAPI/PlayerStateInfo.swift +++ b/Shared/Extensions/JellyfinAPI/PlayerStateInfo.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift b/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift index 9ea81b501..b1c05efcb 100644 --- a/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift +++ b/Shared/Extensions/JellyfinAPI/RemoteSearchResult.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/ServerTicks.swift b/Shared/Extensions/JellyfinAPI/ServerTicks.swift index 22aecfa74..6570f3746 100644 --- a/Shared/Extensions/JellyfinAPI/ServerTicks.swift +++ b/Shared/Extensions/JellyfinAPI/ServerTicks.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/SessionInfo.swift b/Shared/Extensions/JellyfinAPI/SessionInfo.swift index 6c50f6afb..bf6495825 100644 --- a/Shared/Extensions/JellyfinAPI/SessionInfo.swift +++ b/Shared/Extensions/JellyfinAPI/SessionInfo.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/SortOrder+ItemSortOrder.swift b/Shared/Extensions/JellyfinAPI/SortOrder+ItemSortOrder.swift index c68e659a2..32b3d7705 100644 --- a/Shared/Extensions/JellyfinAPI/SortOrder+ItemSortOrder.swift +++ b/Shared/Extensions/JellyfinAPI/SortOrder+ItemSortOrder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/SpecialFeatureType.swift b/Shared/Extensions/JellyfinAPI/SpecialFeatureType.swift index 483db9880..6ee865cd0 100644 --- a/Shared/Extensions/JellyfinAPI/SpecialFeatureType.swift +++ b/Shared/Extensions/JellyfinAPI/SpecialFeatureType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/SubtitleProfile.swift b/Shared/Extensions/JellyfinAPI/SubtitleProfile.swift index 6f124efc4..fd8ec3bc1 100644 --- a/Shared/Extensions/JellyfinAPI/SubtitleProfile.swift +++ b/Shared/Extensions/JellyfinAPI/SubtitleProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/SyncPlayUserAccessType.swift b/Shared/Extensions/JellyfinAPI/SyncPlayUserAccessType.swift index 9e11c93e7..0537698a4 100644 --- a/Shared/Extensions/JellyfinAPI/SyncPlayUserAccessType.swift +++ b/Shared/Extensions/JellyfinAPI/SyncPlayUserAccessType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/TaskCompletionStatus.swift b/Shared/Extensions/JellyfinAPI/TaskCompletionStatus.swift index a48b0777c..25046f0e9 100644 --- a/Shared/Extensions/JellyfinAPI/TaskCompletionStatus.swift +++ b/Shared/Extensions/JellyfinAPI/TaskCompletionStatus.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/TaskState.swift b/Shared/Extensions/JellyfinAPI/TaskState.swift index 50ba73b90..06f63a6a4 100644 --- a/Shared/Extensions/JellyfinAPI/TaskState.swift +++ b/Shared/Extensions/JellyfinAPI/TaskState.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/TaskTriggerType.swift b/Shared/Extensions/JellyfinAPI/TaskTriggerType.swift index add2d13cf..1141fa55f 100644 --- a/Shared/Extensions/JellyfinAPI/TaskTriggerType.swift +++ b/Shared/Extensions/JellyfinAPI/TaskTriggerType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/TranscodeReason.swift b/Shared/Extensions/JellyfinAPI/TranscodeReason.swift index 6049e2efd..365831183 100644 --- a/Shared/Extensions/JellyfinAPI/TranscodeReason.swift +++ b/Shared/Extensions/JellyfinAPI/TranscodeReason.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/TranscodingProfile.swift b/Shared/Extensions/JellyfinAPI/TranscodingProfile.swift index 699b69ab8..39edbea68 100644 --- a/Shared/Extensions/JellyfinAPI/TranscodingProfile.swift +++ b/Shared/Extensions/JellyfinAPI/TranscodingProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/UserDto.swift b/Shared/Extensions/JellyfinAPI/UserDto.swift index 59de3902e..61404ace8 100644 --- a/Shared/Extensions/JellyfinAPI/UserDto.swift +++ b/Shared/Extensions/JellyfinAPI/UserDto.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/JellyfinAPI/Video3DFormat.swift b/Shared/Extensions/JellyfinAPI/Video3DFormat.swift index f8073b14f..662152a61 100644 --- a/Shared/Extensions/JellyfinAPI/Video3DFormat.swift +++ b/Shared/Extensions/JellyfinAPI/Video3DFormat.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/NavigationCoordinatable.swift b/Shared/Extensions/NavigationCoordinatable.swift index dd327f7ea..276ca9f36 100644 --- a/Shared/Extensions/NavigationCoordinatable.swift +++ b/Shared/Extensions/NavigationCoordinatable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Shared/Extensions/Nuke/DataCache.swift b/Shared/Extensions/Nuke/DataCache.swift index c3eff914f..a57bd54e1 100644 --- a/Shared/Extensions/Nuke/DataCache.swift +++ b/Shared/Extensions/Nuke/DataCache.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/Extensions/Nuke/ImagePipeline.swift b/Shared/Extensions/Nuke/ImagePipeline.swift index fb4faff97..68a544687 100644 --- a/Shared/Extensions/Nuke/ImagePipeline.swift +++ b/Shared/Extensions/Nuke/ImagePipeline.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Optional.swift b/Shared/Extensions/Optional.swift index 82234f9a5..1ad51f827 100644 --- a/Shared/Extensions/Optional.swift +++ b/Shared/Extensions/Optional.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/OrderedDictionary.swift b/Shared/Extensions/OrderedDictionary.swift index 302c1326d..13394084b 100644 --- a/Shared/Extensions/OrderedDictionary.swift +++ b/Shared/Extensions/OrderedDictionary.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import OrderedCollections diff --git a/Shared/Extensions/PersistentLogHandler.swift b/Shared/Extensions/PersistentLogHandler.swift index 5b1d76e97..f3cdf3dea 100644 --- a/Shared/Extensions/PersistentLogHandler.swift +++ b/Shared/Extensions/PersistentLogHandler.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Sequence.swift b/Shared/Extensions/Sequence.swift index afc8fee82..525adbc0b 100644 --- a/Shared/Extensions/Sequence.swift +++ b/Shared/Extensions/Sequence.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/Set.swift b/Shared/Extensions/Set.swift index a44224603..f1786d8f8 100644 --- a/Shared/Extensions/Set.swift +++ b/Shared/Extensions/Set.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/String.swift b/Shared/Extensions/String.swift index cffd79c2e..80aba5400 100644 --- a/Shared/Extensions/String.swift +++ b/Shared/Extensions/String.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Algorithms diff --git a/Shared/Extensions/Task.swift b/Shared/Extensions/Task.swift index cff9cd90a..7e7302aa1 100644 --- a/Shared/Extensions/Task.swift +++ b/Shared/Extensions/Task.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Extensions/Text.swift b/Shared/Extensions/Text.swift index c49808884..c376aca59 100644 --- a/Shared/Extensions/Text.swift +++ b/Shared/Extensions/Text.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/UIApplication.swift b/Shared/Extensions/UIApplication.swift index fd83c1306..2cac26023 100644 --- a/Shared/Extensions/UIApplication.swift +++ b/Shared/Extensions/UIApplication.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/UIColor.swift b/Shared/Extensions/UIColor.swift index a41a6f4ea..f8b78a9ae 100644 --- a/Shared/Extensions/UIColor.swift +++ b/Shared/Extensions/UIColor.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/UIDevice.swift b/Shared/Extensions/UIDevice.swift index 2668ebcff..a8685f3c6 100644 --- a/Shared/Extensions/UIDevice.swift +++ b/Shared/Extensions/UIDevice.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/UIGestureRecognizer.swift b/Shared/Extensions/UIGestureRecognizer.swift index dbf46e426..b825df563 100644 --- a/Shared/Extensions/UIGestureRecognizer.swift +++ b/Shared/Extensions/UIGestureRecognizer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/UIHostingController.swift b/Shared/Extensions/UIHostingController.swift index da2258c7f..f633f8cc4 100644 --- a/Shared/Extensions/UIHostingController.swift +++ b/Shared/Extensions/UIHostingController.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/UIScreen.swift b/Shared/Extensions/UIScreen.swift index 70c5f8a79..6372d1c4e 100644 --- a/Shared/Extensions/UIScreen.swift +++ b/Shared/Extensions/UIScreen.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Extensions/URL.swift b/Shared/Extensions/URL.swift index e11a938e3..cffe97483 100644 --- a/Shared/Extensions/URL.swift +++ b/Shared/Extensions/URL.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/URLComponents.swift b/Shared/Extensions/URLComponents.swift index c2e04cacf..a7cf37ec4 100644 --- a/Shared/Extensions/URLComponents.swift +++ b/Shared/Extensions/URLComponents.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/URLResponse.swift b/Shared/Extensions/URLResponse.swift index ab497e15b..c95234aa7 100644 --- a/Shared/Extensions/URLResponse.swift +++ b/Shared/Extensions/URLResponse.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/URLSessionConfiguration.swift b/Shared/Extensions/URLSessionConfiguration.swift index e683d1bf7..4d2bbf2d7 100644 --- a/Shared/Extensions/URLSessionConfiguration.swift +++ b/Shared/Extensions/URLSessionConfiguration.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/VerticalAlignment.swift b/Shared/Extensions/VerticalAlignment.swift index 5b0764db1..06e635fd5 100644 --- a/Shared/Extensions/VerticalAlignment.swift +++ b/Shared/Extensions/VerticalAlignment.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Backport/BackPort+ScrollIndicatorVisibility.swift b/Shared/Extensions/ViewExtensions/Backport/BackPort+ScrollIndicatorVisibility.swift index 875c5f952..fedb76a25 100644 --- a/Shared/Extensions/ViewExtensions/Backport/BackPort+ScrollIndicatorVisibility.swift +++ b/Shared/Extensions/ViewExtensions/Backport/BackPort+ScrollIndicatorVisibility.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Extensions/ViewExtensions/Backport/Backport.swift b/Shared/Extensions/ViewExtensions/Backport/Backport.swift index 30844f154..639db398e 100644 --- a/Shared/Extensions/ViewExtensions/Backport/Backport.swift +++ b/Shared/Extensions/ViewExtensions/Backport/Backport.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/AttributeStyleModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/AttributeStyleModifier.swift index 7bda41574..dfcfa7e2b 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/AttributeStyleModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/AttributeStyleModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/BackgroundParallaxHeaderModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/BackgroundParallaxHeaderModifier.swift index 526377ea9..84a6daf09 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/BackgroundParallaxHeaderModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/BackgroundParallaxHeaderModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/BottomEdgeGradientModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/BottomEdgeGradientModifier.swift index 757052d97..4cf312d4e 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/BottomEdgeGradientModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/BottomEdgeGradientModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/ErrorMessage.swift b/Shared/Extensions/ViewExtensions/Modifiers/ErrorMessage.swift index e151c38ae..8807fa085 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/ErrorMessage.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/ErrorMessage.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/OnFinalDisappearModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/OnFinalDisappearModifier.swift index 888dda70c..8bbc1f329 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/OnFinalDisappearModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/OnFinalDisappearModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/OnFirstAppearModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/OnFirstAppearModifier.swift index c85402d0b..a158440c6 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/OnFirstAppearModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/OnFirstAppearModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/OnReceiveNotificationModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/OnReceiveNotificationModifier.swift index 1fd538e70..945d1993f 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/OnReceiveNotificationModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/OnReceiveNotificationModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/OnScenePhaseChangedModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/OnScenePhaseChangedModifier.swift index 5ccc3ff7b..c27074867 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/OnScenePhaseChangedModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/OnScenePhaseChangedModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/OnSizeChangedModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/OnSizeChangedModifier.swift index ef07415e6..6e014e07d 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/OnSizeChangedModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/OnSizeChangedModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/ScrollIfLargerThanContainerModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/ScrollIfLargerThanContainerModifier.swift index 5a524d70d..5a6225b4b 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/ScrollIfLargerThanContainerModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/ScrollIfLargerThanContainerModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/ScrollViewOffsetModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/ScrollViewOffsetModifier.swift index b098a68f0..09b9a7d85 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/ScrollViewOffsetModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/ScrollViewOffsetModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/Modifiers/SinceLastDisappearModifier.swift b/Shared/Extensions/ViewExtensions/Modifiers/SinceLastDisappearModifier.swift index 67a54155a..d66869d65 100644 --- a/Shared/Extensions/ViewExtensions/Modifiers/SinceLastDisappearModifier.swift +++ b/Shared/Extensions/ViewExtensions/Modifiers/SinceLastDisappearModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/PreferenceKeys.swift b/Shared/Extensions/ViewExtensions/PreferenceKeys.swift index 5afbcd35d..7357640e4 100644 --- a/Shared/Extensions/ViewExtensions/PreferenceKeys.swift +++ b/Shared/Extensions/ViewExtensions/PreferenceKeys.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Extensions/ViewExtensions/ViewExtensions.swift b/Shared/Extensions/ViewExtensions/ViewExtensions.swift index 3341c9210..7a663a1b9 100644 --- a/Shared/Extensions/ViewExtensions/ViewExtensions.swift +++ b/Shared/Extensions/ViewExtensions/ViewExtensions.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/AppAppearance.swift b/Shared/Objects/AppAppearance.swift index 256ce227f..80ce18bdb 100644 --- a/Shared/Objects/AppAppearance.swift +++ b/Shared/Objects/AppAppearance.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/ArrayBuilder.swift b/Shared/Objects/ArrayBuilder.swift index 0a8e34ad1..6a5a1ae00 100644 --- a/Shared/Objects/ArrayBuilder.swift +++ b/Shared/Objects/ArrayBuilder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/BindingBox.swift b/Shared/Objects/BindingBox.swift index 175eac266..155fd8c4e 100644 --- a/Shared/Objects/BindingBox.swift +++ b/Shared/Objects/BindingBox.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Objects/CaseIterablePicker.swift b/Shared/Objects/CaseIterablePicker.swift index 538cfd723..e4ce6e4a7 100644 --- a/Shared/Objects/CaseIterablePicker.swift +++ b/Shared/Objects/CaseIterablePicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Objects/ChannelProgram.swift b/Shared/Objects/ChannelProgram.swift index 43dc567db..d5fd2e77b 100644 --- a/Shared/Objects/ChannelProgram.swift +++ b/Shared/Objects/ChannelProgram.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/CommaStringBuilder.swift b/Shared/Objects/CommaStringBuilder.swift index 7456844f8..bbaff28f8 100644 --- a/Shared/Objects/CommaStringBuilder.swift +++ b/Shared/Objects/CommaStringBuilder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/CurrentDate.swift b/Shared/Objects/CurrentDate.swift index 4d4b840c5..2242e9959 100644 --- a/Shared/Objects/CurrentDate.swift +++ b/Shared/Objects/CurrentDate.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Objects/CustomDeviceProfileAction.swift b/Shared/Objects/CustomDeviceProfileAction.swift index f59fe94fa..b9f6dcfeb 100644 --- a/Shared/Objects/CustomDeviceProfileAction.swift +++ b/Shared/Objects/CustomDeviceProfileAction.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/DisplayOrder/BoxSetDisplayOrder.swift b/Shared/Objects/DisplayOrder/BoxSetDisplayOrder.swift index fc5444240..7e539798f 100644 --- a/Shared/Objects/DisplayOrder/BoxSetDisplayOrder.swift +++ b/Shared/Objects/DisplayOrder/BoxSetDisplayOrder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/DisplayOrder/SeriesDisplayOrder.swift b/Shared/Objects/DisplayOrder/SeriesDisplayOrder.swift index 0c7cdbabf..fa0798e98 100644 --- a/Shared/Objects/DisplayOrder/SeriesDisplayOrder.swift +++ b/Shared/Objects/DisplayOrder/SeriesDisplayOrder.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/Displayable.swift b/Shared/Objects/Displayable.swift index 935efd34f..c4278ba45 100644 --- a/Shared/Objects/Displayable.swift +++ b/Shared/Objects/Displayable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/Eventful.swift b/Shared/Objects/Eventful.swift index 258d9f142..1bf7b7a15 100644 --- a/Shared/Objects/Eventful.swift +++ b/Shared/Objects/Eventful.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Objects/GestureAction.swift b/Shared/Objects/GestureAction.swift index de4e37b17..59403a628 100644 --- a/Shared/Objects/GestureAction.swift +++ b/Shared/Objects/GestureAction.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/ImageSource.swift b/Shared/Objects/ImageSource.swift index b08c43c24..d131d81e7 100644 --- a/Shared/Objects/ImageSource.swift +++ b/Shared/Objects/ImageSource.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemArrayElements.swift b/Shared/Objects/ItemArrayElements.swift index 23b2df193..f9e00c8aa 100644 --- a/Shared/Objects/ItemArrayElements.swift +++ b/Shared/Objects/ItemArrayElements.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/AnyItemFilter.swift b/Shared/Objects/ItemFilter/AnyItemFilter.swift index 412ba1e4a..7b14470ce 100644 --- a/Shared/Objects/ItemFilter/AnyItemFilter.swift +++ b/Shared/Objects/ItemFilter/AnyItemFilter.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/ItemFilter.swift b/Shared/Objects/ItemFilter/ItemFilter.swift index 1f31c1667..514b73aef 100644 --- a/Shared/Objects/ItemFilter/ItemFilter.swift +++ b/Shared/Objects/ItemFilter/ItemFilter.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/ItemFilter/ItemFilterCollection.swift b/Shared/Objects/ItemFilter/ItemFilterCollection.swift index 3b3f4e9eb..c62c35964 100644 --- a/Shared/Objects/ItemFilter/ItemFilterCollection.swift +++ b/Shared/Objects/ItemFilter/ItemFilterCollection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/ItemFilter/ItemFilterType.swift b/Shared/Objects/ItemFilter/ItemFilterType.swift index 9547c58b1..422fe3394 100644 --- a/Shared/Objects/ItemFilter/ItemFilterType.swift +++ b/Shared/Objects/ItemFilter/ItemFilterType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/ItemFilter/ItemGenre.swift b/Shared/Objects/ItemFilter/ItemGenre.swift index 9433ab0ad..4c33b64cd 100644 --- a/Shared/Objects/ItemFilter/ItemGenre.swift +++ b/Shared/Objects/ItemFilter/ItemGenre.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/ItemLetter.swift b/Shared/Objects/ItemFilter/ItemLetter.swift index 9b8156b3d..cba593c30 100644 --- a/Shared/Objects/ItemFilter/ItemLetter.swift +++ b/Shared/Objects/ItemFilter/ItemLetter.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/ItemSortBy.swift b/Shared/Objects/ItemFilter/ItemSortBy.swift index c0eb0dbb4..f1ef59c40 100644 --- a/Shared/Objects/ItemFilter/ItemSortBy.swift +++ b/Shared/Objects/ItemFilter/ItemSortBy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/ItemTag.swift b/Shared/Objects/ItemFilter/ItemTag.swift index fc2b34221..4805cd9b2 100644 --- a/Shared/Objects/ItemFilter/ItemTag.swift +++ b/Shared/Objects/ItemFilter/ItemTag.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemFilter/ItemYear.swift b/Shared/Objects/ItemFilter/ItemYear.swift index 10abc7b98..30d1f2d05 100644 --- a/Shared/Objects/ItemFilter/ItemYear.swift +++ b/Shared/Objects/ItemFilter/ItemYear.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/ItemViewType.swift b/Shared/Objects/ItemViewType.swift index 0fefc53dd..e4e32e1a6 100644 --- a/Shared/Objects/ItemViewType.swift +++ b/Shared/Objects/ItemViewType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/LibraryDisplayType.swift b/Shared/Objects/LibraryDisplayType.swift index 472b8fd14..a8340c72e 100644 --- a/Shared/Objects/LibraryDisplayType.swift +++ b/Shared/Objects/LibraryDisplayType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/LibraryParent/LibraryParent.swift b/Shared/Objects/LibraryParent/LibraryParent.swift index 2e56805a0..0165513ba 100644 --- a/Shared/Objects/LibraryParent/LibraryParent.swift +++ b/Shared/Objects/LibraryParent/LibraryParent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/LibraryParent/TitledLibraryParent.swift b/Shared/Objects/LibraryParent/TitledLibraryParent.swift index 53101f8f3..706195861 100644 --- a/Shared/Objects/LibraryParent/TitledLibraryParent.swift +++ b/Shared/Objects/LibraryParent/TitledLibraryParent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/MediaComponents/AudoCodec.swift b/Shared/Objects/MediaComponents/AudoCodec.swift index 5339aa715..55f76f488 100644 --- a/Shared/Objects/MediaComponents/AudoCodec.swift +++ b/Shared/Objects/MediaComponents/AudoCodec.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/MediaComponents/MediaContainer.swift b/Shared/Objects/MediaComponents/MediaContainer.swift index db61d8c21..678b15e61 100644 --- a/Shared/Objects/MediaComponents/MediaContainer.swift +++ b/Shared/Objects/MediaComponents/MediaContainer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/MediaComponents/SubtitleFormat.swift b/Shared/Objects/MediaComponents/SubtitleFormat.swift index 0f3d55c09..c456512d1 100644 --- a/Shared/Objects/MediaComponents/SubtitleFormat.swift +++ b/Shared/Objects/MediaComponents/SubtitleFormat.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/MediaComponents/VideoCodec.swift b/Shared/Objects/MediaComponents/VideoCodec.swift index 93b92d947..4f5ef75ba 100644 --- a/Shared/Objects/MediaComponents/VideoCodec.swift +++ b/Shared/Objects/MediaComponents/VideoCodec.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/NotificationSet.swift b/Shared/Objects/NotificationSet.swift index 5dc37da92..8aa1934d7 100644 --- a/Shared/Objects/NotificationSet.swift +++ b/Shared/Objects/NotificationSet.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/OverlayType.swift b/Shared/Objects/OverlayType.swift index b83787f26..53b726c1b 100644 --- a/Shared/Objects/OverlayType.swift +++ b/Shared/Objects/OverlayType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/PanDirectionGestureRecognizer.swift b/Shared/Objects/PanDirectionGestureRecognizer.swift index 751695119..97fbcb9df 100644 --- a/Shared/Objects/PanDirectionGestureRecognizer.swift +++ b/Shared/Objects/PanDirectionGestureRecognizer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import UIKit diff --git a/Shared/Objects/PlaybackBitrate/PlaybackBitrate.swift b/Shared/Objects/PlaybackBitrate/PlaybackBitrate.swift index a40a84cee..0cbbdcfc2 100644 --- a/Shared/Objects/PlaybackBitrate/PlaybackBitrate.swift +++ b/Shared/Objects/PlaybackBitrate/PlaybackBitrate.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/PlaybackBitrate/PlaybackBitrateTestSize.swift b/Shared/Objects/PlaybackBitrate/PlaybackBitrateTestSize.swift index 800e4c4f2..fb8903100 100644 --- a/Shared/Objects/PlaybackBitrate/PlaybackBitrateTestSize.swift +++ b/Shared/Objects/PlaybackBitrate/PlaybackBitrateTestSize.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility+Video.swift b/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility+Video.swift index 70dd0e001..a655a6fcc 100644 --- a/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility+Video.swift +++ b/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility+Video.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility.swift b/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility.swift index 5cc26a02e..e39647b35 100644 --- a/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility.swift +++ b/Shared/Objects/PlaybackCompatibility/PlaybackCompatibility.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/PlaybackDeviceProfile.swift b/Shared/Objects/PlaybackDeviceProfile.swift index cc3336e52..a3b1c8d89 100644 --- a/Shared/Objects/PlaybackDeviceProfile.swift +++ b/Shared/Objects/PlaybackDeviceProfile.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/PlaybackSpeed.swift b/Shared/Objects/PlaybackSpeed.swift index 32e52c405..40768f2d0 100644 --- a/Shared/Objects/PlaybackSpeed.swift +++ b/Shared/Objects/PlaybackSpeed.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/Poster.swift b/Shared/Objects/Poster.swift index cdf18e0b5..b512334fd 100644 --- a/Shared/Objects/Poster.swift +++ b/Shared/Objects/Poster.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/PosterDisplayType.swift b/Shared/Objects/PosterDisplayType.swift index 4eaff949b..18e885257 100644 --- a/Shared/Objects/PosterDisplayType.swift +++ b/Shared/Objects/PosterDisplayType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/RepeatingTimer.swift b/Shared/Objects/RepeatingTimer.swift index 216ee63d7..c3cc8e12e 100644 --- a/Shared/Objects/RepeatingTimer.swift +++ b/Shared/Objects/RepeatingTimer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/RoundedCorner.swift b/Shared/Objects/RoundedCorner.swift index 2845e11a6..ccd5e0ba1 100644 --- a/Shared/Objects/RoundedCorner.swift +++ b/Shared/Objects/RoundedCorner.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Objects/ScalingButtonStyle.swift b/Shared/Objects/ScalingButtonStyle.swift index ed89f273f..1cde10705 100644 --- a/Shared/Objects/ScalingButtonStyle.swift +++ b/Shared/Objects/ScalingButtonStyle.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Objects/SelectUserServerSelection.swift b/Shared/Objects/SelectUserServerSelection.swift index a1b83b050..ded2602b9 100644 --- a/Shared/Objects/SelectUserServerSelection.swift +++ b/Shared/Objects/SelectUserServerSelection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/SeriesStatus.swift b/Shared/Objects/SeriesStatus.swift index a4548bbc5..d82aae1c0 100644 --- a/Shared/Objects/SeriesStatus.swift +++ b/Shared/Objects/SeriesStatus.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/SliderType.swift b/Shared/Objects/SliderType.swift index e041b5203..fcf5bab04 100644 --- a/Shared/Objects/SliderType.swift +++ b/Shared/Objects/SliderType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/Stateful.swift b/Shared/Objects/Stateful.swift index 4647ed8a5..e2c602ac7 100644 --- a/Shared/Objects/Stateful.swift +++ b/Shared/Objects/Stateful.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/Storable.swift b/Shared/Objects/Storable.swift index 887bba6d4..6588e0ed6 100644 --- a/Shared/Objects/Storable.swift +++ b/Shared/Objects/Storable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/StreamType.swift b/Shared/Objects/StreamType.swift index e715db8a1..7d504fb72 100644 --- a/Shared/Objects/StreamType.swift +++ b/Shared/Objects/StreamType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/SupportedCaseIterable.swift b/Shared/Objects/SupportedCaseIterable.swift index 46fc0684e..4c5b5069e 100644 --- a/Shared/Objects/SupportedCaseIterable.swift +++ b/Shared/Objects/SupportedCaseIterable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/SystemImageable.swift b/Shared/Objects/SystemImageable.swift index 9dbef46f8..87c4242de 100644 --- a/Shared/Objects/SystemImageable.swift +++ b/Shared/Objects/SystemImageable.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/TextPair.swift b/Shared/Objects/TextPair.swift index 8c9d95713..fb09f75ca 100644 --- a/Shared/Objects/TextPair.swift +++ b/Shared/Objects/TextPair.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/TimeStampType.swift b/Shared/Objects/TimeStampType.swift index 2ed77a7bb..51847bac7 100644 --- a/Shared/Objects/TimeStampType.swift +++ b/Shared/Objects/TimeStampType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/TimerProxy.swift b/Shared/Objects/TimerProxy.swift index 803761307..12febe876 100644 --- a/Shared/Objects/TimerProxy.swift +++ b/Shared/Objects/TimerProxy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Shared/Objects/TrailingTimestampType.swift b/Shared/Objects/TrailingTimestampType.swift index 8bef539a4..916fb4948 100644 --- a/Shared/Objects/TrailingTimestampType.swift +++ b/Shared/Objects/TrailingTimestampType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/Trie.swift b/Shared/Objects/Trie.swift index eb194709b..35ece1e58 100644 --- a/Shared/Objects/Trie.swift +++ b/Shared/Objects/Trie.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // class Trie where Key.Element: Hashable { diff --git a/Shared/Objects/UserAccessPolicy.swift b/Shared/Objects/UserAccessPolicy.swift index d9783d070..d9fa13713 100644 --- a/Shared/Objects/UserAccessPolicy.swift +++ b/Shared/Objects/UserAccessPolicy.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/UserPermissions.swift b/Shared/Objects/UserPermissions.swift index 706f5c3e5..e86b9a81b 100644 --- a/Shared/Objects/UserPermissions.swift +++ b/Shared/Objects/UserPermissions.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Shared/Objects/UserSignInState.swift b/Shared/Objects/UserSignInState.swift index 8c2cdee4e..c0e98f3a7 100644 --- a/Shared/Objects/UserSignInState.swift +++ b/Shared/Objects/UserSignInState.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/Utilities.swift b/Shared/Objects/Utilities.swift index 108ffdc87..5f3eaa541 100644 --- a/Shared/Objects/Utilities.swift +++ b/Shared/Objects/Utilities.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/VideoPlayerActionButton.swift b/Shared/Objects/VideoPlayerActionButton.swift index fa9a5bb9e..e38f2770c 100644 --- a/Shared/Objects/VideoPlayerActionButton.swift +++ b/Shared/Objects/VideoPlayerActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/VideoPlayerJumpLength.swift b/Shared/Objects/VideoPlayerJumpLength.swift index fffb6b7d8..25597486e 100644 --- a/Shared/Objects/VideoPlayerJumpLength.swift +++ b/Shared/Objects/VideoPlayerJumpLength.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Objects/VideoPlayerType/VideoPlayerType+Native.swift b/Shared/Objects/VideoPlayerType/VideoPlayerType+Native.swift index 2e4c1f57e..d0f7e0b6c 100644 --- a/Shared/Objects/VideoPlayerType/VideoPlayerType+Native.swift +++ b/Shared/Objects/VideoPlayerType/VideoPlayerType+Native.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/VideoPlayerType/VideoPlayerType+Shared.swift b/Shared/Objects/VideoPlayerType/VideoPlayerType+Shared.swift index 9e42a4e89..d63935291 100644 --- a/Shared/Objects/VideoPlayerType/VideoPlayerType+Shared.swift +++ b/Shared/Objects/VideoPlayerType/VideoPlayerType+Shared.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/VideoPlayerType/VideoPlayerType+Swiftfin.swift b/Shared/Objects/VideoPlayerType/VideoPlayerType+Swiftfin.swift index 1c2c12118..28ebeaee4 100644 --- a/Shared/Objects/VideoPlayerType/VideoPlayerType+Swiftfin.swift +++ b/Shared/Objects/VideoPlayerType/VideoPlayerType+Swiftfin.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Objects/VideoPlayerType/VideoPlayerType.swift b/Shared/Objects/VideoPlayerType/VideoPlayerType.swift index 38be61c58..f3d23c949 100644 --- a/Shared/Objects/VideoPlayerType/VideoPlayerType.swift +++ b/Shared/Objects/VideoPlayerType/VideoPlayerType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/ServerDiscovery/ServerDiscovery.swift b/Shared/ServerDiscovery/ServerDiscovery.swift index 21b745182..61e229d74 100644 --- a/Shared/ServerDiscovery/ServerDiscovery.swift +++ b/Shared/ServerDiscovery/ServerDiscovery.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ServerDiscovery/ServerResponse.swift b/Shared/ServerDiscovery/ServerResponse.swift index dae85d03c..ed0ccc4bc 100644 --- a/Shared/ServerDiscovery/ServerResponse.swift +++ b/Shared/ServerDiscovery/ServerResponse.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/Services/DownloadManager.swift b/Shared/Services/DownloadManager.swift index 2bc7f36a7..055499c0e 100644 --- a/Shared/Services/DownloadManager.swift +++ b/Shared/Services/DownloadManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Services/DownloadTask.swift b/Shared/Services/DownloadTask.swift index 47fae8c46..59a639e5a 100644 --- a/Shared/Services/DownloadTask.swift +++ b/Shared/Services/DownloadTask.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Services/Keychain.swift b/Shared/Services/Keychain.swift index be4f83e10..d945fff4c 100644 --- a/Shared/Services/Keychain.swift +++ b/Shared/Services/Keychain.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/Services/LogManager.swift b/Shared/Services/LogManager.swift index f7b75567d..27c915477 100644 --- a/Shared/Services/LogManager.swift +++ b/Shared/Services/LogManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/Services/Notifications.swift b/Shared/Services/Notifications.swift index 35794ff95..cd0cbd51a 100644 --- a/Shared/Services/Notifications.swift +++ b/Shared/Services/Notifications.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/Services/SwiftfinDefaults.swift b/Shared/Services/SwiftfinDefaults.swift index 96a1153d4..a0e3822b3 100644 --- a/Shared/Services/SwiftfinDefaults.swift +++ b/Shared/Services/SwiftfinDefaults.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/Services/UserSession.swift b/Shared/Services/UserSession.swift index 952f7aee9..942341e94 100644 --- a/Shared/Services/UserSession.swift +++ b/Shared/Services/UserSession.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreData diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index 9d0726798..bd3e2892a 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -16,8 +16,6 @@ internal enum L10n { internal static let absolute = L10n.tr("Localizable", "absolute", fallback: "Absolute") /// Accent Color internal static let accentColor = L10n.tr("Localizable", "accentColor", fallback: "Accent Color") - /// Some views may need an app restart to update. - internal static let accentColorDescription = L10n.tr("Localizable", "accentColorDescription", fallback: "Some views may need an app restart to update.") /// Access internal static let access = L10n.tr("Localizable", "access", fallback: "Access") /// Accessibility @@ -106,8 +104,6 @@ internal enum L10n { internal static let appIcon = L10n.tr("Localizable", "appIcon", fallback: "App Icon") /// Application Name internal static let applicationName = L10n.tr("Localizable", "applicationName", fallback: "Application Name") - /// Applying media information - internal static let applyingMediaInformation = L10n.tr("Localizable", "applyingMediaInformation", fallback: "Applying media information") /// Arranger internal static let arranger = L10n.tr("Localizable", "arranger", fallback: "Arranger") /// Artist @@ -1308,8 +1304,6 @@ internal enum L10n { internal static let unsavedChangesMessage = L10n.tr("Localizable", "unsavedChangesMessage", fallback: "You have unsaved changes. Are you sure you want to discard them?") /// URL internal static let url = L10n.tr("Localizable", "url", fallback: "URL") - /// Use as item - internal static let useAsItem = L10n.tr("Localizable", "useAsItem", fallback: "Use as item") /// Use as Transcoding Profile internal static let useAsTranscodingProfile = L10n.tr("Localizable", "useAsTranscodingProfile", fallback: "Use as Transcoding Profile") /// Use Primary Image diff --git a/Shared/SwiftfinStore/StoredValue/StoredValue.swift b/Shared/SwiftfinStore/StoredValue/StoredValue.swift index 5438c7eec..3085c1b21 100644 --- a/Shared/SwiftfinStore/StoredValue/StoredValue.swift +++ b/Shared/SwiftfinStore/StoredValue/StoredValue.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/SwiftfinStore/StoredValue/StoredValues+Server.swift b/Shared/SwiftfinStore/StoredValue/StoredValues+Server.swift index edf39eb37..f5d6e09bb 100644 --- a/Shared/SwiftfinStore/StoredValue/StoredValues+Server.swift +++ b/Shared/SwiftfinStore/StoredValue/StoredValues+Server.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/SwiftfinStore/StoredValue/StoredValues+Temp.swift b/Shared/SwiftfinStore/StoredValue/StoredValues+Temp.swift index ef20d0c23..29c5ed265 100644 --- a/Shared/SwiftfinStore/StoredValue/StoredValues+Temp.swift +++ b/Shared/SwiftfinStore/StoredValue/StoredValues+Temp.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/SwiftfinStore/StoredValue/StoredValues+User.swift b/Shared/SwiftfinStore/StoredValue/StoredValues+User.swift index 476b9a4e8..7e12270d3 100644 --- a/Shared/SwiftfinStore/StoredValue/StoredValues+User.swift +++ b/Shared/SwiftfinStore/StoredValue/StoredValues+User.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/SwiftfinStore/SwiftfinStore+Mappings.swift b/Shared/SwiftfinStore/SwiftfinStore+Mappings.swift index 14bc9c14f..8f9b01ba5 100644 --- a/Shared/SwiftfinStore/SwiftfinStore+Mappings.swift +++ b/Shared/SwiftfinStore/SwiftfinStore+Mappings.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/SwiftfinStore+ServerState.swift b/Shared/SwiftfinStore/SwiftfinStore+ServerState.swift index 4467f35a4..bd2206f84 100644 --- a/Shared/SwiftfinStore/SwiftfinStore+ServerState.swift +++ b/Shared/SwiftfinStore/SwiftfinStore+ServerState.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/SwiftfinStore.swift b/Shared/SwiftfinStore/SwiftfinStore.swift index 593b67ded..17e67b670 100644 --- a/Shared/SwiftfinStore/SwiftfinStore.swift +++ b/Shared/SwiftfinStore/SwiftfinStore.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/SwiftinStore+UserState.swift b/Shared/SwiftfinStore/SwiftinStore+UserState.swift index fd328264e..de29c34f7 100644 --- a/Shared/SwiftfinStore/SwiftinStore+UserState.swift +++ b/Shared/SwiftfinStore/SwiftinStore+UserState.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V1Schema/SwiftfinStore+V1.swift b/Shared/SwiftfinStore/V1Schema/SwiftfinStore+V1.swift index 316a47768..3a878ca48 100644 --- a/Shared/SwiftfinStore/V1Schema/SwiftfinStore+V1.swift +++ b/Shared/SwiftfinStore/V1Schema/SwiftfinStore+V1.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V1Schema/V1ServerModel.swift b/Shared/SwiftfinStore/V1Schema/V1ServerModel.swift index de961b8c4..d89c90d33 100644 --- a/Shared/SwiftfinStore/V1Schema/V1ServerModel.swift +++ b/Shared/SwiftfinStore/V1Schema/V1ServerModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V1Schema/V1UserModel.swift b/Shared/SwiftfinStore/V1Schema/V1UserModel.swift index 2618a689e..787497144 100644 --- a/Shared/SwiftfinStore/V1Schema/V1UserModel.swift +++ b/Shared/SwiftfinStore/V1Schema/V1UserModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V2Schema/SwiftfinStore+V2.swift b/Shared/SwiftfinStore/V2Schema/SwiftfinStore+V2.swift index 7d269ac98..d68438324 100644 --- a/Shared/SwiftfinStore/V2Schema/SwiftfinStore+V2.swift +++ b/Shared/SwiftfinStore/V2Schema/SwiftfinStore+V2.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V2Schema/V2AnyData.swift b/Shared/SwiftfinStore/V2Schema/V2AnyData.swift index c31142f08..9145639bb 100644 --- a/Shared/SwiftfinStore/V2Schema/V2AnyData.swift +++ b/Shared/SwiftfinStore/V2Schema/V2AnyData.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/SwiftfinStore/V2Schema/V2ServerModel.swift b/Shared/SwiftfinStore/V2Schema/V2ServerModel.swift index c416f12d1..e57ba0d63 100644 --- a/Shared/SwiftfinStore/V2Schema/V2ServerModel.swift +++ b/Shared/SwiftfinStore/V2Schema/V2ServerModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/SwiftfinStore/V2Schema/V2UserModel.swift b/Shared/SwiftfinStore/V2Schema/V2UserModel.swift index 931f143ab..698db5d2a 100644 --- a/Shared/SwiftfinStore/V2Schema/V2UserModel.swift +++ b/Shared/SwiftfinStore/V2Schema/V2UserModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/ViewModels/AdminDashboard/APIKeysViewModel.swift b/Shared/ViewModels/AdminDashboard/APIKeysViewModel.swift index f191e291b..ee4f304ee 100644 --- a/Shared/ViewModels/AdminDashboard/APIKeysViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/APIKeysViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/ActiveSessionsViewModel.swift b/Shared/ViewModels/AdminDashboard/ActiveSessionsViewModel.swift index d2dae1244..00c930408 100644 --- a/Shared/ViewModels/AdminDashboard/ActiveSessionsViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/ActiveSessionsViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/AddServerUserViewModel.swift b/Shared/ViewModels/AdminDashboard/AddServerUserViewModel.swift index 2ad50f1b5..79ce618e3 100644 --- a/Shared/ViewModels/AdminDashboard/AddServerUserViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/AddServerUserViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/DeviceDetailViewModel.swift b/Shared/ViewModels/AdminDashboard/DeviceDetailViewModel.swift index f1b41a337..ac4f35a0a 100644 --- a/Shared/ViewModels/AdminDashboard/DeviceDetailViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/DeviceDetailViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/DevicesViewModel.swift b/Shared/ViewModels/AdminDashboard/DevicesViewModel.swift index 91878612f..3917b997f 100644 --- a/Shared/ViewModels/AdminDashboard/DevicesViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/DevicesViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/ServerTaskObserver.swift b/Shared/ViewModels/AdminDashboard/ServerTaskObserver.swift index 4a0e1a0e2..3205ca85c 100644 --- a/Shared/ViewModels/AdminDashboard/ServerTaskObserver.swift +++ b/Shared/ViewModels/AdminDashboard/ServerTaskObserver.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/ServerTasksViewModel.swift b/Shared/ViewModels/AdminDashboard/ServerTasksViewModel.swift index e371a3fa4..5f2fb8f41 100644 --- a/Shared/ViewModels/AdminDashboard/ServerTasksViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/ServerTasksViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/ServerUserAdminViewModel.swift b/Shared/ViewModels/AdminDashboard/ServerUserAdminViewModel.swift index 420db69e8..3d90edc28 100644 --- a/Shared/ViewModels/AdminDashboard/ServerUserAdminViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/ServerUserAdminViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/AdminDashboard/ServerUsersViewModel.swift b/Shared/ViewModels/AdminDashboard/ServerUsersViewModel.swift index 05b9c0566..bc193b5f3 100644 --- a/Shared/ViewModels/AdminDashboard/ServerUsersViewModel.swift +++ b/Shared/ViewModels/AdminDashboard/ServerUsersViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ChannelLibraryViewModel.swift b/Shared/ViewModels/ChannelLibraryViewModel.swift index 754d4e4b7..98cb6ad32 100644 --- a/Shared/ViewModels/ChannelLibraryViewModel.swift +++ b/Shared/ViewModels/ChannelLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/ViewModels/ConnectToServerViewModel.swift b/Shared/ViewModels/ConnectToServerViewModel.swift index 480e095a6..8b2f1db09 100644 --- a/Shared/ViewModels/ConnectToServerViewModel.swift +++ b/Shared/ViewModels/ConnectToServerViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/DownloadListViewModel.swift b/Shared/ViewModels/DownloadListViewModel.swift index f68a85e1c..c9fb3a709 100644 --- a/Shared/ViewModels/DownloadListViewModel.swift +++ b/Shared/ViewModels/DownloadListViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Shared/ViewModels/FilterViewModel.swift b/Shared/ViewModels/FilterViewModel.swift index 3f2f40ba4..87799f1bc 100644 --- a/Shared/ViewModels/FilterViewModel.swift +++ b/Shared/ViewModels/FilterViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/HomeViewModel.swift b/Shared/ViewModels/HomeViewModel.swift index 8454357e6..008c0b75f 100644 --- a/Shared/ViewModels/HomeViewModel.swift +++ b/Shared/ViewModels/HomeViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/DeleteItemViewModel.swift b/Shared/ViewModels/ItemAdministration/DeleteItemViewModel.swift index a8138b038..1ffa5d44a 100644 --- a/Shared/ViewModels/ItemAdministration/DeleteItemViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/DeleteItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift b/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift index 55e3419bb..9be23a4b4 100644 --- a/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/IdentifyItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/GenreEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/GenreEditorViewModel.swift index 6edac7055..c4848ab36 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/GenreEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/GenreEditorViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift index baa76dfa9..aea2dd6ea 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/PeopleEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/PeopleEditorViewModel.swift index 3386c7db6..fd8a1eadf 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/PeopleEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/PeopleEditorViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/StudioEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/StudioEditorViewModel.swift index 2c91995c2..129696a53 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/StudioEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/StudioEditorViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/TagEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/TagEditorViewModel.swift index 1e67c904b..8403963da 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/TagEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/TagEditorViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemAdministration/RefreshMetadataViewModel.swift b/Shared/ViewModels/ItemAdministration/RefreshMetadataViewModel.swift index bbd20192c..04844c1a1 100644 --- a/Shared/ViewModels/ItemAdministration/RefreshMetadataViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/RefreshMetadataViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemViewModel/CollectionItemViewModel.swift b/Shared/ViewModels/ItemViewModel/CollectionItemViewModel.swift index 368af421c..d82c539b0 100644 --- a/Shared/ViewModels/ItemViewModel/CollectionItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/CollectionItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemViewModel/EpisodeItemViewModel.swift b/Shared/ViewModels/ItemViewModel/EpisodeItemViewModel.swift index 39454f150..c3384427d 100644 --- a/Shared/ViewModels/ItemViewModel/EpisodeItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/EpisodeItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemViewModel/ItemViewModel.swift b/Shared/ViewModels/ItemViewModel/ItemViewModel.swift index 80dc78553..a62ae0991 100644 --- a/Shared/ViewModels/ItemViewModel/ItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/ItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemViewModel/MovieItemViewModel.swift b/Shared/ViewModels/ItemViewModel/MovieItemViewModel.swift index 4c8f340af..c2bf4c3e5 100644 --- a/Shared/ViewModels/ItemViewModel/MovieItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/MovieItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ItemViewModel/SeasonItemViewModel.swift b/Shared/ViewModels/ItemViewModel/SeasonItemViewModel.swift index 0f9cb0bed..527992ccb 100644 --- a/Shared/ViewModels/ItemViewModel/SeasonItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/SeasonItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/ViewModels/ItemViewModel/SeriesItemViewModel.swift b/Shared/ViewModels/ItemViewModel/SeriesItemViewModel.swift index bfed1f2cf..f275d6405 100644 --- a/Shared/ViewModels/ItemViewModel/SeriesItemViewModel.swift +++ b/Shared/ViewModels/ItemViewModel/SeriesItemViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LibraryViewModel/ItemLibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel/ItemLibraryViewModel.swift index f4c422099..24fc3f31c 100644 --- a/Shared/ViewModels/LibraryViewModel/ItemLibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/ItemLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LibraryViewModel/ItemTypeLibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel/ItemTypeLibraryViewModel.swift index 0bf9b6c50..aa5fd8f0e 100644 --- a/Shared/ViewModels/LibraryViewModel/ItemTypeLibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/ItemTypeLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LibraryViewModel/LatestInLibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel/LatestInLibraryViewModel.swift index dd7231950..d873709d5 100644 --- a/Shared/ViewModels/LibraryViewModel/LatestInLibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/LatestInLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/LibraryViewModel/NextUpLibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel/NextUpLibraryViewModel.swift index 4edcb87f3..e3320520e 100644 --- a/Shared/ViewModels/LibraryViewModel/NextUpLibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/NextUpLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LibraryViewModel/PagingLibraryViewModel.swift b/Shared/ViewModels/LibraryViewModel/PagingLibraryViewModel.swift index 1c6cdfc45..b780f662b 100644 --- a/Shared/ViewModels/LibraryViewModel/PagingLibraryViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/PagingLibraryViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LibraryViewModel/RecentlyAddedViewModel.swift b/Shared/ViewModels/LibraryViewModel/RecentlyAddedViewModel.swift index 59347b782..6cf3d1573 100644 --- a/Shared/ViewModels/LibraryViewModel/RecentlyAddedViewModel.swift +++ b/Shared/ViewModels/LibraryViewModel/RecentlyAddedViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/LiveVideoPlayerManager.swift b/Shared/ViewModels/LiveVideoPlayerManager.swift index 1f2307706..5a0fce2d5 100644 --- a/Shared/ViewModels/LiveVideoPlayerManager.swift +++ b/Shared/ViewModels/LiveVideoPlayerManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/MediaViewModel/MediaType.swift b/Shared/ViewModels/MediaViewModel/MediaType.swift index b25bd02fe..98ffb78e3 100644 --- a/Shared/ViewModels/MediaViewModel/MediaType.swift +++ b/Shared/ViewModels/MediaViewModel/MediaType.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/MediaViewModel/MediaViewModel.swift b/Shared/ViewModels/MediaViewModel/MediaViewModel.swift index cf2046941..903d0469c 100644 --- a/Shared/ViewModels/MediaViewModel/MediaViewModel.swift +++ b/Shared/ViewModels/MediaViewModel/MediaViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/ViewModels/ParentalRatingsViewModel.swift b/Shared/ViewModels/ParentalRatingsViewModel.swift index 4dd943c79..0c4e9b015 100644 --- a/Shared/ViewModels/ParentalRatingsViewModel.swift +++ b/Shared/ViewModels/ParentalRatingsViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ProgramsViewModel.swift b/Shared/ViewModels/ProgramsViewModel.swift index 67c90d95c..64e661e0b 100644 --- a/Shared/ViewModels/ProgramsViewModel.swift +++ b/Shared/ViewModels/ProgramsViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/QuickConnectAuthorizeViewModel.swift b/Shared/ViewModels/QuickConnectAuthorizeViewModel.swift index 293258fbe..9228842fb 100644 --- a/Shared/ViewModels/QuickConnectAuthorizeViewModel.swift +++ b/Shared/ViewModels/QuickConnectAuthorizeViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ResetUserPasswordViewModel.swift b/Shared/ViewModels/ResetUserPasswordViewModel.swift index dd028605d..ce15b455f 100644 --- a/Shared/ViewModels/ResetUserPasswordViewModel.swift +++ b/Shared/ViewModels/ResetUserPasswordViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/SearchViewModel.swift b/Shared/ViewModels/SearchViewModel.swift index 3de164f9b..88f474e21 100644 --- a/Shared/ViewModels/SearchViewModel.swift +++ b/Shared/ViewModels/SearchViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/SelectUserViewModel.swift b/Shared/ViewModels/SelectUserViewModel.swift index 9997ba4ff..6fc803326 100644 --- a/Shared/ViewModels/SelectUserViewModel.swift +++ b/Shared/ViewModels/SelectUserViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ServerCheckViewModel.swift b/Shared/ViewModels/ServerCheckViewModel.swift index a25963900..a4d7b875f 100644 --- a/Shared/ViewModels/ServerCheckViewModel.swift +++ b/Shared/ViewModels/ServerCheckViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/ServerConnectionViewModel.swift b/Shared/ViewModels/ServerConnectionViewModel.swift index 778e7e2f2..53977928b 100644 --- a/Shared/ViewModels/ServerConnectionViewModel.swift +++ b/Shared/ViewModels/ServerConnectionViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/ViewModels/ServerLogsViewModel.swift b/Shared/ViewModels/ServerLogsViewModel.swift index 86ef22f65..e63f837fc 100644 --- a/Shared/ViewModels/ServerLogsViewModel.swift +++ b/Shared/ViewModels/ServerLogsViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/SettingsViewModel.swift b/Shared/ViewModels/SettingsViewModel.swift index 41abc488d..820f07516 100644 --- a/Shared/ViewModels/SettingsViewModel.swift +++ b/Shared/ViewModels/SettingsViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Shared/ViewModels/UserLocalSecurityViewModel.swift b/Shared/ViewModels/UserLocalSecurityViewModel.swift index 5de3f2387..422027579 100644 --- a/Shared/ViewModels/UserLocalSecurityViewModel.swift +++ b/Shared/ViewModels/UserLocalSecurityViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/UserProfileImageViewModel.swift b/Shared/ViewModels/UserProfileImageViewModel.swift index 16fdeafbd..2fbfe7626 100644 --- a/Shared/ViewModels/UserProfileImageViewModel.swift +++ b/Shared/ViewModels/UserProfileImageViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/UserSignInViewModel.swift b/Shared/ViewModels/UserSignInViewModel.swift index 63138fba5..61903be2b 100644 --- a/Shared/ViewModels/UserSignInViewModel.swift +++ b/Shared/ViewModels/UserSignInViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Shared/ViewModels/VideoPlayerManager/DownloadVideoPlayerManager.swift b/Shared/ViewModels/VideoPlayerManager/DownloadVideoPlayerManager.swift index 82eab8b8f..d1fdd7588 100644 --- a/Shared/ViewModels/VideoPlayerManager/DownloadVideoPlayerManager.swift +++ b/Shared/ViewModels/VideoPlayerManager/DownloadVideoPlayerManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/VideoPlayerManager/OnlineVideoPlayerManager.swift b/Shared/ViewModels/VideoPlayerManager/OnlineVideoPlayerManager.swift index a50eb0d99..89c3f22f5 100644 --- a/Shared/ViewModels/VideoPlayerManager/OnlineVideoPlayerManager.swift +++ b/Shared/ViewModels/VideoPlayerManager/OnlineVideoPlayerManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Shared/ViewModels/VideoPlayerManager/VideoPlayerManager.swift b/Shared/ViewModels/VideoPlayerManager/VideoPlayerManager.swift index 006bc0e9d..9f0482256 100644 --- a/Shared/ViewModels/VideoPlayerManager/VideoPlayerManager.swift +++ b/Shared/ViewModels/VideoPlayerManager/VideoPlayerManager.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVFoundation diff --git a/Shared/ViewModels/VideoPlayerViewModel.swift b/Shared/ViewModels/VideoPlayerViewModel.swift index e3636104f..af9957b91 100644 --- a/Shared/ViewModels/VideoPlayerViewModel.swift +++ b/Shared/ViewModels/VideoPlayerViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Shared/ViewModels/ViewModel.swift b/Shared/ViewModels/ViewModel.swift index c00c3e451..fc614814c 100644 --- a/Shared/ViewModels/ViewModel.swift +++ b/Shared/ViewModels/ViewModel.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift b/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift index c459d3d58..00c64838e 100644 --- a/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift +++ b/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingController.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // // TODO: IMPLEMENT BUTTON OVERRIDES IN `PreferencesView` PACKAGE diff --git a/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift b/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift index f4231d8b2..feafce530 100644 --- a/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift +++ b/Swiftfin tvOS/App/PreferenceUIHosting/PreferenceUIHostingSwizzling.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // // TODO: IMPLEMENT BUTTON OVERRIDES IN `PreferencesView` PACKAGE diff --git a/Swiftfin tvOS/App/SwiftfinApp.swift b/Swiftfin tvOS/App/SwiftfinApp.swift index 7683d5521..361cd2f07 100644 --- a/Swiftfin tvOS/App/SwiftfinApp.swift +++ b/Swiftfin tvOS/App/SwiftfinApp.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Swiftfin tvOS/Components/CinematicBackgroundView.swift b/Swiftfin tvOS/Components/CinematicBackgroundView.swift index 23606d345..a224c9758 100644 --- a/Swiftfin tvOS/Components/CinematicBackgroundView.swift +++ b/Swiftfin tvOS/Components/CinematicBackgroundView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin tvOS/Components/CinematicItemSelector.swift b/Swiftfin tvOS/Components/CinematicItemSelector.swift index 83ad76709..31c1bb222 100644 --- a/Swiftfin tvOS/Components/CinematicItemSelector.swift +++ b/Swiftfin tvOS/Components/CinematicItemSelector.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin tvOS/Components/DotHStack.swift b/Swiftfin tvOS/Components/DotHStack.swift index 191955931..6cb39feb3 100644 --- a/Swiftfin tvOS/Components/DotHStack.swift +++ b/Swiftfin tvOS/Components/DotHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/EnumPickerView.swift b/Swiftfin tvOS/Components/EnumPickerView.swift index 5ea8fcea3..87640f8ab 100644 --- a/Swiftfin tvOS/Components/EnumPickerView.swift +++ b/Swiftfin tvOS/Components/EnumPickerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/InlineEnumToggle.swift b/Swiftfin tvOS/Components/InlineEnumToggle.swift index 18f24c7a7..c38fbd473 100644 --- a/Swiftfin tvOS/Components/InlineEnumToggle.swift +++ b/Swiftfin tvOS/Components/InlineEnumToggle.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift b/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift index be5e9e0c2..c66ca9504 100644 --- a/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift +++ b/Swiftfin tvOS/Components/LandscapePosterProgressBar.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/ListRowButton.swift b/Swiftfin tvOS/Components/ListRowButton.swift index 0c96b5b4a..1774fb62e 100644 --- a/Swiftfin tvOS/Components/ListRowButton.swift +++ b/Swiftfin tvOS/Components/ListRowButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/NonePosterButton.swift b/Swiftfin tvOS/Components/NonePosterButton.swift index 33629f022..e533275ad 100644 --- a/Swiftfin tvOS/Components/NonePosterButton.swift +++ b/Swiftfin tvOS/Components/NonePosterButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift b/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift index d320123cb..9b958c649 100644 --- a/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift +++ b/Swiftfin tvOS/Components/OrderedSectionSelectorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin tvOS/Components/PosterButton.swift b/Swiftfin tvOS/Components/PosterButton.swift index 1b977d7db..6ad58f255 100644 --- a/Swiftfin tvOS/Components/PosterButton.swift +++ b/Swiftfin tvOS/Components/PosterButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Components/PosterHStack.swift b/Swiftfin tvOS/Components/PosterHStack.swift index 10af0e780..244b1c48a 100644 --- a/Swiftfin tvOS/Components/PosterHStack.swift +++ b/Swiftfin tvOS/Components/PosterHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin tvOS/Components/SFSymbolButton.swift b/Swiftfin tvOS/Components/SFSymbolButton.swift index 40b47a4ac..523307a29 100644 --- a/Swiftfin tvOS/Components/SFSymbolButton.swift +++ b/Swiftfin tvOS/Components/SFSymbolButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/SeeAllPosterButton.swift b/Swiftfin tvOS/Components/SeeAllPosterButton.swift index 947de6e82..11617446e 100644 --- a/Swiftfin tvOS/Components/SeeAllPosterButton.swift +++ b/Swiftfin tvOS/Components/SeeAllPosterButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/ServerButton.swift b/Swiftfin tvOS/Components/ServerButton.swift index ef7f7653f..4565e0227 100644 --- a/Swiftfin tvOS/Components/ServerButton.swift +++ b/Swiftfin tvOS/Components/ServerButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/SplitFormWindowView.swift b/Swiftfin tvOS/Components/SplitFormWindowView.swift index 20fb319c9..3d44c38cc 100644 --- a/Swiftfin tvOS/Components/SplitFormWindowView.swift +++ b/Swiftfin tvOS/Components/SplitFormWindowView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Components/SplitLoginWindowView.swift b/Swiftfin tvOS/Components/SplitLoginWindowView.swift index f724a38e3..5cc6ce502 100644 --- a/Swiftfin tvOS/Components/SplitLoginWindowView.swift +++ b/Swiftfin tvOS/Components/SplitLoginWindowView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin tvOS/Components/StepperView.swift b/Swiftfin tvOS/Components/StepperView.swift index 945b38921..3c7492d26 100644 --- a/Swiftfin tvOS/Components/StepperView.swift +++ b/Swiftfin tvOS/Components/StepperView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift b/Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift index 1014c3931..75318c5f4 100644 --- a/Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift +++ b/Swiftfin tvOS/Extensions/View/Modifiers/NavigationBarMenuButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Extensions/View/View-tvOS.swift b/Swiftfin tvOS/Extensions/View/View-tvOS.swift index 6630ee3a3..233da0c3b 100644 --- a/Swiftfin tvOS/Extensions/View/View-tvOS.swift +++ b/Swiftfin tvOS/Extensions/View/View-tvOS.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/ImageButtonStyle.swift b/Swiftfin tvOS/ImageButtonStyle.swift index 1b9d16eba..202564441 100644 --- a/Swiftfin tvOS/ImageButtonStyle.swift +++ b/Swiftfin tvOS/ImageButtonStyle.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // struct ImageButtonStyle: ButtonStyle { diff --git a/Swiftfin tvOS/Objects/FocusGuide.swift b/Swiftfin tvOS/Objects/FocusGuide.swift index 027554911..00c9014ba 100644 --- a/Swiftfin tvOS/Objects/FocusGuide.swift +++ b/Swiftfin tvOS/Objects/FocusGuide.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/AppLoadingView.swift b/Swiftfin tvOS/Views/AppLoadingView.swift index 008752333..1fcdc22ce 100644 --- a/Swiftfin tvOS/Views/AppLoadingView.swift +++ b/Swiftfin tvOS/Views/AppLoadingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/BasicAppSettingsView.swift b/Swiftfin tvOS/Views/BasicAppSettingsView.swift index e007f2b9d..3cd265ab5 100644 --- a/Swiftfin tvOS/Views/BasicAppSettingsView.swift +++ b/Swiftfin tvOS/Views/BasicAppSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift b/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift index f8cae264c..8a2ad4c48 100644 --- a/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift +++ b/Swiftfin tvOS/Views/ChannelLibraryView/ChannelLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift b/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift index eb0741e33..997b58a3e 100644 --- a/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift +++ b/Swiftfin tvOS/Views/ChannelLibraryView/Components/WideChannelGridItem.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ConnectToServerView/Components/LocalServerButton.swift b/Swiftfin tvOS/Views/ConnectToServerView/Components/LocalServerButton.swift index 92fca3f69..11c08d6ae 100644 --- a/Swiftfin tvOS/Views/ConnectToServerView/Components/LocalServerButton.swift +++ b/Swiftfin tvOS/Views/ConnectToServerView/Components/LocalServerButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin tvOS/Views/ConnectToServerView/ConnectToServerView.swift b/Swiftfin tvOS/Views/ConnectToServerView/ConnectToServerView.swift index 2fd746305..da2f10e81 100644 --- a/Swiftfin tvOS/Views/ConnectToServerView/ConnectToServerView.swift +++ b/Swiftfin tvOS/Views/ConnectToServerView/ConnectToServerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin tvOS/Views/FontPickerView.swift b/Swiftfin tvOS/Views/FontPickerView.swift index 8b76365cc..c82ed374f 100644 --- a/Swiftfin tvOS/Views/FontPickerView.swift +++ b/Swiftfin tvOS/Views/FontPickerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift b/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift index 5bd3a6f56..7b5036343 100644 --- a/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift +++ b/Swiftfin tvOS/Views/HomeView/Components/CinematicRecentlyAddedView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift b/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift index 5609c8b1a..a8fc2b2c5 100644 --- a/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift +++ b/Swiftfin tvOS/Views/HomeView/Components/CinematicResumeItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift b/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift index 84b2cd167..a4b36ce3c 100644 --- a/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift +++ b/Swiftfin tvOS/Views/HomeView/Components/LatestInLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift b/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift index 5e14053b8..b8a8209da 100644 --- a/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift +++ b/Swiftfin tvOS/Views/HomeView/Components/NextUpView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift b/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift index 3d627b332..cdd2d1502 100644 --- a/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift +++ b/Swiftfin tvOS/Views/HomeView/Components/RecentlyAddedView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/HomeView/HomeErrorView.swift b/Swiftfin tvOS/Views/HomeView/HomeErrorView.swift index 428f3cdc1..b7d62961a 100644 --- a/Swiftfin tvOS/Views/HomeView/HomeErrorView.swift +++ b/Swiftfin tvOS/Views/HomeView/HomeErrorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/HomeView/HomeView.swift b/Swiftfin tvOS/Views/HomeView/HomeView.swift index 16e4919c3..5cfb0b65b 100644 --- a/Swiftfin tvOS/Views/HomeView/HomeView.swift +++ b/Swiftfin tvOS/Views/HomeView/HomeView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemOverviewView.swift b/Swiftfin tvOS/Views/ItemOverviewView.swift index 7b918f2c2..8cd80faf2 100644 --- a/Swiftfin tvOS/Views/ItemOverviewView.swift +++ b/Swiftfin tvOS/Views/ItemOverviewView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/CinematicCollectionItemView.swift b/Swiftfin tvOS/Views/ItemView/CinematicCollectionItemView.swift index 37f06a662..04cf0ec8f 100644 --- a/Swiftfin tvOS/Views/ItemView/CinematicCollectionItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/CinematicCollectionItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/CinematicEpisodeItemView.swift b/Swiftfin tvOS/Views/ItemView/CinematicEpisodeItemView.swift index f2074d012..1101fd285 100644 --- a/Swiftfin tvOS/Views/ItemView/CinematicEpisodeItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/CinematicEpisodeItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/CinematicItemAboutView.swift b/Swiftfin tvOS/Views/ItemView/CinematicItemAboutView.swift index 439a15d4d..cfec802e3 100644 --- a/Swiftfin tvOS/Views/ItemView/CinematicItemAboutView.swift +++ b/Swiftfin tvOS/Views/ItemView/CinematicItemAboutView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/CinematicItemViewTopRow.swift b/Swiftfin tvOS/Views/ItemView/CinematicItemViewTopRow.swift index ab1489204..8d01a060f 100644 --- a/Swiftfin tvOS/Views/ItemView/CinematicItemViewTopRow.swift +++ b/Swiftfin tvOS/Views/ItemView/CinematicItemViewTopRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/CinematicSeasonItemView.swift b/Swiftfin tvOS/Views/ItemView/CinematicSeasonItemView.swift index 192279eb6..1bc83e6af 100644 --- a/Swiftfin tvOS/Views/ItemView/CinematicSeasonItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/CinematicSeasonItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemContentView.swift b/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemContentView.swift index 5209c5bed..2652597ac 100644 --- a/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemContentView.swift +++ b/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemView.swift b/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemView.swift index 15fcaf241..cfe932b8a 100644 --- a/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/CollectionItemView/CollectionItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift index be9192504..b84a0fe26 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/AboutView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift index 8c1cb7e2f..ed2b25612 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/AboutViewCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift index 24434ce5e..326dd52c1 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift index 36433dee9..f5d259256 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/OverviewCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift index 86ae5460d..e7ea09a3c 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AboutView/Components/RatingsCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButton.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButton.swift index dafee4615..0660a6f34 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButton.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButtonHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButtonHStack.swift index 4a31af6a9..26a35e408 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButtonHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionButtonHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionMenu.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionMenu.swift index ff66b787b..1d939f635 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionMenu.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/ActionMenu.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/RefreshMetadataButton.swift b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/RefreshMetadataButton.swift index 6f82251ca..a8328b88d 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/RefreshMetadataButton.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/ActionButtons/RefreshMetadataButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift index 891707aa6..d553901bd 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/AttributeHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift index c957ca372..e976b233b 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/CastAndCrewHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift index 80c08508c..7ad6e88c5 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift index ec4ee0d77..4352bcc87 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift index 2cf9f967c..d5302d846 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift index 4b3083866..30b57b911 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift index a9be264d6..6a9072697 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift index f0071d025..5edee9ef6 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin tvOS/Views/ItemView/Components/PlayButton.swift b/Swiftfin tvOS/Views/ItemView/Components/PlayButton.swift index e727bfc77..c71d05384 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/PlayButton.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/PlayButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift index 992985e5c..f6e49a756 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/SimilarItemsHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift b/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift index 868cf397d..595a7b0c2 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/SpecialFeaturesHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemContentView.swift b/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemContentView.swift index f9adec4c0..4bfdf9331 100644 --- a/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemContentView.swift +++ b/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemView.swift b/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemView.swift index ace4a254c..e541bc39e 100644 --- a/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/EpisodeItemView/EpisodeItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/ItemView.swift b/Swiftfin tvOS/Views/ItemView/ItemView.swift index 2a736e5bd..cce801081 100644 --- a/Swiftfin tvOS/Views/ItemView/ItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/ItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemContentView.swift b/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemContentView.swift index ca265576b..772216600 100644 --- a/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemContentView.swift +++ b/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemView.swift b/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemView.swift index 98bfa64e6..820a4ba6f 100644 --- a/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/MovieItemView/MovieItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift b/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift index d1ea1e9a4..33384541f 100644 --- a/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift +++ b/Swiftfin tvOS/Views/ItemView/ScrollViews/CinematicScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemContentView.swift b/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemContentView.swift index 8a31864df..bcd00e1c5 100644 --- a/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemContentView.swift +++ b/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemView.swift b/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemView.swift index c1eee1093..745c4c396 100644 --- a/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemView.swift +++ b/Swiftfin tvOS/Views/ItemView/SeriesItemView/SeriesItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/LearnMoreModal.swift b/Swiftfin tvOS/Views/LearnMoreModal.swift index ae551b31a..6639e4c08 100644 --- a/Swiftfin tvOS/Views/LearnMoreModal.swift +++ b/Swiftfin tvOS/Views/LearnMoreModal.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/MediaSourceInfoView.swift b/Swiftfin tvOS/Views/MediaSourceInfoView.swift index d449c996a..00cc32b10 100644 --- a/Swiftfin tvOS/Views/MediaSourceInfoView.swift +++ b/Swiftfin tvOS/Views/MediaSourceInfoView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/MediaView/Components/MediaItem.swift b/Swiftfin tvOS/Views/MediaView/Components/MediaItem.swift index a5534e5d9..a8457adf1 100644 --- a/Swiftfin tvOS/Views/MediaView/Components/MediaItem.swift +++ b/Swiftfin tvOS/Views/MediaView/Components/MediaItem.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/MediaView/MediaView.swift b/Swiftfin tvOS/Views/MediaView/MediaView.swift index 6142869a8..961f95b3a 100644 --- a/Swiftfin tvOS/Views/MediaView/MediaView.swift +++ b/Swiftfin tvOS/Views/MediaView/MediaView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift b/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift index 34939e5a4..f7236fd43 100644 --- a/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift +++ b/Swiftfin tvOS/Views/PagingLibraryView/Components/LibraryRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift b/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift index 75348c656..8c8882d0b 100644 --- a/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift +++ b/Swiftfin tvOS/Views/PagingLibraryView/Components/ListRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift b/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift index d1a8d1531..c91bfeda1 100644 --- a/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift +++ b/Swiftfin tvOS/Views/PagingLibraryView/PagingLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift index f0d9bf967..5d65d1029 100644 --- a/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift +++ b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramButtonContent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift index 793b809a5..7c5ad24af 100644 --- a/Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift +++ b/Swiftfin tvOS/Views/ProgramsView/Components/ProgramProgressOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift b/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift index fc621108d..686854cf0 100644 --- a/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift +++ b/Swiftfin tvOS/Views/ProgramsView/ProgramsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/QuickConnectView.swift b/Swiftfin tvOS/Views/QuickConnectView.swift index c2d609079..ad5e68939 100644 --- a/Swiftfin tvOS/Views/QuickConnectView.swift +++ b/Swiftfin tvOS/Views/QuickConnectView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/SearchView.swift b/Swiftfin tvOS/Views/SearchView.swift index 615532918..ce6b6ec97 100644 --- a/Swiftfin tvOS/Views/SearchView.swift +++ b/Swiftfin tvOS/Views/SearchView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift index 1ee50028c..7b4165da4 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/AddUserButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import OrderedCollections diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift index 9761c4449..8147d44d5 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/SelectUserBottomBar.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift index e9d4b8960..d0fe4a7a8 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/ServerSelectionMenu.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift index f92e1a715..92c8ca2b9 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift index 5aa17a6c0..92b0ceea3 100644 --- a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift +++ b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin tvOS/Views/ServerDetailView.swift b/Swiftfin tvOS/Views/ServerDetailView.swift index 52e2d1f9e..c57205f6f 100644 --- a/Swiftfin tvOS/Views/ServerDetailView.swift +++ b/Swiftfin tvOS/Views/ServerDetailView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift index ccb04af03..53bdc87c6 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift index 8abfb342b..96d67b7d5 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift index df74872b7..9af28401c 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift index 07c20aa6a..0b0277bf8 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/ListColumnsPickerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift index f3db9a586..c29a80679 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift index dadfba623..5ea483ddf 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift index ec4f48117..2d0573da9 100644 --- a/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift +++ b/Swiftfin tvOS/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift index 6b6e51077..6af5a3e6e 100644 --- a/Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/ExperimentalSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift index 742c28f8a..565301c88 100644 --- a/Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/IndicatorSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift b/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift index 9bb4369e0..fec284862 100644 --- a/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/PlaybackQualitySettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/SettingsView.swift b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift index 7ec282758..eacbd9a2b 100644 --- a/Swiftfin tvOS/Views/SettingsView/SettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift index 264409779..3e84a39a4 100644 --- a/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/VideoPlayerSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/UserSignInView/Components/PublicUserButton.swift b/Swiftfin tvOS/Views/UserSignInView/Components/PublicUserButton.swift index 7e06660c1..b592881ed 100644 --- a/Swiftfin tvOS/Views/UserSignInView/Components/PublicUserButton.swift +++ b/Swiftfin tvOS/Views/UserSignInView/Components/PublicUserButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift index 2821c3f96..3a51e1ab0 100644 --- a/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift +++ b/Swiftfin tvOS/Views/UserSignInView/UserSignInView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin tvOS/Views/VideoPlayer/Components/LoadingView.swift b/Swiftfin tvOS/Views/VideoPlayer/Components/LoadingView.swift index 90cbfb6be..74391c0a9 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Components/LoadingView.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Components/LoadingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift index 1f56fa192..b3da98b07 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveNativeVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVKit diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift index 90554ba65..ccb836d76 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift index 014d5cf9e..20fe278a3 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveLoadingOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift index 86843a5a0..a1e919037 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift index 35cf99343..79eca923a 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/LiveVideoPlayer.swift b/Swiftfin tvOS/Views/VideoPlayer/LiveVideoPlayer.swift index b56257247..f3ef9b2db 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/LiveVideoPlayer.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/LiveVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/NativeVideoPlayer.swift b/Swiftfin tvOS/Views/VideoPlayer/NativeVideoPlayer.swift index be8947b85..f54e94fa6 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/NativeVideoPlayer.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/NativeVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVKit diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/ChapterOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/ChapterOverlay.swift index 76a036fad..e77fd32ab 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/ChapterOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/ChapterOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift index 3d81ae007..b235e2a92 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift index 83d56c57f..b182b25b6 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift index cdbfe9e16..4c7099b3b 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift index ce094353e..92594014c 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift index 9ddd284b8..b8f05750f 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift index 250291993..c43576b61 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift index 808a039ef..00885428b 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BottomBarView.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BottomBarView.swift index 3844d8bd4..5e82a2364 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BottomBarView.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/BottomBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift index a2e7e6c95..fb9551698 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/SliderView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift index 9929c015f..e2faadaac 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Components/tvOSSLider/tvOSSlider.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // // Modification of https://github.com/zattoo/TvOSSlider diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift index fb52e37af..b5851700a 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/ConfirmCloseOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift index 007277e20..4f867d41c 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/MainOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Overlay.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Overlay.swift index 2d692b2b2..10360ec4d 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/Overlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/Overlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import PreferencesView diff --git a/Swiftfin tvOS/Views/VideoPlayer/Overlays/SmallMenuOverlay.swift b/Swiftfin tvOS/Views/VideoPlayer/Overlays/SmallMenuOverlay.swift index beabc733e..b5a611ab0 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/Overlays/SmallMenuOverlay.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/Overlays/SmallMenuOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin tvOS/Views/VideoPlayer/VideoPlayer.swift b/Swiftfin tvOS/Views/VideoPlayer/VideoPlayer.swift index 7574f19b4..0c41f574a 100644 --- a/Swiftfin tvOS/Views/VideoPlayer/VideoPlayer.swift +++ b/Swiftfin tvOS/Views/VideoPlayer/VideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/App/AppDelegate.swift b/Swiftfin/App/AppDelegate.swift index 285954fc4..f3fd39149 100644 --- a/Swiftfin/App/AppDelegate.swift +++ b/Swiftfin/App/AppDelegate.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVFAudio diff --git a/Swiftfin/App/SwiftfinApp+ValueObservation.swift b/Swiftfin/App/SwiftfinApp+ValueObservation.swift index 03eeaf941..fc8098d79 100644 --- a/Swiftfin/App/SwiftfinApp+ValueObservation.swift +++ b/Swiftfin/App/SwiftfinApp+ValueObservation.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/App/SwiftfinApp.swift b/Swiftfin/App/SwiftfinApp.swift index 1b61eade1..3636706a8 100644 --- a/Swiftfin/App/SwiftfinApp.swift +++ b/Swiftfin/App/SwiftfinApp.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CoreStore diff --git a/Swiftfin/Components/BasicStepper.swift b/Swiftfin/Components/BasicStepper.swift index bf7e6daef..5c48123fa 100644 --- a/Swiftfin/Components/BasicStepper.swift +++ b/Swiftfin/Components/BasicStepper.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/CircularProgressView.swift b/Swiftfin/Components/CircularProgressView.swift index 6099f821a..1ec7a6de2 100644 --- a/Swiftfin/Components/CircularProgressView.swift +++ b/Swiftfin/Components/CircularProgressView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/CountryPicker.swift b/Swiftfin/Components/CountryPicker.swift index 2c903a559..f8049df4d 100644 --- a/Swiftfin/Components/CountryPicker.swift +++ b/Swiftfin/Components/CountryPicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/DelayedProgressView.swift b/Swiftfin/Components/DelayedProgressView.swift index 1314ec659..a55e738f4 100644 --- a/Swiftfin/Components/DelayedProgressView.swift +++ b/Swiftfin/Components/DelayedProgressView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Components/DotHStack.swift b/Swiftfin/Components/DotHStack.swift index 6c496c19a..0a3f68222 100644 --- a/Swiftfin/Components/DotHStack.swift +++ b/Swiftfin/Components/DotHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/ErrorView.swift b/Swiftfin/Components/ErrorView.swift index e5f55bd3f..ba68f514d 100644 --- a/Swiftfin/Components/ErrorView.swift +++ b/Swiftfin/Components/ErrorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/GestureView.swift b/Swiftfin/Components/GestureView.swift index 409b193ed..9a48541ea 100644 --- a/Swiftfin/Components/GestureView.swift +++ b/Swiftfin/Components/GestureView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Components/HourMinutePicker.swift b/Swiftfin/Components/HourMinutePicker.swift index b5573d349..1ad1b7b67 100644 --- a/Swiftfin/Components/HourMinutePicker.swift +++ b/Swiftfin/Components/HourMinutePicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/LandscapePosterProgressBar.swift b/Swiftfin/Components/LandscapePosterProgressBar.swift index 01f4ec918..e5bd4f12e 100644 --- a/Swiftfin/Components/LandscapePosterProgressBar.swift +++ b/Swiftfin/Components/LandscapePosterProgressBar.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/LanguagePicker.swift b/Swiftfin/Components/LanguagePicker.swift index 796855dca..e48816211 100644 --- a/Swiftfin/Components/LanguagePicker.swift +++ b/Swiftfin/Components/LanguagePicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/LearnMoreButton.swift b/Swiftfin/Components/LearnMoreButton.swift index c969b3d88..d4b9e4fea 100644 --- a/Swiftfin/Components/LearnMoreButton.swift +++ b/Swiftfin/Components/LearnMoreButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift b/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift index c0f33ac65..0960f7bea 100644 --- a/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift +++ b/Swiftfin/Components/LetterPickerBar/Components/LetterPickerButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift b/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift index e4d37f902..f9275cb13 100644 --- a/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift +++ b/Swiftfin/Components/LetterPickerBar/LetterPickerBar.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/ListRow.swift b/Swiftfin/Components/ListRow.swift index 625485f69..260b81800 100644 --- a/Swiftfin/Components/ListRow.swift +++ b/Swiftfin/Components/ListRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/ListRowButton.swift b/Swiftfin/Components/ListRowButton.swift index ebd108133..5763d25d0 100644 --- a/Swiftfin/Components/ListRowButton.swift +++ b/Swiftfin/Components/ListRowButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/ListTitleSection.swift b/Swiftfin/Components/ListTitleSection.swift index 752f0d81f..b330dfff5 100644 --- a/Swiftfin/Components/ListTitleSection.swift +++ b/Swiftfin/Components/ListTitleSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift b/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift index 71e5167ad..75244ac28 100644 --- a/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift +++ b/Swiftfin/Components/NavigationBarFilterDrawer/FilterDrawerButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift b/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift index ba3462ca2..ad624b573 100644 --- a/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift +++ b/Swiftfin/Components/NavigationBarFilterDrawer/NavigationBarFilterDrawer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/OrderedSectionSelectorView.swift b/Swiftfin/Components/OrderedSectionSelectorView.swift index 36b58a5dc..6f0b45777 100644 --- a/Swiftfin/Components/OrderedSectionSelectorView.swift +++ b/Swiftfin/Components/OrderedSectionSelectorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/PillHStack.swift b/Swiftfin/Components/PillHStack.swift index 88cae310e..ce8707a7a 100644 --- a/Swiftfin/Components/PillHStack.swift +++ b/Swiftfin/Components/PillHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/PosterButton.swift b/Swiftfin/Components/PosterButton.swift index 4d0842c97..9010f6490 100644 --- a/Swiftfin/Components/PosterButton.swift +++ b/Swiftfin/Components/PosterButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/PosterHStack.swift b/Swiftfin/Components/PosterHStack.swift index b8cd9d9d7..df149dacc 100644 --- a/Swiftfin/Components/PosterHStack.swift +++ b/Swiftfin/Components/PosterHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Components/PrimaryButton.swift b/Swiftfin/Components/PrimaryButton.swift index b65fe36a8..87cee22aa 100644 --- a/Swiftfin/Components/PrimaryButton.swift +++ b/Swiftfin/Components/PrimaryButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/SeeAllButton.swift b/Swiftfin/Components/SeeAllButton.swift index 8a47e193e..d50f94b46 100644 --- a/Swiftfin/Components/SeeAllButton.swift +++ b/Swiftfin/Components/SeeAllButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/SettingsBarButton.swift b/Swiftfin/Components/SettingsBarButton.swift index 5aba32614..1d1828d93 100644 --- a/Swiftfin/Components/SettingsBarButton.swift +++ b/Swiftfin/Components/SettingsBarButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin/Components/Slider/CapsuleSlider.swift b/Swiftfin/Components/Slider/CapsuleSlider.swift index 0d64eb449..4bfd80623 100644 --- a/Swiftfin/Components/Slider/CapsuleSlider.swift +++ b/Swiftfin/Components/Slider/CapsuleSlider.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/Slider/Slider.swift b/Swiftfin/Components/Slider/Slider.swift index af1077948..dd0a956b0 100644 --- a/Swiftfin/Components/Slider/Slider.swift +++ b/Swiftfin/Components/Slider/Slider.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/Slider/ThumbSlider.swift b/Swiftfin/Components/Slider/ThumbSlider.swift index bd30a36f3..3d573ef92 100644 --- a/Swiftfin/Components/Slider/ThumbSlider.swift +++ b/Swiftfin/Components/Slider/ThumbSlider.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Components/SplitContentView.swift b/Swiftfin/Components/SplitContentView.swift index 3cda99250..51c134e93 100644 --- a/Swiftfin/Components/SplitContentView.swift +++ b/Swiftfin/Components/SplitContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/UnmaskSecureField.swift b/Swiftfin/Components/UnmaskSecureField.swift index a1b8015bd..d46860cec 100644 --- a/Swiftfin/Components/UnmaskSecureField.swift +++ b/Swiftfin/Components/UnmaskSecureField.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/UpdateView.swift b/Swiftfin/Components/UpdateView.swift index 8ea47ebfb..8f93a180f 100644 --- a/Swiftfin/Components/UpdateView.swift +++ b/Swiftfin/Components/UpdateView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Components/Video3DFormatPicker.swift b/Swiftfin/Components/Video3DFormatPicker.swift index cc783d720..f5916cdee 100644 --- a/Swiftfin/Components/Video3DFormatPicker.swift +++ b/Swiftfin/Components/Video3DFormatPicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Components/iOS15View.swift b/Swiftfin/Components/iOS15View.swift index 88cd13ec1..1c2373225 100644 --- a/Swiftfin/Components/iOS15View.swift +++ b/Swiftfin/Components/iOS15View.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/ButtonStyle-iOS.swift b/Swiftfin/Extensions/ButtonStyle-iOS.swift index b582c4634..565dbfcbb 100644 --- a/Swiftfin/Extensions/ButtonStyle-iOS.swift +++ b/Swiftfin/Extensions/ButtonStyle-iOS.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Extensions/Label-iOS.swift b/Swiftfin/Extensions/Label-iOS.swift index 89251c698..02f82ad0d 100644 --- a/Swiftfin/Extensions/Label-iOS.swift +++ b/Swiftfin/Extensions/Label-iOS.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift b/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift index c32f81623..fb24906bf 100644 --- a/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift +++ b/Swiftfin/Extensions/View/Modifiers/DetectOrientationModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift index 57e651f96..6ab0cfc7c 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarCloseButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift index 52b1186dd..c6b363bf4 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift index 32606fafe..fe58581b2 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarDrawerButtons/NavigationBarDrawerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift index 6eed9adf1..0eaa8089f 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarMenuButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift index 5795cea91..2c5469c63 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetModifier.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift index da0797940..24753167b 100644 --- a/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift +++ b/Swiftfin/Extensions/View/Modifiers/NavigationBarOffset/NavigationBarOffsetView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Extensions/View/View-iOS.swift b/Swiftfin/Extensions/View/View-iOS.swift index d4d22ad4c..2a64f9936 100644 --- a/Swiftfin/Extensions/View/View-iOS.swift +++ b/Swiftfin/Extensions/View/View-iOS.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Objects/AppURLHandler.swift b/Swiftfin/Objects/AppURLHandler.swift index e66f41c0a..f6ad987da 100644 --- a/Swiftfin/Objects/AppURLHandler.swift +++ b/Swiftfin/Objects/AppURLHandler.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Objects/DeepLink.swift b/Swiftfin/Objects/DeepLink.swift index 526f7b03a..20d226b79 100644 --- a/Swiftfin/Objects/DeepLink.swift +++ b/Swiftfin/Objects/DeepLink.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/AboutAppView.swift b/Swiftfin/Views/AboutAppView.swift index 5ca359acf..fa9b1c2a2 100644 --- a/Swiftfin/Views/AboutAppView.swift +++ b/Swiftfin/Views/AboutAppView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/AdminDashboardView/APIKeyView/APIKeysView.swift b/Swiftfin/Views/AdminDashboardView/APIKeyView/APIKeysView.swift index a84054f4f..0c89dd38f 100644 --- a/Swiftfin/Views/AdminDashboardView/APIKeyView/APIKeysView.swift +++ b/Swiftfin/Views/AdminDashboardView/APIKeyView/APIKeysView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/APIKeyView/Components/APIKeysRow.swift b/Swiftfin/Views/AdminDashboardView/APIKeyView/Components/APIKeysRow.swift index b81799869..f0d313d3e 100644 --- a/Swiftfin/Views/AdminDashboardView/APIKeyView/Components/APIKeysRow.swift +++ b/Swiftfin/Views/AdminDashboardView/APIKeyView/Components/APIKeysRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/ActiveSessionDetailView.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/ActiveSessionDetailView.swift index 4a24205fe..671fa73fd 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/ActiveSessionDetailView.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/ActiveSessionDetailView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/StreamSection.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/StreamSection.swift index 023fb53d4..0e7327abe 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/StreamSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/StreamSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/TranscodeSection.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/TranscodeSection.swift index e1cfdf1eb..3701a48b6 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/TranscodeSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionDetailView/Components/TranscodeSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/ActiveSessionsView.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/ActiveSessionsView.swift index 90735f3ef..e49fdbcae 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/ActiveSessionsView.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/ActiveSessionsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionProgressSection.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionProgressSection.swift index e736c298b..f05f61bf4 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionProgressSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionProgressSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionRow.swift b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionRow.swift index 19c97f080..65cfaead1 100644 --- a/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ActiveSessionsView/Components/ActiveSessionRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/AddServerUserView/AddServerUserView.swift b/Swiftfin/Views/AdminDashboardView/AddServerUserView/AddServerUserView.swift index cdab09b52..eb72520e5 100644 --- a/Swiftfin/Views/AdminDashboardView/AddServerUserView/AddServerUserView.swift +++ b/Swiftfin/Views/AdminDashboardView/AddServerUserView/AddServerUserView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift b/Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift index 93d67c701..61a9b4094 100644 --- a/Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift +++ b/Swiftfin/Views/AdminDashboardView/AdminDashboardView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/AdminDashboardView/Components/DeviceSection.swift b/Swiftfin/Views/AdminDashboardView/Components/DeviceSection.swift index 9b992e997..a0ced98a8 100644 --- a/Swiftfin/Views/AdminDashboardView/Components/DeviceSection.swift +++ b/Swiftfin/Views/AdminDashboardView/Components/DeviceSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/Components/UserSection.swift b/Swiftfin/Views/AdminDashboardView/Components/UserSection.swift index 4cf92d50f..ec524a418 100644 --- a/Swiftfin/Views/AdminDashboardView/Components/UserSection.swift +++ b/Swiftfin/Views/AdminDashboardView/Components/UserSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CompatibilitiesSection.swift b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CompatibilitiesSection.swift index b24bebd17..71a6000a0 100644 --- a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CompatibilitiesSection.swift +++ b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CompatibilitiesSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CustomDeviceNameSection.swift b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CustomDeviceNameSection.swift index 3e1661b0b..3016443fb 100644 --- a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CustomDeviceNameSection.swift +++ b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/Components/Sections/CustomDeviceNameSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/DeviceDetailsView.swift b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/DeviceDetailsView.swift index 538bf2f57..a708ab7d0 100644 --- a/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/DeviceDetailsView.swift +++ b/Swiftfin/Views/AdminDashboardView/DeviceDetailsView/DeviceDetailsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/DevicesView/Components/DeviceRow.swift b/Swiftfin/Views/AdminDashboardView/DevicesView/Components/DeviceRow.swift index 2b40e7151..46c79ef8b 100644 --- a/Swiftfin/Views/AdminDashboardView/DevicesView/Components/DeviceRow.swift +++ b/Swiftfin/Views/AdminDashboardView/DevicesView/Components/DeviceRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/DevicesView/DevicesView.swift b/Swiftfin/Views/AdminDashboardView/DevicesView/DevicesView.swift index b420e7c0b..202d6b17f 100644 --- a/Swiftfin/Views/AdminDashboardView/DevicesView/DevicesView.swift +++ b/Swiftfin/Views/AdminDashboardView/DevicesView/DevicesView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerLogsView/ServerLogsView.swift b/Swiftfin/Views/AdminDashboardView/ServerLogsView/ServerLogsView.swift index b452c5296..e24e050c5 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerLogsView/ServerLogsView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerLogsView/ServerLogsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift index de366c1de..b56799f55 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/AddTaskTriggerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/DayOfWeekRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/DayOfWeekRow.swift index 0a78f3001..f4b296b85 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/DayOfWeekRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/DayOfWeekRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow.swift index bb59c35f0..b1d11169f 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/IntervalRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection.swift index 5d73bf487..63073ef93 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeLimitSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow.swift index 54b6c5b42..5d630bf50 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TimeRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow.swift index b196ed6e0..2f1ed6139 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/AddTaskTriggerView/Components/TriggerTypeRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/DetailsSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/DetailsSection.swift index 40d868f40..7cfafd7c9 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/DetailsSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/DetailsSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection.swift index 60ccd9357..59086c4b2 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastErrorSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastRunSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastRunSection.swift index c1c3a32d9..25ad2daab 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastRunSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/LastRunSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/ServerTaskProgressSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/ServerTaskProgressSection.swift index 25669db7c..bf9de7f6a 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/ServerTaskProgressSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/ServerTaskProgressSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // // diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/TriggersSection.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/TriggersSection.swift index ed7eb14b5..cc240750e 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/TriggersSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/Sections/TriggersSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/TriggerRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/TriggerRow.swift index 433404f7b..538e1e84c 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/TriggerRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/Components/TriggerRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/EditServerTaskView.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/EditServerTaskView.swift index d248e7cb7..1e4c11028 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/EditServerTaskView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/EditServerTaskView/EditServerTaskView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/DestructiveServerTask.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/DestructiveServerTask.swift index 2e35376ef..ced1c6a87 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/DestructiveServerTask.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/DestructiveServerTask.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/ServerTaskRow.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/ServerTaskRow.swift index db926e33b..11f752732 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/ServerTaskRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/Components/ServerTaskRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/ServerTasksView.swift b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/ServerTasksView.swift index 02e99ab16..61ff42279 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/ServerTasksView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerTasks/ServerTasksView/ServerTasksView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift index c88ada76e..1fd9a8c81 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/Components/EditAccessScheduleRow.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/Components/EditAccessScheduleRow.swift index a5a362d86..f3ef7541d 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/Components/EditAccessScheduleRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/Components/EditAccessScheduleRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/EditAccessScheduleView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/EditAccessScheduleView.swift index 6e2c27c89..d5c878553 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/EditAccessScheduleView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/EditAccessScheduleView/EditAccessScheduleView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessView/ServerUserAccessView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessView/ServerUserAccessView.swift index a31560e29..c65718074 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserAccessView/ServerUserAccessView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessView/ServerUserAccessView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift index 6298722f8..71e4f96e0 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserDeviceAccessView/ServerUserDeviceAccessView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserDeviceAccessView/ServerUserDeviceAccessView.swift index 2781c9f7c..68f7e6010 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserDeviceAccessView/ServerUserDeviceAccessView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserDeviceAccessView/ServerUserDeviceAccessView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserLiveTVAccessView/ServerUserLiveTVAccessView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserLiveTVAccessView/ServerUserLiveTVAccessView.swift index d80b06958..619cb3871 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserLiveTVAccessView/ServerUserLiveTVAccessView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserLiveTVAccessView/ServerUserLiveTVAccessView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserParentalRatingView/ServerUserParentalRatingView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserParentalRatingView/ServerUserParentalRatingView.swift index d1518b631..6b5403739 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserParentalRatingView/ServerUserParentalRatingView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserParentalRatingView/ServerUserParentalRatingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ExternalAccessSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ExternalAccessSection.swift index 099da752f..2a3aef51c 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ExternalAccessSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ExternalAccessSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ManagementSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ManagementSection.swift index dea82fd35..0b102915f 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ManagementSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/ManagementSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/MediaPlaybackSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/MediaPlaybackSection.swift index 4efc03ae3..c3b3b23e9 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/MediaPlaybackSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/MediaPlaybackSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/PermissionSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/PermissionSection.swift index 39fe395b1..a0383afc0 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/PermissionSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/PermissionSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/RemoteControlSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/RemoteControlSection.swift index 99d75e221..e505b6618 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/RemoteControlSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/RemoteControlSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SessionsSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SessionsSection.swift index 86760e46e..cc32d79df 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SessionsSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SessionsSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/StatusSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/StatusSection.swift index 0e045ed33..e09354ed7 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/StatusSection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/StatusSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SyncPlaySection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SyncPlaySection.swift index 8db9c1e9e..e5b5283e9 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SyncPlaySection.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/Components/Sections/SyncPlaySection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/ServerUserPermissionsView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/ServerUserPermissionsView.swift index e08d51a1d..920f18cd5 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/ServerUserPermissionsView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserPermissionsView/ServerUserPermissionsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/AdminDashboardView/ServerUsersView/Components/ServerUsersRow.swift b/Swiftfin/Views/AdminDashboardView/ServerUsersView/Components/ServerUsersRow.swift index 84f5d4208..1381ee697 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUsersView/Components/ServerUsersRow.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUsersView/Components/ServerUsersRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AdminDashboardView/ServerUsersView/ServerUsersView.swift b/Swiftfin/Views/AdminDashboardView/ServerUsersView/ServerUsersView.swift index 5dccc1f59..374e72d03 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUsersView/ServerUsersView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUsersView/ServerUsersView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/AppIconSelectorView.swift b/Swiftfin/Views/AppIconSelectorView.swift index 228e4734a..1c28aa98c 100644 --- a/Swiftfin/Views/AppIconSelectorView.swift +++ b/Swiftfin/Views/AppIconSelectorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AppLoadingView.swift b/Swiftfin/Views/AppLoadingView.swift index 2d78617cb..c3338419c 100644 --- a/Swiftfin/Views/AppLoadingView.swift +++ b/Swiftfin/Views/AppLoadingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/AppSettingsView/AppSettingsView.swift b/Swiftfin/Views/AppSettingsView/AppSettingsView.swift index 15e89d4b6..f6d3988d0 100644 --- a/Swiftfin/Views/AppSettingsView/AppSettingsView.swift +++ b/Swiftfin/Views/AppSettingsView/AppSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/AppSettingsView/Components/SignOutIntervalSection.swift b/Swiftfin/Views/AppSettingsView/Components/SignOutIntervalSection.swift index 0350a097c..4e94f2c3a 100644 --- a/Swiftfin/Views/AppSettingsView/Components/SignOutIntervalSection.swift +++ b/Swiftfin/Views/AppSettingsView/Components/SignOutIntervalSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift b/Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift index d9e1e8ea0..2df99f3b0 100644 --- a/Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift +++ b/Swiftfin/Views/ChannelLibraryView/ChannelLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/ChannelLibraryView/Components/CompactChannelView.swift b/Swiftfin/Views/ChannelLibraryView/Components/CompactChannelView.swift index 8bd058673..b43350563 100644 --- a/Swiftfin/Views/ChannelLibraryView/Components/CompactChannelView.swift +++ b/Swiftfin/Views/ChannelLibraryView/Components/CompactChannelView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ChannelLibraryView/Components/DetailedChannelView.swift b/Swiftfin/Views/ChannelLibraryView/Components/DetailedChannelView.swift index 93c6ed6f5..672a326c0 100644 --- a/Swiftfin/Views/ChannelLibraryView/Components/DetailedChannelView.swift +++ b/Swiftfin/Views/ChannelLibraryView/Components/DetailedChannelView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ConnectToServerView.swift b/Swiftfin/Views/ConnectToServerView.swift index 23ce660f3..1c9687c94 100644 --- a/Swiftfin/Views/ConnectToServerView.swift +++ b/Swiftfin/Views/ConnectToServerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/DownloadListView.swift b/Swiftfin/Views/DownloadListView.swift index 70f1d5217..7ec2c1268 100644 --- a/Swiftfin/Views/DownloadListView.swift +++ b/Swiftfin/Views/DownloadListView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/DownloadTaskView/DownloadTaskContentView.swift b/Swiftfin/Views/DownloadTaskView/DownloadTaskContentView.swift index 207b6b14d..263fe2b72 100644 --- a/Swiftfin/Views/DownloadTaskView/DownloadTaskContentView.swift +++ b/Swiftfin/Views/DownloadTaskView/DownloadTaskContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift b/Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift index efafdedb8..3af9d7659 100644 --- a/Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift +++ b/Swiftfin/Views/DownloadTaskView/DownloadTaskView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/EditServerView.swift b/Swiftfin/Views/EditServerView.swift index d9f5416c0..2957db3b4 100644 --- a/Swiftfin/Views/EditServerView.swift +++ b/Swiftfin/Views/EditServerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin/Views/FilterView.swift b/Swiftfin/Views/FilterView.swift index f8a937006..2968fb348 100644 --- a/Swiftfin/Views/FilterView.swift +++ b/Swiftfin/Views/FilterView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/FontPickerView.swift b/Swiftfin/Views/FontPickerView.swift index 73a51142d..a14069617 100644 --- a/Swiftfin/Views/FontPickerView.swift +++ b/Swiftfin/Views/FontPickerView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/HomeView/Components/ContinueWatchingView.swift b/Swiftfin/Views/HomeView/Components/ContinueWatchingView.swift index 6b3495b41..be52dcc63 100644 --- a/Swiftfin/Views/HomeView/Components/ContinueWatchingView.swift +++ b/Swiftfin/Views/HomeView/Components/ContinueWatchingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/HomeView/Components/LatestInLibraryView.swift b/Swiftfin/Views/HomeView/Components/LatestInLibraryView.swift index a3aa83aeb..0954b31eb 100644 --- a/Swiftfin/Views/HomeView/Components/LatestInLibraryView.swift +++ b/Swiftfin/Views/HomeView/Components/LatestInLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/HomeView/Components/NextUpView.swift b/Swiftfin/Views/HomeView/Components/NextUpView.swift index 1e33535f1..fd716f262 100644 --- a/Swiftfin/Views/HomeView/Components/NextUpView.swift +++ b/Swiftfin/Views/HomeView/Components/NextUpView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift b/Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift index e8f3d0587..e0423efe9 100644 --- a/Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift +++ b/Swiftfin/Views/HomeView/Components/RecentlyAddedView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/HomeView/HomeView.swift b/Swiftfin/Views/HomeView/HomeView.swift index 64da0366a..564550fd4 100644 --- a/Swiftfin/Views/HomeView/HomeView.swift +++ b/Swiftfin/Views/HomeView/HomeView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemEditorView/Components/RefreshMetadataButton.swift b/Swiftfin/Views/ItemEditorView/Components/RefreshMetadataButton.swift index 3f3931e88..07ec23e9d 100644 --- a/Swiftfin/Views/ItemEditorView/Components/RefreshMetadataButton.swift +++ b/Swiftfin/Views/ItemEditorView/Components/RefreshMetadataButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DateSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DateSection.swift index ac4f54f0d..d70a4e46f 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DateSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DateSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DisplayOrderSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DisplayOrderSection.swift index d00c7bc23..2ea9b7204 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DisplayOrderSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/DisplayOrderSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/EpisodeSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/EpisodeSection.swift index e42c7b23d..ac73d0be4 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/EpisodeSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/EpisodeSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LocalizationSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LocalizationSection.swift index c789f0c69..854935c4b 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LocalizationSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LocalizationSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LockMetadataSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LockMetadataSection.swift index 78b197fbb..675d2dfb6 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LockMetadataSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/LockMetadataSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/MediaFormatSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/MediaFormatSection.swift index 560d5412f..c9a580f86 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/MediaFormatSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/MediaFormatSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/OverviewSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/OverviewSection.swift index 97998bacf..a8c8f27ec 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/OverviewSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/OverviewSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ParentialRatingsSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ParentialRatingsSection.swift index 9b4be8488..ed5b324eb 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ParentialRatingsSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ParentialRatingsSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ReviewsSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ReviewsSection.swift index 0cb298553..8dbefa43d 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ReviewsSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/ReviewsSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/SeriesSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/SeriesSection.swift index 5444f1aab..2789ee25f 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/SeriesSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/SeriesSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/TitleSection.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/TitleSection.swift index aa994e0a4..42f2fc774 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/TitleSection.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/Components/Sections/TitleSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/EditMetadataView/EditMetadataView.swift b/Swiftfin/Views/ItemEditorView/EditMetadataView/EditMetadataView.swift index 39832ccb9..95c39836c 100644 --- a/Swiftfin/Views/ItemEditorView/EditMetadataView/EditMetadataView.swift +++ b/Swiftfin/Views/ItemEditorView/EditMetadataView/EditMetadataView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift index 11edd4665..03223c91f 100644 --- a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift index a08c49a14..669d71687 100644 --- a/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/Components/RemoteSearchResultView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift b/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift index 3f61017da..a9b42100e 100644 --- a/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift +++ b/Swiftfin/Views/ItemEditorView/IdentifyItemView/IdentifyItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/ItemEditorView.swift b/Swiftfin/Views/ItemEditorView/ItemEditorView.swift index 01cd7ee7f..2075f917d 100644 --- a/Swiftfin/Views/ItemEditorView/ItemEditorView.swift +++ b/Swiftfin/Views/ItemEditorView/ItemEditorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift index 468fc05ff..77cf97067 100644 --- a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift +++ b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/AddItemElementView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift index 4f9bc97ce..b4ab8fc28 100644 --- a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift +++ b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/NameInput.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift index 099f7a4a7..267359be0 100644 --- a/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift +++ b/Swiftfin/Views/ItemEditorView/ItemElements/AddItemElementView/Components/SearchResultsSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift index 730eb9d62..f1d5df9b8 100644 --- a/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift +++ b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/Components/EditItemElementRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift index cef53b599..ff93e5a0c 100644 --- a/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift +++ b/Swiftfin/Views/ItemEditorView/ItemElements/EditItemElementView/EditItemElementView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/ItemOverviewView.swift b/Swiftfin/Views/ItemOverviewView.swift index d6a60f5ce..aebaaafbe 100644 --- a/Swiftfin/Views/ItemOverviewView.swift +++ b/Swiftfin/Views/ItemOverviewView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift b/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift index 78ba39dce..df20f6629 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/AboutView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/ItemView/Components/AboutView/Components/AboutView+Card.swift b/Swiftfin/Views/ItemView/Components/AboutView/Components/AboutView+Card.swift index 6829e37b7..710d80df5 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/Components/AboutView+Card.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/Components/AboutView+Card.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift b/Swiftfin/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift index 6b5f454b7..27ddd5547 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/Components/MediaSourcesCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/Components/AboutView/Components/OverviewCard.swift b/Swiftfin/Views/ItemView/Components/AboutView/Components/OverviewCard.swift index 258e89653..d30c1cc34 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/Components/OverviewCard.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/Components/OverviewCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/AboutView/Components/RatingsCard.swift b/Swiftfin/Views/ItemView/Components/AboutView/Components/RatingsCard.swift index 3891700a6..35935d934 100644 --- a/Swiftfin/Views/ItemView/Components/AboutView/Components/RatingsCard.swift +++ b/Swiftfin/Views/ItemView/Components/AboutView/Components/RatingsCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/ActionButtonHStack.swift b/Swiftfin/Views/ItemView/Components/ActionButtonHStack.swift index c4b4852db..f08905431 100644 --- a/Swiftfin/Views/ItemView/Components/ActionButtonHStack.swift +++ b/Swiftfin/Views/ItemView/Components/ActionButtonHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/Components/AttributeHStack.swift b/Swiftfin/Views/ItemView/Components/AttributeHStack.swift index dd019db0f..910fb32b9 100644 --- a/Swiftfin/Views/ItemView/Components/AttributeHStack.swift +++ b/Swiftfin/Views/ItemView/Components/AttributeHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift b/Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift index 9440fe1f0..559140bd4 100644 --- a/Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift +++ b/Swiftfin/Views/ItemView/Components/CastAndCrewHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift b/Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift index fecc6d3d3..5c0d37e43 100644 --- a/Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift +++ b/Swiftfin/Views/ItemView/Components/DownloadTaskButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift index 9db21ebd8..ddd8c62dd 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EmptyCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift index c044dd733..fa60cc94b 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift index f0fb0c4f5..e9eba1035 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeContent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift index f0a92bf11..bdd29c5af 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/EpisodeHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift index 4b3083866..30b57b911 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/ErrorCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift index a9be264d6..6a9072697 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/Components/LoadingCard.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift b/Swiftfin/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift index 54fa6b31c..73e6b00dd 100644 --- a/Swiftfin/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift +++ b/Swiftfin/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/ItemView/Components/GenresHStack.swift b/Swiftfin/Views/ItemView/Components/GenresHStack.swift index eda8c51b7..842d222b0 100644 --- a/Swiftfin/Views/ItemView/Components/GenresHStack.swift +++ b/Swiftfin/Views/ItemView/Components/GenresHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/OffsetScrollView.swift b/Swiftfin/Views/ItemView/Components/OffsetScrollView.swift index 8ed6be6a2..1855d8337 100644 --- a/Swiftfin/Views/ItemView/Components/OffsetScrollView.swift +++ b/Swiftfin/Views/ItemView/Components/OffsetScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/ItemView/Components/OverviewView.swift b/Swiftfin/Views/ItemView/Components/OverviewView.swift index aed7e679e..c8d6af630 100644 --- a/Swiftfin/Views/ItemView/Components/OverviewView.swift +++ b/Swiftfin/Views/ItemView/Components/OverviewView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/PlayButton.swift b/Swiftfin/Views/ItemView/Components/PlayButton.swift index 70c0dd05a..d23079c1a 100644 --- a/Swiftfin/Views/ItemView/Components/PlayButton.swift +++ b/Swiftfin/Views/ItemView/Components/PlayButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift b/Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift index 3e99f5508..ec1803676 100644 --- a/Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift +++ b/Swiftfin/Views/ItemView/Components/SimilarItemsHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/Components/SpecialFeatureHStack.swift b/Swiftfin/Views/ItemView/Components/SpecialFeatureHStack.swift index fb4638144..7297f3919 100644 --- a/Swiftfin/Views/ItemView/Components/SpecialFeatureHStack.swift +++ b/Swiftfin/Views/ItemView/Components/SpecialFeatureHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/Components/StudiosHStack.swift b/Swiftfin/Views/ItemView/Components/StudiosHStack.swift index dadee2d12..21794aa7c 100644 --- a/Swiftfin/Views/ItemView/Components/StudiosHStack.swift +++ b/Swiftfin/Views/ItemView/Components/StudiosHStack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/ItemView.swift b/Swiftfin/Views/ItemView/ItemView.swift index 56416934d..efb194022 100644 --- a/Swiftfin/Views/ItemView/ItemView.swift +++ b/Swiftfin/Views/ItemView/ItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemContentView.swift b/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemContentView.swift index e7b9d8cb6..78e4909fb 100644 --- a/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemContentView.swift +++ b/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemView.swift b/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemView.swift index f0a005dc0..ea873520e 100644 --- a/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemView.swift +++ b/Swiftfin/Views/ItemView/iOS/CollectionItemView/CollectionItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemContentView.swift b/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemContentView.swift index 5b8960278..965c192b1 100644 --- a/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemContentView.swift +++ b/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemView.swift b/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemView.swift index 1df326d48..0b607492e 100644 --- a/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemView.swift +++ b/Swiftfin/Views/ItemView/iOS/EpisodeItemView/EpisodeItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemContentView.swift b/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemContentView.swift index 8234dee2f..47211ca3a 100644 --- a/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemContentView.swift +++ b/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemView.swift b/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemView.swift index 5b9fdfe9b..0e30eccd2 100644 --- a/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemView.swift +++ b/Swiftfin/Views/ItemView/iOS/MovieItemView/MovieItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/iOS/ScrollViews/CinematicScrollView.swift b/Swiftfin/Views/ItemView/iOS/ScrollViews/CinematicScrollView.swift index aec4ab53e..c4ae16e34 100644 --- a/Swiftfin/Views/ItemView/iOS/ScrollViews/CinematicScrollView.swift +++ b/Swiftfin/Views/ItemView/iOS/ScrollViews/CinematicScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactLogoScrollView.swift b/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactLogoScrollView.swift index a7da5a00d..14bfaedcb 100644 --- a/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactLogoScrollView.swift +++ b/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactLogoScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactPortraitScrollView.swift b/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactPortraitScrollView.swift index 436d2c11c..93fb7c746 100644 --- a/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactPortraitScrollView.swift +++ b/Swiftfin/Views/ItemView/iOS/ScrollViews/CompactPortraitScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import BlurHashKit diff --git a/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemContentView.swift b/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemContentView.swift index 3def39a01..9c33ff874 100644 --- a/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemContentView.swift +++ b/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemView.swift b/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemView.swift index 436ef3c17..36c771c4f 100644 --- a/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemView.swift +++ b/Swiftfin/Views/ItemView/iOS/SeriesItemView/SeriesItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemContentView.swift b/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemContentView.swift index 91bba8efe..0ac38399f 100644 --- a/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemContentView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemView.swift b/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemView.swift index 9d316e903..4b73b2a87 100644 --- a/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/CollectionItemView/iPadOSCollectionItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeContentView.swift b/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeContentView.swift index 613bcfc0b..215062090 100644 --- a/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeContentView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeItemView.swift b/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeItemView.swift index bb9914aba..251d74886 100644 --- a/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeItemView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/EpisodeItemView/iPadOSEpisodeItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemContentView.swift b/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemContentView.swift index a935ff4cb..e5341a8a2 100644 --- a/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemContentView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemView.swift b/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemView.swift index 3dd447847..04fd0ba54 100644 --- a/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/MovieItemView/iPadOSMovieItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/ScrollViews/iPadOSCinematicScrollView.swift b/Swiftfin/Views/ItemView/iPadOS/ScrollViews/iPadOSCinematicScrollView.swift index 668ea432c..fe188ebb2 100644 --- a/Swiftfin/Views/ItemView/iPadOS/ScrollViews/iPadOSCinematicScrollView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/ScrollViews/iPadOSCinematicScrollView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemContentView.swift b/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemContentView.swift index 55113b1b0..13c833de5 100644 --- a/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemContentView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemContentView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemView.swift b/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemView.swift index e67e4a400..0e73a1dcc 100644 --- a/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemView.swift +++ b/Swiftfin/Views/ItemView/iPadOS/SeriesItemView/iPadOSSeriesItemView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/MediaSourceInfoView.swift b/Swiftfin/Views/MediaSourceInfoView.swift index d3fd17b03..6f753b684 100644 --- a/Swiftfin/Views/MediaSourceInfoView.swift +++ b/Swiftfin/Views/MediaSourceInfoView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/MediaStreamInfoView.swift b/Swiftfin/Views/MediaStreamInfoView.swift index 4bf560058..ac0f5d27b 100644 --- a/Swiftfin/Views/MediaStreamInfoView.swift +++ b/Swiftfin/Views/MediaStreamInfoView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/MediaView/Components/MediaItem.swift b/Swiftfin/Views/MediaView/Components/MediaItem.swift index 72ccfaeb7..ef336d38f 100644 --- a/Swiftfin/Views/MediaView/Components/MediaItem.swift +++ b/Swiftfin/Views/MediaView/Components/MediaItem.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/MediaView/MediaView.swift b/Swiftfin/Views/MediaView/MediaView.swift index 929a910cc..45b192acc 100644 --- a/Swiftfin/Views/MediaView/MediaView.swift +++ b/Swiftfin/Views/MediaView/MediaView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/PagingLibraryView/Components/LibraryRow.swift b/Swiftfin/Views/PagingLibraryView/Components/LibraryRow.swift index 00a2020bd..05fa1b2f9 100644 --- a/Swiftfin/Views/PagingLibraryView/Components/LibraryRow.swift +++ b/Swiftfin/Views/PagingLibraryView/Components/LibraryRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift b/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift index 18e63e6e6..e0a5999b6 100644 --- a/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift +++ b/Swiftfin/Views/PagingLibraryView/Components/LibraryViewTypeToggle.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift b/Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift index b2e63a52b..1198d1cfd 100644 --- a/Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift +++ b/Swiftfin/Views/PagingLibraryView/PagingLibraryView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/ProgramsView/Components/ProgramButtonContent.swift b/Swiftfin/Views/ProgramsView/Components/ProgramButtonContent.swift index f0d9bf967..5d65d1029 100644 --- a/Swiftfin/Views/ProgramsView/Components/ProgramButtonContent.swift +++ b/Swiftfin/Views/ProgramsView/Components/ProgramButtonContent.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ProgramsView/Components/ProgramProgressOverlay.swift b/Swiftfin/Views/ProgramsView/Components/ProgramProgressOverlay.swift index 4208ea66f..a1adf0eed 100644 --- a/Swiftfin/Views/ProgramsView/Components/ProgramProgressOverlay.swift +++ b/Swiftfin/Views/ProgramsView/Components/ProgramProgressOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ProgramsView/ProgramsView.swift b/Swiftfin/Views/ProgramsView/ProgramsView.swift index acb86de55..f4c44ca95 100644 --- a/Swiftfin/Views/ProgramsView/ProgramsView.swift +++ b/Swiftfin/Views/ProgramsView/ProgramsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/QuickConnectView.swift b/Swiftfin/Views/QuickConnectView.swift index 0260de765..3ceb286a5 100644 --- a/Swiftfin/Views/QuickConnectView.swift +++ b/Swiftfin/Views/QuickConnectView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/ResetUserPasswordView/ResetUserPasswordView.swift b/Swiftfin/Views/ResetUserPasswordView/ResetUserPasswordView.swift index 9a5c0d296..2aeca1f1a 100644 --- a/Swiftfin/Views/ResetUserPasswordView/ResetUserPasswordView.swift +++ b/Swiftfin/Views/ResetUserPasswordView/ResetUserPasswordView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/SearchView.swift b/Swiftfin/Views/SearchView.swift index c2f97b196..a5d047d3b 100644 --- a/Swiftfin/Views/SearchView.swift +++ b/Swiftfin/Views/SearchView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SelectUserView/Components/AddUserButton.swift b/Swiftfin/Views/SelectUserView/Components/AddUserButton.swift index a0145a481..c5686602c 100644 --- a/Swiftfin/Views/SelectUserView/Components/AddUserButton.swift +++ b/Swiftfin/Views/SelectUserView/Components/AddUserButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import OrderedCollections diff --git a/Swiftfin/Views/SelectUserView/Components/AddUserRow.swift b/Swiftfin/Views/SelectUserView/Components/AddUserRow.swift index 336d20993..122c30989 100644 --- a/Swiftfin/Views/SelectUserView/Components/AddUserRow.swift +++ b/Swiftfin/Views/SelectUserView/Components/AddUserRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import OrderedCollections diff --git a/Swiftfin/Views/SelectUserView/Components/ServerSelectionMenu.swift b/Swiftfin/Views/SelectUserView/Components/ServerSelectionMenu.swift index ee370848e..38b648341 100644 --- a/Swiftfin/Views/SelectUserView/Components/ServerSelectionMenu.swift +++ b/Swiftfin/Views/SelectUserView/Components/ServerSelectionMenu.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/SelectUserView/Components/UserGridButton.swift b/Swiftfin/Views/SelectUserView/Components/UserGridButton.swift index e3c8d3cc0..19485597a 100644 --- a/Swiftfin/Views/SelectUserView/Components/UserGridButton.swift +++ b/Swiftfin/Views/SelectUserView/Components/UserGridButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SelectUserView/Components/UserRow.swift b/Swiftfin/Views/SelectUserView/Components/UserRow.swift index 4752108d7..c5bc65d92 100644 --- a/Swiftfin/Views/SelectUserView/Components/UserRow.swift +++ b/Swiftfin/Views/SelectUserView/Components/UserRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SelectUserView/SelectUserView.swift b/Swiftfin/Views/SelectUserView/SelectUserView.swift index bfdbeb57b..19a2b3669 100644 --- a/Swiftfin/Views/SelectUserView/SelectUserView.swift +++ b/Swiftfin/Views/SelectUserView/SelectUserView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionVGrid diff --git a/Swiftfin/Views/ServerCheckView.swift b/Swiftfin/Views/ServerCheckView.swift index d924c9ace..3ece182f5 100644 --- a/Swiftfin/Views/ServerCheckView.swift +++ b/Swiftfin/Views/ServerCheckView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift index 7e1d630bc..0060044a2 100644 --- a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift +++ b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/CustomProfileButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift index 474992ba4..b66cf2bf8 100644 --- a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift +++ b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/Components/EditCustomDeviceProfileView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift index 45e5c2962..b7490a771 100644 --- a/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift +++ b/Swiftfin/Views/SettingsView/CustomDeviceProfileSettingsView/CustomDeviceProfileSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift index 8c1b5bdf0..bc66cbb10 100644 --- a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift +++ b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/HomeSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift index 0e0f730f9..0e08a81c5 100644 --- a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift +++ b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/Components/Sections/ItemSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift index 4bede18b5..cbb8d1b44 100644 --- a/Swiftfin/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift +++ b/Swiftfin/Views/SettingsView/CustomizeViewsSettings/CustomizeViewsSettings.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/DebugSettingsView.swift b/Swiftfin/Views/SettingsView/DebugSettingsView.swift index 4abdf4acf..ddf2c1316 100644 --- a/Swiftfin/Views/SettingsView/DebugSettingsView.swift +++ b/Swiftfin/Views/SettingsView/DebugSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift b/Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift index 162f984e4..9101f4d3b 100644 --- a/Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift +++ b/Swiftfin/Views/SettingsView/ExperimentalSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/GestureSettingsView.swift b/Swiftfin/Views/SettingsView/GestureSettingsView.swift index 2c6a41aa8..a84e816a0 100644 --- a/Swiftfin/Views/SettingsView/GestureSettingsView.swift +++ b/Swiftfin/Views/SettingsView/GestureSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/IndicatorSettingsView.swift b/Swiftfin/Views/SettingsView/IndicatorSettingsView.swift index b4c74f89d..5cbea284e 100644 --- a/Swiftfin/Views/SettingsView/IndicatorSettingsView.swift +++ b/Swiftfin/Views/SettingsView/IndicatorSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/NativeVideoPlayerSettingsView.swift b/Swiftfin/Views/SettingsView/NativeVideoPlayerSettingsView.swift index a6458bc93..12ff5e561 100644 --- a/Swiftfin/Views/SettingsView/NativeVideoPlayerSettingsView.swift +++ b/Swiftfin/Views/SettingsView/NativeVideoPlayerSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/PlaybackQualitySettingsView.swift b/Swiftfin/Views/SettingsView/PlaybackQualitySettingsView.swift index 1c003daf4..3beaed2dd 100644 --- a/Swiftfin/Views/SettingsView/PlaybackQualitySettingsView.swift +++ b/Swiftfin/Views/SettingsView/PlaybackQualitySettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift b/Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift index a3335d2f2..c43d5a3c9 100644 --- a/Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift +++ b/Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Factory diff --git a/Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift b/Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift index d0990d916..d87d0b8ed 100644 --- a/Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift +++ b/Swiftfin/Views/SettingsView/SettingsView/SettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/UserProfileSettingsView/QuickConnectAuthorizeView.swift b/Swiftfin/Views/SettingsView/UserProfileSettingsView/QuickConnectAuthorizeView.swift index a7af01cc0..b15a5e0a0 100644 --- a/Swiftfin/Views/SettingsView/UserProfileSettingsView/QuickConnectAuthorizeView.swift +++ b/Swiftfin/Views/SettingsView/UserProfileSettingsView/QuickConnectAuthorizeView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift index 7c33f5313..703e8cf9d 100644 --- a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift +++ b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Combine diff --git a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift index 87b1c5889..f7bf18b9b 100644 --- a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift +++ b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/ActionButtonSelectorView.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/ActionButtonSelectorView.swift index fc92ba9ef..27f84cda2 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/ActionButtonSelectorView.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/ActionButtonSelectorView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/ButtonSection.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/ButtonSection.swift index 05e2f6ee1..31dcb1913 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/ButtonSection.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/ButtonSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SliderSection.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SliderSection.swift index e70365ad8..cfe89cc40 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SliderSection.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SliderSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SubtitleSection.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SubtitleSection.swift index 3a4f4d589..2239aa189 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SubtitleSection.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/SubtitleSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TimestampSection.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TimestampSection.swift index 3ad3a5479..4597464be 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TimestampSection.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TimestampSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TransitionSection.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TransitionSection.swift index 3c307a527..e4ba36c75 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TransitionSection.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/Components/Sections/TransitionSection.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/VideoPlayerSettingsView.swift b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/VideoPlayerSettingsView.swift index 885f046a8..2ab198055 100644 --- a/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/VideoPlayerSettingsView.swift +++ b/Swiftfin/Views/SettingsView/VideoPlayerSettingsView/VideoPlayerSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/UserProfileImagePicker/Components/PhotoPicker.swift b/Swiftfin/Views/UserProfileImagePicker/Components/PhotoPicker.swift index 2f42dc85f..358d162db 100644 --- a/Swiftfin/Views/UserProfileImagePicker/Components/PhotoPicker.swift +++ b/Swiftfin/Views/UserProfileImagePicker/Components/PhotoPicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import PhotosUI diff --git a/Swiftfin/Views/UserProfileImagePicker/Components/SquareImageCropView.swift b/Swiftfin/Views/UserProfileImagePicker/Components/SquareImageCropView.swift index 709fc5a35..3b649b174 100644 --- a/Swiftfin/Views/UserProfileImagePicker/Components/SquareImageCropView.swift +++ b/Swiftfin/Views/UserProfileImagePicker/Components/SquareImageCropView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/UserProfileImagePicker/UserProfileImagePicker.swift b/Swiftfin/Views/UserProfileImagePicker/UserProfileImagePicker.swift index dd9130340..6ebc6875e 100644 --- a/Swiftfin/Views/UserProfileImagePicker/UserProfileImagePicker.swift +++ b/Swiftfin/Views/UserProfileImagePicker/UserProfileImagePicker.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/UserSignInView/Components/PublicUserRow.swift b/Swiftfin/Views/UserSignInView/Components/PublicUserRow.swift index 6a22cbd86..9e41443a5 100644 --- a/Swiftfin/Views/UserSignInView/Components/PublicUserRow.swift +++ b/Swiftfin/Views/UserSignInView/Components/PublicUserRow.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/UserSignInView/Components/UserSignInSecurityView.swift b/Swiftfin/Views/UserSignInView/Components/UserSignInSecurityView.swift index bb680fdb1..a431ea77e 100644 --- a/Swiftfin/Views/UserSignInView/Components/UserSignInSecurityView.swift +++ b/Swiftfin/Views/UserSignInView/Components/UserSignInSecurityView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/UserSignInView/UserSignInView.swift b/Swiftfin/Views/UserSignInView/UserSignInView.swift index 7be62cadd..aa8372379 100644 --- a/Swiftfin/Views/UserSignInView/UserSignInView.swift +++ b/Swiftfin/Views/UserSignInView/UserSignInView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Components/LoadingView.swift b/Swiftfin/Views/VideoPlayer/Components/LoadingView.swift index 90cbfb6be..74391c0a9 100644 --- a/Swiftfin/Views/VideoPlayer/Components/LoadingView.swift +++ b/Swiftfin/Views/VideoPlayer/Components/LoadingView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Stinsen diff --git a/Swiftfin/Views/VideoPlayer/Components/PlaybackSettingsView.swift b/Swiftfin/Views/VideoPlayer/Components/PlaybackSettingsView.swift index 33ad6e9f6..89194f41a 100644 --- a/Swiftfin/Views/VideoPlayer/Components/PlaybackSettingsView.swift +++ b/Swiftfin/Views/VideoPlayer/Components/PlaybackSettingsView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveNativeVideoPlayer.swift b/Swiftfin/Views/VideoPlayer/LiveNativeVideoPlayer.swift index b3a0e85a4..4edd47a46 100644 --- a/Swiftfin/Views/VideoPlayer/LiveNativeVideoPlayer.swift +++ b/Swiftfin/Views/VideoPlayer/LiveNativeVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVKit diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift index 080e8d610..d7c572d84 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveBottomBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveTopBarView.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveTopBarView.swift index 9e46aa653..8659991e7 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveTopBarView.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/LiveTopBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveLargePlaybackButtons.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveLargePlaybackButtons.swift index d7861d6d5..0c2b5aaa0 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveLargePlaybackButtons.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveLargePlaybackButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveSmallPlaybackButton.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveSmallPlaybackButton.swift index d7f01388f..3c619c6bc 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveSmallPlaybackButton.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/Components/PlaybackButtons/LiveSmallPlaybackButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift index ca54557f2..a6b425034 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveMainOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift b/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift index a013ec8de..2cd469308 100644 --- a/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift +++ b/Swiftfin/Views/VideoPlayer/LiveOverlays/LiveOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/LiveVideoPlayer.swift b/Swiftfin/Views/VideoPlayer/LiveVideoPlayer.swift index 1f505d744..32a6be53b 100644 --- a/Swiftfin/Views/VideoPlayer/LiveVideoPlayer.swift +++ b/Swiftfin/Views/VideoPlayer/LiveVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/NativeVideoPlayer.swift b/Swiftfin/Views/VideoPlayer/NativeVideoPlayer.swift index b64449e30..d6f940e7d 100644 --- a/Swiftfin/Views/VideoPlayer/NativeVideoPlayer.swift +++ b/Swiftfin/Views/VideoPlayer/NativeVideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import AVKit diff --git a/Swiftfin/Views/VideoPlayer/Overlays/ChapterOverlay.swift b/Swiftfin/Views/VideoPlayer/Overlays/ChapterOverlay.swift index 31b0969c7..b53bfb308 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/ChapterOverlay.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/ChapterOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import CollectionHStack diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift index 3d81ae007..b235e2a92 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ActionButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Foundation diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AdvancedActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AdvancedActionButton.swift index 0be7b9388..d5a40d569 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AdvancedActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AdvancedActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AspectFillActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AspectFillActionButton.swift index 77eb23539..ad9ac8ccc 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AspectFillActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AspectFillActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AudioActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AudioActionButton.swift index 1f878bdc2..3bb217e7a 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AudioActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AudioActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift index 7c0cb3e8e..308383de8 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/AutoPlayActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift index e3543f3db..c842ad643 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/ChaptersActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift index cf1034606..cb8d30b0f 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayNextItemActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift index 2e2515c92..3816c4a1b 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlayPreviousItemActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlaybackSpeedActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlaybackSpeedActionButton.swift index 1956fd033..673be6674 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlaybackSpeedActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/PlaybackSpeedActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleActionButton.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleActionButton.swift index fbfb98f3f..7829c9cd6 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleActionButton.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ActionButtons/SubtitleActionButton.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift index d3d44d35d..1fe8861ff 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/BarActionButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/BottomBarView.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/BottomBarView.swift index b333ee41b..d98c86e2f 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/BottomBarView.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/BottomBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/ChapterTrack.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/ChapterTrack.swift index 8f89e3156..d34cf044d 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/ChapterTrack.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/ChapterTrack.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import JellyfinAPI diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/OverlayMenu.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/OverlayMenu.swift index 03faba09d..73cdee522 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/OverlayMenu.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/OverlayMenu.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/LargePlaybackButtons.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/LargePlaybackButtons.swift index 99d4eda86..8a7f69335 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/LargePlaybackButtons.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/LargePlaybackButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/SmallPlaybackButtons.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/SmallPlaybackButtons.swift index f56baccf3..9bb3ac8d6 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/SmallPlaybackButtons.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/PlaybackButtons/SmallPlaybackButtons.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/CompactTimeStamp.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/CompactTimeStamp.swift index 649c0a20c..f84baf46f 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/CompactTimeStamp.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/CompactTimeStamp.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/SplitTimestamp.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/SplitTimestamp.swift index fd76d5cf6..0d99aaa12 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/SplitTimestamp.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/Timestamp/SplitTimestamp.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Components/TopBarView.swift b/Swiftfin/Views/VideoPlayer/Overlays/Components/TopBarView.swift index 96518f99a..6e6c825db 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Components/TopBarView.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Components/TopBarView.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/MainOverlay.swift b/Swiftfin/Views/VideoPlayer/Overlays/MainOverlay.swift index 585d24c06..985767409 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/MainOverlay.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/MainOverlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/Overlays/Overlay.swift b/Swiftfin/Views/VideoPlayer/Overlays/Overlay.swift index b5315fb8e..a6089fe3f 100644 --- a/Swiftfin/Views/VideoPlayer/Overlays/Overlay.swift +++ b/Swiftfin/Views/VideoPlayer/Overlays/Overlay.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/VideoPlayer+Actions.swift b/Swiftfin/Views/VideoPlayer/VideoPlayer+Actions.swift index 466917b02..cbb020194 100644 --- a/Swiftfin/Views/VideoPlayer/VideoPlayer+Actions.swift +++ b/Swiftfin/Views/VideoPlayer/VideoPlayer+Actions.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import SwiftUI diff --git a/Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.swift b/Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.swift index 19a58df96..5d6a0d4ce 100644 --- a/Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.swift +++ b/Swiftfin/Views/VideoPlayer/VideoPlayer+KeyCommands.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults diff --git a/Swiftfin/Views/VideoPlayer/VideoPlayer.swift b/Swiftfin/Views/VideoPlayer/VideoPlayer.swift index bf3e46cd1..800966ef3 100644 --- a/Swiftfin/Views/VideoPlayer/VideoPlayer.swift +++ b/Swiftfin/Views/VideoPlayer/VideoPlayer.swift @@ -3,7 +3,7 @@ // License, v2.0. If a copy of the MPL was not distributed with this // file, you can obtain one at https://mozilla.org/MPL/2.0/. // -// Copyright (c) 2024 Jellyfin & Jellyfin Contributors +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors // import Defaults From a13f604be0ab082d1f1a49fc0c6effea24aa6e1c Mon Sep 17 00:00:00 2001 From: Joe Kribs Date: Thu, 2 Jan 2025 23:47:20 -0700 Subject: [PATCH 4/5] [iOS] Admin Dashboard - User Access Tags (#1377) * Edit View. Still need to make an Add View * Finished with EditPage. Need labels tho * Deletion deletes TOO many records. Also, need to search existing tags * Fin * Fix merge issues * Check for exisitng Access Tags before allowing saving * 2025 Disclaimer / Build Fixes * update * Update EditServerUserAccessTagsView.swift --------- Co-authored-by: Ethan Pippin --- .../AdminDashboardCoordinator.swift | 15 ++ Shared/Strings/Strings.swift | 22 +- .../ItemEditorViewModel.swift | 2 + Swiftfin.xcodeproj/project.pbxproj | 60 +++++ .../AddAccessScheduleView.swift | 2 +- .../AddServerUserAccessTagsView.swift | 151 ++++++++++++ .../AccessTagSearchResultsSection.swift | 72 ++++++ .../Components/TagInput.swift | 92 +++++++ .../Components/EditAccessTagRow.swift | 48 ++++ .../EditServerUserAccessTagsView.swift | 231 ++++++++++++++++++ .../ServerUserDetailsView.swift | 18 +- Translations/en.lproj/Localizable.strings | 31 ++- 12 files changed, 727 insertions(+), 17 deletions(-) create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/AddServerUserAccessTagsView.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/AccessTagSearchResultsSection.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/TagInput.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/Components/EditAccessTagRow.swift create mode 100644 Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/EditServerUserAccessTagsView.swift diff --git a/Shared/Coordinators/AdminDashboardCoordinator.swift b/Shared/Coordinators/AdminDashboardCoordinator.swift index 5c7705687..c0fd43dff 100644 --- a/Shared/Coordinators/AdminDashboardCoordinator.swift +++ b/Shared/Coordinators/AdminDashboardCoordinator.swift @@ -72,6 +72,10 @@ final class AdminDashboardCoordinator: NavigationCoordinatable { var userEditAccessSchedules = makeUserEditAccessSchedules @Route(.modal) var userAddAccessSchedule = makeUserAddAccessSchedule + @Route(.push) + var userEditAccessTags = makeUserEditAccessTags + @Route(.modal) + var userAddAccessTag = makeUserAddAccessTag @Route(.modal) var userPhotoPicker = makeUserPhotoPicker @@ -182,6 +186,17 @@ final class AdminDashboardCoordinator: NavigationCoordinatable { EditAccessScheduleView(viewModel: viewModel) } + @ViewBuilder + func makeUserEditAccessTags(viewModel: ServerUserAdminViewModel) -> some View { + EditServerUserAccessTagsView(viewModel: viewModel) + } + + func makeUserAddAccessTag(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { + NavigationViewCoordinator { + AddServerUserAccessTagsView(viewModel: viewModel) + } + } + func makeUserAddAccessSchedule(viewModel: ServerUserAdminViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator { AddAccessScheduleView(viewModel: viewModel) diff --git a/Shared/Strings/Strings.swift b/Shared/Strings/Strings.swift index bd3e2892a..8face6c3e 100644 --- a/Shared/Strings/Strings.swift +++ b/Shared/Strings/Strings.swift @@ -26,6 +26,16 @@ internal enum L10n { internal static let accessSchedules = L10n.tr("Localizable", "accessSchedules", fallback: "Access Schedules") /// Define the allowed hours for usage and restrict access outside those times. internal static let accessSchedulesDescription = L10n.tr("Localizable", "accessSchedulesDescription", fallback: "Define the allowed hours for usage and restrict access outside those times.") + /// User will have access to no media unless it contains at least one allowed tag. + internal static let accessTagAllowDescription = L10n.tr("Localizable", "accessTagAllowDescription", fallback: "User will have access to no media unless it contains at least one allowed tag.") + /// Access tag already exists + internal static let accessTagAlreadyExists = L10n.tr("Localizable", "accessTagAlreadyExists", fallback: "Access tag already exists") + /// User will have access to all media except when it contains any blocked tag. + internal static let accessTagBlockDescription = L10n.tr("Localizable", "accessTagBlockDescription", fallback: "User will have access to all media except when it contains any blocked tag.") + /// Access Tags + internal static let accessTags = L10n.tr("Localizable", "accessTags", fallback: "Access Tags") + /// Use tags to grant or restrict this user's access to media. + internal static let accessTagsDescription = L10n.tr("Localizable", "accessTagsDescription", fallback: "Use tags to grant or restrict this user's access to media.") /// Active internal static let active = L10n.tr("Localizable", "active", fallback: "Active") /// Activity @@ -34,8 +44,10 @@ internal enum L10n { internal static let actor = L10n.tr("Localizable", "actor", fallback: "Actor") /// Add internal static let add = L10n.tr("Localizable", "add", fallback: "Add") - /// Add Access Schedule - internal static let addAccessSchedule = L10n.tr("Localizable", "addAccessSchedule", fallback: "Add Access Schedule") + /// Add access schedule + internal static let addAccessSchedule = L10n.tr("Localizable", "addAccessSchedule", fallback: "Add access schedule") + /// Add access tag + internal static let addAccessTag = L10n.tr("Localizable", "addAccessTag", fallback: "Add access tag") /// Add API key internal static let addAPIKey = L10n.tr("Localizable", "addAPIKey", fallback: "Add API key") /// Additional security access for users signed in to this device. This does not change any Jellyfin server user settings. @@ -74,6 +86,8 @@ internal enum L10n { internal static let allMedia = L10n.tr("Localizable", "allMedia", fallback: "All Media") /// Allow collection management internal static let allowCollectionManagement = L10n.tr("Localizable", "allowCollectionManagement", fallback: "Allow collection management") + /// Allowed + internal static let allowed = L10n.tr("Localizable", "allowed", fallback: "Allowed") /// Allow media item deletion internal static let allowItemDeletion = L10n.tr("Localizable", "allowItemDeletion", fallback: "Allow media item deletion") /// Allow media item editing @@ -198,6 +212,8 @@ internal enum L10n { internal static let bitrateTestDisclaimer = L10n.tr("Localizable", "bitrateTestDisclaimer", fallback: "Longer tests are more accurate but may result in a delayed playback.") /// bps internal static let bitsPerSecond = L10n.tr("Localizable", "bitsPerSecond", fallback: "bps") + /// Blocked + internal static let blocked = L10n.tr("Localizable", "blocked", fallback: "Blocked") /// Block unrated items internal static let blockUnratedItems = L10n.tr("Localizable", "blockUnratedItems", fallback: "Block unrated items") /// Block items from this user with no or unrecognized rating information. @@ -1202,6 +1218,8 @@ internal enum L10n { internal static let syncPlay = L10n.tr("Localizable", "syncPlay", fallback: "SyncPlay") /// System internal static let system = L10n.tr("Localizable", "system", fallback: "System") + /// Tag + internal static let tag = L10n.tr("Localizable", "tag", fallback: "Tag") /// Tagline internal static let tagline = L10n.tr("Localizable", "tagline", fallback: "Tagline") /// Taglines diff --git a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift index aea2dd6ea..64c47eabd 100644 --- a/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift +++ b/Shared/ViewModels/ItemAdministration/ItemEditorViewModel/ItemEditorViewModel.swift @@ -279,6 +279,8 @@ class ItemEditorViewModel: ViewModel, Stateful, Eventful { // MARK: - Reorder Elements (To Be Overridden) + // TODO: should instead move to an index-based self insertion + // instead of replacement func reorderComponents(_ tags: [Element]) async throws { fatalError("This method should be overridden in subclasses") } diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj index f57561bd0..2d5118941 100644 --- a/Swiftfin.xcodeproj/project.pbxproj +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -232,6 +232,11 @@ 4EF18B2A2CB993BD00343666 /* ListRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF18B292CB993AD00343666 /* ListRow.swift */; }; 4EF3D80B2CF7D6670081AD20 /* ServerUserAccessView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF3D8092CF7D6670081AD20 /* ServerUserAccessView.swift */; }; 4EF659E32CDD270D00E0BE5D /* ActionMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF659E22CDD270B00E0BE5D /* ActionMenu.swift */; }; + 4EFAC12C2D1E255900E40880 /* EditServerUserAccessTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC12B2D1E255600E40880 /* EditServerUserAccessTagsView.swift */; }; + 4EFAC1302D1E2EB900E40880 /* EditAccessTagRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC12E2D1E2EB900E40880 /* EditAccessTagRow.swift */; }; + 4EFAC1332D1E8C6B00E40880 /* AddServerUserAccessTagsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC1322D1E8C6B00E40880 /* AddServerUserAccessTagsView.swift */; }; + 4EFAC1362D1FB1A100E40880 /* AccessTagSearchResultsSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC1352D1FB1A100E40880 /* AccessTagSearchResultsSection.swift */; }; + 4EFAC1382D1FB26600E40880 /* TagInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFAC1372D1FB26600E40880 /* TagInput.swift */; }; 4EFD172E2CE4182200A4BAC5 /* LearnMoreButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFD172D2CE4181F00A4BAC5 /* LearnMoreButton.swift */; }; 4EFE0C7D2D0156A900D4834D /* PersonKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFE0C7C2D0156A500D4834D /* PersonKind.swift */; }; 4EFE0C7E2D0156A900D4834D /* PersonKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EFE0C7C2D0156A500D4834D /* PersonKind.swift */; }; @@ -1361,6 +1366,11 @@ 4EF18B292CB993AD00343666 /* ListRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListRow.swift; sourceTree = ""; }; 4EF3D8092CF7D6670081AD20 /* ServerUserAccessView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerUserAccessView.swift; sourceTree = ""; }; 4EF659E22CDD270B00E0BE5D /* ActionMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionMenu.swift; sourceTree = ""; }; + 4EFAC12B2D1E255600E40880 /* EditServerUserAccessTagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditServerUserAccessTagsView.swift; sourceTree = ""; }; + 4EFAC12E2D1E2EB900E40880 /* EditAccessTagRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAccessTagRow.swift; sourceTree = ""; }; + 4EFAC1322D1E8C6B00E40880 /* AddServerUserAccessTagsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddServerUserAccessTagsView.swift; sourceTree = ""; }; + 4EFAC1352D1FB1A100E40880 /* AccessTagSearchResultsSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessTagSearchResultsSection.swift; sourceTree = ""; }; + 4EFAC1372D1FB26600E40880 /* TagInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagInput.swift; sourceTree = ""; }; 4EFD172D2CE4181F00A4BAC5 /* LearnMoreButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LearnMoreButton.swift; sourceTree = ""; }; 4EFE0C7C2D0156A500D4834D /* PersonKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PersonKind.swift; sourceTree = ""; }; 4EFE0C7F2D02054300D4834D /* ItemArrayElements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemArrayElements.swift; sourceTree = ""; }; @@ -2373,6 +2383,7 @@ 4EED87492CBF824B002354D2 /* DevicesView */, 4E35CE622CBED3FF00DBD886 /* ServerLogsView */, 4ECF5D8C2D0A780F00F066B1 /* ServerTasks */, + 4EFAC12A2D1E253300E40880 /* ServerUserAccessTags */, 4EC2B1A72CC9725400D866BE /* ServerUserDetailsView */, 4E2470072D078DD7009139D8 /* ServerUserParentalRatingView */, 4E537A822D03D0FA00659A1A /* ServerUserDeviceAccessView */, @@ -2861,6 +2872,50 @@ path = ServerUserAccessView; sourceTree = ""; }; + 4EFAC12A2D1E253300E40880 /* ServerUserAccessTags */ = { + isa = PBXGroup; + children = ( + 4EFAC1312D1E373B00E40880 /* AddServerUserAccessTagsView */, + 4EFAC12D2D1E2C4700E40880 /* EditServerUserAccessTagsView */, + ); + path = ServerUserAccessTags; + sourceTree = ""; + }; + 4EFAC12D2D1E2C4700E40880 /* EditServerUserAccessTagsView */ = { + isa = PBXGroup; + children = ( + 4EFAC12F2D1E2EB900E40880 /* Components */, + 4EFAC12B2D1E255600E40880 /* EditServerUserAccessTagsView.swift */, + ); + path = EditServerUserAccessTagsView; + sourceTree = ""; + }; + 4EFAC12F2D1E2EB900E40880 /* Components */ = { + isa = PBXGroup; + children = ( + 4EFAC12E2D1E2EB900E40880 /* EditAccessTagRow.swift */, + ); + path = Components; + sourceTree = ""; + }; + 4EFAC1312D1E373B00E40880 /* AddServerUserAccessTagsView */ = { + isa = PBXGroup; + children = ( + 4EFAC1342D1FB19700E40880 /* Components */, + 4EFAC1322D1E8C6B00E40880 /* AddServerUserAccessTagsView.swift */, + ); + path = AddServerUserAccessTagsView; + sourceTree = ""; + }; + 4EFAC1342D1FB19700E40880 /* Components */ = { + isa = PBXGroup; + children = ( + 4EFAC1352D1FB1A100E40880 /* AccessTagSearchResultsSection.swift */, + 4EFAC1372D1FB26600E40880 /* TagInput.swift */, + ); + path = Components; + sourceTree = ""; + }; 5310694F2684E7EE00CFFDBA /* VideoPlayer */ = { isa = PBXGroup; children = ( @@ -5632,6 +5687,7 @@ E1B33ECF28EB6EA90073B0FD /* OverlayMenu.swift in Sources */, E146A9D82BE6E9830034DA1E /* StoredValue.swift in Sources */, 6220D0B426D5ED8000B8E046 /* LibraryCoordinator.swift in Sources */, + 4EFAC1362D1FB1A100E40880 /* AccessTagSearchResultsSection.swift in Sources */, E17AC96D2954E9CA003D2BC2 /* DownloadListView.swift in Sources */, 4E8B34EA2AB91B6E0018F305 /* ItemFilter.swift in Sources */, 4E2470082D078DD7009139D8 /* ServerUserParentalRatingView.swift in Sources */, @@ -5766,12 +5822,14 @@ 4E2AC4C82C6C493C00DD600D /* SubtitleFormat.swift in Sources */, E19D41B02BF2B7540082B8B2 /* URLSessionConfiguration.swift in Sources */, 4E661A2E2CEFE77700025C99 /* MetadataField.swift in Sources */, + 4EFAC1332D1E8C6B00E40880 /* AddServerUserAccessTagsView.swift in Sources */, E172D3AD2BAC9DF8007B4647 /* SeasonItemViewModel.swift in Sources */, 4E762AAE2C3A1A95004D1579 /* PlaybackBitrate.swift in Sources */, 536D3D78267BD5C30004248C /* ViewModel.swift in Sources */, E1FCD08826C35A0D007C8DCF /* NetworkError.swift in Sources */, E175AFF3299AC117004DCF52 /* DebugSettingsView.swift in Sources */, E1A5056A2D0B733F007EE305 /* Optional.swift in Sources */, + 4EFAC1382D1FB26600E40880 /* TagInput.swift in Sources */, E102314D2BCF8A7E009D71FC /* AlternateLayoutView.swift in Sources */, E12CC1BB28D11E1000678D5D /* RecentlyAddedViewModel.swift in Sources */, E1BE1CEE2BDB68CD008176A9 /* UserProfileRow.swift in Sources */, @@ -5974,6 +6032,7 @@ E1CAF6622BA363840087D991 /* UIHostingController.swift in Sources */, E11895AC289383EE0042947B /* NavigationBarOffsetModifier.swift in Sources */, E1CD13EF28EF364100CB46CA /* DetectOrientationModifier.swift in Sources */, + 4EFAC12C2D1E255900E40880 /* EditServerUserAccessTagsView.swift in Sources */, E157563029355B7900976E1F /* UpdateView.swift in Sources */, E1D8424F2932F7C400D1041A /* OverviewView.swift in Sources */, E113133628BE98AA00930F75 /* FilterDrawerButton.swift in Sources */, @@ -6090,6 +6149,7 @@ E113133828BEADBA00930F75 /* LibraryParent.swift in Sources */, E17DC74D2BE7601E00B42379 /* SettingsBarButton.swift in Sources */, E190704F2C8592B40004600E /* PlaybackCompatibility+Video.swift in Sources */, + 4EFAC1302D1E2EB900E40880 /* EditAccessTagRow.swift in Sources */, E104DC962B9E7E29008F506D /* AssertionFailureView.swift in Sources */, E102312C2BCF8A08009D71FC /* iOSLiveTVCoordinator.swift in Sources */, E1ED7FDC2CAA4B6D00ACB6E3 /* PlayerStateInfo.swift in Sources */, diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift index 1fd9a8c81..61b8cf7e5 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessSchedule/AddAccessScheduleView/AddAccessScheduleView.swift @@ -92,7 +92,7 @@ struct AddAccessScheduleView: View { var body: some View { contentView - .navigationTitle(L10n.addAccessSchedule) + .navigationTitle(L10n.addAccessSchedule.localizedCapitalized) .navigationBarTitleDisplayMode(.inline) .navigationBarCloseButton { router.dismissCoordinator() diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/AddServerUserAccessTagsView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/AddServerUserAccessTagsView.swift new file mode 100644 index 000000000..954155579 --- /dev/null +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/AddServerUserAccessTagsView.swift @@ -0,0 +1,151 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +struct AddServerUserAccessTagsView: View { + + // MARK: - Observed & Environment Objects + + @EnvironmentObject + private var router: BasicNavigationViewCoordinator.Router + + @ObservedObject + private var viewModel: ServerUserAdminViewModel + + @StateObject + private var tagViewModel: TagEditorViewModel + + // MARK: - Access Tag Variables + + @State + private var tempPolicy: UserPolicy + @State + private var tempTag: String = "" + @State + private var access: Bool = false + + // MARK: - Error State + + @State + private var error: Error? + + // MARK: - Name is Valid + + private var isValid: Bool { + tempTag.isNotEmpty && !tagIsDuplicate + } + + // MARK: - Tag is Already Blocked/Allowed + + private var tagIsDuplicate: Bool { + viewModel.user.policy!.blockedTags!.contains(tempTag) // && + //! viewModel.user.policy!.allowedTags!.contains(tempTag) + } + + // MARK: - Tag Already Exists on Jellyfin + + private var tagAlreadyExists: Bool { + tagViewModel.trie.contains(key: tempTag.localizedLowercase) + } + + // MARK: - Initializer + + init(viewModel: ServerUserAdminViewModel) { + self.viewModel = viewModel + self.tempPolicy = viewModel.user.policy! + self._tagViewModel = StateObject(wrappedValue: TagEditorViewModel(item: .init())) + } + + // MARK: - Body + + var body: some View { + contentView + .navigationTitle(L10n.addAccessTag.localizedCapitalized) + .navigationBarTitleDisplayMode(.inline) + .navigationBarCloseButton { + router.dismissCoordinator() + } + .topBarTrailing { + if viewModel.backgroundStates.contains(.refreshing) { + ProgressView() + } + if viewModel.backgroundStates.contains(.updating) { + Button(L10n.cancel) { + viewModel.send(.cancel) + } + .buttonStyle(.toolbarPill(.red)) + } else { + Button(L10n.save) { + if access { + // TODO: Enable on 10.10 + /* tempPolicy.allowedTags = tempPolicy.allowedTags + .appendedOrInit(tempTag) */ + } else { + tempPolicy.blockedTags = tempPolicy.blockedTags + .appendedOrInit(tempTag) + } + + viewModel.send(.updatePolicy(tempPolicy)) + } + .buttonStyle(.toolbarPill) + .disabled(!isValid) + } + } + .onFirstAppear { + tagViewModel.send(.load) + } + .onChange(of: tempTag) { _ in + if !tagViewModel.backgroundStates.contains(.loading) { + tagViewModel.send(.search(tempTag)) + } + } + .onReceive(viewModel.events) { event in + switch event { + case let .error(eventError): + UIDevice.feedback(.error) + error = eventError + case .updated: + UIDevice.feedback(.success) + router.dismissCoordinator() + } + } + .onReceive(tagViewModel.events) { event in + switch event { + case .updated: + break + case .loaded: + tagViewModel.send(.search(tempTag)) + case let .error(eventError): + UIDevice.feedback(.error) + error = eventError + } + } + .errorMessage($error) + } + + // MARK: - Content View + + private var contentView: some View { + Form { + TagInput( + access: $access, + tag: $tempTag, + tagIsDuplicate: tagIsDuplicate, + tagAlreadyExists: tagAlreadyExists + ) + + SearchResultsSection( + tag: $tempTag, + tags: tagViewModel.matches, + isSearching: tagViewModel.backgroundStates.contains(.searching) + ) + } + } +} diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/AccessTagSearchResultsSection.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/AccessTagSearchResultsSection.swift new file mode 100644 index 000000000..80c5a0bc1 --- /dev/null +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/AccessTagSearchResultsSection.swift @@ -0,0 +1,72 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension AddServerUserAccessTagsView { + + struct SearchResultsSection: View { + + // MARK: - Element Variables + + @Binding + var tag: String + + // MARK: - Element Search Variables + + let tags: [String] + let isSearching: Bool + + // MARK: - Body + + var body: some View { + if tag.isNotEmpty { + Section { + if tags.isNotEmpty { + resultsView + } else if !isSearching { + noResultsView + } + } header: { + HStack { + Text(L10n.existingItems) + + if isSearching { + ProgressView() + } else { + Text("-") + + Text(tags.count, format: .number) + } + } + } + .animation(.linear(duration: 0.2), value: tags) + } + } + + // MARK: - No Results View + + private var noResultsView: some View { + Text(L10n.none) + .foregroundStyle(.secondary) + } + + // MARK: - Results View + + private var resultsView: some View { + ForEach(tags, id: \.self) { result in + Button(result) { + tag = result + } + .foregroundStyle(.primary) + .disabled(tag == result) + } + } + } +} diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/TagInput.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/TagInput.swift new file mode 100644 index 000000000..76a820e1c --- /dev/null +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/AddServerUserAccessTagsView/Components/TagInput.swift @@ -0,0 +1,92 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import JellyfinAPI +import SwiftUI + +extension AddServerUserAccessTagsView { + + struct TagInput: View { + + // MARK: - Element Variables + + @FocusState + private var isTagFocused: Bool + + @Binding + var access: Bool + @Binding + var tag: String + + let tagIsDuplicate: Bool + let tagAlreadyExists: Bool + + // MARK: - Body + + var body: some View { + // TODO: Enable on 10.10 +// Section { +// Picker(L10n.access, selection: $access) { +// Text(L10n.allowed).tag(true) +// Text(L10n.blocked).tag(false) +// } +// .disabled(true) +// } header: { +// Text(L10n.access) +// } footer: { +// LearnMoreButton(L10n.accessTags) { +// TextPair( +// title: L10n.allowed, +// subtitle: L10n.accessTagAllowDescription +// ) +// TextPair( +// title: L10n.blocked, +// subtitle: L10n.accessTagBlockDescription +// ) +// } +// } + + Section { + TextField(L10n.name, text: $tag) + .autocorrectionDisabled() + .focused($isTagFocused) + } footer: { + if tag.isEmpty { + Label( + L10n.required, + systemImage: "exclamationmark.circle.fill" + ) + .labelStyle(.sectionFooterWithImage(imageStyle: .orange)) + } else if tagIsDuplicate { + Label( + L10n.accessTagAlreadyExists, + systemImage: "exclamationmark.circle.fill" + ) + .labelStyle(.sectionFooterWithImage(imageStyle: .orange)) + } else { + if tagAlreadyExists { + Label( + L10n.existsOnServer, + systemImage: "checkmark.circle.fill" + ) + .labelStyle(.sectionFooterWithImage(imageStyle: .green)) + } else { + Label( + L10n.willBeCreatedOnServer, + systemImage: "checkmark.seal.fill" + ) + .labelStyle(.sectionFooterWithImage(imageStyle: .blue)) + } + } + } + .onFirstAppear { + isTagFocused = true + } + } + } +} diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/Components/EditAccessTagRow.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/Components/EditAccessTagRow.swift new file mode 100644 index 000000000..9f1820a3c --- /dev/null +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/Components/EditAccessTagRow.swift @@ -0,0 +1,48 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +extension EditServerUserAccessTagsView { + + struct EditAccessTagRow: View { + + // MARK: - Metadata Variables + + let tag: String + + // MARK: - Row Actions + + let onSelect: () -> Void + let onDelete: () -> Void + + // MARK: - Body + + var body: some View { + Button(action: onSelect) { + HStack { + Text(tag) + .frame(maxWidth: .infinity, alignment: .leading) + + ListRowCheckbox() + } + } + .foregroundStyle(.primary) + .swipeActions { + Button( + L10n.delete, + systemImage: "trash", + action: onDelete + ) + .tint(.red) + } + } + } +} diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/EditServerUserAccessTagsView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/EditServerUserAccessTagsView.swift new file mode 100644 index 000000000..b72dc3f4a --- /dev/null +++ b/Swiftfin/Views/AdminDashboardView/ServerUserAccessTags/EditServerUserAccessTagsView/EditServerUserAccessTagsView.swift @@ -0,0 +1,231 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import JellyfinAPI +import SwiftUI + +struct EditServerUserAccessTagsView: View { + + private struct TagWithAccess: Hashable { + let tag: String + let access: Bool + } + + // MARK: - Observed, State, & Environment Objects + + @EnvironmentObject + private var router: AdminDashboardCoordinator.Router + + @StateObject + private var viewModel: ServerUserAdminViewModel + + // MARK: - Dialog States + + @State + private var isPresentingDeleteConfirmation = false + + // MARK: - Editing States + + @State + private var selectedTags: Set = [] + @State + private var isEditing: Bool = false + + // MARK: - Error State + + @State + private var error: Error? + + private var blockedTags: [TagWithAccess] { + viewModel.user.policy?.blockedTags? + .sorted() + .map { TagWithAccess(tag: $0, access: false) } ?? [] + } + +// private var allowedTags: [TagWithAccess] { +// viewModel.user.policy?.allowedTags? +// .sorted() +// .map { TagWithAccess(tag: $0, access: true) } ?? [] +// } + + // MARK: - Initializera + + init(viewModel: ServerUserAdminViewModel) { + self._viewModel = StateObject(wrappedValue: viewModel) + } + + // MARK: - Body + + var body: some View { + ZStack { + switch viewModel.state { + case .initial, .content: + contentView + case let .error(error): + errorView(with: error) + } + } + .navigationTitle(L10n.accessTags) + .navigationBarTitleDisplayMode(.inline) + .navigationBarBackButtonHidden(isEditing) + .toolbar { + ToolbarItem(placement: .topBarLeading) { + if isEditing { + navigationBarSelectView + } + } + ToolbarItem(placement: .topBarTrailing) { + if isEditing { + Button(L10n.cancel) { + isEditing = false + UIDevice.impact(.light) + selectedTags.removeAll() + } + .buttonStyle(.toolbarPill) + } + } + ToolbarItem(placement: .bottomBar) { + if isEditing { + Button(L10n.delete) { + isPresentingDeleteConfirmation = true + } + .buttonStyle(.toolbarPill(.red)) + .disabled(selectedTags.isEmpty) + .frame(maxWidth: .infinity, alignment: .trailing) + } + } + } + .navigationBarMenuButton( + isLoading: viewModel.backgroundStates.contains(.refreshing), + isHidden: isEditing || ( + viewModel.user.policy?.blockedTags?.isEmpty == true + ) + ) { + Button(L10n.add, systemImage: "plus") { + router.route(to: \.userAddAccessTag, viewModel) + } + + if viewModel.user.policy?.blockedTags?.isNotEmpty == true { + Button(L10n.edit, systemImage: "checkmark.circle") { + isEditing = true + } + } + } + .onReceive(viewModel.events) { event in + switch event { + case let .error(eventError): + error = eventError + default: + break + } + } + .confirmationDialog( + L10n.delete, + isPresented: $isPresentingDeleteConfirmation, + titleVisibility: .visible + ) { + deleteSelectedConfirmationActions + } message: { + Text(L10n.deleteSelectedConfirmation) + } + .errorMessage($error) + } + + // MARK: - ErrorView + + @ViewBuilder + private func errorView(with error: some Error) -> some View { + ErrorView(error: error) + .onRetry { + viewModel.send(.refresh) + } + } + + @ViewBuilder + private func makeRow(tag: TagWithAccess) -> some View { + EditAccessTagRow(tag: tag.tag) { + if isEditing { + selectedTags.toggle(value: tag) + } + } onDelete: { + selectedTags = [tag] + isPresentingDeleteConfirmation = true + } + .environment(\.isEditing, isEditing) + .environment(\.isSelected, selectedTags.contains(tag)) + } + + // MARK: - Content View + + @ViewBuilder + private var contentView: some View { + List { + ListTitleSection( + L10n.accessTags, + description: L10n.accessTagsDescription + ) { + UIApplication.shared.open(.jellyfinDocsManagingUsers) + } + + if blockedTags.isEmpty { + Button(L10n.add) { + router.route(to: \.userAddAccessTag, viewModel) + } + } else { + + // TODO: with allowed, use `DisclosureGroup` instead + Section(L10n.blocked) { + ForEach( + blockedTags, + id: \.self, + content: makeRow + ) + } + + // TODO: allowed with 10.10 + } + } + } + + // MARK: - Select/Remove All Button + + @ViewBuilder + private var navigationBarSelectView: some View { + let isAllSelected = selectedTags.count == blockedTags.count + + Button(isAllSelected ? L10n.removeAll : L10n.selectAll) { + selectedTags = isAllSelected ? [] : Set(blockedTags) + } + .buttonStyle(.toolbarPill) + .disabled(!isEditing) + } + + // MARK: - Delete Selected Confirmation Actions + + @ViewBuilder + private var deleteSelectedConfirmationActions: some View { + Button(L10n.cancel, role: .cancel) {} + + Button(L10n.delete, role: .destructive) { + var tempPolicy = viewModel.user.policy ?? UserPolicy() + + for tag in selectedTags { + if tag.access { + // tempPolicy.allowedTags?.removeAll { $0 == tag.tag } + } else { + tempPolicy.blockedTags?.removeAll { $0 == tag.tag } + } + } + + viewModel.send(.updatePolicy(tempPolicy)) + selectedTags.removeAll() + isEditing = false + } + } +} diff --git a/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift b/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift index 71e4f96e0..dff381c69 100644 --- a/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift +++ b/Swiftfin/Views/AdminDashboardView/ServerUserDetailsView/ServerUserDetailsView.swift @@ -109,23 +109,17 @@ struct ServerUserDetailsView: View { } Section(L10n.parentalControls) { + ChevronButton(L10n.ratings) + .onSelect { + router.route(to: \.userParentalRatings, viewModel) + } ChevronButton(L10n.accessSchedules) .onSelect { router.route(to: \.userEditAccessSchedules, viewModel) } - // TODO: Allow items SDK 10.10 - allowedTags - /* ChevronButton("Allow items") - .onSelect { - router.route(to: \.userAllowedTags, viewModel) - } - // TODO: Block items - blockedTags - ChevronButton("Block items") - .onSelect { - router.route(to: \.userBlockedTags, viewModel) - } */ - ChevronButton(L10n.ratings) + ChevronButton(L10n.accessTags) .onSelect { - router.route(to: \.userParentalRatings, viewModel) + router.route(to: \.userEditAccessTags, viewModel) } } } diff --git a/Translations/en.lproj/Localizable.strings b/Translations/en.lproj/Localizable.strings index e68488169..3433af752 100644 --- a/Translations/en.lproj/Localizable.strings +++ b/Translations/en.lproj/Localizable.strings @@ -22,6 +22,21 @@ /// Define the allowed hours for usage and restrict access outside those times. "accessSchedulesDescription" = "Define the allowed hours for usage and restrict access outside those times."; +/// User will have access to no media unless it contains at least one allowed tag. +"accessTagAllowDescription" = "User will have access to no media unless it contains at least one allowed tag."; + +/// Access tag already exists +"accessTagAlreadyExists" = "Access tag already exists"; + +/// User will have access to all media except when it contains any blocked tag. +"accessTagBlockDescription" = "User will have access to all media except when it contains any blocked tag."; + +/// Access Tags +"accessTags" = "Access Tags"; + +/// Use tags to grant or restrict this user's access to media. +"accessTagsDescription" = "Use tags to grant or restrict this user's access to media."; + /// Active "active" = "Active"; @@ -34,8 +49,11 @@ /// Add "add" = "Add"; -/// Add Access Schedule -"addAccessSchedule" = "Add Access Schedule"; +/// Add access schedule +"addAccessSchedule" = "Add access schedule"; + +/// Add access tag +"addAccessTag" = "Add access tag"; /// Add API key "addAPIKey" = "Add API key"; @@ -88,6 +106,9 @@ /// Allow collection management "allowCollectionManagement" = "Allow collection management"; +/// Allowed +"allowed" = "Allowed"; + /// Allow media item deletion "allowItemDeletion" = "Allow media item deletion"; @@ -271,6 +292,9 @@ /// bps "bitsPerSecond" = "bps"; +/// Blocked +"blocked" = "Blocked"; + /// Block unrated items "blockUnratedItems" = "Block unrated items"; @@ -1717,6 +1741,9 @@ /// System "system" = "System"; +/// Tag +"tag" = "Tag"; + /// Tagline "tagline" = "Tagline"; From f9ebebe6dd944656ee33a33e963884eb48e8a399 Mon Sep 17 00:00:00 2001 From: Daniel Chick Date: Thu, 9 Jan 2025 16:48:58 -0600 Subject: [PATCH 5/5] [tvOS] Add pin prompt to sign-in screen (#1383) * Add pin prompt to sign-in screen * Bring over security views from iOS * silence tvOS 17 warnings * Add user profile and security views to routing * Changes * revert and remove commented code * cleanup * CodeFactor fixes * Joe's Suggestions: - Move UserProfileSettings to their own Coordinator - Make Views Modal to better reflect existing items - Fix CustomizeSettingsCoordinator (This is on me!) - Change PINs to use SecureField - Move all Settings View to use SplitFormWindowView to mirror existing Settings - Use user profile image for SplitFormWindowView Icon - Change Profile Security to use LearnMoreModal - Use suggestion from https://forums.developer.apple.com/forums/thread/739545 - Tag Alert > TextFields with TODO so we can check this on tvOS 18 * Fix PIN for https://forums.developer.apple.com/forums/thread/739545 on SelectUserView * Fix Build Issue. * use user --------- Co-authored-by: chickdan <=> Co-authored-by: Joe Co-authored-by: Ethan Pippin --- .../Components/UserProfileRow.swift | 0 Shared/Coordinators/SettingsCoordinator.swift | 29 +- .../UserProfileSettingsCoordinator.swift | 51 ++++ .../EpisodeSelector/EpisodeSelector.swift | 2 +- .../Components/UserGridButton.swift | 2 +- .../Views/SelectUserView/SelectUserView.swift | 61 +++- .../Views/SettingsView/SettingsView.swift | 7 +- .../UserLocalSecurityView.swift | 278 ++++++++++++++++++ .../UserProfileSettingsView.swift | 92 ++++++ Swiftfin.xcodeproj/project.pbxproj | 24 +- .../UserLocalSecurityView.swift | 2 +- 11 files changed, 534 insertions(+), 14 deletions(-) rename {Swiftfin/Views/SettingsView/SettingsView => Shared}/Components/UserProfileRow.swift (100%) create mode 100644 Shared/Coordinators/UserProfileSettingsCoordinator.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift create mode 100644 Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift diff --git a/Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift b/Shared/Components/UserProfileRow.swift similarity index 100% rename from Swiftfin/Views/SettingsView/SettingsView/Components/UserProfileRow.swift rename to Shared/Components/UserProfileRow.swift diff --git a/Shared/Coordinators/SettingsCoordinator.swift b/Shared/Coordinators/SettingsCoordinator.swift index 00c566f01..56b5cd170 100644 --- a/Shared/Coordinators/SettingsCoordinator.swift +++ b/Shared/Coordinators/SettingsCoordinator.swift @@ -79,6 +79,8 @@ final class SettingsCoordinator: NavigationCoordinatable { var videoPlayerSettings = makeVideoPlayerSettings @Route(.modal) var playbackQualitySettings = makePlaybackQualitySettings + @Route(.modal) + var userProfile = makeUserProfileSettings #endif #if os(iOS) @@ -181,14 +183,25 @@ final class SettingsCoordinator: NavigationCoordinatable { #endif #if os(tvOS) - func makeCustomizeViewsSettings() -> NavigationViewCoordinator { + + // MARK: - User Profile View + + func makeUserProfileSettings(viewModel: SettingsViewModel) -> NavigationViewCoordinator { NavigationViewCoordinator( - BasicNavigationViewCoordinator { - CustomizeViewsSettings() - } + UserProfileSettingsCoordinator(viewModel: viewModel) + ) + } + + // MARK: - Customize Settings View + + func makeCustomizeViewsSettings() -> NavigationViewCoordinator { + NavigationViewCoordinator( + CustomizeSettingsCoordinator() ) } + // MARK: - Experimental Settings View + func makeExperimentalSettings() -> NavigationViewCoordinator { NavigationViewCoordinator( BasicNavigationViewCoordinator { @@ -197,24 +210,32 @@ final class SettingsCoordinator: NavigationCoordinatable { ) } + // MARK: - Poster Indicator Settings View + func makeIndicatorSettings() -> NavigationViewCoordinator { NavigationViewCoordinator { IndicatorSettingsView() } } + // MARK: - Server Settings View + func makeServerDetail(server: ServerState) -> NavigationViewCoordinator { NavigationViewCoordinator { EditServerView(server: server) } } + // MARK: - Video Player Settings View + func makeVideoPlayerSettings() -> NavigationViewCoordinator { NavigationViewCoordinator( VideoPlayerSettingsCoordinator() ) } + // MARK: - Playback Settings View + func makePlaybackQualitySettings() -> NavigationViewCoordinator { NavigationViewCoordinator( PlaybackQualitySettingsCoordinator() diff --git a/Shared/Coordinators/UserProfileSettingsCoordinator.swift b/Shared/Coordinators/UserProfileSettingsCoordinator.swift new file mode 100644 index 000000000..7fada9bfd --- /dev/null +++ b/Shared/Coordinators/UserProfileSettingsCoordinator.swift @@ -0,0 +1,51 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Stinsen +import SwiftUI + +final class UserProfileSettingsCoordinator: NavigationCoordinatable { + + // MARK: - Navigation Components + + let stack = Stinsen.NavigationStack(initial: \UserProfileSettingsCoordinator.start) + + @Root + var start = makeStart + + // MARK: - Route to User Profile Security + + @Route(.modal) + var localSecurity = makeLocalSecurity + + // MARK: - Observed Object + + @ObservedObject + var viewModel: SettingsViewModel + + // MARK: - Initializer + + init(viewModel: SettingsViewModel) { + self.viewModel = viewModel + } + + // MARK: - User Security View + + func makeLocalSecurity() -> NavigationViewCoordinator { + NavigationViewCoordinator( + BasicNavigationViewCoordinator { + UserLocalSecurityView() + } + ) + } + + @ViewBuilder + func makeStart() -> some View { + UserProfileSettingsView(viewModel: viewModel) + } +} diff --git a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift index 5edee9ef6..f027096bf 100644 --- a/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift +++ b/Swiftfin tvOS/Views/ItemView/Components/EpisodeSelector/EpisodeSelector.swift @@ -50,7 +50,7 @@ struct SeriesEpisodeSelector: View { selection = viewModel.seasons.first?.id } } - .onChange(of: selection) { _ in + .onChange(of: selection) { _, _ in guard let selectionViewModel else { return } if selectionViewModel.state == .initial { diff --git a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift index 92c8ca2b9..35911a541 100644 --- a/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift +++ b/Swiftfin tvOS/Views/SelectUserView/Components/UserGridButton.swift @@ -102,7 +102,7 @@ extension SelectUserView { .buttonStyle(.borderless) .buttonBorderShape(.circle) .contextMenu { - Button("Delete", role: .destructive) { + Button(L10n.delete, role: .destructive) { onDelete() } } diff --git a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift index 92b0ceea3..3290a90c2 100644 --- a/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift +++ b/Swiftfin tvOS/Views/SelectUserView/SelectUserView.swift @@ -55,6 +55,8 @@ struct SelectUserView: View { @State private var padGridItemColumnCount: Int = 1 @State + private var pin: String = "" + @State private var scrollViewOffset: CGFloat = 0 @State private var selectedUsers: Set = [] @@ -78,6 +80,8 @@ struct SelectUserView: View { private var isPresentingConfirmDeleteUsers = false @State private var isPresentingServers: Bool = false + @State + private var isPresentingLocalPin: Bool = false // MARK: - Error State @@ -163,6 +167,28 @@ struct SelectUserView: View { return CGFloat(lastRowMissing) * (gridItemSize.width + EdgeInsets.edgePadding) / 2 } + // MARK: - Select User(s) + + private func select(user: UserState, needsPin: Bool = true) { + Task { @MainActor in + selectedUsers.insert(user) + + switch user.accessPolicy { + case .requireDeviceAuthentication: + // Do nothing, no device authentication on tvOS + break + case .requirePin: + if needsPin { + isPresentingLocalPin = true + return + } + case .none: () + } + + viewModel.send(.signIn(user, pin: pin)) + } + } + // MARK: - Grid Content View @ViewBuilder @@ -200,7 +226,7 @@ struct SelectUserView: View { if isEditingUsers { selectedUsers.toggle(value: user) } else { - viewModel.send(.signIn(user, pin: "")) + select(user: user) } } onDelete: { selectedUsers.insert(user) @@ -364,6 +390,13 @@ struct SelectUserView: View { allServersSelection: .all ) } + .onChange(of: isPresentingLocalPin) { _, newValue in + if newValue { + pin = "" + } else { + selectedUsers.removeAll() + } + } .onChange(of: viewModel.servers) { _, _ in gridItems = makeGridItems(for: serverSelection) @@ -409,6 +442,32 @@ struct SelectUserView: View { Text(L10n.deleteUserMultipleConfirmation(selectedUsers.count)) } } + .alert(L10n.signIn, isPresented: $isPresentingLocalPin) { + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // TextField(L10n.pin, text: $pin) + TextField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.signIn) { + guard let user = selectedUsers.first else { + assertionFailure("User not selected") + return + } + select(user: user, needsPin: false) + } + + Button(L10n.cancel, role: .cancel) {} + } message: { + if let user = selectedUsers.first, user.pinHint.isNotEmpty { + Text(user.pinHint) + } else { + let username = selectedUsers.first?.username ?? .emptyDash + + Text(L10n.enterPinForUser(username)) + } + } .errorMessage($error) } } diff --git a/Swiftfin tvOS/Views/SettingsView/SettingsView.swift b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift index eacbd9a2b..69be51e15 100644 --- a/Swiftfin tvOS/Views/SettingsView/SettingsView.swift +++ b/Swiftfin tvOS/Views/SettingsView/SettingsView.swift @@ -33,11 +33,8 @@ struct SettingsView: View { .contentView { Section(L10n.jellyfin) { - Button {} label: { - TextPairView( - leading: L10n.user, - trailing: viewModel.userSession.user.username - ) + UserProfileRow(user: viewModel.userSession.user.data) { + router.route(to: \.userProfile, viewModel) } ChevronButton( diff --git a/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift new file mode 100644 index 000000000..55c1f9717 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift @@ -0,0 +1,278 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Combine +import Defaults +import KeychainSwift +import SwiftUI + +// TODO: present toast when authentication successfully changed +// TODO: pop is just a workaround to get change published from usersession. +// find fix and don't pop when successfully changed +// TODO: could cleanup/refactor greatly + +struct UserLocalSecurityView: View { + + // MARK: - Defaults + + @Default(.accentColor) + private var accentColor + + // MARK: - State & Environment Objects + + @EnvironmentObject + private var router: BasicNavigationViewCoordinator.Router + + @StateObject + private var viewModel = UserLocalSecurityViewModel() + + // MARK: - Local Security Variables + + @State + private var listSize: CGSize = .zero + @State + private var onPinCompletion: (() -> Void)? + @State + private var pin: String = "" + @State + private var pinHint: String = "" + @State + private var signInPolicy: UserAccessPolicy = .none + + // MARK: - Dialog States + + @State + private var isPresentingOldPinPrompt: Bool = false + @State + private var isPresentingNewPinPrompt: Bool = false + + // MARK: - Error State + + @State + private var error: Error? = nil + + // MARK: - Focus Management + + @FocusState + private var focusedItem: FocusableItem? + + private enum FocusableItem: Hashable { + case security + } + + // MARK: - Check Old Policy + + private func checkOldPolicy() { + do { + try viewModel.checkForOldPolicy() + } catch { + return + } + + checkNewPolicy() + } + + // MARK: - Check New Policy + + private func checkNewPolicy() { + do { + try viewModel.checkFor(newPolicy: signInPolicy) + } catch { + return + } + + viewModel.set(newPolicy: signInPolicy, newPin: pin, newPinHint: pinHint) + } + + // MARK: - Event Handler + + private func onReceive(_ event: UserLocalSecurityViewModel.Event) { + switch event { + case let .error(eventError): + error = eventError + case .promptForOldPin: + onPinCompletion = { + Task { + try viewModel.check(oldPin: pin) + + checkNewPolicy() + } + } + + pin = "" + isPresentingOldPinPrompt = true + case .promptForNewPin: + onPinCompletion = { + viewModel.set(newPolicy: signInPolicy, newPin: pin, newPinHint: pinHint) + router.popLast() + } + + pin = "" + isPresentingNewPinPrompt = true + case .promptForOldDeviceAuth, .promptForNewDeviceAuth: + break + } + } + + // MARK: - Body + + var body: some View { + SplitFormWindowView() + .descriptionView { + descriptionView + } + .contentView { + Section { + Toggle( + L10n.pin, + isOn: Binding( + get: { signInPolicy == .requirePin }, + set: { signInPolicy = $0 ? .requirePin : .none } + ) + ) + .focused($focusedItem, equals: .security) + /* Picker(L10n.security, selection: $signInPolicy) { + ForEach(UserAccessPolicy.allCases.filter { $0 != .requireDeviceAuthentication }, id: \.self) { policy in + Text(policy.displayTitle) + } + } */ + } + + if signInPolicy == .requirePin { + Section { + ChevronAlertButton( + L10n.hint, + subtitle: pinHint, + description: L10n.setPinHintDescription + ) { + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // TextField(L10n.hint, text: $pinHint) + TextField(text: $pinHint) {} + } + } header: { + Text(L10n.hint) + } footer: { + Text(L10n.setPinHintDescription) + } + } + } + .animation(.linear, value: signInPolicy) + .navigationTitle(L10n.security) + .onFirstAppear { + pinHint = viewModel.userSession.user.pinHint + signInPolicy = viewModel.userSession.user.accessPolicy + } + .onReceive(viewModel.events) { event in + onReceive(event) + } + .topBarTrailing { + Button { + checkOldPolicy() + } label: { + Group { + if signInPolicy == .requirePin, signInPolicy == viewModel.userSession.user.accessPolicy { + Text(L10n.changePin) + } else { + Text(L10n.save) + } + } + .foregroundStyle(accentColor.overlayColor) + .font(.headline) + .padding(.vertical, 5) + .padding(.horizontal, 10) + .background { + accentColor + } + .clipShape(RoundedRectangle(cornerRadius: 10)) + } + } + .trackingSize($listSize) + .alert( + L10n.enterPin, + isPresented: $isPresentingOldPinPrompt, + presenting: onPinCompletion + ) { completion in + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // SecureField(L10n.pin, text: $pin) + SecureField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.continue) { + completion() + } + + Button(L10n.cancel, role: .cancel) {} + } message: { _ in + Text(L10n.enterPinForUser(viewModel.userSession.user.username)) + } + .alert( + L10n.setPin, + isPresented: $isPresentingNewPinPrompt, + presenting: onPinCompletion + ) { completion in + + // TODO: Verify on tvOS 18 + // https://forums.developer.apple.com/forums/thread/739545 + // SecureField(L10n.pin, text: $pin) + SecureField(text: $pin) {} + .keyboardType(.numberPad) + + Button(L10n.set) { + completion() + } + + Button(L10n.cancel, role: .cancel) {} + } message: { _ in + Text(L10n.createPinForUser(viewModel.userSession.user.username)) + } + .errorMessage($error) + } + + // MARK: - Description View Icon + + private var descriptionView: some View { + ZStack { + Image(systemName: "lock.fill") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + + focusedDescription + .transition(.opacity.animation(.linear(duration: 0.2))) + } + } + + // MARK: - Description View on Focus + + @ViewBuilder + private var focusedDescription: some View { + switch focusedItem { + case .security: + LearnMoreModal { + TextPair( + title: L10n.security, + subtitle: L10n.additionalSecurityAccessDescription + ) + TextPair( + title: UserAccessPolicy.requirePin.displayTitle, + subtitle: L10n.requirePinDescription + ) + TextPair( + title: UserAccessPolicy.none.displayTitle, + subtitle: L10n.saveUserWithoutAuthDescription + ) + } + + case nil: + EmptyView() + } + } +} diff --git a/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift new file mode 100644 index 000000000..043b35095 --- /dev/null +++ b/Swiftfin tvOS/Views/SettingsView/UserProfileSettingsView/UserProfileSettingsView.swift @@ -0,0 +1,92 @@ +// +// Swiftfin is subject to the terms of the Mozilla Public +// License, v2.0. If a copy of the MPL was not distributed with this +// file, you can obtain one at https://mozilla.org/MPL/2.0/. +// +// Copyright (c) 2025 Jellyfin & Jellyfin Contributors +// + +import Defaults +import Factory +import JellyfinAPI +import SwiftUI + +struct UserProfileSettingsView: View { + + @EnvironmentObject + private var router: UserProfileSettingsCoordinator.Router + + @ObservedObject + private var viewModel: SettingsViewModel + @StateObject + private var profileImageViewModel: UserProfileImageViewModel + + @State + private var isPresentingConfirmReset: Bool = false + + init(viewModel: SettingsViewModel) { + self.viewModel = viewModel + self._profileImageViewModel = StateObject(wrappedValue: UserProfileImageViewModel(user: viewModel.userSession.user.data)) + } + + var body: some View { + SplitFormWindowView() + .descriptionView { + UserProfileImage( + userID: viewModel.userSession.user.id, + source: viewModel.userSession.user.profileImageSource( + client: viewModel.userSession.client, + maxWidth: 400 + ) + ) + .aspectRatio(contentMode: .fit) + .frame(maxWidth: 400) + } + .contentView { + + // TODO: bring reset password to tvOS +// Section { +// ChevronButton(L10n.password) +// .onSelect { +// router.route(to: \.resetUserPassword, viewModel.userSession.user.id) +// } +// } + + Section { + ChevronButton(L10n.security) + .onSelect { + router.route(to: \.localSecurity) + } + } + + // TODO: Do we want this option on tvOS? +// Section { +// // TODO: move under future "Storage" tab +// // when downloads implemented +// Button(L10n.resetSettings) { +// isPresentingConfirmReset = true +// } +// .foregroundStyle(.red) +// } footer: { +// Text(L10n.resetSettingsDescription) +// } + } + .withDescriptionTopPadding() + .navigationTitle(L10n.user) + .confirmationDialog( + L10n.resetSettings, + isPresented: $isPresentingConfirmReset, + titleVisibility: .visible + ) { + Button(L10n.reset, role: .destructive) { + do { + try viewModel.userSession.user.deleteSettings() + } catch { + viewModel.logger.error("Unable to reset user settings: \(error.localizedDescription)") + } + } + } message: { + Text(L10n.resetSettingsMessage) + } + } +} diff --git a/Swiftfin.xcodeproj/project.pbxproj b/Swiftfin.xcodeproj/project.pbxproj index 2d5118941..de6413a78 100644 --- a/Swiftfin.xcodeproj/project.pbxproj +++ b/Swiftfin.xcodeproj/project.pbxproj @@ -146,6 +146,7 @@ 4E73E2A72C41CFD3002D2A78 /* PlaybackBitrateTestSize.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E73E2A52C41CFD3002D2A78 /* PlaybackBitrateTestSize.swift */; }; 4E762AAE2C3A1A95004D1579 /* PlaybackBitrate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E762AAD2C3A1A95004D1579 /* PlaybackBitrate.swift */; }; 4E762AAF2C3A1A95004D1579 /* PlaybackBitrate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E762AAD2C3A1A95004D1579 /* PlaybackBitrate.swift */; }; + 4E8274F52D2ECF1900F5E610 /* UserProfileSettingsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8274F32D2ECF0200F5E610 /* UserProfileSettingsCoordinator.swift */; }; 4E884C652CEBB301004CF6AD /* LearnMoreModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E884C642CEBB2FF004CF6AD /* LearnMoreModal.swift */; }; 4E8B34EA2AB91B6E0018F305 /* ItemFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8B34E92AB91B6E0018F305 /* ItemFilter.swift */; }; 4E8B34EB2AB91B6E0018F305 /* ItemFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8B34E92AB91B6E0018F305 /* ItemFilter.swift */; }; @@ -379,6 +380,9 @@ BD39577C2C113FAA0078CEF8 /* TimestampSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD39577B2C113FAA0078CEF8 /* TimestampSection.swift */; }; BD39577E2C1140810078CEF8 /* TransitionSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD39577D2C1140810078CEF8 /* TransitionSection.swift */; }; BDA623532D0D0854009A157F /* SelectUserBottomBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA623522D0D0854009A157F /* SelectUserBottomBar.swift */; }; + BDFF67B02D2CA59A009A9A3A /* UserLocalSecurityView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF67AD2D2CA59A009A9A3A /* UserLocalSecurityView.swift */; }; + BDFF67B22D2CA59A009A9A3A /* UserProfileSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDFF67AE2D2CA59A009A9A3A /* UserProfileSettingsView.swift */; }; + BDFF67B32D2CA99D009A9A3A /* UserProfileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BE1CED2BDB68CD008176A9 /* UserProfileRow.swift */; }; C40CD926271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40CD924271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift */; }; C44FA6E02AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44FA6DE2AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift */; }; C44FA6E12AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44FA6DF2AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift */; }; @@ -1292,6 +1296,7 @@ 4E73E2A52C41CFD3002D2A78 /* PlaybackBitrateTestSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybackBitrateTestSize.swift; sourceTree = ""; }; 4E75B34A2D164AC100D16531 /* PurgeUnusedStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurgeUnusedStrings.swift; sourceTree = ""; }; 4E762AAD2C3A1A95004D1579 /* PlaybackBitrate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlaybackBitrate.swift; sourceTree = ""; }; + 4E8274F32D2ECF0200F5E610 /* UserProfileSettingsCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileSettingsCoordinator.swift; sourceTree = ""; }; 4E884C642CEBB2FF004CF6AD /* LearnMoreModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LearnMoreModal.swift; sourceTree = ""; }; 4E8B34E92AB91B6E0018F305 /* ItemFilter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemFilter.swift; sourceTree = ""; }; 4E8F74A02CE03C8B00CC8969 /* ItemEditorCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemEditorCoordinator.swift; sourceTree = ""; }; @@ -1497,6 +1502,8 @@ BD39577B2C113FAA0078CEF8 /* TimestampSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimestampSection.swift; sourceTree = ""; }; BD39577D2C1140810078CEF8 /* TransitionSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransitionSection.swift; sourceTree = ""; }; BDA623522D0D0854009A157F /* SelectUserBottomBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectUserBottomBar.swift; sourceTree = ""; }; + BDFF67AD2D2CA59A009A9A3A /* UserLocalSecurityView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserLocalSecurityView.swift; sourceTree = ""; }; + BDFF67AE2D2CA59A009A9A3A /* UserProfileSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileSettingsView.swift; sourceTree = ""; }; C40CD924271F8D1E000FB198 /* ItemTypeLibraryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemTypeLibraryViewModel.swift; sourceTree = ""; }; C44FA6DE2AACD19C00EDEB56 /* LiveSmallPlaybackButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveSmallPlaybackButton.swift; sourceTree = ""; }; C44FA6DF2AACD19C00EDEB56 /* LiveLargePlaybackButtons.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LiveLargePlaybackButtons.swift; sourceTree = ""; }; @@ -3454,6 +3461,7 @@ 6220D0B626D5EE1100B8E046 /* SearchCoordinator.swift */, E13DD4012717EE79009D4DAF /* SelectUserCoordinator.swift */, 6220D0B026D5EC9900B8E046 /* SettingsCoordinator.swift */, + 4E8274F32D2ECF0200F5E610 /* UserProfileSettingsCoordinator.swift */, E11C15342BF7C505006BC9B6 /* UserProfileImageCoordinator.swift */, E13DD3F127179378009D4DAF /* UserSignInCoordinator.swift */, E18A8E8428D60D0000333B9A /* VideoPlayerCoordinator.swift */, @@ -3485,6 +3493,15 @@ path = Sections; sourceTree = ""; }; + BDFF67AF2D2CA59A009A9A3A /* UserProfileSettingsView */ = { + isa = PBXGroup; + children = ( + BDFF67AD2D2CA59A009A9A3A /* UserLocalSecurityView.swift */, + BDFF67AE2D2CA59A009A9A3A /* UserProfileSettingsView.swift */, + ); + path = UserProfileSettingsView; + sourceTree = ""; + }; C44FA6DD2AACD15300EDEB56 /* PlaybackButtons */ = { isa = PBXGroup; children = ( @@ -4532,6 +4549,7 @@ E1A1528928FD22F600600579 /* TextPairView.swift */, E1EBCB41278BD174009FE6E9 /* TruncatedText.swift */, 4E7315722D14752400EA2A95 /* UserProfileImage */, + E1BE1CED2BDB68CD008176A9 /* UserProfileRow.swift */, E1B5784028F8AFCB00D42911 /* WrappedView.swift */, ); path = Components; @@ -4596,7 +4614,6 @@ E1BE1CEC2BDB68C4008176A9 /* Components */ = { isa = PBXGroup; children = ( - E1BE1CED2BDB68CD008176A9 /* UserProfileRow.swift */, ); path = Components; sourceTree = ""; @@ -4796,6 +4813,7 @@ E104C872296E0D0A00C1C3F9 /* IndicatorSettingsView.swift */, 4E2AC4D52C6C4CDC00DD600D /* PlaybackQualitySettingsView.swift */, 5398514426B64DA100101B49 /* SettingsView.swift */, + BDFF67AF2D2CA59A009A9A3A /* UserProfileSettingsView */, E1549679296CB4B000C4EF88 /* VideoPlayerSettingsView.swift */, ); path = SettingsView; @@ -5401,6 +5419,7 @@ E1763A2B2BF3046E004DF6AB /* UserGridButton.swift in Sources */, E1EF473A289A0F610034046B /* TruncatedText.swift in Sources */, E1C926112887565C002A7A66 /* ActionButtonHStack.swift in Sources */, + 4E8274F52D2ECF1900F5E610 /* UserProfileSettingsCoordinator.swift in Sources */, E178859B2780F1F40094FBCF /* tvOSSlider.swift in Sources */, E103DF952BCF31CD000229B2 /* MediaItem.swift in Sources */, E1ED91192B95993300802036 /* TitledLibraryParent.swift in Sources */, @@ -5517,6 +5536,8 @@ E19D41B42BF2C0020082B8B2 /* StoredValues+Temp.swift in Sources */, 4EF18B282CB9936D00343666 /* ListColumnsPickerView.swift in Sources */, E11BDF7B2B85529D0045C54A /* SupportedCaseIterable.swift in Sources */, + BDFF67B02D2CA59A009A9A3A /* UserLocalSecurityView.swift in Sources */, + BDFF67B22D2CA59A009A9A3A /* UserProfileSettingsView.swift in Sources */, 4E204E592C574FD9004D22A2 /* CustomizeSettingsCoordinator.swift in Sources */, E1575E8C293E7B1E001665B1 /* UIScreen.swift in Sources */, C46DD8EC2A8FB49A0046A504 /* LiveMainOverlay.swift in Sources */, @@ -5532,6 +5553,7 @@ 4E661A1B2CEFE54800025C99 /* BoxSetDisplayOrder.swift in Sources */, E129428628F080B500796AC6 /* OnReceiveNotificationModifier.swift in Sources */, 53ABFDE7267974EF00886593 /* ConnectToServerViewModel.swift in Sources */, + BDFF67B32D2CA99D009A9A3A /* UserProfileRow.swift in Sources */, 62E632E4267D3BA60063E547 /* MovieItemViewModel.swift in Sources */, E149CCAE2BE6ECC8008B9331 /* Storable.swift in Sources */, C46DD8D92A8DC2990046A504 /* LiveNativeVideoPlayer.swift in Sources */, diff --git a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift index 703e8cf9d..b341ab0fb 100644 --- a/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift +++ b/Swiftfin/Views/SettingsView/UserProfileSettingsView/UserLocalSecurityView.swift @@ -37,7 +37,7 @@ struct UserLocalSecurityView: View { @State private var listSize: CGSize = .zero @State - private var onPinCompletion: (() -> Void)? = nil + private var onPinCompletion: (() -> Void)? @State private var pin: String = "" @State