Merge remote-tracking branch 'upstream/master' into feature/mjh/new

This commit is contained in:
Mike Heier 2024-03-21 19:59:01 -04:00
commit fd46047f8c
19 changed files with 1269 additions and 137 deletions

View File

@ -27,7 +27,7 @@ jobs:
if: env.BRANCH_NAME == 'master'
run: npm run build-prod
- name: Use Java 17
uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4
with:
distribution: "temurin"
java-version: "17"

View File

@ -115,6 +115,24 @@ sub LoadItems_AddVideoContent(video as object, mediaSourceId as dynamic, audio_s
video.chapters = meta.json.Chapters
video.showID = meta.showID
logoLookupID = video.id
if videotype = "episode" or videotype = "series"
video.content.contenttype = "episode"
video.seasonNumber = meta.json.ParentIndexNumber
video.episodeNumber = meta.json.IndexNumber
video.episodeNumberEnd = meta.json.IndexNumberEnd
if isValid(meta.showID)
logoLookupID = meta.showID
end if
end if
logoImageExists = api.items.HeadImageURLByName(logoLookupID, "logo")
if logoImageExists
video.logoImage = api.items.GetImageURL(logoLookupID, "logo", 0, { "maxHeight": 65, "maxWidth": 300, "quality": "90" })
end if
user = AboutMe()
if user.Configuration.EnableNextEpisodeAutoPlay
if LCase(m.top.itemType) = "episode"

View File

@ -1,10 +1,14 @@
import "pkg:/source/utils/misc.bs"
const LOGO_RIGHT_PADDING = 30
const OPTIONCONTROLS_TOP_PADDING = 50
sub init()
m.videoControls = m.top.findNode("videoControls")
m.optionControls = m.top.findNode("optionControls")
m.inactivityTimer = m.top.findNode("inactivityTimer")
m.videoInfo = m.top.findNode("videoInfo")
m.itemTitle = m.top.findNode("itemTitle")
m.videoPlayPause = m.top.findNode("videoPlayPause")
m.videoPositionTime = m.top.findNode("videoPositionTime")
@ -16,10 +20,16 @@ sub init()
m.top.observeField("hasFocus", "onFocusChanged")
m.top.observeField("progressPercentage", "onProgressPercentageChanged")
m.top.observeField("playbackState", "onPlaybackStateChanged")
m.top.observeField("itemTitleText", "onItemTitleTextChanged")
m.top.observeField("seasonNumber", "onSeasonNumberChanged")
m.top.observeField("episodeNumber", "onEpisodeNumberChanged")
m.top.observeField("episodeNumberEnd", "onEpisodeNumberEndChanged")
m.top.observeField("logoImage", "onLogoImageChanged")
m.defaultButtonIndex = 2
m.focusedButtonIndex = 2
m.optionControlsMoved = false
m.videoControls.buttonFocused = m.defaultButtonIndex
m.optionControls.buttonFocused = m.optionControls.getChildCount() - 1
@ -53,6 +63,92 @@ sub onItemTitleTextChanged()
m.itemTitle.text = m.top.itemTitleText
end sub
' onSeasonNumberChanged: Handler for changes to m.top.seasonNumber param.
'
sub onSeasonNumberChanged()
m.top.unobserveField("seasonNumber")
itemSeason = m.top.findNode("itemSeason")
itemSeason.font.size = 32
itemSeason.text = `S${m.top.seasonNumber}`
' Move the option controls down to give room for season number
if not m.optionControlsMoved
moveOptionControls(0, OPTIONCONTROLS_TOP_PADDING)
m.optionControlsMoved = true
end if
end sub
' onEpisodeNumberChanged: Handler for changes to m.top.episodeNumber param.
'
sub onEpisodeNumberChanged()
m.top.unobserveField("episodeNumber")
itemEpisode = m.top.findNode("itemEpisode")
itemEpisode.font.size = 32
itemEpisode.text = `E${m.top.episodeNumber}`
' Move the option controls down to give room for episode number
if not m.optionControlsMoved
moveOptionControls(0, OPTIONCONTROLS_TOP_PADDING)
m.optionControlsMoved = true
end if
end sub
' onEpisodeNumberEndChanged: Handler for changes to m.top.episodeNumberEnd param.
'
sub onEpisodeNumberEndChanged()
m.top.unobserveField("episodeNumberEnd")
itemEpisodeEnd = m.top.findNode("itemEpisodeEnd")
itemEpisodeEnd.font.size = 32
itemEpisodeEnd.text = `-${m.top.episodeNumberEnd}`
' Move the option controls down to give room for episode number
if not m.optionControlsMoved
moveOptionControls(0, OPTIONCONTROLS_TOP_PADDING)
m.optionControlsMoved = true
end if
end sub
' moveOptionControls: Moves option controls node based on passed pixel values
'
' @param {integer} horizontalPixels - Number of horizontal pixels to move option controls
' @param {integer} verticalPixels - Number of vertical pixels to move option controls
sub moveOptionControls(horizontalPixels as integer, verticalPixels as integer)
m.optionControls.translation = `[${m.optionControls.translation[0] + horizontalPixels}, ${m.optionControls.translation[1] + verticalPixels}]`
end sub
' onLogoLoadStatusChanged: Handler for changes to logo image's status.
'
' @param {dynamic} event - field change event
sub onLogoLoadStatusChanged(event)
if LCase(event.GetData()) = "ready"
logoImage = event.getRoSGNode()
logoImage.unobserveField("loadStatus")
' Move video info to the right based on the logo width
m.videoInfo.translation = `[${m.videoInfo.translation[0] + logoImage.bitmapWidth + LOGO_RIGHT_PADDING}, ${m.videoInfo.translation[1]}]`
m.itemTitle.maxWidth = m.itemTitle.maxWidth - (logoImage.bitmapWidth + LOGO_RIGHT_PADDING)
' Move the option controls down based on the logo height
if not m.optionControlsMoved
moveOptionControls(0, OPTIONCONTROLS_TOP_PADDING)
m.optionControlsMoved = true
end if
end if
end sub
' onLogoImageChanged: Handler for changes to m.top.logoImage param.
'
sub onLogoImageChanged()
if isValidAndNotEmpty(m.top.logoImage)
logoImage = createObject("roSGNode", "Poster")
logoImage.Id = "logoImage"
logoImage.observeField("loadStatus", "onLogoLoadStatusChanged")
logoImage.uri = m.top.logoImage
logoImage.translation = [103, 61]
m.top.appendChild(logoImage)
end if
end sub
' resetFocusToDefaultButton: Reset focus back to the default button
'
sub resetFocusToDefaultButton()

View File

@ -1,7 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<component name="OSD" extends="Group" initialFocus="chapterNext">
<children>
<ScrollingLabel id="itemTitle" font="font:LargeBoldSystemFont" translation="[103,61]" maxWidth="1400" />
<Poster uri="pkg:/images/osdBackground.png" width="1920" height="279" />
<LayoutGroup id="videoInfo" layoutDirection="vert" translation="[103,61]">
<ScrollingLabel id="itemTitle" font="font:LargeBoldSystemFont" maxWidth="1400" />
<LayoutGroup id="videoInfo" layoutDirection="horiz" translation="[103,61]">
<Label id="itemSeason" font="font:MediumSystemFont" color="0xffffffFF" />
<Label id="itemEpisode" font="font:MediumSystemFont" color="0xffffffFF" />
<Label id="itemEpisodeEnd" font="font:MediumSystemFont" color="0xffffffFF" />
</LayoutGroup>
</LayoutGroup>
<Clock id="clock" translation="[1618, 46]" />
<ButtonGroup id="optionControls" itemSpacings="[20]" layoutDirection="horiz" horizAlignment="left" translation="[103,120]">
@ -30,6 +40,10 @@
</children>
<interface>
<field id="itemTitleText" type="string" />
<field id="seasonNumber" type="integer" />
<field id="episodeNumber" type="integer" />
<field id="episodeNumberEnd" type="integer" />
<field id="logoImage" type="string" />
<field id="inactiveTimeout" type="integer" />
<field id="progressPercentage" type="float" />
<field id="positionTime" type="float" />

View File

@ -400,6 +400,31 @@ sub onVideoContentLoaded()
m.osd.itemTitleText = m.top.content.title
' If video is an episode, attempt to add season and episode numbers to OSD
if m.top.content.contenttype = 4
if isValid(videoContent[0].seasonNumber)
m.osd.seasonNumber = videoContent[0].seasonNumber
end if
if isValid(videoContent[0].episodeNumber)
m.osd.episodeNumber = videoContent[0].episodeNumber
end if
if isValid(videoContent[0].episodeNumberEnd)
m.osd.episodeNumberEnd = videoContent[0].episodeNumberEnd
end if
end if
' Attempt to add logo to OSD
if isValidAndNotEmpty(videoContent[0].logoImage)
m.osd.logoImage = videoContent[0].logoImage
' Don't show both the logo and the video title if this isn't an episode
if m.top.content.contenttype <> 4
m.osd.itemTitleText = ""
end if
end if
populateChapterMenu()
if m.LoadMetaDataTask.isIntro

View File

@ -99,14 +99,28 @@ sub LoadItems_AddVideoContent(video as object, mediaSourceId as dynamic, audio_s
end if
end if
if videotype = "episode" or videotype = "series"
video.content.contenttype = "episode"
end if
video.chapters = meta.json.Chapters
video.content.title = meta.title
video.showID = meta.showID
logoLookupID = video.id
if videotype = "episode" or videotype = "series"
video.content.contenttype = "episode"
video.seasonNumber = meta.json.ParentIndexNumber
video.episodeNumber = meta.json.IndexNumber
video.episodeNumberEnd = meta.json.IndexNumberEnd
if isValid(meta.showID)
logoLookupID = meta.showID
end if
end if
logoImageExists = api.items.HeadImageURLByName(logoLookupID, "logo")
if logoImageExists
video.logoImage = api.items.GetImageURL(logoLookupID, "logo", 0, { "maxHeight": 65, "maxWidth": 300, "quality": "90" })
end if
user = AboutMe()
if user.Configuration.EnableNextEpisodeAutoPlay
if LCase(m.top.itemType) = "episode"

File diff suppressed because one or more lines are too long

View File

@ -402,6 +402,31 @@ sub onVideoContentLoaded()
m.osd.itemTitleText = m.top.content.title
' If video is an episode, attempt to add season and episode numbers to OSD
if m.top.content.contenttype = 4
if isValid(videoContent[0].seasonNumber)
m.osd.seasonNumber = videoContent[0].seasonNumber
end if
if isValid(videoContent[0].episodeNumber)
m.osd.episodeNumber = videoContent[0].episodeNumber
end if
if isValid(videoContent[0].episodeNumberEnd)
m.osd.episodeNumberEnd = videoContent[0].episodeNumberEnd
end if
end if
' Attempt to add logo to OSD
if isValidAndNotEmpty(videoContent[0].logoImage)
m.osd.logoImage = videoContent[0].logoImage
' Don't show both the logo and the video title if this isn't an episode
if m.top.content.contenttype &lt;> 4
m.osd.itemTitleText = ""
end if
end if
populateChapterMenu()
if m.LoadMetaDataTask.isIntro

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -197,21 +197,13 @@ function getTranscodingProfiles() as object
' does the users setup support surround sound?
maxAudioChannels = "2" ' jellyfin expects this as a string
' in order of preference from left to right
audioCodecs = ["mp3", "vorbis", "opus", "flac", "alac", "ac4", "pcm", "wma", "wmapro"]
surroundSoundCodecs = ["eac3", "ac3", "dts"]
if globalUserSettings["playback.forceDTS"] = true
surroundSoundCodecs = ["dts", "eac3", "ac3"]
end if
audioCodecs = ["eac3", "ac3", "dts", "mp3", "vorbis", "opus", "flac", "alac", "ac4", "pcm", "wma", "wmapro"]
surroundSoundCodec = invalid
if di.GetAudioOutputChannel() = "5.1 surround"
maxAudioChannels = "6"
for each codec in surroundSoundCodecs
if di.CanDecodeAudio({ Codec: codec, ChCnt: 6 }).Result
surroundSoundCodec = codec
if di.CanDecodeAudio({ Codec: codec, ChCnt: 8 }).Result
maxAudioChannels = "8"
end if
for each codec in audioCodecs
if di.CanDecodeAudio({ Codec: codec, ChCnt: 8 }).Result
maxAudioChannels = "8"
exit for
end if
end for
@ -405,38 +397,10 @@ function getTranscodingProfiles() as object
mp4Array.Conditions = [getMaxHeightArray(), getMaxWidthArray()]
end if
' surround sound
if surroundSoundCodec &lt;> invalid
' add preferred surround sound codec to TranscodingProfile
transcodingProfiles.push({
"Container": surroundSoundCodec,
"Type": "Audio",
"AudioCodec": surroundSoundCodec,
"Context": "Streaming",
"Protocol": "http",
"MaxAudioChannels": maxAudioChannels
})
transcodingProfiles.push({
"Container": surroundSoundCodec,
"Type": "Audio",
"AudioCodec": surroundSoundCodec,
"Context": "Static",
"Protocol": "http",
"MaxAudioChannels": maxAudioChannels
})
' put codec in front of AudioCodec string
if tsArray.AudioCodec = ""
tsArray.AudioCodec = surroundSoundCodec
else
tsArray.AudioCodec = surroundSoundCodec + "," + tsArray.AudioCodec
end if
if mp4Array.AudioCodec = ""
mp4Array.AudioCodec = surroundSoundCodec
else
mp4Array.AudioCodec = surroundSoundCodec + "," + mp4Array.AudioCodec
end if
' add user-selected preferred codec to the front of the list
if globalUserSettings["playback.preferredAudioCodec"] &lt;> "auto"
tsArray.AudioCodec = globalUserSettings["playback.preferredAudioCodec"] + "," + tsArray.AudioCodec
mp4Array.AudioCodec = globalUserSettings["playback.preferredAudioCodec"] + "," + mp4Array.AudioCodec
end if
transcodingProfiles.push(tsArray)

BIN
images/osdBackground.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1113,20 +1113,20 @@
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>Choose your preferred audio codec when transcoding multichannel audio.</source>
<translation>Choose your preferred audio codec when transcoding multichannel audio.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>Force all transcodes to use DTS instead of the default EAC3. The device must support DTS for this setting to have an effect.</source>
<translation>Force all transcodes to use DTS instead of the default EAC3. The device must support DTS for this setting to have an effect.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>Audio Codec Support</source>
<translation>Audio Codec Support</translation>
<source>Preferred Audio Codec</source>
<translation>Preferred Audio Codec</translation>
<extracomment>Settings Menu - Title of option</extracomment>
</message>
<message>
<source>Use the selected audio codec for transcodes. If the device or stream does not support it, a fallback codec will be used.</source>
<translation>Use the selected audio codec for transcodes. If the device or stream does not support it, a fallback codec will be used.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>Use system settings</source>
<translation>Use system settings</translation>
<extracomment>User Setting - Option title</extracomment>
</message>
<message>
<source>Direct playing</source>
<translation>Direct playing</translation>

View File

@ -180,6 +180,469 @@
<source>Server</source>
<translation>Serveur</translation>
</message>
<message>
<source>Select when to show titles.</source>
<translation>Sélectionner quand afficher les titres.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>What&apos;s New?</source>
<translation>Quoi de neuf ?</translation>
<extracomment>Popup title - Popup displays all the major changes to the app since the last version</extracomment>
</message>
<message>
<source>Episodes</source>
<translation>Épisodes</translation>
</message>
<message>
<source>Save Credentials?</source>
<translation>Sauvegarder vos identifiants ?</translation>
</message>
<message>
<source>Extras</source>
<translation>Bonus</translation>
</message>
<message>
<comment>Name or Title field of media item</comment>
<source>TITLE</source>
<translation>Nom</translation>
</message>
<message>
<source>(Dialog will close automatically)</source>
<translation>(Cette fenêtre se fermera automatiquement)</translation>
</message>
<message>
<source>CRITIC_RATING</source>
<translation>Note des critiques</translation>
</message>
<message>
<source>DATE_ADDED</source>
<translation>Date d&apos;ajout</translation>
</message>
<message>
<source>PLAY_COUNT</source>
<translation>Nombre de lectures</translation>
</message>
<message>
<source>Cast &amp; Crew</source>
<translation>Casting et Equipe</translation>
</message>
<message>
<source>More Like This</source>
<translation>Plus de ce genre</translation>
</message>
<message>
<source>Press &apos;OK&apos; to Close</source>
<translation>Appuyez sur «OK» pour fermer</translation>
</message>
<message>
<source>Died</source>
<translation>Mort</translation>
</message>
<message>
<source>today</source>
<translation>aujourd&apos;hui</translation>
<extracomment>Current day</extracomment>
</message>
<message>
<source>Tuesday</source>
<translation>Mardi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Wednesday</source>
<translation>Mercredi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Thursday</source>
<translation>Jeudi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Saturday</source>
<translation>Samedi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Sunday</source>
<translation>Dimanche</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Monday</source>
<translation>Lundi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Started at</source>
<translation>A débuté à</translation>
<extracomment>(Past Tense) For defining time when a program started today (e.g. Started at 08:00) </extracomment>
</message>
<message>
<source>Ended at</source>
<translation>A fini à</translation>
<extracomment>(Past Tense) For defining time when a program will ended (e.g. Ended at 08:00) </extracomment>
</message>
<message>
<source>Ends at</source>
<translation>Finit</translation>
<extracomment>(Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00) </extracomment>
</message>
<message>
<source>Live</source>
<translation>En direct</translation>
<extracomment>If TV Show is being broadcast live (not pre-recorded)</extracomment>
</message>
<message>
<source>TV Guide</source>
<translation>Guide TV</translation>
<extracomment>Menu option for showing Live TV Guide / Schedule</extracomment>
</message>
<message>
<source>Record</source>
<translation>Enregistrer</translation>
</message>
<message>
<source>The requested content does not exist on the server</source>
<translation>Le contenu demandé n&apos;existe pas sur le serveur</translation>
<extracomment>Content of message box when the requested content is not found on the server</extracomment>
</message>
<message>
<source>User Interface</source>
<translation>Interface utilisateur</translation>
<extracomment>Title for User Interface section in user setting screen.</extracomment>
</message>
<message>
<source>Search now</source>
<translation>Chercher</translation>
<extracomment>Help text in search Box</extracomment>
</message>
<message>
<source>You can search for Titles, People, Live TV Channels and more</source>
<translation>Vous pouvez rechercher des titres, personnes, chaînes TV en direct et plus</translation>
<extracomment>Help text in search results</extracomment>
</message>
<message>
<source>Quick Connect</source>
<translation>Connexion rapide</translation>
</message>
<message>
<source>Studios</source>
<translation>Studios</translation>
</message>
<message>
<source>Shows</source>
<translation>Séries</translation>
</message>
<message>
<source>Friday</source>
<translation>Vendredi</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>yesterday</source>
<translation>hier</translation>
<extracomment>Previous day</extracomment>
</message>
<message>
<source>An error was encountered while playing this item.</source>
<translation>Une erreur à é rencontrée lors de la lecture de cet élément.</translation>
<extracomment>Dialog detail when error occurs during playback</extracomment>
</message>
<message>
<source>DATE_PLAYED</source>
<translation>Date de lecture</translation>
</message>
<message>
<source>IMDB_RATING</source>
<translation>Note IMDb</translation>
</message>
<message>
<source>OFFICIAL_RATING</source>
<translation>Classification parentale</translation>
</message>
<message>
<source>Disabled</source>
<translation>Désactivé</translation>
</message>
<message>
<source>Started</source>
<translation>A débuté</translation>
<extracomment>(Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00) </extracomment>
</message>
<message>
<source>MPEG-2</source>
<translation>MPEG-2</translation>
<extracomment>Name of codec used in settings menu</extracomment>
</message>
<message>
<source>Set Watched</source>
<translation>Marquer comme vu</translation>
<extracomment>Button Text - When pressed, marks item as Warched</extracomment>
</message>
<message>
<source>Starts at</source>
<translation>Débute à</translation>
<extracomment>(Future Tense) For defining time when a program will start today (e.g. Starts at 08:00) </extracomment>
</message>
<message>
<source>Networks</source>
<translation>Réseaux</translation>
</message>
<message>
<source>Starts</source>
<translation>Débutera</translation>
<extracomment>(Future Tense) For defining a day and time when a program will start (e.g. Starts Wednesday, 08:00) </extracomment>
</message>
<message>
<source>Connecting to Server</source>
<translation>Connexion au serveur</translation>
<extracomment>Message to display to user while client is attempting to connect to the server</extracomment>
</message>
<message>
<source>Return to Top</source>
<translation>Retourner en haut</translation>
<extracomment>UI -&gt; Media Grid -&gt; Item Title in user setting screen.</extracomment>
</message>
<message>
<source>There was an error authenticating via Quick Connect.</source>
<translation>Il y a eu une erreur lors de l&apos;authentification via connexion rapide.</translation>
</message>
<message>
<source>Movies</source>
<translation>Films</translation>
</message>
<message>
<source>Set Favorite</source>
<translation>Marquer comme favori</translation>
<extracomment>Button Text - When pressed, sets item as Favorite</extracomment>
</message>
<message>
<comment>Title of Tab for options to sort library content</comment>
<source>TAB_SORT</source>
<translation>Trier</translation>
</message>
<message>
<source>Cancel Series Recording</source>
<translation>Annuler l&apos;enregistrement de la série</translation>
</message>
<message>
<source>Cancel Recording</source>
<translation>Annuler l&apos;enregistrement</translation>
</message>
<message>
<source>Error During Playback</source>
<translation>Erreur lors de la lecture</translation>
<extracomment>Dialog title when error occurs during playback</extracomment>
</message>
<message>
<comment>Title of Tab for options to filter library content</comment>
<source>TAB_FILTER</source>
<translation>Filtrer</translation>
</message>
<message>
<source>Born</source>
<translation></translation>
</message>
<message>
<source>TV Shows</source>
<translation>Séries TV</translation>
</message>
<message>
<source>Record Series</source>
<translation>Enregistrer la série</translation>
</message>
<message>
<source>Close</source>
<translation>Fermer</translation>
</message>
<message>
<source>MPEG-4</source>
<translation>MPEG-4</translation>
<extracomment>Name of codec used in settings menu</extracomment>
</message>
<message>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
<source>Use voice remote to search</source>
<translation>Utilisez la commande vocale pour chercher</translation>
<extracomment>Help text in search voice text box</extracomment>
</message>
<message>
<source>RUNTIME</source>
<translation>Durée</translation>
</message>
<message>
<source>RELEASE_DATE</source>
<translation>Date de sortie</translation>
</message>
<message>
<source>Unknown</source>
<translation>Inconnu</translation>
<extracomment>Title for a cast member for which we have no information for</extracomment>
</message>
<message>
<source>Enabled</source>
<translation>Activé</translation>
</message>
<message>
<source>Playback</source>
<translation>Lecture</translation>
<extracomment>Title for Playback section in user setting screen.</extracomment>
</message>
<message>
<source>Age</source>
<translation>Âge</translation>
</message>
<message>
<source>tomorrow</source>
<translation>demain</translation>
<extracomment>Next day</extracomment>
</message>
<message>
<source>Item Count</source>
<translation>Nombre d&apos;éléments</translation>
<extracomment>UI -&gt; Media Grid -&gt; Item Count in user setting screen.</extracomment>
</message>
<message>
<source>Here is your Quick Connect code:</source>
<translation>Voici votre code de connexion rapide&#xa0;:</translation>
</message>
<message>
<source>Repeat</source>
<translation>Rediffusion</translation>
<extracomment>If TV Shows has previously been broadcasted</extracomment>
</message>
<message>
<source>Pick a Jellyfin server from the local network</source>
<translation>Sélectionnez un serveur Jellyfin disponible depuis votre réseau local :</translation>
<extracomment>Instructions on initial app launch when the user is asked to pick a server from a list</extracomment>
</message>
<message>
<source>...or enter server URL manually:</source>
<translation>Si aucun serveur n&apos;est dans la liste ci-dessus, vous pouvez aussi saisir l&apos;URL du serveur manuellement :</translation>
<extracomment>Instructions on initial app launch when the user is asked to manually enter a server URL</extracomment>
</message>
<message>
<source>An error was encountered while playing this item. Server did not provide required transcoding data.</source>
<translation>Une erreur a é rencontrée lors de la lecture de cet élément. Le serveur na pas fourni les données de transcodage requises.</translation>
<extracomment>Content of message box when trying to play an item which requires transcoding, and the server did not provide transcode url</extracomment>
</message>
<message>
<source>Enable or disable Direct Play for optional codecs</source>
<translation>Activer ou désactiver la lecture directe pour les codecs optionnels</translation>
<extracomment>Settings Menu - Title for settings group related to codec support</extracomment>
</message>
<message>
<source>Support Direct Play of MPEG-2 content (e.g., Live TV). This will prevent transcoding of MPEG-2 content, but uses significantly more bandwidth.</source>
<translation>Utiliser la lecture directe pour le contenu MPEG-2 (par exemple, la télévision en direct). Cela évitera le transcodage du contenu MPEG-2, mais utilisera significativement plus de bande passante.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>On Now</source>
<translation>En ce moment</translation>
</message>
<message>
<source>Additional Parts</source>
<translation>Contenus supplémentaires</translation>
<extracomment>Additional parts of a video</extracomment>
</message>
<message>
<source>Movies (Presentation)</source>
<translation>Films (Présentation)</translation>
<extracomment>Movie library view option</extracomment>
</message>
<message>
<source>Movies (Grid)</source>
<translation>Films (Grille)</translation>
<extracomment>Movie library view option</extracomment>
</message>
<message>
<source>Channels</source>
<translation>Chaînes</translation>
<extracomment>Menu option for showing Live TV Channel List</extracomment>
</message>
<message>
<source>View Channel</source>
<translation>Voir la chaîne</translation>
</message>
<message>
<source>Not found</source>
<translation>Non trouvé</translation>
<extracomment>Title of message box when the requested content is not found on the server</extracomment>
</message>
<message>
<source>Enter the server name or IP address</source>
<translation>Entrez le nom du serveur ou son adresse IP</translation>
<extracomment>Title of KeyboardDialog when manually entering a server URL</extracomment>
</message>
<message>
<source>Codec Support</source>
<translation>Codecs supportés</translation>
<extracomment>Settings Menu - Title for settings group related to codec support</extracomment>
</message>
<message>
<source>Media Grid</source>
<translation>Grille de médias</translation>
<extracomment>UI -&gt; Media Grid section in user setting screen.</extracomment>
</message>
<message>
<source>Error loading Channel Data</source>
<translation>Erreur lors du chargement des données de la chaîne</translation>
</message>
<message>
<source>Delete Saved</source>
<translation>Supprimer les valeurs enregistrées</translation>
</message>
<message>
<source>Support Direct Play of MPEG-4 content. This may need to be disabled for playback of DIVX encoded video files.</source>
<translation>Prise en charge de la lecture directe du contenu MPEG-4. Il faudra peut-être désactiver cette option pour la lecture des fichiers vidéo encodés au format DIVX.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
<source>Special Features</source>
<translation>Fonctionnalités spéciales</translation>
</message>
<message>
<source>Error Getting Playback Information</source>
<translation>Erreur lors de la récupération des informations de lecture</translation>
<extracomment>Dialog Title: Received error from server when trying to get information about the selected item for playback</extracomment>
</message>
<message>
<source>Unable to load Channel Data from the server</source>
<translation>Impossible de charger les données de la chaîne depuis le serveur</translation>
</message>
<message>
<source>Error Retrieving Content</source>
<translation>Erreur lors de la récupération du contenu</translation>
<extracomment>Dialog title when unable to load Content from Server</extracomment>
</message>
<message>
<source>There was an error retrieving the data for this item from the server.</source>
<translation>Une erreur s&apos;est produite lors de la récupération des données de cet élément sur le serveur.</translation>
<extracomment>Dialog detail when unable to load Content from Server</extracomment>
</message>
<message>
<source>Media Grid options.</source>
<translation>Options de la grille de médias</translation>
</message>
<message>
<source>Loading Channel Data</source>
<translation>Chargement des données de la chaîne</translation>
</message>
<message>
<comment>Title of Tab for switching &quot;views&quot; when looking at a library</comment>
<source>TAB_VIEW</source>
<translation>Vue</translation>
</message>
<message>
<comment>Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)</comment>
<source>NO_ITEMS</source>
<translation>Ce %1 ne contient pas d&apos;éléments</translation>
</message>
</context>
<context>
<name></name>
@ -1031,7 +1494,7 @@
</message>
<message>
<source>...or enter server URL manually:</source>
<translation>...ou entrez manuellement l&apos;adresse du serveur:</translation>
<translation>...ou entrez manuellement l&apos;adresse du serveur&#x202f;:</translation>
<extracomment>Instructions on initial app launch when the user is asked to manually enter a server URL</extracomment>
</message>
<message>
@ -3981,7 +4444,7 @@
</message>
<message>
<source>...or enter server URL manually:</source>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement :</translation>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement&#x202f; :</translation>
<extracomment>Instructions on initial app launch when the user is asked to manually enter a server URL</extracomment>
</message>
<message>
@ -4333,7 +4796,7 @@
</message>
<message>
<source>...or enter server URL manually:</source>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement :</translation>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement&#x202f; :</translation>
<extracomment>Instructions on initial app launch when the user is asked to manually enter a server URL</extracomment>
</message>
<message>
@ -4842,7 +5305,7 @@
</message>
<message>
<source>Save Credentials?</source>
<translation>Sauvegarder les informations d&apos;identification?</translation>
<translation>Sauvegarder les informations d&apos;identification&#x202f;?</translation>
</message>
<message>
<source>On Now</source>
@ -4892,7 +5355,7 @@
</message>
<message>
<source>...or enter server URL manually:</source>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement :</translation>
<translation>Si aucun serveur n&apos;est affiché ci-dessus vous pouvez également saisir l&apos;adresse IP du serveur manuellement&#x202f; :</translation>
<extracomment>Instructions on initial app launch when the user is asked to manually enter a server URL</extracomment>
</message>
<message>
@ -5282,7 +5745,7 @@
</message>
<message>
<source>Save Credentials?</source>
<translation>Sauvegarder les informations d&apos;identification?</translation>
<translation>Sauvegarder les informations d&apos;identification&#x202f;?</translation>
</message>
<message>
<source>Delete Saved</source>
@ -5719,7 +6182,7 @@
</message>
<message>
<source>Save Credentials?</source>
<translation>Sauvegarder les informations d&apos;identification?</translation>
<translation>Sauvegarder les informations d&apos;identification&#x202f;?</translation>
</message>
<message>
<source>Error Retrieving Content</source>
@ -6423,7 +6886,7 @@
</message>
<message>
<source>Here is your Quick Connect code:</source>
<translation>Voici votre code de connexion rapide:</translation>
<translation>Voici votre code de connexion rapide&#x202f;:</translation>
</message>
<message>
<source>Next episode</source>
@ -6963,7 +7426,7 @@
</message>
<message>
<source>Next Episode Button Time</source>
<translation>Temps pour le bouton «Prochain épisode»</translation>
<translation>Temps pour le bouton «&#x202f;Prochain épisode&#x202f;»</translation>
<extracomment>Settings Menu - Title for option</extracomment>
</message>
<message>
@ -6990,7 +7453,7 @@
</message>
<message>
<source>Set how many seconds before the end of an episode the Next Episode button should appear. Set to 0 to disable.</source>
<translation>Définis combien de secondes avant la fin d&apos;un épisode le bouton «Prochain épisode» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<translation>Définis combien de secondes avant la fin d&apos;un épisode le bouton «&#x202f;Prochain épisode&#x202f;» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
@ -7917,7 +8380,7 @@
</message>
<message>
<source>Remember Me?</source>
<translation>Se souvenir de moi?</translation>
<translation>Se souvenir de moi&#x202f;?</translation>
<extracomment>User Setting - Setting title</extracomment>
</message>
<message>
@ -8047,7 +8510,7 @@
</message>
<message>
<source>Next Episode Button Time</source>
<translation>Temps pour le bouton «Prochain épisode»</translation>
<translation>Temps pour le bouton «&#x202f;Prochain épisode&#x202f;»</translation>
<extracomment>Settings Menu - Title for option</extracomment>
</message>
<message>
@ -8438,7 +8901,7 @@
</message>
<message>
<source>Set how many seconds before the end of an episode the Next Episode button should appear. Set to 0 to disable.</source>
<translation>Définir combien de secondes avant la fin d&apos;un épisode le bouton «Prochain épisode» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<translation>Définir combien de secondes avant la fin d&apos;un épisode le bouton «&#x202f;Prochain épisode&#x202f;» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
@ -9545,7 +10008,7 @@
</message>
<message>
<source>Set how many seconds before the end of an episode the Next Episode button should appear. Set to 0 to disable.</source>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «Prochain épisode» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «&#x202f;Prochain épisode&#x202f;» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
@ -10557,7 +11020,7 @@
</message>
<message>
<source>Set how many seconds before the end of an episode the Next Episode button should appear. Set to 0 to disable.</source>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «Prochain épisode» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «&#x202f;Prochain épisode&#x202f;» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>
@ -11405,7 +11868,7 @@
</message>
<message>
<source>Set how many seconds before the end of an episode the Next Episode button should appear. Set to 0 to disable.</source>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «Prochain épisode» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<translation>Définit combien de secondes avant la fin d&apos;un épisode le bouton «&#x202f;Prochain épisode&#x202f;» doit apparaître. La valeur 0 permet de le désactiver.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
<message>

View File

@ -260,6 +260,300 @@
<translation>Elkezdve</translation>
<extracomment>(Past Tense) For defining time when a program started today (e.g. Started at 08:00) </extracomment>
</message>
<message>
<source>Extras</source>
<translation>Extrák</translation>
</message>
<message>
<source>Error During Playback</source>
<translation>Hiba történt a lejátszás közben</translation>
<extracomment>Dialog title when error occurs during playback</extracomment>
</message>
<message>
<source>Cast &amp; Crew</source>
<translation>Szereplők és Stáb</translation>
</message>
<message>
<source>Movies (Grid)</source>
<translation>Filmek (Rács)</translation>
<extracomment>Movie library view option</extracomment>
</message>
<message>
<source>Thursday</source>
<translation>Csütörtök</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Saturday</source>
<translation>Szombat</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Monday</source>
<translation>Hétfő</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Ends at</source>
<translation>Befejeződik</translation>
<extracomment>(Past Tense) For defining a day and time when a program ended (e.g. Ended Wednesday, 08:00) </extracomment>
</message>
<message>
<source>Record Series</source>
<translation>Sorozat Felvétele</translation>
</message>
<message>
<source>Died</source>
<translation>Meghalt</translation>
</message>
<message>
<source>Unable to load Channel Data from the server</source>
<translation>Nem lehet letölteni a csatornaadatot a szerverről</translation>
</message>
<message>
<source>Age</source>
<translation>Életkor</translation>
</message>
<message>
<source>More Like This</source>
<translation>Több Hasonló</translation>
</message>
<message>
<source>Special Features</source>
<translation>Extrák</translation>
</message>
<message>
<source>Additional Parts</source>
<translation>További Részek</translation>
<extracomment>Additional parts of a video</extracomment>
</message>
<message>
<source>TV Shows</source>
<translation>Sorozatok</translation>
</message>
<message>
<source>Tuesday</source>
<translation>Kedd</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>CRITIC_RATING</source>
<translation>Kritikusok Értékelései</translation>
</message>
<message>
<source>Episodes</source>
<translation>Epizódok</translation>
</message>
<message>
<comment>Title of Tab for options to filter library content</comment>
<source>TAB_FILTER</source>
<translation>Szűrés</translation>
</message>
<message>
<comment>Title of Tab for switching &quot;views&quot; when looking at a library</comment>
<source>TAB_VIEW</source>
<translation>Nézet</translation>
</message>
<message>
<source>Press &apos;OK&apos; to Close</source>
<translation>Nyomd meg az OK gombot a bezáráshoz</translation>
</message>
<message>
<source>Starts at</source>
<translation>Ekkor kezdődik</translation>
<extracomment>(Future Tense) For defining time when a program will start today (e.g. Starts at 08:00) </extracomment>
</message>
<message>
<source>Live</source>
<translation>É</translation>
<extracomment>If TV Show is being broadcast live (not pre-recorded)</extracomment>
</message>
<message>
<source>Cancel Recording</source>
<translation>Felvétel megszakítása</translation>
</message>
<message>
<source>DATE_ADDED</source>
<translation>Hozzáadás Dátuma</translation>
</message>
<message>
<comment>Title of Tab for options to sort library content</comment>
<source>TAB_SORT</source>
<translation>Rendezés</translation>
</message>
<message>
<source>Wednesday</source>
<translation>Szerda</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Born</source>
<translation>Született</translation>
</message>
<message>
<source>Movies (Presentation)</source>
<translation>Filmek (Előadások)</translation>
<extracomment>Movie library view option</extracomment>
</message>
<message>
<source>Friday</source>
<translation>Péntek</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Delete Saved</source>
<translation>Mentettek Törlése</translation>
</message>
<message>
<source>There was an error retrieving the data for this item from the server.</source>
<translation>Hiba történt, mikor a kliens ezt az elemet próbálta lekérni a szerverről.</translation>
<extracomment>Dialog detail when unable to load Content from Server</extracomment>
</message>
<message>
<source>Close</source>
<translation>Bezárás</translation>
</message>
<message>
<source>On Now</source>
<translation>Most</translation>
</message>
<message>
<source>Error Retrieving Content</source>
<translation>Hiba történt a tartalom letöltésekor</translation>
<extracomment>Dialog title when unable to load Content from Server</extracomment>
</message>
<message>
<source>An error was encountered while playing this item.</source>
<translation>Hiba történt ennek az elemnek a letöltése közben.</translation>
<extracomment>Dialog detail when error occurs during playback</extracomment>
</message>
<message>
<source>Loading Channel Data</source>
<translation>Csatornaadatok betöltése</translation>
</message>
<message>
<source>Error loading Channel Data</source>
<translation>Hiba történt a csatornaadatok betöltésekor</translation>
</message>
<message>
<comment>Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)</comment>
<source>NO_ITEMS</source>
<translation>Ez a(z) %1 nem tartalmaz elemeket</translation>
</message>
<message>
<comment>Name or Title field of media item</comment>
<source>TITLE</source>
<translation>Név</translation>
</message>
<message>
<source>IMDB_RATING</source>
<translation>IMDb Értékelés</translation>
</message>
<message>
<source>DATE_PLAYED</source>
<translation>Lejátszás Dátuma</translation>
</message>
<message>
<source>OFFICIAL_RATING</source>
<translation>Korhatár</translation>
</message>
<message>
<source>PLAY_COUNT</source>
<translation>Lejátszások Száma</translation>
</message>
<message>
<source>RELEASE_DATE</source>
<translation>Megjelenés dátuma</translation>
</message>
<message>
<source>RUNTIME</source>
<translation>Futási idő</translation>
</message>
<message>
<source>Ended at</source>
<translation>Ekkor ért véget</translation>
<extracomment>(Past Tense) For defining time when a program will ended (e.g. Ended at 08:00) </extracomment>
</message>
<message>
<source>TV Guide</source>
<translation>Műsorújság</translation>
<extracomment>Menu option for showing Live TV Guide / Schedule</extracomment>
</message>
<message>
<source>Cancel Series Recording</source>
<translation>Sorozatfelvétel Megszakítása</translation>
</message>
<message>
<source>Connecting to Server</source>
<translation>Csatlakozás a szerverhez</translation>
<extracomment>Message to display to user while client is attempting to connect to the server</extracomment>
</message>
<message>
<source>Movies</source>
<translation>Filmek</translation>
</message>
<message>
<source>yesterday</source>
<translation>tegnap</translation>
<extracomment>Previous day</extracomment>
</message>
<message>
<source>tomorrow</source>
<translation>holnap</translation>
<extracomment>Next day</extracomment>
</message>
<message>
<source>Repeat</source>
<translation>Ismétlés</translation>
<extracomment>If TV Shows has previously been broadcasted</extracomment>
</message>
<message>
<source>Channels</source>
<translation>Csatornák</translation>
<extracomment>Menu option for showing Live TV Channel List</extracomment>
</message>
<message>
<source>View Channel</source>
<translation>Csatorna Megtekintése</translation>
</message>
<message>
<source>Record</source>
<translation>Felvétel</translation>
</message>
<message>
<source>Not found</source>
<translation>Nem található</translation>
<extracomment>Title of message box when the requested content is not found on the server</extracomment>
</message>
<message>
<source>Unknown</source>
<translation>Ismeretlen</translation>
<extracomment>Title for a cast member for which we have no information for</extracomment>
</message>
<message>
<source>The requested content does not exist on the server</source>
<translation>A kért tartalom nem található a szerveren</translation>
<extracomment>Content of message box when the requested content is not found on the server</extracomment>
</message>
<message>
<source>Save Credentials?</source>
<translation>Hitelesítő adatok mentése?</translation>
</message>
<message>
<source>today</source>
<translation>ma</translation>
<extracomment>Current day</extracomment>
</message>
<message>
<source>Sunday</source>
<translation>Vasárnap</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Started</source>
<translation>Elkezdődött</translation>
<extracomment>(Past Tense) For defining a day and time when a program started (e.g. Started Wednesday, 08:00) </extracomment>
</message>
</context>
<context>
<name></name>

