Merge branch 'unstable' of https://github.com/jellyfin/jellyfin-roku into NextUpButtonDuration

This commit is contained in:
candry7731 2023-02-04 20:16:38 -06:00
commit 1b760a7ce4
10 changed files with 251 additions and 61 deletions

View File

@ -43,10 +43,12 @@ sub itemContentChanged()
m.itemIcon.uri = itemData.iconUrl
m.itemText.text = itemData.Title
else if itemData.type = "Series"
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
end if
end if
end if

View File

@ -57,10 +57,12 @@ sub itemContentChanged() as void
itemData = m.top.itemContent
m.title.text = itemData.title
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
end if
end if
end if

View File

@ -38,10 +38,12 @@ sub itemContentChanged()
end if
if LCase(itemData.type) = "series"
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
if itemData?.json?.UserData?.UnplayedItemCount <> invalid
if itemData.json.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.json.UserData.UnplayedItemCount
end if
end if
end if
end if

View File

@ -17,10 +17,12 @@ sub setSeasonLoading()
end sub
sub updateSeason()
if m.top.seasonData?.UserData?.UnplayedItemCount <> invalid
if m.top.seasonData.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = m.top.seasonData.UserData.UnplayedItemCount
if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
if m.top.seasonData?.UserData?.UnplayedItemCount <> invalid
if m.top.seasonData.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = m.top.seasonData.UserData.UnplayedItemCount
end if
end if
end if

View File

@ -15,10 +15,12 @@ sub itemContentChanged()
item = m.top.itemContent
itemData = item.json
if itemData?.UserData?.UnplayedItemCount <> invalid
if itemData.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.UserData.UnplayedItemCount
if get_user_setting("ui.tvshows.disableUnwatchedEpisodeCount", "false") = "false"
if itemData?.UserData?.UnplayedItemCount <> invalid
if itemData.UserData.UnplayedItemCount > 0
m.unplayedCount.visible = true
m.unplayedEpisodeCount.text = itemData.UserData.UnplayedItemCount
end if
end if
end if

View File

@ -33,5 +33,6 @@
<field id="seasonSelected" alias="seasons.rowItemSelected" />
</interface>
<script type="text/brightscript" uri="pkg:/source/utils/misc.brs" />
<script type="text/brightscript" uri="pkg:/source/utils/config.brs" />
<script type="text/brightscript" uri="TVShowDetails.brs" />
</component>

View File

@ -3015,5 +3015,93 @@
<source>Albums</source>
<translation>Albums</translation>
</message>
<message>
<source>Delete Saved</source>
<translation>Delete Saved</translation>
</message>
<message>
<source>On Now</source>
<translation>On Now</translation>
</message>
<message>
<source>Age</source>
<translation>Age</translation>
</message>
<message>
<source>Died</source>
<translation>Died</translation>
</message>
<message>
<source>More Like This</source>
<translation>More Like This</translation>
</message>
<message>
<source>Born</source>
<translation>Born</translation>
</message>
<message>
<source>Special Features</source>
<translation>Special Features</translation>
</message>
<message>
<source>Save Credentials?</source>
<translation>Save Credentials?</translation>
</message>
<message>
<source>Press &apos;OK&apos; to Close</source>
<translation>Press &apos;OK&apos; to Close</translation>
</message>
<message>
<source>Cast &amp; Crew</source>
<translation>Cast &amp; Crew</translation>
</message>
<message>
<source>Pick a Jellyfin server from the local network</source>
<translation>Select an available Jellyfin server from your local network:</translation>
<extracomment>Instructions on initial app launch when the user is asked to pick a server from a list</extracomment>
</message>
<message>
<source>Enter the server name or IP address</source>
<translation>Enter the server name or IP address</translation>
<extracomment>Title of KeyboardDialog when manually entering a server URL</extracomment>
</message>
<message>
<source>TV Shows</source>
<translation>TV Shows</translation>
</message>
<message>
<source>Cancel Recording</source>
<translation>Cancel Recording</translation>
</message>
<message>
<source>Additional Parts</source>
<translation>Additional Parts</translation>
<extracomment>Additional parts of a video</extracomment>
</message>
<message>
<source>View Channel</source>
<translation>View Channel</translation>
</message>
<message>
<source>Record</source>
<translation>Record</translation>
</message>
<message>
<source>Cancel Series Recording</source>
<translation>Cancel Series Recording</translation>
</message>
<message>
<source>Close</source>
<translation>Close</translation>
</message>
<message>
<source>Unknown</source>
<translation>Unknown</translation>
<extracomment>Title for a cast member for which we have no information for</extracomment>
</message>
<message>
<source>Record Series</source>
<translation>Record Series</translation>
</message>
</context>
</TS>

