Merge branch 'unstable' into Release164

This commit is contained in:
1hitsong 2023-03-29 20:18:55 -04:00
commit 4dbd59c173
13 changed files with 11750 additions and 11681 deletions

View File

@ -9,7 +9,7 @@ jobs:
permissions: permissions:
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7 - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8
with: with:
days-before-issue-stale: -1 days-before-issue-stale: -1
days-before-issue-close: -1 days-before-issue-close: -1

View File

@ -12,7 +12,7 @@ jobs:
dev: dev:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3 - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
with: with:
node-version: "lts/*" node-version: "lts/*"

View File

@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout master (the latest release) - name: Checkout master (the latest release)
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3 uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
with: with:
ref: master ref: master
- name: Install jq to parse json - name: Install jq to parse json
@ -33,7 +33,7 @@ jobs:
- name: Save old Makefile version - name: Save old Makefile version
run: awk 'BEGIN { FS=" = " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV run: awk 'BEGIN { FS=" = " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV
- name: Checkout PR branch - name: Checkout PR branch
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3 uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
- name: Save new package.json version - name: Save new package.json version
run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
- name: package.json version must be updated - name: package.json version must be updated
@ -61,7 +61,7 @@ jobs:
prod: prod:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3 - uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3 - uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
with: with:
node-version: "lts/*" node-version: "lts/*"

View File

@ -14,7 +14,7 @@
<img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-roku/svg-badge.svg" alt="Translation status" /> <img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-roku/svg-badge.svg" alt="Translation status" />
</a> </a>
<br/> <br/>
<a href="https://matrix.to/#/+jellyfin:matrix.org"> <a href="https://matrix.to/#/#jellyfin-dev-roku:matrix.org">
<img alt="Chat on Matrix" src="https://img.shields.io/matrix/jellyfin:matrix.org.svg?logo=matrix"/> <img alt="Chat on Matrix" src="https://img.shields.io/matrix/jellyfin:matrix.org.svg?logo=matrix"/>
</a> </a>
<a href="https://www.reddit.com/r/jellyfin"> <a href="https://www.reddit.com/r/jellyfin">
@ -26,7 +26,7 @@ The Jellyfin Roku App is a Jellyfin client for Roku Devices. This is still very
## Getting Started ## Getting Started
The channel is available on the [Roku Channel Store](https://my.roku.com/add/jellyfin). The channel is available on the [Roku Channel Store](https://channelstore.roku.com/details/cc5e559d08d9ec87c5f30dcebdeebc12/jellyfin).
## Getting Involved<a name="get_involved"></a> ## Getting Involved<a name="get_involved"></a>

View File

@ -70,6 +70,9 @@ sub LoadItems_AddVideoContent(video, mediaSourceId, audio_stream_idx = 1, subtit
end if end if
end if end if
' For phase 1 of playlist support, we don't support intros yet
showIntro = false
' Don't attempt to play an intro for an intro video ' Don't attempt to play an intro for an intro video
if showIntro if showIntro
' Do not play intros when resuming playback ' Do not play intros when resuming playback

View File

@ -30,8 +30,12 @@ sub init()
m.top.observeField("state", "onState") m.top.observeField("state", "onState")
m.top.observeField("content", "onContentChange") m.top.observeField("content", "onContentChange")
m.top.observeField("allowCaptions", "onAllowCaptionsChange")
end sub
sub onAllowCaptionsChange()
if not m.top.allowCaptions then return
'Captions
m.captionGroup = m.top.findNode("captionGroup") m.captionGroup = m.top.findNode("captionGroup")
m.captionGroup.createchildren(9, "LayoutGroup") m.captionGroup.createchildren(9, "LayoutGroup")
m.captionTask = createObject("roSGNode", "captionTask") m.captionTask = createObject("roSGNode", "captionTask")
@ -129,7 +133,9 @@ end sub
' When Video Player state changes ' When Video Player state changes
sub onPositionChanged() sub onPositionChanged()
if isValid(m.captionTask)
m.captionTask.currentPos = Int(m.top.position * 1000) m.captionTask.currentPos = Int(m.top.position * 1000)
end if
' Check if dialog is open ' Check if dialog is open
m.dialog = m.top.getScene().findNode("dialogBackground") m.dialog = m.top.getScene().findNode("dialogBackground")
if not isValid(m.dialog) if not isValid(m.dialog)
@ -140,7 +146,9 @@ end sub
' '
' When Video Player state changes ' When Video Player state changes
sub onState(msg) sub onState(msg)
if isValid(m.captionTask)
m.captionTask.playerState = m.top.state + m.top.globalCaptionMode m.captionTask.playerState = m.top.state + m.top.globalCaptionMode
end if
' When buffering, start timer to monitor buffering process ' When buffering, start timer to monitor buffering process
if m.top.state = "buffering" and m.bufferCheckTimer <> invalid if m.top.state = "buffering" and m.bufferCheckTimer <> invalid

View File

@ -16,6 +16,7 @@
<field id="transcodeAvailable" type="boolean" value="false" /> <field id="transcodeAvailable" type="boolean" value="false" />
<field id="retryWithTranscoding" type="boolean" value="false" /> <field id="retryWithTranscoding" type="boolean" value="false" />
<field id="isTranscoded" type="boolean" /> <field id="isTranscoded" type="boolean" />
<field id="allowCaptions" type="boolean" value="false" />
<field id="transcodeReasons" type="array" /> <field id="transcodeReasons" type="array" />
<field id="videoId" type="string" /> <field id="videoId" type="string" />

View File

@ -28,13 +28,12 @@ end sub
sub setFont() sub setFont()
fs = CreateObject("roFileSystem") fs = CreateObject("roFileSystem")
fontlist = fs.Find("tmp:/", "font")
if fontlist.count() > 0 if fs.Exists("tmp:/font")
m.font.uri = "tmp:/" + fontlist[0] m.font.uri = "tmp:/font"
m.font.size = m.fontSize m.font.size = m.fontSize
else else
reg = CreateObject("roFontRegistry") m.font = "font:LargeSystemFont"
m.font = reg.GetDefaultFont(m.fontSize, false, false)
end if end if
end sub end sub
@ -56,6 +55,7 @@ function newlabel(txt)
label = CreateObject("roSGNode", "Label") label = CreateObject("roSGNode", "Label")
label.text = txt label.text = txt
label.font = m.font label.font = m.font
label.font.size = m.fontSize
label.color = m.textColor label.color = m.textColor
label.opacity = m.textOpac label.opacity = m.textOpac
return label return label

View File

@ -3230,5 +3230,29 @@
<source>More Like This</source> <source>More Like This</source>
<translation>More Like This</translation> <translation>More Like This</translation>
</message> </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>Delete Saved</source>
<translation>Delete Saved</translation>
</message>
<message>
<source>Born</source>
<translation>Born</translation>
</message>
<message>
<source>Save Credentials?</source>
<translation>Save Credentials?</translation>
</message>
</context> </context>
</TS> </TS>

View File

@ -5857,5 +5857,23 @@
<source>Delete Saved</source> <source>Delete Saved</source>
<translation>Supprimer les valeurs enregistrées</translation> <translation>Supprimer les valeurs enregistrées</translation>
</message> </message>
<message>
<source>An error was encountered while playing this item.</source>
<translation>Une erreur s&apos;est produite lors de la lecture de cet élément.</translation>
<extracomment>Dialog detail when error occurs during playback</extracomment>
</message>
<message>
<source>Save Credentials?</source>
<translation>Enregistrer les informations?</translation>
</message>
<message>
<source>On Now</source>
<translation>En cours</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>
</context> </context>
</TS> </TS>

View File

@ -2605,5 +2605,13 @@
<source>Enabled</source> <source>Enabled</source>
<translation>Pornit</translation> <translation>Pornit</translation>
</message> </message>
<message>
<source>Delete Saved</source>
<translation>Şterge salvările</translation>
</message>
<message>
<source>Save Credentials?</source>
<translation>Salvezi credenţialele?</translation>
</message>
</context> </context>
</TS> </TS>

View File

@ -542,6 +542,9 @@ function CreateVideoPlayerGroup(video_id, mediaSourceId = invalid, audio_stream_
video = VideoPlayer(video_id, mediaSourceId, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), forceTranscoding, showIntro, allowResumeDialog) video = VideoPlayer(video_id, mediaSourceId, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), forceTranscoding, showIntro, allowResumeDialog)
if video = invalid then return invalid if video = invalid then return invalid
video.allowCaptions = true
if video.errorMsg = "introaborted" then return video if video.errorMsg = "introaborted" then return video
video.observeField("selectSubtitlePressed", m.port) video.observeField("selectSubtitlePressed", m.port)
video.observeField("selectPlaybackInfoPressed", m.port) video.observeField("selectPlaybackInfoPressed", m.port)

View File

@ -332,11 +332,15 @@ function PlayIntroVideo(video_id, audio_stream_idx) as boolean
if lcase(introVideos.items[0].name) = "rick roll'd" then return true if lcase(introVideos.items[0].name) = "rick roll'd" then return true
introVideo = VideoPlayer(introVideos.items[0].id, introVideos.items[0].id, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), false, false) introVideo = VideoPlayer(introVideos.items[0].id, introVideos.items[0].id, audio_stream_idx, defaultSubtitleTrackFromVid(video_id), false, false)
if isValid(introVideo)
introVideo.allowCaptions = false
end if
port = CreateObject("roMessagePort") port = CreateObject("roMessagePort")
introVideo.observeField("state", port) introVideo.observeField("state", port)
m.global.sceneManager.callFunc("pushScene", introVideo) m.global.sceneManager.callFunc("pushScene", introVideo)
introPlaying = true introPlaying = true
stopLoadingSpinner()
while introPlaying while introPlaying
msg = wait(0, port) msg = wait(0, port)