View File

@ -180,6 +180,141 @@
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<source>Change Server</source>
<translation>Cambia Server</translation>
</message>
<message>
<source>Error During Playback</source>
<translation>Errore Durante la Riproduzione</translation>
<extracomment>Dialog title when error occurs during playback</extracomment>
</message>
<message>
<source>There was an error retrieving the data for this item from the server.</source>
<translation>Si è verificato un errore nel recupero dei dati di questo elemento dal server.</translation>
<extracomment>Dialog detail when unable to load Content from Server</extracomment>
</message>
<message>
<source>today</source>
<translation>oggi</translation>
<extracomment>Current day</extracomment>
</message>
<message>
<source>Age</source>
<translation>Età</translation>
</message>
<message>
<source>yesterday</source>
<translation>ieri</translation>
<extracomment>Previous day</extracomment>
</message>
<message>
<source>Save Credentials?</source>
<translation>Salvare le Credenziali?</translation>
</message>
<message>
<comment>Name or Title field of media item</comment>
<source>TITLE</source>
<translation>Nome</translation>
</message>
<message>
<source>IMDB_RATING</source>
<translation>Valutazione IMDb</translation>
</message>
<message>
<source>OFFICIAL_RATING</source>
<translation>Classificazione Parentale</translation>
</message>
<message>
<source>On Now</source>
<translation>In onda ora</translation>
</message>
<message>
<source>Died</source>
<translation>Data di Morte</translation>
</message>
<message>
<source>DATE_ADDED</source>
<translation>Data di Aggiunta</translation>
</message>
<message>
<source>DATE_PLAYED</source>
<translation>Data di Riproduzione</translation>
</message>
<message>
<source>Delete Saved</source>
<translation>Elimina Salvati</translation>
</message>
<message>
<source>Extras</source>
<translation>Extra</translation>
</message>
<message>
<comment>Message displayed in Item Grid when no item to display. %1 is container type (e.g. Boxset, Collection, Folder, etc)</comment>
<source>NO_ITEMS</source>
<translation>Questo %1 non contiene elementi</translation>
</message>
<message>
<source>Born</source>
<translation>Data di Nascita</translation>
</message>
<message>
<source>More Like This</source>
<translation>Titoli Simili</translation>
</message>
<message>
<source>Episodes</source>
<translation>Episodi</translation>
</message>
<message>
<source>Loading Channel Data</source>
<translation>Caricamento dei Dati del Canale</translation>
</message>
<message>
<source>Error loading Channel Data</source>
<translation>Errore nel Caricamento dei Dati del Canale</translation>
</message>
<message>
<source>CRITIC_RATING</source>
<translation>Valutazione della Critica</translation>
</message>
<message>
<source>Press &apos;OK&apos; to Close</source>
<translation>Premi &apos;OK&apos; per Chiudere</translation>
</message>
<message>
<source>Sunday</source>
<translation>Domenica</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>Monday</source>
<translation>Lunedì</translation>
<extracomment>Day of Week</extracomment>
</message>
<message>
<source>An error was encountered while playing this item.</source>
<translation>Si è verificato un errore durante la riproduzione di questo elemento.</translation>
<extracomment>Dialog detail when error occurs during playback</extracomment>
</message>
<message>
<source>tomorrow</source>
<translation>domani</translation>
<extracomment>Next day</extracomment>
</message>
<message>
<source>Error Retrieving Content</source>
<translation>Errore nel Recuperare i Contenuti</translation>
<extracomment>Dialog title when unable to load Content from Server</extracomment>
</message>
<message>
<source>Unable to load Channel Data from the server</source>
<translation>Impossibile caricare i Dati del Canale dal server</translation>
</message>
<message>
<source>Sign Out</source>
<translation>Esci</translation>
</message>
</context>
<context>
<name></name>

