Skip to content

Commit 73203fa

Browse files
committed
Merge remote-tracking branch 'upstream/unstable' into multichannel
2 parents 6748b81 + c0a453b commit 73203fa

File tree

406 files changed

+354923
-973
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

406 files changed

+354923
-973
lines changed

.github/release.yml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
changelog:
2+
categories:
3+
- title: 🆕 New Features
4+
labels:
5+
- "new feature"
6+
- title: 🔨 Updated Features
7+
labels:
8+
- "updated feature"
9+
- title: ⚙️ New Settings
10+
labels:
11+
- "new setting"
12+
- title: 🔧 Updated Settings
13+
labels:
14+
- "updated setting"
15+
- title: 🐛 Bug Fixes
16+
labels:
17+
- "bug fix"
18+
- title: 🧹 Code Cleanup
19+
labels:
20+
- "code cleanup"
21+
- title: ⭐ Additional Updates
22+
labels:
23+
- "*"
24+
exclude:
25+
labels:
26+
- dependencies

.github/workflows/auto-close-stale-pr.yml

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ on:
55

66
jobs:
77
stale:
8+
if: github.repository == 'jellyfin/jellyfin-roku'
89
runs-on: ubuntu-latest
910
permissions:
1011
pull-requests: write

.github/workflows/automations.yml

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ on:
1212

1313
jobs:
1414
project:
15+
if: github.repository == 'jellyfin/jellyfin-roku'
1516
name: Project board 📊
1617
runs-on: ubuntu-latest
1718
steps:
@@ -23,6 +24,7 @@ jobs:
2324
column: In progress
2425
repo-token: ${{ secrets.JF_BOT_TOKEN }}
2526
label:
27+
if: github.repository == 'jellyfin/jellyfin-roku'
2628
name: Labeling 🏷️
2729
runs-on: ubuntu-latest
2830
steps:

.github/workflows/build-dev.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ jobs:
1212
dev:
1313
runs-on: ubuntu-latest
1414
steps:
15-
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
16-
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3
15+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
16+
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
1717
with:
1818
node-version: "lts/*"
1919
cache: "npm"

.github/workflows/build-docs.yml

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: build-docs
2+
3+
on:
4+
push:
5+
branches:
6+
- unstable
7+
8+
jobs:
9+
docs:
10+
if: github.repository == 'jellyfin/jellyfin-roku'
11+
runs-on: ubuntu-latest
12+
permissions:
13+
# Give the default GITHUB_TOKEN write permission to commit and push the changed files back to the repository.
14+
contents: write
15+
steps:
16+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
17+
with:
18+
ref: ${{ github.head_ref }}
19+
token: ${{ secrets.JF_BOT_TOKEN }}
20+
- name: Install NPM dependencies
21+
run: npm ci
22+
- name: Build API docs
23+
# TODO: fix jsdoc build errors then remove '|| true' from run command below
24+
run: npm run docs || true
25+
- name: Commit any changes back to the unstable branch
26+
uses: stefanzweifel/git-auto-commit-action@8756aa072ef5b4a080af5dc8fef36c5d586e521d # v5
27+
with:
28+
commit_message: Update API docs
29+
# use jellyfin-bot to commit the changes instead of the default github-actions[bot]
30+
commit_user_name: jellyfin-bot
31+
commit_user_email: [email protected]
32+
# use jellyfin-bot to author the changes instead of the default author of the merge commit
33+
commit_author: jellyfin-bot <[email protected]>

.github/workflows/build-prod.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
runs-on: ubuntu-latest
1414
steps:
1515
- name: Checkout master (the latest release)
16-
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
16+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
1717
with:
1818
ref: master
1919
- name: Install jq to parse json
@@ -33,7 +33,7 @@ jobs:
3333
- name: Save old Makefile version
3434
run: awk 'BEGIN { FS=" = " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV
3535
- name: Checkout PR branch
36-
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
36+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
3737
- name: Save new package.json version
3838
run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
3939
- name: package.json version must be updated
@@ -61,8 +61,8 @@ jobs:
6161
prod:
6262
runs-on: ubuntu-latest
6363
steps:
64-
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
65-
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3
64+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
65+
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
6666
with:
6767
node-version: "lts/*"
6868
cache: "npm"