View File

@ -1021,6 +1021,30 @@
<source>If enabled, the star and community rating for episodes of a TV show will be removed. This is to prevent spoilers of an upcoming good/bad episode.</source>
<translation>If enabled, the star and community rating for episodes of a TV show will be removed. This is to prevent spoilers of an upcoming good/bad episode.</translation>
</message>
<message>
<source>Playback Bitrate Limits</source>
<translation>Playback Bitrate Limits</translation>
</message>
<message>
<source>Set limits for how high playback bitrates are allowed to be.</source>
<translation>Set limits for how high playback bitrates are allowed to be.</translation>
</message>
<message>
<source>Limits Enabled</source>
<translation>Limits Enabled</translation>
</message>
<message>
<source>If enabled, playback bitrates will be limited based on the 'Playback Bitrate Limit' setting.</source>
<translation>If enabled, playback bitrates will be limited based on the 'Playback Bitrate Limit' setting.</translation>
</message>
<message>
<source>Playback Bitrate Limit</source>
<translation>Playback Bitrate Limit</translation>
</message>
<message>
<source>Max bitrate (Mbps) allowed if limits are enabled. Set to 0 to use Roku's specifications.</source>
<translation>Max bitrate (Mbps) allowed if limits are enabled. Set to 0 to use Roku's specifications.</translation>
</message>
<message>
<source>Libraries</source>
<translation>Libraries</translation>
@ -1063,5 +1087,16 @@
<translation>Grid</translation>
<extracomment>Title of an option - name of grid view</extracomment>
</message>
<message>
<source>Disable Unwatched Episode Count</source>
<translation>Disable Unwatched Episode Count</translation>
<extracomment>Settings Menu - Title for option</extracomment>
</message>
<message>
<source>If enabled, the number of unwatched episodes in a series/season will be removed.</source>
<translation>If enabled, the number of unwatched episodes in a series/season will be removed.</translation>
<extracomment>Settings Menu - Description for option</extracomment>
</message>
</context>
</TS>

View File

