[iOS] Admin Dashboard - Active Sessions Play Method Fix (#1272)

* Fixes. But is this right?

* Ensure there IS an item playing.

* https://github.com/jellyfin/Swiftfin/pull/1272#discussion_r1801713951

* Fix the missing labels after merging with Main.
This commit is contained in:
Joe 2024-10-15 16:04:32 -06:00 committed by GitHub
parent 2bda693143
commit 8ae55dc57b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 193 additions and 148 deletions

View File

@ -0,0 +1,37 @@
//
// 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
extension SessionInfo {
var playMethodDisplayTitle: String? {
guard nowPlayingItem != nil, let playState, let playMethod = playState.playMethod else { return nil }
if let transcodingInfo {
let isVideoDirect = transcodingInfo.isVideoDirect ?? false
let hasVideoCodec = transcodingInfo.videoCodec != nil
let isAudioDirect = transcodingInfo.isAudioDirect ?? false
if isVideoDirect || hasVideoCodec, isAudioDirect {
return L10n.remux
} else if isVideoDirect {
return PlayMethod.directStream.displayTitle
}
}
switch playMethod {
case .transcode:
return PlayMethod.transcode.displayTitle
case .directPlay, .directStream:
return PlayMethod.directPlay.displayTitle
}
}
}

View File

@ -18,13 +18,13 @@ internal enum L10n {
internal static let accentColorDescription = L10n.tr("Localizable", "accentColorDescription", fallback: "Some views may need an app restart to update.")
/// Accessibility
internal static let accessibility = L10n.tr("Localizable", "accessibility", fallback: "Accessibility")
/// Active Devices
/// ActiveSessionsView Header
internal static let activeDevices = L10n.tr("Localizable", "activeDevices", fallback: "Active Devices")
/// Add Server
/// Select Server View - Add Server
internal static let addServer = L10n.tr("Localizable", "addServer", fallback: "Add Server")
/// Add URL
internal static let addURL = L10n.tr("Localizable", "addURL", fallback: "Add URL")
/// Administration
/// Administration Dashboard Section
internal static let administration = L10n.tr("Localizable", "administration", fallback: "Administration")
/// Advanced
internal static let advanced = L10n.tr("Localizable", "advanced", fallback: "Advanced")
@ -36,11 +36,11 @@ internal enum L10n {
internal static let allGenres = L10n.tr("Localizable", "allGenres", fallback: "All Genres")
/// All Media
internal static let allMedia = L10n.tr("Localizable", "allMedia", fallback: "All Media")
/// All Servers
/// Select Server View - Select All Servers
internal static let allServers = L10n.tr("Localizable", "allServers", fallback: "All Servers")
/// Anamorphic video is not supported
/// TranscodeReason - Anamorphic Video Not Supported
internal static let anamorphicVideoNotSupported = L10n.tr("Localizable", "anamorphicVideoNotSupported", fallback: "Anamorphic video is not supported")
/// Appearance
/// Represents the Appearance setting label
internal static let appearance = L10n.tr("Localizable", "appearance", fallback: "Appearance")
/// App Icon
internal static let appIcon = L10n.tr("Localizable", "appIcon", fallback: "App Icon")
@ -52,27 +52,27 @@ internal enum L10n {
internal static let audio = L10n.tr("Localizable", "audio", fallback: "Audio")
/// Audio & Captions
internal static let audioAndCaptions = L10n.tr("Localizable", "audioAndCaptions", fallback: "Audio & Captions")
/// The audio bit depth is not supported
/// TranscodeReason - Audio Bit Depth Not Supported
internal static let audioBitDepthNotSupported = L10n.tr("Localizable", "audioBitDepthNotSupported", fallback: "The audio bit depth is not supported")
/// The audio bitrate is not supported
/// TranscodeReason - Audio Bitrate Not Supported
internal static let audioBitrateNotSupported = L10n.tr("Localizable", "audioBitrateNotSupported", fallback: "The audio bitrate is not supported")
/// The number of audio channels is not supported
/// TranscodeReason - Audio Channels Not Supported
internal static let audioChannelsNotSupported = L10n.tr("Localizable", "audioChannelsNotSupported", fallback: "The number of audio channels is not supported")
/// The audio codec is not supported
/// TranscodeReason - Audio Codec Not Supported
internal static let audioCodecNotSupported = L10n.tr("Localizable", "audioCodecNotSupported", fallback: "The audio codec is not supported")
/// The audio track is external and requires transcoding
/// TranscodeReason - Audio Is External
internal static let audioIsExternal = L10n.tr("Localizable", "audioIsExternal", fallback: "The audio track is external and requires transcoding")
/// Audio Offset
internal static let audioOffset = L10n.tr("Localizable", "audioOffset", fallback: "Audio Offset")
/// The audio profile is not supported
/// TranscodeReason - Audio Profile Not Supported
internal static let audioProfileNotSupported = L10n.tr("Localizable", "audioProfileNotSupported", fallback: "The audio profile is not supported")
/// The audio sample rate is not supported
/// TranscodeReason - Audio Sample Rate Not Supported
internal static let audioSampleRateNotSupported = L10n.tr("Localizable", "audioSampleRateNotSupported", fallback: "The audio sample rate is not supported")
/// Audio Track
internal static let audioTrack = L10n.tr("Localizable", "audioTrack", fallback: "Audio Track")
/// Authorize
internal static let authorize = L10n.tr("Localizable", "authorize", fallback: "Authorize")
/// Auto
/// PlaybackCompatibility Default Category
internal static let auto = L10n.tr("Localizable", "auto", fallback: "Auto")
/// Auto Play
internal static let autoPlay = L10n.tr("Localizable", "autoPlay", fallback: "Auto Play")
@ -82,47 +82,47 @@ internal enum L10n {
internal static let barButtons = L10n.tr("Localizable", "barButtons", fallback: "Bar Buttons")
/// Behavior
internal static let behavior = L10n.tr("Localizable", "behavior", fallback: "Behavior")
/// Auto
/// Option for automatic bitrate selection
internal static let bitrateAuto = L10n.tr("Localizable", "bitrateAuto", fallback: "Auto")
/// Default Bitrate
internal static let bitrateDefault = L10n.tr("Localizable", "bitrateDefault", fallback: "Default Bitrate")
/// Limits the internet bandwidth used during video playback
/// Default Bitrate Description
internal static let bitrateDefaultDescription = L10n.tr("Localizable", "bitrateDefaultDescription", fallback: "Limits the internet bandwidth used during video playback")
/// 480p - 1.5 Mbps
/// Option to set the bitrate to 480p quality at 1.5 Mbps
internal static let bitrateKbps1500 = L10n.tr("Localizable", "bitrateKbps1500", fallback: "480p - 1.5 Mbps")
/// 360p - 420 Kbps
/// Option to set the bitrate to 360p quality at 420 Kbps
internal static let bitrateKbps420 = L10n.tr("Localizable", "bitrateKbps420", fallback: "360p - 420 Kbps")
/// 480p - 720 Kbps
/// Option to set the bitrate to 480p quality at 720 Kbps
internal static let bitrateKbps720 = L10n.tr("Localizable", "bitrateKbps720", fallback: "480p - 720 Kbps")
/// Maximum
/// Option for the maximum bitrate
internal static let bitrateMax = L10n.tr("Localizable", "bitrateMax", fallback: "Maximum")
/// 1080p - 10 Mbps
/// Option to set the bitrate to 1080p quality at 10 Mbps
internal static let bitrateMbps10 = L10n.tr("Localizable", "bitrateMbps10", fallback: "1080p - 10 Mbps")
/// 4K - 120 Mbps
/// Option to set the bitrate to 4K quality at 120 Mbps
internal static let bitrateMbps120 = L10n.tr("Localizable", "bitrateMbps120", fallback: "4K - 120 Mbps")
/// 1080p - 15 Mbps
/// Option to set the bitrate to 1080p quality at 15 Mbps
internal static let bitrateMbps15 = L10n.tr("Localizable", "bitrateMbps15", fallback: "1080p - 15 Mbps")
/// 1080p - 20 Mbps
/// Option to set the bitrate to 1080p quality at 20 Mbps
internal static let bitrateMbps20 = L10n.tr("Localizable", "bitrateMbps20", fallback: "1080p - 20 Mbps")
/// 480p - 3 Mbps
/// Option to set the bitrate to 480p quality at 3 Mbps
internal static let bitrateMbps3 = L10n.tr("Localizable", "bitrateMbps3", fallback: "480p - 3 Mbps")
/// 720p - 4 Mbps
/// Option to set the bitrate to 720p quality at 4 Mbps
internal static let bitrateMbps4 = L10n.tr("Localizable", "bitrateMbps4", fallback: "720p - 4 Mbps")
/// 1080p - 40 Mbps
/// Option to set the bitrate to 1080p quality at 40 Mbps
internal static let bitrateMbps40 = L10n.tr("Localizable", "bitrateMbps40", fallback: "1080p - 40 Mbps")
/// 720p - 6 Mbps
/// Option to set the bitrate to 720p quality at 6 Mbps
internal static let bitrateMbps6 = L10n.tr("Localizable", "bitrateMbps6", fallback: "720p - 6 Mbps")
/// 1080p - 60 Mbps
/// Option to set the bitrate to 1080p quality at 60 Mbps
internal static let bitrateMbps60 = L10n.tr("Localizable", "bitrateMbps60", fallback: "1080p - 60 Mbps")
/// 720p - 8 Mbps
/// Option to set the bitrate to 720p quality at 8 Mbps
internal static let bitrateMbps8 = L10n.tr("Localizable", "bitrateMbps8", fallback: "720p - 8 Mbps")
/// 4K - 80 Mbps
/// Option to set the bitrate to 4K quality at 80 Mbps
internal static let bitrateMbps80 = L10n.tr("Localizable", "bitrateMbps80", fallback: "4K - 80 Mbps")
/// Bitrate Test
/// Bitrate Automatic Section Header
internal static let bitrateTest = L10n.tr("Localizable", "bitrateTest", fallback: "Bitrate Test")
/// Determines the length of the 'Auto' bitrate test used to find the available internet bandwidth
/// Description for bitrate test duration description
internal static let bitrateTestDescription = L10n.tr("Localizable", "bitrateTestDescription", fallback: "Determines the length of the 'Auto' bitrate test used to find the available internet bandwidth")
/// Longer tests are more accurate but may result in a delayed playback
/// Description for bitrate test duration indicating longer tests provide more accurate bitrates but may delay playback
internal static let bitrateTestDisclaimer = L10n.tr("Localizable", "bitrateTestDisclaimer", fallback: "Longer tests are more accurate but may result in a delayed playback")
/// Blue
internal static let blue = L10n.tr("Localizable", "blue", fallback: "Blue")
@ -132,9 +132,9 @@ internal enum L10n {
internal static let buttons = L10n.tr("Localizable", "buttons", fallback: "Buttons")
/// Cancel
internal static let cancel = L10n.tr("Localizable", "cancel", fallback: "Cancel")
/// Cancelled
/// Task was Canceled
internal static let canceled = L10n.tr("Localizable", "canceled", fallback: "Cancelled")
/// Cancelling...
/// Status label for when a task is cancelling
internal static let cancelling = L10n.tr("Localizable", "cancelling", fallback: "Cancelling...")
/// Cannot connect to host
internal static let cannotConnectToHost = L10n.tr("Localizable", "cannotConnectToHost", fallback: "Cannot connect to host")
@ -142,7 +142,7 @@ internal enum L10n {
internal static let cast = L10n.tr("Localizable", "cast", fallback: "CAST")
/// Cast & Crew
internal static let castAndCrew = L10n.tr("Localizable", "castAndCrew", fallback: "Cast & Crew")
/// Category
/// The category label for tasks
internal static let category = L10n.tr("Localizable", "category", fallback: "Category")
/// Change Server
internal static let changeServer = L10n.tr("Localizable", "changeServer", fallback: "Change Server")
@ -154,11 +154,11 @@ internal enum L10n {
internal static let chapterSlider = L10n.tr("Localizable", "chapterSlider", fallback: "Chapter Slider")
/// Cinematic
internal static let cinematic = L10n.tr("Localizable", "cinematic", fallback: "Cinematic")
/// Cinematic Background
/// Customize Server View - Cinematic Background
internal static let cinematicBackground = L10n.tr("Localizable", "cinematicBackground", fallback: "Cinematic Background")
/// Cinematic Views
internal static let cinematicViews = L10n.tr("Localizable", "cinematicViews", fallback: "Cinematic Views")
/// Client
/// The client used for the session
internal static let client = L10n.tr("Localizable", "client", fallback: "Client")
/// Close
internal static let close = L10n.tr("Localizable", "close", fallback: "Close")
@ -168,7 +168,7 @@ internal enum L10n {
internal static let collections = L10n.tr("Localizable", "collections", fallback: "Collections")
/// Color
internal static let color = L10n.tr("Localizable", "color", fallback: "Color")
/// Columns
/// Section Title for Column Configuration
internal static let columns = L10n.tr("Localizable", "columns", fallback: "Columns")
/// Coming soon
internal static let comingSoon = L10n.tr("Localizable", "comingSoon", fallback: "Coming soon")
@ -178,11 +178,11 @@ internal enum L10n {
internal static let compactLogo = L10n.tr("Localizable", "compactLogo", fallback: "Compact Logo")
/// Compact Poster
internal static let compactPoster = L10n.tr("Localizable", "compactPoster", fallback: "Compact Poster")
/// Compatibility
/// PlaybackCompatibility Section Title
internal static let compatibility = L10n.tr("Localizable", "compatibility", fallback: "Compatibility")
/// Most Compatible
/// PlaybackCompatibility Compatible Category
internal static let compatible = L10n.tr("Localizable", "compatible", fallback: "Most Compatible")
/// Confirm
/// Confirm Task Fuction
internal static let confirm = L10n.tr("Localizable", "confirm", fallback: "Confirm")
/// Confirm Close
internal static let confirmClose = L10n.tr("Localizable", "confirmClose", fallback: "Confirm Close")
@ -198,9 +198,9 @@ internal enum L10n {
internal static let connectToJellyfinServerStart = L10n.tr("Localizable", "connectToJellyfinServerStart", fallback: "Connect to a Jellyfin server to get started")
/// Connect to Server
internal static let connectToServer = L10n.tr("Localizable", "connectToServer", fallback: "Connect to Server")
/// The container bitrate exceeds the allowed limit
/// TranscodeReason - Container Bitrate Exceeds Limit
internal static let containerBitrateExceedsLimit = L10n.tr("Localizable", "containerBitrateExceedsLimit", fallback: "The container bitrate exceeds the allowed limit")
/// The container format is not supported
/// TranscodeReason - Container Not Supported
internal static let containerNotSupported = L10n.tr("Localizable", "containerNotSupported", fallback: "The container format is not supported")
/// Containers
internal static let containers = L10n.tr("Localizable", "containers", fallback: "Containers")
@ -212,47 +212,47 @@ internal enum L10n {
internal static let current = L10n.tr("Localizable", "current", fallback: "Current")
/// Current Position
internal static let currentPosition = L10n.tr("Localizable", "currentPosition", fallback: "Current Position")
/// Custom
/// PlaybackCompatibility Custom Category
internal static let custom = L10n.tr("Localizable", "custom", fallback: "Custom")
/// The custom device profiles will be added to the default Swiftfin device profiles
/// Custom profile is Added to the Existing Profiles
internal static let customDeviceProfileAdd = L10n.tr("Localizable", "customDeviceProfileAdd", fallback: "The custom device profiles will be added to the default Swiftfin device profiles")
/// Dictates back to the Jellyfin Server what this device hardware is capable of playing
/// Device Profile Section Description
internal static let customDeviceProfileDescription = L10n.tr("Localizable", "customDeviceProfileDescription", fallback: "Dictates back to the Jellyfin Server what this device hardware is capable of playing")
/// The custom device profiles will replace the default Swiftfin device profiles
/// Custom profile will replace the Existing Profiles
internal static let customDeviceProfileReplace = L10n.tr("Localizable", "customDeviceProfileReplace", fallback: "The custom device profiles will replace the default Swiftfin device profiles")
/// Customize
/// Settings View - Customize
internal static let customize = L10n.tr("Localizable", "customize", fallback: "Customize")
/// Custom Profile
/// Section Header for a Custom Device Profile
internal static let customProfile = L10n.tr("Localizable", "customProfile", fallback: "Custom Profile")
/// Dark
/// Represents the dark theme setting
internal static let dark = L10n.tr("Localizable", "dark", fallback: "Dark")
/// Dashboard
/// UserDashboardView Header
internal static let dashboard = L10n.tr("Localizable", "dashboard", fallback: "Dashboard")
/// Perform administrative tasks for your Jellyfin server.
/// Description for the dashboard section
internal static let dashboardDescription = L10n.tr("Localizable", "dashboardDescription", fallback: "Perform administrative tasks for your Jellyfin server.")
/// Days
internal static let days = L10n.tr("Localizable", "days", fallback: "Days")
/// Time Interval Help Text - Days
internal static let days = L10n.tr("Localizable", "days", fallback: "days")
/// Default Scheme
internal static let defaultScheme = L10n.tr("Localizable", "defaultScheme", fallback: "Default Scheme")
/// Delete
/// Server Detail View - Delete
internal static let delete = L10n.tr("Localizable", "delete", fallback: "Delete")
/// Delete Server
/// Server Detail View - Delete Server
internal static let deleteServer = L10n.tr("Localizable", "deleteServer", fallback: "Delete Server")
/// Delivery
internal static let delivery = L10n.tr("Localizable", "delivery", fallback: "Delivery")
/// Device
/// Session Device Section Label
internal static let device = L10n.tr("Localizable", "device", fallback: "Device")
/// Device Profile
/// Section Header for Device Profiles
internal static let deviceProfile = L10n.tr("Localizable", "deviceProfile", fallback: "Device Profile")
/// Direct Play
/// PlaybackCompatibility DirectPlay Category
internal static let direct = L10n.tr("Localizable", "direct", fallback: "Direct Play")
/// DIRECTOR
internal static let director = L10n.tr("Localizable", "director", fallback: "DIRECTOR")
/// Direct Play
/// PlayMethod - Direct Play
internal static let directPlay = L10n.tr("Localizable", "directPlay", fallback: "Direct Play")
/// An error occurred during direct play
/// TranscodeReason - Direct Play Error
internal static let directPlayError = L10n.tr("Localizable", "directPlayError", fallback: "An error occurred during direct play")
/// Direct Stream
/// PlayMethod - Direct Stream
internal static let directStream = L10n.tr("Localizable", "directStream", fallback: "Direct Stream")
/// Disabled
internal static let disabled = L10n.tr("Localizable", "disabled", fallback: "Disabled")
@ -262,15 +262,15 @@ internal enum L10n {
internal static let dismiss = L10n.tr("Localizable", "dismiss", fallback: "Dismiss")
/// Display order
internal static let displayOrder = L10n.tr("Localizable", "displayOrder", fallback: "Display order")
/// Done
/// Done - Completed, end, or save
internal static let done = L10n.tr("Localizable", "done", fallback: "Done")
/// Downloads
internal static let downloads = L10n.tr("Localizable", "downloads", fallback: "Downloads")
/// Edit
/// Button label to edit a task
internal static let edit = L10n.tr("Localizable", "edit", fallback: "Edit")
/// Edit Jump Lengths
internal static let editJumpLengths = L10n.tr("Localizable", "editJumpLengths", fallback: "Edit Jump Lengths")
/// Edit Server
/// Select Server View - Edit an Existing Server
internal static let editServer = L10n.tr("Localizable", "editServer", fallback: "Edit Server")
/// Empty Next Up
internal static let emptyNextUp = L10n.tr("Localizable", "emptyNextUp", fallback: "Empty Next Up")
@ -302,7 +302,7 @@ internal enum L10n {
internal static let filterResults = L10n.tr("Localizable", "filterResults", fallback: "Filter Results")
/// Filters
internal static let filters = L10n.tr("Localizable", "filters", fallback: "Filters")
/// %@fps
/// Transcode FPS
internal static func fpsWithString(_ p1: Any) -> String {
return L10n.tr("Localizable", "fpsWithString", String(describing: p1), fallback: "%@fps")
}
@ -318,23 +318,23 @@ internal enum L10n {
internal static let hapticFeedback = L10n.tr("Localizable", "hapticFeedback", fallback: "Haptic Feedback")
/// Home
internal static let home = L10n.tr("Localizable", "home", fallback: "Home")
/// Indicators
/// Customize Server View - Indicators
internal static let indicators = L10n.tr("Localizable", "indicators", fallback: "Indicators")
/// Information
internal static let information = L10n.tr("Localizable", "information", fallback: "Information")
/// Interlaced video is not supported
/// TranscodeReason - Interlaced Video Not Supported
internal static let interlacedVideoNotSupported = L10n.tr("Localizable", "interlacedVideoNotSupported", fallback: "Interlaced video is not supported")
/// Inverted Dark
internal static let invertedDark = L10n.tr("Localizable", "invertedDark", fallback: "Inverted Dark")
/// Inverted Light
internal static let invertedLight = L10n.tr("Localizable", "invertedLight", fallback: "Inverted Light")
/// %1$@ / %2$@
/// SessionPlaybackMethod Remaining Time
internal static func itemOverItem(_ p1: Any, _ p2: Any) -> String {
return L10n.tr("Localizable", "itemOverItem", String(describing: p1), String(describing: p2), fallback: "%1$@ / %2$@")
}
/// Items
internal static let items = L10n.tr("Localizable", "items", fallback: "Items")
/// Jellyfin
/// General
internal static let jellyfin = L10n.tr("Localizable", "jellyfin", fallback: "Jellyfin")
/// Jump
internal static let jump = L10n.tr("Localizable", "jump", fallback: "Jump")
@ -358,13 +358,13 @@ internal enum L10n {
internal static let larger = L10n.tr("Localizable", "larger", fallback: "Larger")
/// Largest
internal static let largest = L10n.tr("Localizable", "largest", fallback: "Largest")
/// Last run
/// The label for the last run time of a task
internal static let lastRun = L10n.tr("Localizable", "lastRun", fallback: "Last run")
/// Last ran %@
/// Last run message with time
internal static func lastRunTime(_ p1: Any) -> String {
return L10n.tr("Localizable", "lastRunTime", String(describing: p1), fallback: "Last ran %@")
}
/// Last Seen
/// Session Client Last Seen Section Label
internal static let lastSeen = L10n.tr("Localizable", "lastSeen", fallback: "Last Seen")
/// Latest %@
internal static func latestWithString(_ p1: Any) -> String {
@ -376,7 +376,7 @@ internal enum L10n {
internal static let letterPicker = L10n.tr("Localizable", "letterPicker", fallback: "Letter Picker")
/// Library
internal static let library = L10n.tr("Localizable", "library", fallback: "Library")
/// Light
/// Represents the light theme setting
internal static let light = L10n.tr("Localizable", "light", fallback: "Light")
/// List
internal static let list = L10n.tr("Localizable", "list", fallback: "List")
@ -392,17 +392,17 @@ internal enum L10n {
internal static func loginToWithString(_ p1: Any) -> String {
return L10n.tr("Localizable", "loginToWithString", String(describing: p1), fallback: "Login to %@")
}
/// Logs
/// Settings View - Logs
internal static let logs = L10n.tr("Localizable", "logs", fallback: "Logs")
/// Maximum Bitrate
/// Option to set the maximum bitrate for playback
internal static let maximumBitrate = L10n.tr("Localizable", "maximumBitrate", fallback: "Maximum Bitrate")
/// This setting may result in media failing to start playback
/// Playback May Fail
internal static let mayResultInPlaybackFailure = L10n.tr("Localizable", "mayResultInPlaybackFailure", fallback: "This setting may result in media failing to start playback")
/// Media
internal static let media = L10n.tr("Localizable", "media", fallback: "Media")
/// Menu Buttons
internal static let menuButtons = L10n.tr("Localizable", "menuButtons", fallback: "Menu Buttons")
/// Method
/// The play method (e.g., Direct Play, Transcoding)
internal static let method = L10n.tr("Localizable", "method", fallback: "Method")
/// Missing
internal static let missing = L10n.tr("Localizable", "missing", fallback: "Missing")
@ -424,7 +424,7 @@ internal enum L10n {
internal static let networking = L10n.tr("Localizable", "networking", fallback: "Networking")
/// Network timed out
internal static let networkTimedOut = L10n.tr("Localizable", "networkTimedOut", fallback: "Network timed out")
/// Never run
/// Message shown when a task has never run
internal static let neverRun = L10n.tr("Localizable", "neverRun", fallback: "Never run")
/// News
internal static let news = L10n.tr("Localizable", "news", fallback: "News")
@ -434,11 +434,11 @@ internal enum L10n {
internal static let nextItem = L10n.tr("Localizable", "nextItem", fallback: "Next Item")
/// Next Up
internal static let nextUp = L10n.tr("Localizable", "nextUp", fallback: "Next Up")
/// Days in Next Up
/// Settings Description for the day limit in Next Up
internal static let nextUpDays = L10n.tr("Localizable", "nextUpDays", fallback: "Days in Next Up")
/// Set the maximum amount of days a show should stay in the 'Next Up' list without watching it. Set the value to 0 to disable.
internal static let nextUpDaysDescription = L10n.tr("Localizable", "nextUpDaysDescription", fallback: "Set the maximum amount of days a show should stay in the 'Next Up' list without watching it. Set the value to 0 to disable.")
/// Rewatching in Next Up
/// Description for how the nextUpDays setting works
internal static let nextUpDaysDescription = L10n.tr("Localizable", "nextUpDaysDescription", fallback: "Set the maximum amount of days a show should stay in the 'Next Up' list without watching it.")
/// Settings Description for enabling rewatching in Next Up
internal static let nextUpRewatch = L10n.tr("Localizable", "nextUpRewatch", fallback: "Rewatching in Next Up")
/// No Cast devices found..
internal static let noCastdevicesfound = L10n.tr("Localizable", "noCastdevicesfound", fallback: "No Cast devices found..")
@ -458,7 +458,7 @@ internal enum L10n {
internal static let noResults = L10n.tr("Localizable", "noResults", fallback: "No results.")
/// Normal
internal static let normal = L10n.tr("Localizable", "normal", fallback: "Normal")
/// No session
/// No active session available
internal static let noSession = L10n.tr("Localizable", "noSession", fallback: "No session")
/// N/A
internal static let notAvailableSlash = L10n.tr("Localizable", "notAvailableSlash", fallback: "N/A")
@ -468,13 +468,13 @@ internal enum L10n {
}
/// No title
internal static let noTitle = L10n.tr("Localizable", "noTitle", fallback: "No title")
/// Offset
/// Video Player Settings View - Offset
internal static let offset = L10n.tr("Localizable", "offset", fallback: "Offset")
/// Ok
internal static let ok = L10n.tr("Localizable", "ok", fallback: "Ok")
/// 1 user
internal static let oneUser = L10n.tr("Localizable", "oneUser", fallback: "1 user")
/// Online
/// Indicates that something is Online
internal static let online = L10n.tr("Localizable", "online", fallback: "Online")
/// On Now
internal static let onNow = L10n.tr("Localizable", "onNow", fallback: "On Now")
@ -502,7 +502,7 @@ internal enum L10n {
}
/// Password
internal static let password = L10n.tr("Localizable", "password", fallback: "Password")
/// Pause on background
/// Video Player Settings View - Pause on Background
internal static let pauseOnBackground = L10n.tr("Localizable", "pauseOnBackground", fallback: "Pause on background")
/// People
internal static let people = L10n.tr("Localizable", "people", fallback: "People")
@ -510,11 +510,11 @@ internal enum L10n {
internal static let play = L10n.tr("Localizable", "play", fallback: "Play")
/// Play / Pause
internal static let playAndPause = L10n.tr("Localizable", "playAndPause", fallback: "Play / Pause")
/// Playback
/// Video Player Settings View - Playback Header
internal static let playback = L10n.tr("Localizable", "playback", fallback: "Playback")
/// Playback Buttons
internal static let playbackButtons = L10n.tr("Localizable", "playbackButtons", fallback: "Playback Buttons")
/// Playback Quality
/// Section for Playback Quality Settings
internal static let playbackQuality = L10n.tr("Localizable", "playbackQuality", fallback: "Playback Quality")
/// Playback settings
internal static let playbackSettings = L10n.tr("Localizable", "playbackSettings", fallback: "Playback settings")
@ -530,11 +530,11 @@ internal enum L10n {
internal static let playNext = L10n.tr("Localizable", "playNext", fallback: "Play Next")
/// Play Next Item
internal static let playNextItem = L10n.tr("Localizable", "playNextItem", fallback: "Play Next Item")
/// Play on active
/// Video Player Settings View - Play on Active
internal static let playOnActive = L10n.tr("Localizable", "playOnActive", fallback: "Play on active")
/// Play Previous Item
internal static let playPreviousItem = L10n.tr("Localizable", "playPreviousItem", fallback: "Play Previous Item")
/// Posters
/// Customize Server View - Posters
internal static let posters = L10n.tr("Localizable", "posters", fallback: "Posters")
/// Present
internal static let present = L10n.tr("Localizable", "present", fallback: "Present")
@ -544,7 +544,7 @@ internal enum L10n {
internal static let previousItem = L10n.tr("Localizable", "previousItem", fallback: "Previous Item")
/// Primary
internal static let primary = L10n.tr("Localizable", "primary", fallback: "Primary")
/// Profiles
/// PlaybackCompatibility Profile Sections
internal static let profiles = L10n.tr("Localizable", "profiles", fallback: "Profiles")
/// Programs
internal static let programs = L10n.tr("Localizable", "programs", fallback: "Programs")
@ -570,7 +570,7 @@ internal enum L10n {
internal static let quickConnectSuccessMessage = L10n.tr("Localizable", "quickConnectSuccessMessage", fallback: "Authorizing Quick Connect successful. Please continue on your other device.")
/// Random
internal static let random = L10n.tr("Localizable", "random", fallback: "Random")
/// Random Image
/// Customize Server View - Random Image
internal static let randomImage = L10n.tr("Localizable", "randomImage", fallback: "Random Image")
/// Rated
internal static let rated = L10n.tr("Localizable", "rated", fallback: "Rated")
@ -582,7 +582,7 @@ internal enum L10n {
internal static let recommended = L10n.tr("Localizable", "recommended", fallback: "Recommended")
/// Red
internal static let red = L10n.tr("Localizable", "red", fallback: "Red")
/// The number of reference frames is not supported
/// TranscodeReason - Reference Frames Not Supported
internal static let refFramesNotSupported = L10n.tr("Localizable", "refFramesNotSupported", fallback: "The number of reference frames is not supported")
/// Refresh
internal static let refresh = L10n.tr("Localizable", "refresh", fallback: "Refresh")
@ -602,6 +602,8 @@ internal enum L10n {
internal static let removeAllUsers = L10n.tr("Localizable", "removeAllUsers", fallback: "Remove All Users")
/// Remove From Resume
internal static let removeFromResume = L10n.tr("Localizable", "removeFromResume", fallback: "Remove From Resume")
/// PlayMethod - Remux
internal static let remux = L10n.tr("Localizable", "remux", fallback: "Remux")
/// Report an Issue
internal static let reportIssue = L10n.tr("Localizable", "reportIssue", fallback: "Report an Issue")
/// Request a Feature
@ -614,19 +616,19 @@ internal enum L10n {
internal static let resetAppSettings = L10n.tr("Localizable", "resetAppSettings", fallback: "Reset App Settings")
/// Reset User Settings
internal static let resetUserSettings = L10n.tr("Localizable", "resetUserSettings", fallback: "Reset User Settings")
/// Restart Server
/// Restart Server Label
internal static let restartServer = L10n.tr("Localizable", "restartServer", fallback: "Restart Server")
/// Are you sure you want to restart the server?
/// Restart Warning Label
internal static let restartWarning = L10n.tr("Localizable", "restartWarning", fallback: "Are you sure you want to restart the server?")
/// Resume
/// Video Player Settings View - Resume
internal static let resume = L10n.tr("Localizable", "resume", fallback: "Resume")
/// Resume 5 Second Offset
internal static let resume5SecondOffset = L10n.tr("Localizable", "resume5SecondOffset", fallback: "Resume 5 Second Offset")
/// Resume Offset
internal static let resumeOffset = L10n.tr("Localizable", "resumeOffset", fallback: "Resume Offset")
/// Resume content seconds before the recorded resume time
/// Video Player Settings View - Resume Offset Description
internal static let resumeOffsetDescription = L10n.tr("Localizable", "resumeOffsetDescription", fallback: "Resume content seconds before the recorded resume time")
/// Resume Offset
/// Video Player Settings View - Resume Offset Title
internal static let resumeOffsetTitle = L10n.tr("Localizable", "resumeOffsetTitle", fallback: "Resume Offset")
/// Retrieving media information
internal static let retrievingMediaInformation = L10n.tr("Localizable", "retrievingMediaInformation", fallback: "Retrieving media information")
@ -634,17 +636,17 @@ internal enum L10n {
internal static let retry = L10n.tr("Localizable", "retry", fallback: "Retry")
/// Right
internal static let `right` = L10n.tr("Localizable", "right", fallback: "Right")
/// Run
/// Button label to run a task
internal static let run = L10n.tr("Localizable", "run", fallback: "Run")
/// Running...
/// Status label for when a task is running
internal static let running = L10n.tr("Localizable", "running", fallback: "Running...")
/// Runtime
internal static let runtime = L10n.tr("Localizable", "runtime", fallback: "Runtime")
/// Save
/// Save - Completed, end, or save
internal static let save = L10n.tr("Localizable", "save", fallback: "Save")
/// Scan All Libraries
/// Administration Dashboard Scan All Libraries Button
internal static let scanAllLibraries = L10n.tr("Localizable", "scanAllLibraries", fallback: "Scan All Libraries")
/// Scheduled Tasks
/// Administration Dashboard Scheduled Tasks
internal static let scheduledTasks = L10n.tr("Localizable", "scheduledTasks", fallback: "Scheduled Tasks")
/// Scrub Current Time
internal static let scrubCurrentTime = L10n.tr("Localizable", "scrubCurrentTime", fallback: "Scrub Current Time")
@ -662,7 +664,7 @@ internal enum L10n {
}
/// Seasons
internal static let seasons = L10n.tr("Localizable", "seasons", fallback: "Seasons")
/// Secondary audio is not supported
/// TranscodeReason - Secondary Audio Not Supported
internal static let secondaryAudioNotSupported = L10n.tr("Localizable", "secondaryAudioNotSupported", fallback: "Secondary audio is not supported")
/// See All
internal static let seeAll = L10n.tr("Localizable", "seeAll", fallback: "See All")
@ -690,13 +692,13 @@ internal enum L10n {
internal static let serverDetails = L10n.tr("Localizable", "serverDetails", fallback: "Server Details")
/// Server Information
internal static let serverInformation = L10n.tr("Localizable", "serverInformation", fallback: "Server Information")
/// Server Logs
/// Title for the server logs section
internal static let serverLogs = L10n.tr("Localizable", "serverLogs", fallback: "Server Logs")
/// Servers
/// Select Server View
internal static let servers = L10n.tr("Localizable", "servers", fallback: "Servers")
/// Server URL
internal static let serverURL = L10n.tr("Localizable", "serverURL", fallback: "Server URL")
/// Session
/// The title for the session view
internal static let session = L10n.tr("Localizable", "session", fallback: "Session")
/// Settings
internal static let settings = L10n.tr("Localizable", "settings", fallback: "Settings")
@ -704,9 +706,9 @@ internal enum L10n {
internal static let showCastAndCrew = L10n.tr("Localizable", "showCastAndCrew", fallback: "Show Cast & Crew")
/// Show Chapters Info In Bottom Overlay
internal static let showChaptersInfoInBottomOverlay = L10n.tr("Localizable", "showChaptersInfoInBottomOverlay", fallback: "Show Chapters Info In Bottom Overlay")
/// Show Favorited
/// Indicators View - Show Favorited
internal static let showFavorited = L10n.tr("Localizable", "showFavorited", fallback: "Show Favorited")
/// Show Favorites
/// Customize Server View - Show Favorites
internal static let showFavorites = L10n.tr("Localizable", "showFavorites", fallback: "Show Favorites")
/// Flatten Library Items
internal static let showFlattenView = L10n.tr("Localizable", "showFlattenView", fallback: "Flatten Library Items")
@ -716,17 +718,17 @@ internal enum L10n {
internal static let showMissingSeasons = L10n.tr("Localizable", "showMissingSeasons", fallback: "Show Missing Seasons")
/// Show Poster Labels
internal static let showPosterLabels = L10n.tr("Localizable", "showPosterLabels", fallback: "Show Poster Labels")
/// Show Progress
/// Indicators View - Show Progress
internal static let showProgress = L10n.tr("Localizable", "showProgress", fallback: "Show Progress")
/// Show Recently Added
/// Customize Server View - Show Recently Added
internal static let showRecentlyAdded = L10n.tr("Localizable", "showRecentlyAdded", fallback: "Show Recently Added")
/// Show Unwatched
/// Indicators View - Show Unwatched
internal static let showUnwatched = L10n.tr("Localizable", "showUnwatched", fallback: "Show Unwatched")
/// Show Watched
/// Indicators View - Show Watched
internal static let showWatched = L10n.tr("Localizable", "showWatched", fallback: "Show Watched")
/// Shutdown Server
/// Shutdown Server Label
internal static let shutdownServer = L10n.tr("Localizable", "shutdownServer", fallback: "Shutdown Server")
/// Are you sure you want to shutdown the server?
/// Shutdown Warning Label
internal static let shutdownWarning = L10n.tr("Localizable", "shutdownWarning", fallback: "Are you sure you want to shutdown the server?")
/// Signed in as %@
internal static func signedInAsWithString(_ p1: Any) -> String {
@ -760,9 +762,9 @@ internal enum L10n {
internal static let specialFeatures = L10n.tr("Localizable", "specialFeatures", fallback: "Special Features")
/// Sports
internal static let sports = L10n.tr("Localizable", "sports", fallback: "Sports")
/// Stop
/// Button label to stop a task
internal static let stop = L10n.tr("Localizable", "stop", fallback: "Stop")
/// Streams
/// Session Streaming Clients
internal static let streams = L10n.tr("Localizable", "streams", fallback: "Streams")
/// STUDIO
internal static let studio = L10n.tr("Localizable", "studio", fallback: "STUDIO")
@ -770,7 +772,7 @@ internal enum L10n {
internal static let studios = L10n.tr("Localizable", "studios", fallback: "Studios")
/// Subtitle
internal static let subtitle = L10n.tr("Localizable", "subtitle", fallback: "Subtitle")
/// The subtitle codec is not supported
/// TranscodeReason - Subtitle Codec Not Supported
internal static let subtitleCodecNotSupported = L10n.tr("Localizable", "subtitleCodecNotSupported", fallback: "The subtitle codec is not supported")
/// Subtitle Color
internal static let subtitleColor = L10n.tr("Localizable", "subtitleColor", fallback: "Subtitle Color")
@ -780,7 +782,7 @@ internal enum L10n {
internal static let subtitleOffset = L10n.tr("Localizable", "subtitleOffset", fallback: "Subtitle Offset")
/// Subtitles
internal static let subtitles = L10n.tr("Localizable", "subtitles", fallback: "Subtitles")
/// Settings only affect some subtitle types
/// Video Player Settings View - Disclaimer
internal static let subtitlesDisclaimer = L10n.tr("Localizable", "subtitlesDisclaimer", fallback: "Settings only affect some subtitle types")
/// Subtitle Size
internal static let subtitleSize = L10n.tr("Localizable", "subtitleSize", fallback: "Subtitle Size")
@ -788,27 +790,27 @@ internal enum L10n {
internal static let suggestions = L10n.tr("Localizable", "suggestions", fallback: "Suggestions")
/// Switch User
internal static let switchUser = L10n.tr("Localizable", "switchUser", fallback: "Switch User")
/// System
/// Represents the system theme setting
internal static let system = L10n.tr("Localizable", "system", fallback: "System")
/// System Control Gestures Enabled
internal static let systemControlGesturesEnabled = L10n.tr("Localizable", "systemControlGesturesEnabled", fallback: "System Control Gestures Enabled")
/// Tags
internal static let tags = L10n.tr("Localizable", "tags", fallback: "Tags")
/// Task
/// The navigation title for the task view
internal static let task = L10n.tr("Localizable", "task", fallback: "Task")
/// Aborted
/// Status message for an aborted task
internal static let taskAborted = L10n.tr("Localizable", "taskAborted", fallback: "Aborted")
/// Cancelled
/// Status message for a cancelled task
internal static let taskCancelled = L10n.tr("Localizable", "taskCancelled", fallback: "Cancelled")
/// Completed
/// Status message for a completed task
internal static let taskCompleted = L10n.tr("Localizable", "taskCompleted", fallback: "Completed")
/// Failed
/// Status message for a failed task
internal static let taskFailed = L10n.tr("Localizable", "taskFailed", fallback: "Failed")
/// Tasks
/// Title for the tasks section
internal static let tasks = L10n.tr("Localizable", "tasks", fallback: "Tasks")
/// Tasks are operations that are scheduled to run periodically or can be triggered manually.
/// Description for the tasks section
internal static let tasksDescription = L10n.tr("Localizable", "tasksDescription", fallback: "Tasks are operations that are scheduled to run periodically or can be triggered manually.")
/// Test Size
/// Option to set the test size for bitrate testing
internal static let testSize = L10n.tr("Localizable", "testSize", fallback: "Test Size")
/// Timestamp
internal static let timestamp = L10n.tr("Localizable", "timestamp", fallback: "Timestamp")
@ -818,9 +820,9 @@ internal enum L10n {
internal static let tooManyRedirects = L10n.tr("Localizable", "tooManyRedirects", fallback: "Too Many Redirects")
/// Trailing Value
internal static let trailingValue = L10n.tr("Localizable", "trailingValue", fallback: "Trailing Value")
/// Transcode
/// PlayMethod - Transcode
internal static let transcode = L10n.tr("Localizable", "transcode", fallback: "Transcode")
/// Transcode Reason(s)
/// Transcode Reason(s) Section Label
internal static let transcodeReasons = L10n.tr("Localizable", "transcodeReasons", fallback: "Transcode Reason(s)")
/// Transition
internal static let transition = L10n.tr("Localizable", "transition", fallback: "Transition")
@ -840,17 +842,17 @@ internal enum L10n {
internal static let unauthorizedUser = L10n.tr("Localizable", "unauthorizedUser", fallback: "Unauthorized user")
/// Unknown
internal static let unknown = L10n.tr("Localizable", "unknown", fallback: "Unknown")
/// The audio stream information is unknown
/// TranscodeReason - Unknown Audio Stream Info
internal static let unknownAudioStreamInfo = L10n.tr("Localizable", "unknownAudioStreamInfo", fallback: "The audio stream information is unknown")
/// Unknown Error
internal static let unknownError = L10n.tr("Localizable", "unknownError", fallback: "Unknown Error")
/// The video stream information is unknown
/// TranscodeReason - Unknown Video Stream Info
internal static let unknownVideoStreamInfo = L10n.tr("Localizable", "unknownVideoStreamInfo", fallback: "The video stream information is unknown")
/// Unplayed
internal static let unplayed = L10n.tr("Localizable", "unplayed", fallback: "Unplayed")
/// URL
internal static let url = L10n.tr("Localizable", "url", fallback: "URL")
/// Use as Transcoding Profile
/// Override Transcoding Profile
internal static let useAsTranscodingProfile = L10n.tr("Localizable", "useAsTranscodingProfile", fallback: "Use as Transcoding Profile")
/// Use Primary Image
internal static let usePrimaryImage = L10n.tr("Localizable", "usePrimaryImage", fallback: "Use Primary Image")
@ -868,25 +870,25 @@ internal enum L10n {
internal static let version = L10n.tr("Localizable", "version", fallback: "Version")
/// Video
internal static let video = L10n.tr("Localizable", "video", fallback: "Video")
/// The video bit depth is not supported
/// TranscodeReason - Video Bit Depth Not Supported
internal static let videoBitDepthNotSupported = L10n.tr("Localizable", "videoBitDepthNotSupported", fallback: "The video bit depth is not supported")
/// The video bitrate is not supported
/// TranscodeReason - Video Bitrate Not Supported
internal static let videoBitrateNotSupported = L10n.tr("Localizable", "videoBitrateNotSupported", fallback: "The video bitrate is not supported")
/// The video codec is not supported
/// TranscodeReason - Video Codec Not Supported
internal static let videoCodecNotSupported = L10n.tr("Localizable", "videoCodecNotSupported", fallback: "The video codec is not supported")
/// The video framerate is not supported
/// TranscodeReason - Video Framerate Not Supported
internal static let videoFramerateNotSupported = L10n.tr("Localizable", "videoFramerateNotSupported", fallback: "The video framerate is not supported")
/// The video level is not supported
/// TranscodeReason - Video Level Not Supported
internal static let videoLevelNotSupported = L10n.tr("Localizable", "videoLevelNotSupported", fallback: "The video level is not supported")
/// Video Player
/// Settings View - Video Player
internal static let videoPlayer = L10n.tr("Localizable", "videoPlayer", fallback: "Video Player")
/// Video Player Type
internal static let videoPlayerType = L10n.tr("Localizable", "videoPlayerType", fallback: "Video Player Type")
/// The video profile is not supported
/// TranscodeReason - Video Profile Not Supported
internal static let videoProfileNotSupported = L10n.tr("Localizable", "videoProfileNotSupported", fallback: "The video profile is not supported")
/// The video range type is not supported
/// TranscodeReason - Video Range Type Not Supported
internal static let videoRangeTypeNotSupported = L10n.tr("Localizable", "videoRangeTypeNotSupported", fallback: "The video range type is not supported")
/// The video resolution is not supported
/// TranscodeReason - Video Resolution Not Supported
internal static let videoResolutionNotSupported = L10n.tr("Localizable", "videoResolutionNotSupported", fallback: "The video resolution is not supported")
/// Who's watching?
internal static let whosWatching = L10n.tr("Localizable", "WhosWatching", fallback: "Who's watching?")

View File

@ -74,6 +74,8 @@
4EC6C16B2C92999800FC904B /* TranscodeSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EC6C16A2C92999800FC904B /* TranscodeSection.swift */; };
4ECDAA9E2C920A8E0030F2F5 /* TranscodeReason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ECDAA9D2C920A8E0030F2F5 /* TranscodeReason.swift */; };
4ECDAA9F2C920A8E0030F2F5 /* TranscodeReason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ECDAA9D2C920A8E0030F2F5 /* TranscodeReason.swift */; };
4EDBDCD12CBDD6590033D347 /* SessionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */; };
4EDBDCD22CBDD6590033D347 /* SessionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */; };
4EE141692C8BABDF0045B661 /* ProgressSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EE141682C8BABDF0045B661 /* ProgressSection.swift */; };
4EF18B262CB9934C00343666 /* LibraryRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF18B252CB9934700343666 /* LibraryRow.swift */; };
4EF18B282CB9936D00343666 /* ListColumnsPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EF18B272CB9936400343666 /* ListColumnsPickerView.swift */; };
@ -1066,6 +1068,7 @@
4EC50D602C934B3A00FC3D0E /* ScheduledTasksViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScheduledTasksViewModel.swift; sourceTree = "<group>"; };
4EC6C16A2C92999800FC904B /* TranscodeSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranscodeSection.swift; sourceTree = "<group>"; };
4ECDAA9D2C920A8E0030F2F5 /* TranscodeReason.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TranscodeReason.swift; sourceTree = "<group>"; };
4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionInfo.swift; sourceTree = "<group>"; };
4EE141682C8BABDF0045B661 /* ProgressSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressSection.swift; sourceTree = "<group>"; };
4EF18B252CB9934700343666 /* LibraryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LibraryRow.swift; sourceTree = "<group>"; };
4EF18B272CB9936400343666 /* ListColumnsPickerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListColumnsPickerView.swift; sourceTree = "<group>"; };
@ -3576,8 +3579,9 @@
E1F5F9B12BA0200500BA5014 /* MediaSourceInfo */,
E122A9122788EAAD0060FA63 /* MediaStream.swift */,
E1AD105E26D9ADDD003E4A08 /* NameGuidPair.swift */,
E148128428C15472003B8787 /* SortOrder+ItemSortOrder.swift */,
4E2182E42CAF67EF0094806B /* PlayMethod.swift */,
4EDBDCD02CBDD6510033D347 /* SessionInfo.swift */,
E148128428C15472003B8787 /* SortOrder+ItemSortOrder.swift */,
E1DA654B28E69B0500592A73 /* SpecialFeatureType.swift */,
E1CB757E2C80F28F00217C76 /* SubtitleProfile.swift */,
4ECDAA9D2C920A8E0030F2F5 /* TranscodeReason.swift */,
@ -4465,6 +4469,7 @@
E11B1B6D2718CD68006DA3E8 /* JellyfinAPIError.swift in Sources */,
E12CC1C928D132B800678D5D /* RecentlyAddedView.swift in Sources */,
E19D41B32BF2BFEF0082B8B2 /* URLSessionConfiguration.swift in Sources */,
4EDBDCD12CBDD6590033D347 /* SessionInfo.swift in Sources */,
E10B1ECE2BD9AFD800A92EAF /* SwiftfinStore+V2.swift in Sources */,
E150C0BE2BFD45BD00944FFA /* RedrawOnNotificationView.swift in Sources */,
E1763A722BF3F67C004DF6AB /* SwiftfinStore+Mappings.swift in Sources */,
@ -4946,6 +4951,7 @@
E1D4BF812719D22800A11E64 /* AppAppearance.swift in Sources */,
E1BDF2EF29522A5900CC0294 /* AudioActionButton.swift in Sources */,
E174120F29AE9D94003EF3B5 /* NavigationCoordinatable.swift in Sources */,
4EDBDCD22CBDD6590033D347 /* SessionInfo.swift in Sources */,
E10231392BCF8A3C009D71FC /* ProgramButtonContent.swift in Sources */,
E1DC9844296DECB600982F06 /* ProgressIndicator.swift in Sources */,
6220D0B126D5EC9900B8E046 /* SettingsCoordinator.swift in Sources */,

View File

@ -107,8 +107,8 @@ struct ActiveSessionDetailView: View {
// TODO: allow showing item stream details?
// TODO: don't show codec changes on direct play?
Section(L10n.streams) {
if let playMethod = playState.playMethod {
TextPairView(leading: L10n.method, trailing: playMethod.displayTitle)
if let playMethodDisplayTitle = session.playMethodDisplayTitle {
TextPairView(leading: L10n.method, trailing: playMethodDisplayTitle)
}
StreamSection(