.github/workflows/deploy-api-docs.yml

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Simple workflow for deploying static content to GitHub Pages
2+
name: deploy-api-docs
3+
4+
on:
5+
push:
6+
branches: ["unstable"]
7+
paths: ["docs/**"] # only run if the docs are updated
8+
9+
# Allows you to run this workflow manually from the Actions tab
10+
workflow_dispatch:
11+
12+
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
13+
permissions:
14+
contents: read
15+
pages: write
16+
id-token: write
17+
18+
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
19+
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
20+
concurrency:
21+
group: "pages"
22+
cancel-in-progress: false
23+
24+
jobs:
25+
deploy:
26+
if: github.repository == 'jellyfin/jellyfin-roku'
27+
environment:
28+
name: github-pages
29+
url: ${{ steps.deployment.outputs.page_url }}
30+
runs-on: ubuntu-latest
31+
steps:
32+
- name: Checkout
33+
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
34+
- name: Setup Pages
35+
uses: actions/configure-pages@f156874f8191504dae5b037505266ed5dda6c382 # v3
36+
- name: Upload artifact
37+
uses: actions/upload-pages-artifact@a753861a5debcf57bf8b404356158c8e1e33150c # v2
38+
with:
39+
# Only upload the api docs folder
40+
path: "docs/api"
41+
- name: Deploy to GitHub Pages
42+
id: deployment
43+
uses: actions/deploy-pages@9dbe3824824f8a1377b8e298bafde1a50ede43e5 # v2

.github/workflows/roku-analysis.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ jobs:
1111
static:
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4
15-
- uses: actions/setup-node@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3
14+
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
15+
- uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
1616
with:
1717
node-version: "lts/*"
1818
cache: "npm"
@@ -27,7 +27,7 @@ jobs:
2727
if: env.BRANCH_NAME == 'master'
2828
run: npm run build-prod
2929
- name: Use Java 17
30-
uses: actions/setup-java@cd89f46ac9d01407894225f350157564c9c7cee2 # v3
30+
uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 # v3
3131
with:
3232
distribution: "temurin"
3333
java-version: "17"

.vscode/extensions.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
// List of extensions which should be recommended for users of this workspace.
55
"recommendations": [
66
"RokuCommunity.brightscript",
7+
"AliceBeckett.brightscriptcomment",
78
"redhat.vscode-xml",
89
"davidanson.vscode-markdownlint"
910
],
1011
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
1112
"unwantedRecommendations": []
12-
}
13+
}

.vscode/settings.json

+20-14
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
{
2-
"files.associations": {
3-
"*.ts": "xml"
4-
},
5-
"[xml]": {
6-
"editor.defaultFormatter": "redhat.vscode-xml"
7-
},
8-
"[markdown]": {
9-
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
10-
},
11-
"xml.format.maxLineWidth": 0,
12-
"editor.formatOnSave": true,
13-
"brightscript.output.hyperlinkFormat": "FilenameAndFunction",
14-
"brightscript.bsdk": "node_modules/brighterscript"
15-
}
2+
"files.associations": {
3+
"*.ts": "xml"
4+
},
5+
"[xml]": {
6+
"editor.defaultFormatter": "redhat.vscode-xml"
7+
},
8+
"[markdown]": {
9+
"editor.defaultFormatter": "DavidAnson.vscode-markdownlint"
10+
},
11+
"xml.format.maxLineWidth": 0,
12+
"editor.formatOnSave": true,
13+
"brightscript.output.hyperlinkFormat": "FilenameAndFunction",
14+
"brightscript.bsdk": "node_modules/brighterscript",
15+
"search.exclude": {
16+
"**/.git": true,
17+
"**/node_modules": true,
18+
"docs/api/**": true
19+
},
20+
"brightscriptcomment.addExtraAtStartAndEnd": false
21+
}

