Merge branch 'unstable' into Release164
This commit is contained in:
commit
4dbd59c173
2
.github/workflows/auto-close-stale-pr.yml
vendored
2
.github/workflows/auto-close-stale-pr.yml
vendored
|
@ -9,7 +9,7 @@ jobs:
|
|||
permissions:
|
||||
pull-requests: write
|
||||
steps:
|
||||
- uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7
|
||||
- uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8
|
||||
with:
|
||||
days-before-issue-stale: -1
|
||||
days-before-issue-close: -1
|
||||
|
|
2
.github/workflows/build-dev.yml
vendored
2
.github/workflows/build-dev.yml
vendored
|
@ -12,7 +12,7 @@ jobs:
|
|||
dev:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f # v3
|
||||
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
|
||||
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||
with:
|
||||
node-version: "lts/*"
|
||||
|
|
6
.github/workflows/build-prod.yml
vendored
6
.github/workflows/build-prod.yml
vendored
|
@ -13,7 +13,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout master (the latest release)
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
|
||||
with:
|
||||
ref: master
|
||||
- name: Install jq to parse json
|
||||
|
@ -33,7 +33,7 @@ jobs:
|
|||
- name: Save old Makefile version
|
||||
run: awk 'BEGIN { FS=" = " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV
|
||||
- name: Checkout PR branch
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
|
||||
- name: Save new package.json version
|
||||
run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
|
||||
- name: package.json version must be updated
|
||||
|
@ -61,7 +61,7 @@ jobs:
|
|||
prod:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
- uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3 # v3
|
||||
- uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3
|
||||
with:
|
||||
node-version: "lts/*"
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<img src="https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-roku/svg-badge.svg" alt="Translation status" />
|
||||
</a>
|
||||
<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"/>
|
||||
</a>
|
||||
<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
|
||||
|
||||
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>
|
||||
|
||||
|
|
|
@ -70,6 +70,9 @@ sub LoadItems_AddVideoContent(video, mediaSourceId, audio_stream_idx = 1, subtit
|
|||
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
|
||||
if showIntro
|
||||
' Do not play intros when resuming playback
|
||||
|
|
|
@ -30,8 +30,12 @@ sub init()
|
|||
|
||||
m.top.observeField("state", "onState")
|
||||
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.createchildren(9, "LayoutGroup")
|
||||
m.captionTask = createObject("roSGNode", "captionTask")
|
||||
|
@ -129,7 +133,9 @@ end sub
|
|||
|
||||
' When Video Player state changes
|
||||
sub onPositionChanged()
|
||||
m.captionTask.currentPos = Int(m.top.position * 1000)
|
||||
if isValid(m.captionTask)
|
||||
m.captionTask.currentPos = Int(m.top.position * 1000)
|
||||
end if
|
||||
' Check if dialog is open
|
||||
m.dialog = m.top.getScene().findNode("dialogBackground")
|
||||
if not isValid(m.dialog)
|
||||
|
@ -140,7 +146,9 @@ end sub
|
|||
'
|
||||
' When Video Player state changes
|
||||
sub onState(msg)
|
||||
m.captionTask.playerState = m.top.state + m.top.globalCaptionMode
|
||||
if isValid(m.captionTask)
|
||||
m.captionTask.playerState = m.top.state + m.top.globalCaptionMode
|
||||
end if
|
||||
' When buffering, start timer to monitor buffering process
|
||||
if m.top.state = "buffering" and m.bufferCheckTimer <> invalid
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
<field id="transcodeAvailable" type="boolean" value="false" />
|
||||
<field id="retryWithTranscoding" type="boolean" value="false" />
|
||||
<field id="isTranscoded" type="boolean" />
|
||||
<field id="allowCaptions" type="boolean" value="false" />
|
||||
<field id="transcodeReasons" type="array" />
|
||||
|
||||
<field id="videoId" type="string" />
|
||||
|
|
|
@ -28,13 +28,12 @@ end sub
|
|||
|
||||
sub setFont()
|
||||
fs = CreateObject("roFileSystem")
|
||||
fontlist = fs.Find("tmp:/", "font")
|
||||
if fontlist.count() > 0
|
||||
m.font.uri = "tmp:/" + fontlist[0]
|
||||
|
||||
if fs.Exists("tmp:/font")
|
||||
m.font.uri = "tmp:/font"
|
||||
m.font.size = m.fontSize
|
||||
else
|
||||
reg = CreateObject("roFontRegistry")
|
||||
m.font = reg.GetDefaultFont(m.fontSize, false, false)
|
||||
m.font = "font:LargeSystemFont"
|
||||
end if
|
||||
end sub
|
||||
|
||||
|
@ -56,6 +55,7 @@ function newlabel(txt)
|
|||
label = CreateObject("roSGNode", "Label")
|
||||
label.text = txt
|
||||
label.font = m.font
|
||||
label.font.size = m.fontSize
|
||||
label.color = m.textColor
|
||||
label.opacity = m.textOpac
|
||||
return label
|
||||
|
@ -89,7 +89,7 @@ function newRect(lg)
|
|||
end function
|
||||
|
||||
|
||||
sub updateCaption ()
|
||||
sub updateCaption()
|
||||
m.top.currentCaption = []
|
||||
if LCase(m.top.playerState) = "playingon"
|
||||
m.top.currentPos = m.top.currentPos + 100
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -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)
|
||||
|
||||
if video = invalid then return invalid
|
||||
|
||||
video.allowCaptions = true
|
||||
|
||||
if video.errorMsg = "introaborted" then return video
|
||||
video.observeField("selectSubtitlePressed", m.port)
|
||||
video.observeField("selectPlaybackInfoPressed", m.port)
|
||||
|
|
|
@ -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
|
||||
|
||||
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")
|
||||
introVideo.observeField("state", port)
|
||||
m.global.sceneManager.callFunc("pushScene", introVideo)
|
||||
introPlaying = true
|
||||
stopLoadingSpinner()
|
||||
|
||||
while introPlaying
|
||||
msg = wait(0, port)
|
||||
|
|
Loading…
Reference in New Issue
Block a user