Merge pull request #1402 from tharvik/fix-makefile
This commit is contained in:
commit
3c37bdd03f
126
Makefile
126
Makefile
|
@ -1,28 +1,114 @@
|
|||
|
||||
#########################################################################
|
||||
# Makefile Usage:
|
||||
#
|
||||
# 1) Make sure that you have the curl command line executable in your path
|
||||
# 2) Set the variable ROKU_DEV_TARGET in your environment to the IP
|
||||
# address of your Roku box. (e.g. export ROKU_DEV_TARGET=192.168.1.1.
|
||||
# Set in your this variable in your shell startup (e.g. .bashrc)
|
||||
# 3) and set up the ROKU_DEV_PASSWORD environment variable, too
|
||||
##########################################################################
|
||||
# Need curl and npm in your $PATH
|
||||
# If you want to get_images, you'll also need convert from ImageMagick
|
||||
##########################################################################
|
||||
|
||||
APPNAME = Jellyfin_Roku
|
||||
VERSION = 1.6.6
|
||||
VERSION := 1.6.6
|
||||
|
||||
ZIP_EXCLUDE= -x xml/* -x artwork/* -x \*.pkg -x storeassets\* -x keys\* -x \*/.\* -x *.git* -x *.DS* -x *.pkg* -x dist/**\* -x out/**\*
|
||||
## usage
|
||||
|
||||
include app.mk
|
||||
.PHONY: help
|
||||
help:
|
||||
@echo "targets"
|
||||
@echo " build-dev build development package"
|
||||
@echo " build-prod build production package"
|
||||
@echo " build-tests build tests package"
|
||||
@echo " format format brighscripts"
|
||||
@echo " lint lint code and documentation"
|
||||
@echo " get_images update official jellyfin images"
|
||||
@echo "targets needing ROKU_DEV_TARGET"
|
||||
@echo " home press the home button on device"
|
||||
@echo " launch launch installed"
|
||||
@echo "targets needing ROKU_DEV_TARGET and ROKU_DEV_PASSWORD"
|
||||
@echo " install install on device"
|
||||
@echo " remove remove installed from device"
|
||||
@echo " screenshot take a screenshot"
|
||||
@echo " deploy lint, remove, install"
|
||||
@echo "environment"
|
||||
@echo " ROKU_DEV_TARGET with device's IP"
|
||||
@echo " ROKU_DEV_PASSWORD with device's password"
|
||||
|
||||
dev:
|
||||
$(MAKE) BUILD='dev' package
|
||||
## development
|
||||
|
||||
beta:
|
||||
$(MAKE) BUILD='beta' package
|
||||
BUILT_PKG := out/$(notdir $(CURDIR)).zip
|
||||
|
||||
release:
|
||||
$(MAKE) BUILD='release' package
|
||||
node_modules/: package-lock.json; npm ci
|
||||
|
||||
deploy: prep_staging remove install
|
||||
.PHONY: build-dev build-prod build-tests
|
||||
.NOTPARALLEL: build-dev build-prod build-tests # output to the same file
|
||||
build-dev: node_modules/; npm run build
|
||||
build-prod: node_modules/; npm run build-prod
|
||||
build-tests: node_modules/; npm run build-tests
|
||||
|
||||
# default to build-dev if file doesn't exist
|
||||
$(BUILT_PKG):; $(MAKE) build-dev
|
||||
|
||||
.PHONY: format
|
||||
format: node_modules/; npm run format
|
||||
|
||||
.PHONY: lint
|
||||
lint: node_modules/; npm run lint
|
||||
|
||||
## roku box
|
||||
|
||||
CURL_CMD ?= curl --show-error
|
||||
|
||||
ifdef ROKU_DEV_TARGET
|
||||
|
||||
.PHONY: home launch
|
||||
home:
|
||||
$(CURL_CMD) -XPOST http://$(ROKU_DEV_TARGET):8060/keypress/home
|
||||
sleep 2 # wait for device reaction
|
||||
launch:
|
||||
$(CURL_CMD) -XPOST http://$(ROKU_DEV_TARGET):8060/launch/dev
|
||||
|
||||
ifdef ROKU_DEV_PASSWORD
|
||||
|
||||
CURL_LOGGED_CMD := $(CURL_CMD) --user rokudev:$(ROKU_DEV_PASSWORD) --digest
|
||||
|
||||
EXTRACT_ERROR_CMD := grep "<font color" | sed "s/<font color=\"red\">//" | sed "s[</font>[["
|
||||
.PHONY: install remove
|
||||
install: $(BUILT_PKG) home
|
||||
$(CURL_LOGGED_CMD) -F "mysubmit=Install" -F "archive=@$<" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | $(EXTRACT_ERROR_CMD)
|
||||
$(MAKE) launch
|
||||
remove:
|
||||
$(CURL_LOGGED_CMD) -F "mysubmit=Delete" -F "archive=" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | $(EXTRACT_ERROR_CMD)
|
||||
|
||||
.PHONY: screenshot
|
||||
screenshot:
|
||||
$(CURL_LOGGED_CMD) -o screenshot.jpg "http://$(ROKU_DEV_TARGET)/pkgs/dev.jpg"
|
||||
|
||||
.PHONY: deploy
|
||||
.NOTPARALLEL: deploy
|
||||
deploy: lint remove install
|
||||
|
||||
endif # ROKU_DEV_PASSWORD
|
||||
|
||||
endif # ROKU_DEV_TARGET
|
||||
|
||||
## sync branding
|
||||
|
||||
CONVERT_CMD ?= convert -gravity center
|
||||
CONVERT_BLUEBG_CMD := $(CONVERT_CMD) -background "\#000b25"
|
||||
BANNER := images/banner-dark.svg
|
||||
ICON := images/icon-transparent.svg
|
||||
|
||||
images/:; mkdir $@
|
||||
|
||||
.PHONY: redo # force rerun
|
||||
$(BANNER) $(ICON): images/ redo
|
||||
$(CURL_CMD) https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG/$(@F) > $@
|
||||
|
||||
images/logo.png: $(BANNER); $(CONVERT_CMD) -background none -scale 1000x48 -extent 180x48 $< $@
|
||||
images/channel-poster_fhd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 535x400 -extent 540x405 $< $@
|
||||
images/channel-poster_hd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 275x205 -extent 336x210 $< $@
|
||||
images/channel-poster_sd.png: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 182x135 -extent 246x140 $< $@
|
||||
images/splash-screen_fhd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 540x540 -extent 1920x1080 $< $@
|
||||
images/splash-screen_hd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 360x360 -extent 1280x720 $< $@
|
||||
images/splash-screen_sd.jpg: $(BANNER); $(CONVERT_BLUEBG_CMD) -scale 240x240 -extent 720x480 $< $@
|
||||
|
||||
.PHONY: get_images
|
||||
get_images: $(ICON)
|
||||
get_images: images/logo.png
|
||||
get_images: images/channel-poster_fhd.png images/channel-poster_hd.png images/channel-poster_sd.png
|
||||
get_images: images/splash-screen_fhd.jpg images/splash-screen_hd.jpg images/splash-screen_sd.jpg
|
||||
|
|
215
app.mk
215
app.mk
|
@ -1,215 +0,0 @@
|
|||
#########################################################################
|
||||
# common include file for application Makefiles
|
||||
#
|
||||
# Makefile Common Usage:
|
||||
# > make
|
||||
# > make install
|
||||
# > make remove
|
||||
#
|
||||
# By default, ZIP_EXCLUDE will exclude -x \*.pkg -x storeassets\* -x keys\* -x .\*
|
||||
# If you define ZIP_EXCLUDE in your Makefile, it will override the default setting.
|
||||
#
|
||||
# To exclude different files from being added to the zipfile during packaging
|
||||
# include a line like this:ZIP_EXCLUDE= -x keys\*
|
||||
# that will exclude any file who's name begins with 'keys'
|
||||
# to exclude using more than one pattern use additional '-x <pattern>' arguments
|
||||
# ZIP_EXCLUDE= -x \*.pkg -x storeassets\*
|
||||
#
|
||||
# Important Notes:
|
||||
# To use the "install" and "remove" targets to install your
|
||||
# application directly from the shell, you must do the following:
|
||||
#
|
||||
# 1) Make sure that you have the curl command line executable in your path
|
||||
# 2) Set the variable ROKU_DEV_TARGET in your environment to the IP
|
||||
# address of your Roku box. (e.g. export ROKU_DEV_TARGET=192.168.1.1.
|
||||
# Set in your this variable in your shell startup (e.g. .bashrc)
|
||||
# 3) Set the variable ROKU_DEV_PASSWORD in your environment for the password
|
||||
# associated with the rokudev account.
|
||||
##########################################################################
|
||||
|
||||
BUILD = dev
|
||||
|
||||
DISTREL = $(shell pwd)/out
|
||||
COMMONREL ?= $(shell pwd)/common
|
||||
SOURCEREL = $(shell pwd)
|
||||
|
||||
ZIPREL = $(DISTREL)/apps
|
||||
STAGINGREL = $(DISTREL)/staging
|
||||
PKGREL = $(DISTREL)/packages
|
||||
|
||||
APPSOURCEDIR = source
|
||||
IMPORTFILES = $(foreach f,$(IMPORTS),$(COMMONREL)/$f.brs)
|
||||
IMPORTCLEANUP = $(foreach f,$(IMPORTS),$(APPSOURCEDIR)/$f.brs)
|
||||
|
||||
GITCOMMIT = $(shell git rev-parse --short HEAD)
|
||||
BUILDDATE = $(shell date -u | awk '{ print $$2,$$3,$$6,$$4 }')
|
||||
|
||||
BRANDING_ROOT = https://raw.githubusercontent.com/jellyfin/jellyfin-ux/master/branding/SVG
|
||||
ICON_SOURCE = icon-transparent.svg
|
||||
BANNER_SOURCE = banner-dark.svg
|
||||
OUTPUT_DIR = ./images
|
||||
|
||||
# Locales supported by Roku
|
||||
SUPPORTED_LOCALES = en_US en_GB fr_CA es_ES de_DE it_IT pt_BR
|
||||
|
||||
ifdef ROKU_DEV_PASSWORD
|
||||
USERPASS = rokudev:$(ROKU_DEV_PASSWORD)
|
||||
else
|
||||
USERPASS = rokudev
|
||||
endif
|
||||
|
||||
ifndef ZIP_EXCLUDE
|
||||
ZIP_EXCLUDE= -x \*.pkg -x storeassets\* -x keys\* -x \*/.\*
|
||||
endif
|
||||
|
||||
HTTPSTATUS = $(shell curl --silent --write-out "\n%{http_code}\n" $(ROKU_DEV_TARGET))
|
||||
|
||||
ifeq "$(HTTPSTATUS)" " 401"
|
||||
CURLCMD = curl -S --tcp-fastopen --connect-timeout 2 --max-time 30 --retry 5
|
||||
else
|
||||
CURLCMD = curl -S --tcp-fastopen --connect-timeout 2 --max-time 30 --retry 5 --user $(USERPASS) --digest
|
||||
endif
|
||||
|
||||
home:
|
||||
@echo "Forcing roku to main menu screen $(ROKU_DEV_TARGET)..."
|
||||
curl -s -S -d '' http://$(ROKU_DEV_TARGET):8060/keypress/home
|
||||
sleep 2
|
||||
|
||||
prep_staging:
|
||||
@echo "*** Preparing Staging Area ***"
|
||||
@echo " >> removing old application zip $(ZIPREL)/$(APPNAME).zip"
|
||||
@if [ -e "$(ZIPREL)/$(APPNAME).zip" ]; \
|
||||
then \
|
||||
rm $(ZIPREL)/$(APPNAME).zip; \
|
||||
fi
|
||||
|
||||
@echo " >> creating destination directory $(ZIPREL)"
|
||||
@if [ ! -d $(ZIPREL) ]; \
|
||||
then \
|
||||
mkdir -p $(ZIPREL); \
|
||||
fi
|
||||
|
||||
@echo " >> setting directory permissions for $(ZIPREL)"
|
||||
@if [ ! -w $(ZIPREL) ]; \
|
||||
then \
|
||||
chmod 755 $(ZIPREL); \
|
||||
fi
|
||||
|
||||
@echo " >> creating destination directory $(STAGINGREL)"
|
||||
@if [ -d $(STAGINGREL) ]; \
|
||||
then \
|
||||
find $(STAGINGREL) -delete; \
|
||||
fi; \
|
||||
mkdir -p $(STAGINGREL); \
|
||||
chmod -R 755 $(STAGINGREL); \
|
||||
|
||||
echo " >> moving application to $(STAGINGREL)"
|
||||
cp $(SOURCEREL)/manifest $(STAGINGREL)/manifest
|
||||
cp -r $(SOURCEREL)/source $(STAGINGREL)
|
||||
cp -r $(SOURCEREL)/components $(STAGINGREL)
|
||||
cp -r $(SOURCEREL)/images $(STAGINGREL)
|
||||
cp -r $(SOURCEREL)/settings $(STAGINGREL)
|
||||
|
||||
# Copy only supported languages over to staging
|
||||
mkdir $(STAGINGREL)/locale
|
||||
cp -r $(foreach f,$(SUPPORTED_LOCALES),$(SOURCEREL)/locale/$f) $(STAGINGREL)/locale
|
||||
|
||||
ifneq ($(BUILD), dev)
|
||||
echo "COPYING $(BUILD)"
|
||||
cp $(SOURCEREL)/resources/branding/$(BUILD)/* $(STAGINGREL)/images
|
||||
endif
|
||||
|
||||
package: prep_staging
|
||||
@echo "*** Creating $(APPNAME).zip ***"
|
||||
@echo " >> copying imports"
|
||||
@if [ "$(IMPORTFILES)" ]; \
|
||||
then \
|
||||
mkdir $(APPSOURCEDIR)/common; \
|
||||
cp -f -p -v $(IMPORTFILES) $(APPSOURCEDIR)/common/; \
|
||||
fi \
|
||||
|
||||
@echo " >> generating build info file"
|
||||
mkdir -p $(STAGINGREL)/$(APPSOURCEDIR)
|
||||
@if [ -e "$(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs" ]; \
|
||||
then \
|
||||
rm $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs; \
|
||||
fi
|
||||
echo " >> generating build info file";\
|
||||
echo "Function BuildDate()" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
echo " return \"${BUILDDATE}\"" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
echo "End Function" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
echo "Function BuildCommit()" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
echo " return \"${GITCOMMIT}\"" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
echo "End Function" >> $(STAGINGREL)/$(APPSOURCEDIR)/buildinfo.brs
|
||||
|
||||
# zip .png files without compression
|
||||
# do not zip up any files ending with '~'
|
||||
@echo " >> creating application zip $(STAGINGREL)/../apps/$(APPNAME)-$(BUILD).zip"
|
||||
@if [ -d $(STAGINGREL) ]; \
|
||||
then \
|
||||
cd $(STAGINGREL); \
|
||||
(zip -0 -r "../apps/$(APPNAME)-$(BUILD).zip" . -i \*.png $(ZIP_EXCLUDE)); \
|
||||
(zip -9 -r "../apps/$(APPNAME)-$(BUILD).zip" . -x \*~ -x \*.png $(ZIP_EXCLUDE)); \
|
||||
cd $(SOURCEREL);\
|
||||
else \
|
||||
echo "Source for $(APPNAME) not found at $(STAGINGREL)"; \
|
||||
fi
|
||||
|
||||
@if [ "$(IMPORTCLEANUP)" ]; \
|
||||
then \
|
||||
echo " >> deleting imports";\
|
||||
rm -r -f $(APPSOURCEDIR)/common; \
|
||||
fi \
|
||||
|
||||
@echo "*** packaging $(APPNAME)-$(BUILD) complete ***"
|
||||
|
||||
prep_commit:
|
||||
npm run format
|
||||
npm ci
|
||||
npm run validate
|
||||
npm run check-formatting
|
||||
|
||||
install: prep_staging package home
|
||||
@echo "Installing $(APPNAME)-$(BUILD) to host $(ROKU_DEV_TARGET)"
|
||||
@$(CURLCMD) --user $(USERPASS) --digest -F "mysubmit=Install" -F "archive=@$(ZIPREL)/$(APPNAME)-$(BUILD).zip" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | grep "<font color" | sed "s/<font color=\"red\">//" | sed "s[</font>[["
|
||||
|
||||
remove:
|
||||
@echo "Removing $(APPNAME) from host $(ROKU_DEV_TARGET)"
|
||||
@if [ "$(HTTPSTATUS)" == " 401" ]; \
|
||||
then \
|
||||
$(CURLCMD) --user $(USERPASS) --digest -F "mysubmit=Delete" -F "archive=" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | grep "<font color" | sed "s/<font color=\"red\">//" | sed "s[</font>[[" ; \
|
||||
else \
|
||||
curl -s -S -F "mysubmit=Delete" -F "archive=" -F "passwd=" http://$(ROKU_DEV_TARGET)/plugin_install | grep "<font color" | sed "s/<font color=\"red\">//" | sed "s[</font>[[" ; \
|
||||
fi
|
||||
|
||||
get_images:
|
||||
@if [ ! -d $(OUTPUT_DIR) ]; \
|
||||
then \
|
||||
mkdir -p $(OUTPUT_DIR); \
|
||||
echo "Creating images folder"; \
|
||||
fi
|
||||
|
||||
echo "Downloading SVG source files from $(BRANDING_ROOT)"
|
||||
@wget $(BRANDING_ROOT)/$(ICON_SOURCE) > /dev/null
|
||||
@wget $(BRANDING_ROOT)/$(BANNER_SOURCE) > /dev/null
|
||||
echo "Finished downloading SVG files"
|
||||
|
||||
echo "Creating image files"
|
||||
@convert -background "#000b25" -gravity center -scale 535x400 -extent 540x405 $(BANNER_SOURCE) $(OUTPUT_DIR)/channel-poster_fhd.png
|
||||
@convert -background "#000b25" -gravity center -scale 275x205 -extent 336x210 $(BANNER_SOURCE) $(OUTPUT_DIR)/channel-poster_hd.png
|
||||
@convert -background "#000b25" -gravity center -scale 182x135 -extent 246x140 $(BANNER_SOURCE) $(OUTPUT_DIR)/channel-poster_sd.png
|
||||
|
||||
@convert -background none -gravity center -scale 1000x48 -extent 180x48 $(BANNER_SOURCE) $(OUTPUT_DIR)/logo.png
|
||||
|
||||
@convert -background "#000b25" -gravity center -scale 540x540 -extent 1920x1080 $(BANNER_SOURCE) $(OUTPUT_DIR)/splash-screen_fhd.jpg
|
||||
@convert -background "#000b25" -gravity center -scale 360x360 -extent 1280x720 $(BANNER_SOURCE) $(OUTPUT_DIR)/splash-screen_hd.jpg
|
||||
@convert -background "#000b25" -gravity center -scale 240x240 -extent 720x480 $(BANNER_SOURCE) $(OUTPUT_DIR)/splash-screen_sd.jpg
|
||||
echo "Finished creating image files"
|
||||
|
||||
screenshot:
|
||||
SCREENSHOT_TIME=`date "+%s"`; \
|
||||
curl -m 1 -o screenshot.jpg --user $(USERPASS) --digest "http://$(ROKU_DEV_TARGET)/pkgs/dev.jpg?time=$$SCREENSHOT_TIME" -H 'Accept: image/png,image/*;q=0.8,*/*;q=0.5' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate'
|
||||
|
||||
|
||||
|
||||
|
|
@ -23,7 +23,6 @@
|
|||
"diagnosticFilters": ["node_modules/**/*", "**/roku_modules/**/*"],
|
||||
"autoImportComponentScript": true,
|
||||
"allowBrighterScriptInBrightScript": true,
|
||||
"createPackage": false,
|
||||
"stagingFolderPath": "build",
|
||||
"plugins": ["rooibos-roku"],
|
||||
"rooibos": {
|
||||
|
|
|
@ -6,6 +6,7 @@ sideload
|
|||
Sideload
|
||||
Reddit
|
||||
DEVGUIDE
|
||||
ImageMagick
|
||||
ing
|
||||
hardcode
|
||||
Hardcoding
|
||||
|
|
119
docs/DEVGUIDE.md
119
docs/DEVGUIDE.md
|
@ -5,25 +5,23 @@ Follow the steps below to install the app on your personal Roku device. This wil
|
|||
- [Dev Guide For The Jellyfin Roku App](#dev-guide-for-the-jellyfin-roku-app)
|
||||
- [Developer Mode](#developer-mode)
|
||||
- [Clone the GitHub Repo](#clone-the-github-repo)
|
||||
- [Install Dependencies](#install-dependencies)
|
||||
- [Method 1: Visual Studio Code](#method-1-visual-studio-code)
|
||||
- [Install VSCode](#install-vscode)
|
||||
- [Usage](#usage)
|
||||
- [Hardcoding Roku Information](#hardcoding-roku-information)
|
||||
- [Method 2: Sideload to Roku Device Manually](#method-2-sideload-to-roku-device-manually)
|
||||
- [Method 3: Direct load to Roku Device](#method-3-direct-load-to-roku-device)
|
||||
- [Login Details](#login-details)
|
||||
- [Install Necessary Packages](#install-necessary-packages)
|
||||
- [Method 2: Command Line](#method-2-command-line)
|
||||
- [Workflow](#workflow)
|
||||
- [Install Command Line Dependencies](#install-command-line-dependencies)
|
||||
- [Deploy](#deploy)
|
||||
- [Bug/Crash Reports](#bugcrash-reports)
|
||||
- [Upgrade](#upgrade)
|
||||
- [Command Line Workflow](#command-line-workflow)
|
||||
- [Bug/Crash Reports](#bugcrash-reports)
|
||||
- [(Optional) Update Images](#optional-update-images)
|
||||
- [Committing](#committing)
|
||||
- [(Optional) Update Images](#optional-update-images)
|
||||
- [Adding a User Setting](#adding-a-user-setting)
|
||||
- [The order of any particular menu is as follows](#the-order-of-any-particular-menu-is-as-follows)
|
||||
- [When giving your setting a name](#when-giving-your-setting-a-name)
|
||||
- [When giving your setting a description](#when-giving-your-setting-a-description)
|
||||
- [**Remember to add all new strings to locale/en\_US/translations.ts**](#remember-to-add-all-new-strings-to-localeen_ustranslationsts)
|
||||
- [**Remember to add all new strings to locale/en_US/translations.ts**](#remember-to-add-all-new-strings-to-localeen_ustranslationsts)
|
||||
|
||||
## Developer Mode
|
||||
|
||||
|
@ -43,7 +41,11 @@ Open up the new folder:
|
|||
cd jellyfin-roku
|
||||
```
|
||||
|
||||
Install Dependencies:
|
||||
## Install Dependencies
|
||||
|
||||
You'll need [`npm`](https://nodejs.org), version 16 at least.
|
||||
|
||||
Then, use it to install dependencies
|
||||
|
||||
```bash
|
||||
npm install
|
||||
|
@ -73,33 +75,36 @@ Out of the box, the BrightScript extension will prompt you to pick a Roku device
|
|||
|
||||
```json
|
||||
{
|
||||
"brightscript.debug.host": "YOUR_ROKU_HOST_HERE",
|
||||
"brightscript.debug.password": "YOUR_ROKU_DEV_PASSWORD_HERE",
|
||||
"brightscript.debug.host": "YOUR_ROKU_HOST_HERE",
|
||||
"brightscript.debug.password": "YOUR_ROKU_DEV_PASSWORD_HERE"
|
||||
}
|
||||
```
|
||||
|
||||
Example:
|
||||
![image](https://user-images.githubusercontent.com/2544493/170485209-0dbe6787-8026-47e7-9095-1df96cda8a0a.png)
|
||||
|
||||
## Method 2: Sideload to Roku Device Manually
|
||||
## Method 2: Command Line
|
||||
|
||||
Install Necessary Packages
|
||||
### Workflow
|
||||
|
||||
```bash
|
||||
sudo apt-get install wget make zip
|
||||
```
|
||||
Modify code -> `make build-dev install` -> Use Roku remote to test changes -> `telnet ${ROKU_DEV_TARGET} 8085` -> `CTRL + ]` -> `quit + ENTER`
|
||||
|
||||
You will need to use telnet to see log statements, warnings, and error reports. You won't always need to telnet into your device but the workflow above is typical when you are new to BrightScript or are working on tricky code.
|
||||
|
||||
### Install Command Line Dependencies
|
||||
|
||||
You'll need [`make`](https://www.gnu.org/software/make) and [`curl`](https://curl.se).
|
||||
|
||||
Build the package
|
||||
|
||||
```bash
|
||||
make dev
|
||||
make build-dev
|
||||
```
|
||||
|
||||
This will create a zip in `out/apps/Jellyfin_Roku-dev.zip`. Login to your Roku's device in your browser and upload the zip file then run install.
|
||||
This will create a zip in `out/jellyfin-roku.zip`, that you can upload on your Roku's device via your browser.
|
||||
Or you can continue with the next steps to do it via the command line.
|
||||
|
||||
## Method 3: Direct load to Roku Device
|
||||
|
||||
### Login Details
|
||||
### Deploy
|
||||
|
||||
Run this command - replacing the IP and password with your Roku device IP and dev password from the first step:
|
||||
|
||||
|
@ -108,16 +113,6 @@ export ROKU_DEV_TARGET=192.168.1.234
|
|||
export ROKU_DEV_PASSWORD=password
|
||||
```
|
||||
|
||||
Normally you would have to open up your browser and upload a .zip file containing the app code. These commands enable the app to be zipped up and installed on the Roku automatically which is essential for developers and makes it easy to upgrade in the future for users.
|
||||
|
||||
### Install Necessary Packages
|
||||
|
||||
```bash
|
||||
sudo apt-get install wget make zip
|
||||
```
|
||||
|
||||
### Deploy
|
||||
|
||||
Package up the application, send it to your Roku, and launch the channel:
|
||||
|
||||
```bash
|
||||
|
@ -126,9 +121,9 @@ make install
|
|||
|
||||
Note: You only have to run this command once if you are not a developer. The Jellyfin channel will still be installed after rebooting your Roku device.
|
||||
|
||||
## Bug/Crash Reports
|
||||
### Bug/Crash Reports
|
||||
|
||||
Did the app crash? Find a nasty bug? Use the this command to view the error log and [report it to the developers](https://github.com/jellyfin/jellyfin-roku/issues):
|
||||
Did the app crash? Find a nasty bug? Use this command to view the error log and [report it to the developers](https://github.com/jellyfin/jellyfin-roku/issues):
|
||||
|
||||
```bash
|
||||
telnet ${ROKU_DEV_TARGET} 8085
|
||||
|
@ -136,51 +131,17 @@ telnet ${ROKU_DEV_TARGET} 8085
|
|||
|
||||
To exit telnet: `CTRL + ]` and then type `quit + ENTER`
|
||||
|
||||
## Upgrade
|
||||
|
||||
Navigate to the folder where you installed the app then upgrade the code to the latest version:
|
||||
You can also take a screenshot of the app to augment the bug report.
|
||||
|
||||
```bash
|
||||
git pull
|
||||
make screenshot
|
||||
```
|
||||
|
||||
Deploy the app:
|
||||
|
||||
```bash
|
||||
make install
|
||||
```
|
||||
|
||||
## Command Line Workflow
|
||||
|
||||
Modify code -> `make install` -> Use Roku remote to test changes -> `telnet ${ROKU_DEV_TARGET} 8085` -> `CTRL + ]` -> `quit + ENTER`
|
||||
|
||||
Unfortunately there is no debugger. You will need to use telnet to see log statements, warnings, and error reports. You won't always need to telnet into your device but the workflow above is typical when you are new to BrightScript or are working on tricky code.
|
||||
|
||||
Install necessary packages:
|
||||
|
||||
```bash
|
||||
sudo apt-get install nodejs npm
|
||||
```
|
||||
|
||||
## Committing
|
||||
|
||||
Before committing your code, please run:
|
||||
|
||||
```bash
|
||||
make prep_commit
|
||||
```
|
||||
|
||||
This will format your code and run the CI checks locally to ensure you will pass the CI tests.
|
||||
|
||||
## (Optional) Update Images
|
||||
### (Optional) Update Images
|
||||
|
||||
This repo already contains all necessary images for the app. This script only needs to be run when the [official Jellyfin images](https://github.com/jellyfin/jellyfin-ux) are changed to allow us to update the repo images.
|
||||
|
||||
Install necessary packages:
|
||||
|
||||
```bash
|
||||
sudo apt-get install imagemagick
|
||||
```
|
||||
You'll need `convert`, from [ImageMagick](https://imagemagick.org)
|
||||
|
||||
Download and convert images:
|
||||
|
||||
|
@ -188,9 +149,19 @@ Download and convert images:
|
|||
make get_images
|
||||
```
|
||||
|
||||
## Committing
|
||||
|
||||
Before committing your code, please run:
|
||||
|
||||
```bash
|
||||
npm run lint
|
||||
```
|
||||
|
||||
And fix any encountered issue.
|
||||
|
||||
## Adding a User Setting
|
||||
|
||||
Your new functionality may need a setting to configure its behavior, or, sometimes, we may ask you to add a setting for your new functionality, so that users may enable or disable it. If you find yourself in this position, please observe the following considerations when adding your new user setting.
|
||||
Your new functionality may need a setting to configure its behavior, or, sometimes, we may ask you to add a setting for your new functionality, so that users may enable or disable it. If you find yourself in this position, please observe the following considerations when adding your new user setting.
|
||||
|
||||
### The order of any particular menu is as follows
|
||||
|
||||
|
@ -200,7 +171,7 @@ Your new functionality may need a setting to configure its behavior, or, sometim
|
|||
|
||||
### When giving your setting a name
|
||||
|
||||
Ideally, your setting will be named with a relevant noun such as ```Cinema Mode``` or ```Codec Support.``` Sometimes there is no such name that is sufficiently specific, such as with ```Clock```. In this case you must use a verb phrase to name your setting, such as ```Hide Clock.``` If your verb phrase _must_ be long to be specific, you may drop implied verbs if absolutely necessary, such as how ```Text Subtitles Only``` drops the implied ```Show.``` Do not use the infinitive form ```action-doing``` or ```doing stuff.``` Instead, use the imperative: ```Do Action``` or ```Do Stuff.``` Remember that _characters are a commodity in names._
|
||||
Ideally, your setting will be named with a relevant noun such as `Cinema Mode` or `Codec Support.` Sometimes there is no such name that is sufficiently specific, such as with `Clock`. In this case you must use a verb phrase to name your setting, such as `Hide Clock.` If your verb phrase _must_ be long to be specific, you may drop implied verbs if absolutely necessary, such as how `Text Subtitles Only` drops the implied `Show.` Do not use the infinitive form `action-doing` or `doing stuff.` Instead, use the imperative: `Do Action` or `Do Stuff.` Remember that _characters are a commodity in names._
|
||||
|
||||
Generally, we should not repeat the name of a setting's parent in the setting's name. Being a child of that parent implies that the settings are related to it.
|
||||
|
||||
|
|
|
@ -34,7 +34,8 @@
|
|||
"check-formatting": "npx bsfmt --check",
|
||||
"docs": "npx rimraf docs/api && jsdoc -c jsdoc.json -d docs/api --readme docs/api-docs-readme.md",
|
||||
"format": "npx bsfmt --write",
|
||||
"lint": "bslint",
|
||||
"lint": "npm run check-formatting && npm run lint-bs && npm run validate && npm run lint-json && npm run lint-markdown && npm run lint-spelling",
|
||||
"lint-bs": "bslint",
|
||||
"lint-json": "jshint --extra-ext .json --verbose --exclude node_modules,scripts,docs ./",
|
||||
"lint-markdown": "markdownlint-cli2 \"**/*.md\" \"#node_modules\"",
|
||||
"lint-spelling": "spellchecker -d dictionary.txt --files \"**/*.md\" \"**/.*/**/*.md\" \"!node_modules/**/*.md\"",
|
||||
|
|
Loading…
Reference in New Issue
Block a user