Makefile

+106-20
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,114 @@
1-
2-
#########################################################################
3-
# Makefile Usage:
4-
#
5-
# 1) Make sure that you have the curl command line executable in your path
6-
# 2) Set the variable ROKU_DEV_TARGET in your environment to the IP
7-
# address of your Roku box. (e.g. export ROKU_DEV_TARGET=192.168.1.1.
8-
# Set in your this variable in your shell startup (e.g. .bashrc)
9-
# 3) and set up the ROKU_DEV_PASSWORD environment variable, too
101
##########################################################################
2+
# Need curl and npm in your $PATH
3+
# If you want to get_images, you'll also need convert from ImageMagick
4+
##########################################################################
5+
6+
VERSION := 1.6.6
7+
8+
## usage
9+
10+
.PHONY: help
11+
help:
12+
@echo "targets"
13+
@echo " build-dev build development package"
14+
@echo " build-prod build production package"
15+
@echo " build-tests build tests package"
16+
@echo " format format brighscripts"
17+
@echo " lint lint code and documentation"
18+
@echo " get_images update official jellyfin images"
19+
@echo "targets needing ROKU_DEV_TARGET"
20+
@echo " home press the home button on device"
21+
@echo " launch launch installed"
22+
@echo "targets needing ROKU_DEV_TARGET and ROKU_DEV_PASSWORD"
23+
@echo " install install on device"
24+
@echo " remove remove installed from device"
25+
@echo " screenshot take a screenshot"
26+
@echo " deploy lint, remove, install"
27+
@echo "environment"
28+
@echo " ROKU_DEV_TARGET with device's IP"
29+
@echo " ROKU_DEV_PASSWORD with device's password"
30+
31+
## development
32+
33+
BUILT_PKG := out/$(notdir $(CURDIR)).zip
34+
35+
node_modules/: package-lock.json; npm ci
36+
37+
.PHONY: build-dev build-prod build-tests
38+
.NOTPARALLEL: build-dev build-prod build-tests # output to the same file
39+
build-dev: node_modules/; npm run build
40+
build-prod: node_modules/; npm run build-prod
41+
build-tests: node_modules/; npm run build-tests
42+
43+
# default to build-dev if file doesn't exist
44+
$(BUILT_PKG):; $(MAKE) build-dev
45+
46+
.PHONY: format
47+
format: node_modules/; npm run format
48+
49+
.PHONY: lint
50+
lint: node_modules/; npm run lint
51+
52+
## roku box
53+
54+
CURL_CMD ?= curl --show-error
55+
56+
ifdef ROKU_DEV_TARGET
57+
58+
.PHONY: home launch
59+
home:
60+
$(CURL_CMD) -XPOST http://$(ROKU_DEV_TARGET):8060/keypress/home
61+
sleep 2 # wait for device reaction
62+
launch:
63+
$(CURL_CMD) -XPOST http://$(ROKU_DEV_TARGET):8060/launch/dev
64+
65+
ifdef ROKU_DEV_PASSWORD
66+
67+
CURL_LOGGED_CMD := $(CURL_CMD) --user rokudev:$(ROKU_DEV_PASSWORD) --digest
68+
69+
EXTRACT_ERROR_CMD := grep "<font color" | sed "s/<font color=\"red\">//" | sed "s[</font>[["
70+
.PHONY: install remove
71+
install: $(BUILT_PKG) home
72+
$(CURL_LOGGED_CMD) -F "mysubmit=Install" -F "archive=@$<" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | $(EXTRACT_ERROR_CMD)
73+
$(MAKE) launch
74+
remove:
75+
$(CURL_LOGGED_CMD) -F "mysubmit=Delete" -F "archive=" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | $(EXTRACT_ERROR_CMD)
76+
77+
.PHONY: screenshot
78+
screenshot:
79+
$(CURL_LOGGED_CMD) -o screenshot.jpg "http://$(ROKU_DEV_TARGET)/pkgs/dev.jpg"
80+
81+
.PHONY: deploy
82+
.NOTPARALLEL: deploy
83+
deploy: lint remove install
84+
85+
endif # ROKU_DEV_PASSWORD
1186