View File

@ -180,6 +180,14 @@
<source>Server</source>
<translation>Server</translation>
</message>
<message>
<source>Delete Saved</source>
<translation>Şterge salvările</translation>
</message>
<message>
<source>Save Credentials?</source>
<translation>Salvați datele de conectare?</translation>
</message>
</context>
<context>
<name></name>

View File

@ -16,19 +16,6 @@
"title": "Playback",
"description": "Settings relating to playback and supported codec and media types.",
"children": [
{
"title": "Audio Codec Support",
"description": "Choose your preferred audio codec when transcoding multichannel audio.",
"children": [
{
"title": "DTS",
"description": "Force all transcodes to use DTS instead of the default EAC3. The device must support DTS for this setting to have an effect.",
"settingName": "playback.forceDTS",
"type": "bool",
"default": "false"
}
]
},
{
"title": "Bitrate Limit",
"description": "Configure the maximum playback bitrate.",
@ -187,6 +174,35 @@
"type": "integer",
"default": "30"
},
{
"title": "Preferred Audio Codec",
"description": "Use the selected audio codec for transcodes. If the device or stream does not support it, a fallback codec will be used.",
"settingName": "playback.preferredAudioCodec",
"type": "radio",
"default": "auto",
"options": [
{
"title": "Use system settings",
"id": "auto"
},
{
"title": "AAC",
"id": "aac"
},
{
"title": "DD (AC3)",
"id": "ac3"
},
{
"title": "DD+ (EAC3)",
"id": "eac3"
},
{
"title": "DTS",
"id": "dts"
}
]
},
{
"title": "Text Subtitles Only",
"description": "Only display text subtitles to minimize transcoding.",

View File

@ -195,21 +195,13 @@ function getTranscodingProfiles() as object
' does the users setup support surround sound?
maxAudioChannels = "2" ' jellyfin expects this as a string
' in order of preference from left to right
audioCodecs = ["mp3", "vorbis", "opus", "flac", "alac", "ac4", "pcm", "wma", "wmapro"]
surroundSoundCodecs = ["eac3", "ac3", "dts"]
if globalUserSettings["playback.forceDTS"] = true
surroundSoundCodecs = ["dts", "eac3", "ac3"]
end if
audioCodecs = ["eac3", "ac3", "dts", "mp3", "vorbis", "opus", "flac", "alac", "ac4", "pcm", "wma", "wmapro"]
surroundSoundCodec = invalid
if di.GetAudioOutputChannel() = "5.1 surround"
maxAudioChannels = "6"
for each codec in surroundSoundCodecs
if di.CanDecodeAudio({ Codec: codec, ChCnt: 6 }).Result
surroundSoundCodec = codec
if di.CanDecodeAudio({ Codec: codec, ChCnt: 8 }).Result
maxAudioChannels = "8"
end if
for each codec in audioCodecs
if di.CanDecodeAudio({ Codec: codec, ChCnt: 8 }).Result
maxAudioChannels = "8"
exit for
end if
end for
@ -403,38 +395,10 @@ function getTranscodingProfiles() as object
mp4Array.Conditions = [getMaxHeightArray(), getMaxWidthArray()]
end if
' surround sound
if surroundSoundCodec <> invalid
' add preferred surround sound codec to TranscodingProfile
transcodingProfiles.push({
"Container": surroundSoundCodec,
"Type": "Audio",
"AudioCodec": surroundSoundCodec,
"Context": "Streaming",
"Protocol": "http",
"MaxAudioChannels": maxAudioChannels
})
transcodingProfiles.push({
"Container": surroundSoundCodec,
"Type": "Audio",
"AudioCodec": surroundSoundCodec,
"Context": "Static",
"Protocol": "http",
"MaxAudioChannels": maxAudioChannels
})
' put codec in front of AudioCodec string
if tsArray.AudioCodec = ""
tsArray.AudioCodec = surroundSoundCodec
else
tsArray.AudioCodec = surroundSoundCodec + "," + tsArray.AudioCodec
end if
if mp4Array.AudioCodec = ""
mp4Array.AudioCodec = surroundSoundCodec
else
mp4Array.AudioCodec = surroundSoundCodec + "," + mp4Array.AudioCodec
end if
' add user-selected preferred codec to the front of the list
if globalUserSettings["playback.preferredAudioCodec"] <> "auto"
tsArray.AudioCodec = globalUserSettings["playback.preferredAudioCodec"] + "," + tsArray.AudioCodec
mp4Array.AudioCodec = globalUserSettings["playback.preferredAudioCodec"] + "," + mp4Array.AudioCodec
end if
transcodingProfiles.push(tsArray)