@ -3,6 +3,13 @@
"title": "Playback",
"description": "Settings relating to playback and supported codec and media types.",
"children": [
{
"title": "Cinema Mode",
"description": "Cinema Mode brings the theater experience straight to your living room with the ability to play custom intros before the main feature.",
"settingName": "playback.cinemamode",
"type": "bool",
"default": "false"
},
{
"title": "Codec Support",
"description": "Enable or disable Direct Play support for certain codecs",
@ -30,6 +37,26 @@
}
]
},
{
"title": "Playback Bitrate Limits",
"description": "Set limits for how high playback bitrates are allowed to be.",
"children": [
{
"title": "Limits Enabled",
"description": "If enabled, playback bitrates will be limited based on the 'Playback Bitrate Limit' setting.",
"settingName": "playback.bitrate.maxlimited",
"type": "bool",
"default": "true"
},
{
"title": "Playback Bitrate Limit",
"description": "Max bitrate (Mbps) allowed if limits are enabled. Set to 0 to use Roku's specifications.",
"settingName": "playback.bitrate.limit",
"type": "integer",
"default": "0"
}
]
},
{
"title": "Profile Level Support",
"description": "Attempt Direct Play of potentially unsupported profile levels",
@ -50,13 +77,6 @@
}
]
},
{
"title": "Cinema Mode",
"description": "Cinema Mode brings the theater experience straight to your living room with the ability to play custom intros before the main feature.",
"settingName": "playback.cinemamode",
"type": "bool",
"default": "false"
},
{
"title": "Text Subtitles Only",
"description": "Only display text subtitles to minimize transcoding.",
@ -211,16 +231,23 @@
"default": "false"
},
{
"title": "Skip Details for Single Seasons",
"description": "If enabled, selecting a TV series with only one season will go straight to the episode list rather than the show details and season list.",
"settingName": "ui.tvshows.goStraightToEpisodeListing",
"title": "Disable Community Rating for Episodes",
"description": "If enabled, the star and community rating for episodes of a TV show will be removed. This is to prevent spoilers of an upcoming good/bad episode.",
"settingName": "ui.tvshows.disableCommunityRating",
"type": "bool",
"default": "false"
},
{
"title": "Disable Community Rating for Episodes",
"description": "If enabled, the star and community rating for episodes of a TV show will be removed. This is to prevent spoilers of an upcoming good/bad episode.",
"settingName": "ui.tvshows.disableCommunityRating",
"title": "Disable Unwatched Episode Count",
"description": "If enabled, the number of unwatched episodes in a series/season will be removed.",
"settingName": "ui.tvshows.disableUnwatchedEpisodeCount",
"type": "bool",
"default": "false"
},
{
"title": "Skip Details for Single Seasons",
"description": "If enabled, selecting a TV series with only one season will go straight to the episode list rather than the show details and season list.",
"settingName": "ui.tvshows.goStraightToEpisodeListing",
"type": "bool",
"default": "false"
}

View File

@ -171,13 +171,7 @@ function getDeviceProfile() as object
"Value": "41",
"IsRequired": false
},
' Roku only supports h264 up to 10Mpbs
{
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "10000000",
IsRequired: true
}
GetBitRateLimit("H264")
]
}
],
@ -211,13 +205,7 @@ function getDeviceProfile() as object
"Value": av1VideoRangeTypes,
"IsRequired": false
},
' Roku only supports AVI up to 40Mpbs
{
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
GetBitRateLimit("AV1")
]
})
end if
@ -244,13 +232,7 @@ function getDeviceProfile() as object
"Value": (120 * 5.1).ToStr(),
"IsRequired": false
},
' Roku only supports h265 up to 40Mpbs
{
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
GetBitRateLimit("H265")
]
})
end if
@ -265,13 +247,7 @@ function getDeviceProfile() as object
"Value": vp9VideoRangeTypes,
"IsRequired": false
},
' Roku only supports VP9 up to 40Mpbs
{
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
GetBitRateLimit("VP9")
]
})
end if
@ -382,3 +358,56 @@ function GetDirectPlayProfiles() as object
]
end function
function GetBitRateLimit(codec as string)
if get_user_setting("playback.bitrate.maxlimited") = "true"
userSetLimit = get_user_setting("playback.bitrate.limit").ToInt()
userSetLimit *= 1000000
if userSetLimit > 0
return {
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": userSetLimit.ToStr(),
IsRequired: true
}
else
' Some repeated values (e.g. same "40mbps" for several codecs)
' but this makes it easy to update in the future if the bitrates start to deviate.
if codec = "H264"
' Roku only supports h264 up to 10Mpbs
return {
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "10000000",
IsRequired: true
}
else if codec = "AV1"
' Roku only supports AV1 up to 40Mpbs
return {
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
else if codec = "H265"
' Roku only supports h265 up to 40Mpbs
return {
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
else if codec = "VP9"
' Roku only supports VP9 up to 40Mpbs
return {
"Condition": "LessThanEqual",
"Property": "VideoBitrate",
"Value": "40000000",
IsRequired: true
}
end if
end if
end if
return {}
end function