12-
APPNAME = Jellyfin_Roku
13-
VERSION = 1.6.6
87+
endif # ROKU_DEV_TARGET
1488

15-
ZIP_EXCLUDE= -x xml/* -x artwork/* -x \*.pkg -x storeassets\* -x keys\* -x \*/.\* -x *.git* -x *.DS* -x *.pkg* -x dist/**\* -x out/**\*
89+
## sync branding
1690

17-
include app.mk
91+
CONVERT_CMD ?= convert -gravity center
92+
CONVERT_BLUEBG_CMD := $(CONVERT_CMD) -background "\#000b25"
93+
BANNER := images/banner-dark.svg
94+
ICON := images/icon-transparent.svg
1895

19-
dev:
20-
$(MAKE) BUILD='dev' package
96+
images/:; mkdir $@
2197

22-
beta:
23-
$(MAKE) BUILD='beta' package
98+
.PHONY: redo # force rerun
99+
$(BANNER) $(ICON): images/ redo
100+
$(CURL_CMD) https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/$(@F) > $@
24101

25-
release:
26-
$(MAKE) BUILD='release' package
102+
images/logo.png: $(BANNER); $(CONVERT_CMD) -background none -scale 1000x48 -extent 180x48 $< $@
103+
images/channel-poster_fhd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 535x400 -extent 540x405 $< $@
104+
images/channel-poster_hd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 275x205 -extent 336x210 $< $@
105+
images/channel-poster_sd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 182x135 -extent 246x140 $< $@
106+
images/splash-screen_fhd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 540x540 -extent 1920x1080 $< $@
107+
images/splash-screen_hd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 360x360 -extent 1280x720 $< $@
108+
images/splash-screen_sd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 240x240 -extent 720x480 $< $@
27109

28-
deploy: prep_staging remove install
110+
.PHONY: get_images
111+
get_images: $(ICON)
112+
get_images: images/logo.png
113+
get_images: images/channel-poster_fhd.png images/channel-poster_hd.png images/channel-poster_sd.png
114+
get_images: images/splash-screen_fhd.jpg images/splash-screen_hd.jpg images/splash-screen_sd.jpg

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
[![Logo Banner](https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/banner-logo-solid.svg?sanitize=true "Jellyfin")](https://jellyfin.org)
55

6+
[![Code Documentation](https://img.shields.io/badge/Code%20Documentation-purple)](https://jellyfin.github.io/jellyfin-roku/)
67
[![Build Status](https://img.shields.io/github/actions/workflow/status/jellyfin/jellyfin-roku/build-dev.yml?logo=github&branch=unstable "Build Status")](https://github.com/jellyfin/jellyfin-roku/actions/workflows/build-dev.yml?query=branch%3Aunstable)
78
[![Current Release](https://img.shields.io/github/release/jellyfin/jellyfin-roku.svg?logo=github "Current Release")](https://github.com/jellyfin/jellyfin-roku/releases)
89
[![Translation Status](https://translate.jellyfin.org/widgets/jellyfin/-/jellyfin-roku/svg-badge.svg "Translation Status")](https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/?utm_source=widget)
@@ -34,7 +35,7 @@ To test the latest features before they get released:
3435
3536
## Advanced
3637

37-
For more advanced deployment methods, access to crash logs, or to learn how to setup a developer environment so you can write some code yourself please read the [DEVGUIDE](DEVGUIDE.md).
38+
For more advanced deployment methods, access to crash logs, or to learn how to setup a developer environment so you can write some code yourself please read the [DEVGUIDE](docs/DEVGUIDE.md).
3839

3940
## Feature Requests
4041

0 commit comments

Comments
 (0)