sub setFields()
+ On this pagecomponents_data_TVEpisodeData.bs
import "pkg:/source/utils/misc.bs"
+
+sub setFields()
+ if not isValid(m.top.json) then return
datum = m.top.json
m.top.id = datum.id
@@ -12,7 +15,7 @@
end sub
sub setPoster()
- if m.top.image <> invalid
+ if isValid(m.top.image)
m.top.posterURL = m.top.image.url
else
m.top.posterURL = ""
diff --git a/docs/api/source_Main.bs.html b/docs/api/source_Main.bs.html
index dae57ac9c..3e36d1639 100644
--- a/docs/api/source_Main.bs.html
+++ b/docs/api/source_Main.bs.html
@@ -234,7 +234,7 @@
end if
seasonMetaData = ItemMetaData(currentScene.seasonData.id)
- currentScene.seasonData = seasonMetaData.json
+ if isValid(seasonMetaData) then currentScene.seasonData = seasonMetaData.json
currentScene.episodeObjects = currentScene.objects
currentScene.callFunc("updateSeason")
end if
From 7625af67cee81170b4c601b1e7fc1cf5932946ac Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 12:12:46 -0400
Subject: [PATCH 13/84] remove release-prep workflow
---
.github/workflows/release-prep.yml | 80 ------------------------------
1 file changed, 80 deletions(-)
delete mode 100644 .github/workflows/release-prep.yml
diff --git a/.github/workflows/release-prep.yml b/.github/workflows/release-prep.yml
deleted file mode 100644
index 35619c328..000000000
--- a/.github/workflows/release-prep.yml
+++ /dev/null
@@ -1,80 +0,0 @@
-# All of the jobs in this workflow will only run if the PR that triggered it has a 'release-prep' label
-name: release-prep
-
-on:
- pull_request:
- types: [labeled, opened, reopened, synchronize]
-
-jobs:
- version-check:
- if: ${{ contains(github.event.pull_request.labels.*.name, 'release-prep') }}
- runs-on: ubuntu-latest
- steps:
- - name: DEBUG ${{ github.event.pull_request.base.ref }}
- run: echo ${{ github.event.pull_request.base.ref }}
- - name: Checkout the branch this PR wants to update
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
- with:
- ref: ${{ github.event.pull_request.base.ref }}
- - name: Install jq to parse json
- uses: awalsh128/cache-apt-pkgs-action@latest
- with:
- packages: jq
- - name: Save old package.json version
- run: echo "oldPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
- - name: Find and save old major_version from manifest
- run: awk 'BEGIN { FS="=" } /^major_version/ { print "oldMajor="$2; }' manifest >> $GITHUB_ENV
- - name: Find and save old minor_version from manifest
- run: awk 'BEGIN { FS="=" } /^minor_version/ { print "oldMinor="$2; }' manifest >> $GITHUB_ENV
- - name: Find and save old build_version from manifest
- run: awk 'BEGIN { FS="=" } /^build_version/ { print "oldBuild="$2; }' manifest >> $GITHUB_ENV
- - name: Save old manifest version
- run: echo "oldManVersion=${{ env.oldMajor }}.${{ env.oldMinor }}.${{ env.oldBuild }}" >> $GITHUB_ENV
- - name: Save old Makefile version
- run: awk 'BEGIN { FS=" := " } /^VERSION/ { print "oldMakeVersion="$2; }' Makefile >> $GITHUB_ENV
- - name: Checkout PR branch
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
- - name: Save new package.json version
- run: echo "newPackVersion=$(jq -r ".version" package.json)" >> $GITHUB_ENV
- - name: package.json version must be updated
- if: env.oldPackVersion == env.newPackVersion
- run: exit 1
- - name: Find and save new major_version from manifest
- run: awk 'BEGIN { FS="=" } /^major_version/ { print "newMajor="$2; }' manifest >> $GITHUB_ENV
- - name: Find and save new minor_version from manifest
- run: awk 'BEGIN { FS="=" } /^minor_version/ { print "newMinor="$2; }' manifest >> $GITHUB_ENV
- - name: Find and save new build_version from manifest
- run: awk 'BEGIN { FS="=" } /^build_version/ { print "newBuild="$2; }' manifest >> $GITHUB_ENV
- - name: Save new manifest version
- run: echo "newManVersion=${{ env.newMajor }}.${{ env.newMinor }}.${{ env.newBuild }}" >> $GITHUB_ENV
- - name: Manifest version must be updated
- if: env.oldManVersion == env.newManVersion
- run: exit 1
- - name: Save new Makefile version
- run: awk 'BEGIN { FS=" := " } /^VERSION/ { print "newMakeVersion="$2; }' Makefile >> $GITHUB_ENV
- - name: Makefile version must be updated
- if: env.oldMakeVersion == env.newMakeVersion
- run: exit 1
- - name: All new versions must match
- if: (env.newManVersion != env.newPackVersion) || (env.newManVersion != env.newMakeVersion)
- run: exit 1
- build-prod:
- if: ${{ contains(github.event.pull_request.labels.*.name, 'release-prep') }}
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
- - uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4
- with:
- node-version: "lts/*"
- cache: "npm"
- - name: NPM install
- run: npm ci
- - name: Install roku module dependencies
- run: npm run ropm
- - name: Build app for production
- run: npm run build-prod
- - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4
- with:
- name: Jellyfin-Roku-v${{ env.newManVersion }}-${{ github.sha }}
- path: ${{ github.workspace }}/build/staging
- if-no-files-found: error
From ead8b5fa3f965bff23e4e223c1b953e0544a2fee Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 19:59:16 -0400
Subject: [PATCH 14/84] only run each job once when triggered by a PR's push
---
.github/workflows/automations.yml | 6 ++++--
.github/workflows/build-dev.yml | 2 ++
.github/workflows/roku-analysis.yml | 2 ++
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/automations.yml b/.github/workflows/automations.yml
index a29a73f4d..3f167cb54 100644
--- a/.github/workflows/automations.yml
+++ b/.github/workflows/automations.yml
@@ -10,7 +10,8 @@ on:
jobs:
project:
- if: github.repository == 'jellyfin/jellyfin-roku'
+ # don't run job on forks and prevent job from running twice when a PR pushes a new commit
+ if: github.repository == 'jellyfin/jellyfin-roku' && github.event_name != 'pull_request' || github.repository == 'jellyfin/jellyfin-roku' && github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
name: Project board 📊
runs-on: ubuntu-latest
steps:
@@ -22,7 +23,8 @@ jobs:
column: In progress
repo-token: ${{ secrets.JF_BOT_TOKEN }}
label:
- if: github.repository == 'jellyfin/jellyfin-roku'
+ # don't run job on forks and prevent job from running twice when a PR pushes a new commit
+ if: github.repository == 'jellyfin/jellyfin-roku' && github.event_name != 'pull_request' || github.repository == 'jellyfin/jellyfin-roku' && github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
name: Labeling 🏷️
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml
index 7dd170e12..723522b6d 100644
--- a/.github/workflows/build-dev.yml
+++ b/.github/workflows/build-dev.yml
@@ -6,6 +6,8 @@ on:
jobs:
dev:
+ # prevent job from running twice when a PR pushes a new commit
+ if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
diff --git a/.github/workflows/roku-analysis.yml b/.github/workflows/roku-analysis.yml
index 2bac16036..0d39269db 100644
--- a/.github/workflows/roku-analysis.yml
+++ b/.github/workflows/roku-analysis.yml
@@ -9,6 +9,8 @@ env:
jobs:
static:
+ # don't run job on forks and prevent job from running twice when a PR pushes a new commit
+ if: github.repository == 'jellyfin/jellyfin-roku' && github.event_name != 'pull_request' || github.repository == 'jellyfin/jellyfin-roku' && github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
From 3fe6b2756eb159e8fc6ac66c443b481d3bd3fab2 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 21:39:56 -0400
Subject: [PATCH 15/84] don't run roku static analysis on push
---
.github/workflows/roku-analysis.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/roku-analysis.yml b/.github/workflows/roku-analysis.yml
index 2bac16036..e16b8546f 100644
--- a/.github/workflows/roku-analysis.yml
+++ b/.github/workflows/roku-analysis.yml
@@ -2,7 +2,6 @@ name: roku-analysis
on:
pull_request:
- push:
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
From d6d1c528562114d6075d344c93bf4775ef113c2a Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 21:57:11 -0400
Subject: [PATCH 16/84] add info about how the bump version PR was created
---
.github/workflows/bump-version.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml
index 5670dc7de..1b64af00a 100644
--- a/.github/workflows/bump-version.yml
+++ b/.github/workflows/bump-version.yml
@@ -94,7 +94,7 @@ jobs:
git add .
git commit -m "Bump ${{ github.event.inputs.versionType }} version"
git push --set-upstream origin "${{ env.newBranch }}"
- gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }}
+ gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release. Generated by `.github/workflows/bump-version.yml`" --label ignore-changelog --base ${{ env.targetBranch }}
minor:
if: ${{ github.event.inputs.versionType == 'minor' }}
runs-on: ubuntu-latest
@@ -161,7 +161,7 @@ jobs:
git add .
git commit -m "Bump ${{ github.event.inputs.versionType }} version"
git push --set-upstream origin "${{ env.newBranch }}"
- gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }}
+ gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release. Generated by `.github/workflows/bump-version.yml`" --label ignore-changelog --base ${{ env.targetBranch }}
major:
if: ${{ github.event.inputs.versionType == 'major' }}
@@ -231,5 +231,5 @@ jobs:
git add .
git commit -m "Bump ${{ github.event.inputs.versionType }} version"
git push --set-upstream origin "${{ env.newBranch }}"
- gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release." --label ignore-changelog --base ${{ env.targetBranch }}
+ gh pr create --title "Bump ${{ github.event.inputs.targetBranch }} branch to ${{ env.newVersion }}" --body "Bump version to prep for next release. Generated by `.github/workflows/bump-version.yml`" --label ignore-changelog --base ${{ env.targetBranch }}
\ No newline at end of file
From 472eee6a1db4276789f6f6e999a545b34a072e8d Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 22:33:04 -0400
Subject: [PATCH 17/84] split up lint jobs into seperate workflows and only run
them when needed
---
.github/workflows/lint-brightscript.yml | 20 +++++
.github/workflows/lint-json.yml | 23 ++++++
.github/workflows/lint-markdown.yml | 23 ++++++
.github/workflows/lint-spelling.yml | 22 ++++++
.github/workflows/lint-translation-files.yml | 25 ++++++
.github/workflows/lint.yml | 81 --------------------
6 files changed, 113 insertions(+), 81 deletions(-)
create mode 100644 .github/workflows/lint-brightscript.yml
create mode 100644 .github/workflows/lint-json.yml
create mode 100644 .github/workflows/lint-markdown.yml
create mode 100644 .github/workflows/lint-spelling.yml
create mode 100644 .github/workflows/lint-translation-files.yml
delete mode 100644 .github/workflows/lint.yml
diff --git a/.github/workflows/lint-brightscript.yml b/.github/workflows/lint-brightscript.yml
new file mode 100644
index 000000000..560bfd8be
--- /dev/null
+++ b/.github/workflows/lint-brightscript.yml
@@ -0,0 +1,20 @@
+name: lint-brightscript
+on:
+ pull_request:
+ paths:
+ - "**/*.brs"
+ - "**/*.bs"
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - uses: actions/setup-node@master
+ with:
+ node-version: "lts/*"
+ cache: "npm"
+ - run: npm ci
+ - run: npx ropm install
+ - run: npm run validate
+ - run: npm run check-formatting
diff --git a/.github/workflows/lint-json.yml b/.github/workflows/lint-json.yml
new file mode 100644
index 000000000..a5b9f9080
--- /dev/null
+++ b/.github/workflows/lint-json.yml
@@ -0,0 +1,23 @@
+name: lint-json
+on:
+ pull_request:
+ paths:
+ - "!docs/api/**"
+ - "**/*.json"
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone github repo
+ uses: actions/checkout@master
+ - uses: actions/setup-node@master
+ with:
+ node-version: "lts/*"
+ cache: "npm"
+ - name: Install npm dependencies
+ run: npm ci
+ - name: Install roku package dependencies
+ run: npx ropm install
+ - name: Validate JSON syntax
+ run: npm run lint-json
\ No newline at end of file
diff --git a/.github/workflows/lint-markdown.yml b/.github/workflows/lint-markdown.yml
new file mode 100644
index 000000000..a3a0f1a28
--- /dev/null
+++ b/.github/workflows/lint-markdown.yml
@@ -0,0 +1,23 @@
+name: lint-markdown
+on:
+ pull_request:
+ paths:
+ - "**/*.md"
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone github repo
+ uses: actions/checkout@master
+ - uses: actions/setup-node@master
+ with:
+ node-version: "lts/*"
+ cache: "npm"
+ - name: Install npm dependencies
+ run: npm ci
+ - name: Install roku package dependencies
+ run: npx ropm install
+ - uses: xt0rted/markdownlint-problem-matcher@1a5fabfb577370cfdf5af944d418e4be3ea06f27 # v3
+ - name: Lint markdown files
+ run: npm run lint-markdown
diff --git a/.github/workflows/lint-spelling.yml b/.github/workflows/lint-spelling.yml
new file mode 100644
index 000000000..55ba8b169
--- /dev/null
+++ b/.github/workflows/lint-spelling.yml
@@ -0,0 +1,22 @@
+name: lint-brightscript
+on:
+ pull_request:
+ paths:
+ - "**/*.md"
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone github repo
+ uses: actions/checkout@master
+ - uses: actions/setup-node@master
+ with:
+ node-version: "lts/*"
+ cache: "npm"
+ - name: Install npm dependencies
+ run: npm ci
+ - name: Install roku package dependencies
+ run: npx ropm install
+ - name: Check markdown files for spelling errors
+ run: npm run lint-spelling
diff --git a/.github/workflows/lint-translation-files.yml b/.github/workflows/lint-translation-files.yml
new file mode 100644
index 000000000..011547e4c
--- /dev/null
+++ b/.github/workflows/lint-translation-files.yml
@@ -0,0 +1,25 @@
+name: lint-translation-files
+on:
+ pull_request:
+ paths:
+ - "locale/*/*.ts"
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Clone github repo
+ uses: actions/checkout@master
+ - name: Install xmllint and xmlstarlet using apt (from cache)
+ uses: awalsh128/cache-apt-pkgs-action@latest
+ with:
+ packages: libxml2-utils xmlstarlet
+ - name: Validate XML syntax
+ run: xmllint --noout ./locale/en_US/translations.ts
+ - name: Save output of duplicate check
+ run: echo "tsDuplicates=$(xmlstarlet sel -t -m '/TS/context/message/source' -c '.' -nl ./locale/en_US/translations.ts | sort | uniq -d | awk '{ printf "%s", $0 }')" >> $GITHUB_ENV
+ - name: Check for duplicates
+ run: xmlstarlet sel -t -m '/TS/context/message/source' -f -o ' ' -c '.' -nl ./locale/en_US/translations.ts | sort | uniq -d
+ - name: Duplicates found
+ if: env.tsDuplicates != ''
+ run: exit 1
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
deleted file mode 100644
index a46dfa9d8..000000000
--- a/.github/workflows/lint.yml
+++ /dev/null
@@ -1,81 +0,0 @@
-name: lint
-on:
- pull_request:
-
-jobs:
- brightscript:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@master
- - uses: actions/setup-node@master
- with:
- node-version: "lts/*"
- cache: "npm"
- - run: npm ci
- - run: npx ropm install
- - run: npm run validate
- - run: npm run check-formatting
- translation-files:
- runs-on: ubuntu-latest
- steps:
- - name: Clone github repo
- uses: actions/checkout@master
- - name: Install xmllint and xmlstarlet using apt (from cache)
- uses: awalsh128/cache-apt-pkgs-action@latest
- with:
- packages: libxml2-utils xmlstarlet
- - name: Validate XML syntax
- run: xmllint --noout ./locale/en_US/translations.ts
- - name: Save output of duplicate check
- run: echo "tsDuplicates=$(xmlstarlet sel -t -m '/TS/context/message/source' -c '.' -nl ./locale/en_US/translations.ts | sort | uniq -d | awk '{ printf "%s", $0 }')" >> $GITHUB_ENV
- - name: Check for duplicates
- run: xmlstarlet sel -t -m '/TS/context/message/source' -f -o ' ' -c '.' -nl ./locale/en_US/translations.ts | sort | uniq -d
- - name: Duplicates found
- if: env.tsDuplicates != ''
- run: exit 1
- json:
- runs-on: ubuntu-latest
- steps:
- - name: Clone github repo
- uses: actions/checkout@master
- - uses: actions/setup-node@master
- with:
- node-version: "lts/*"
- cache: "npm"
- - name: Install npm dependencies
- run: npm ci
- - name: Install roku package dependencies
- run: npx ropm install
- - name: Validate JSON syntax
- run: npm run lint-json
- markdown:
- runs-on: ubuntu-latest
- steps:
- - name: Clone github repo
- uses: actions/checkout@master
- - uses: actions/setup-node@master
- with:
- node-version: "lts/*"
- cache: "npm"
- - name: Install npm dependencies
- run: npm ci
- - name: Install roku package dependencies
- run: npx ropm install
- - uses: xt0rted/markdownlint-problem-matcher@1a5fabfb577370cfdf5af944d418e4be3ea06f27 # v3
- - name: Lint markdown files
- run: npm run lint-markdown
- spelling:
- runs-on: ubuntu-latest
- steps:
- - name: Clone github repo
- uses: actions/checkout@master
- - uses: actions/setup-node@master
- with:
- node-version: "lts/*"
- cache: "npm"
- - name: Install npm dependencies
- run: npm ci
- - name: Install roku package dependencies
- run: npx ropm install
- - name: Check markdown files for spelling errors
- run: npm run lint-spelling
From b7654a77aa534d0b29c6fb6f2b86ee17809e1214 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 22:53:40 -0400
Subject: [PATCH 18/84] increase days until stale to 30 and days to close to 15
---
.github/workflows/auto-close-stale-pr.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/auto-close-stale-pr.yml b/.github/workflows/auto-close-stale-pr.yml
index 5cdd7447f..00892eec5 100644
--- a/.github/workflows/auto-close-stale-pr.yml
+++ b/.github/workflows/auto-close-stale-pr.yml
@@ -15,9 +15,9 @@ jobs:
days-before-issue-stale: -1
days-before-issue-close: -1
stale-pr-label: stale
- stale-pr-message: "This pull request has been inactive for 21 days and will be automatically closed in 7 days if there is no further activity."
- close-pr-message: "This pull request has been closed because it has been inactive for 28 days. You may submit a new pull request if desired."
- days-before-pr-stale: 21
- days-before-pr-close: 7
+ stale-pr-message: "This pull request has been inactive for 30 days and will be automatically closed in 15 days if there is no further activity."
+ close-pr-message: "This pull request has been closed because it has been inactive for 45 days. You may submit a new pull request if desired."
+ days-before-pr-stale: 30
+ days-before-pr-close: 15
exempt-draft-pr: true
repo-token: ${{ secrets.JF_BOT_TOKEN }}
From 50c6f8047440690be72a3c87962d2e5ef3517dd5 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Mon, 22 Jul 2024 23:13:13 -0400
Subject: [PATCH 19/84] update name
---
.github/workflows/lint-spelling.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/lint-spelling.yml b/.github/workflows/lint-spelling.yml
index 55ba8b169..c2c9b8545 100644
--- a/.github/workflows/lint-spelling.yml
+++ b/.github/workflows/lint-spelling.yml
@@ -1,4 +1,4 @@
-name: lint-brightscript
+name: lint-spelling
on:
pull_request:
paths:
From 984e8f97f9d216b70554dc352793921d622e54aa Mon Sep 17 00:00:00 2001
From: Justin
Date: Tue, 23 Jul 2024 07:59:53 +0000
Subject: [PATCH 20/84] Translated using Weblate (German)
Currently translated at 99.2% (281 of 283 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/de/
---
locale/de_DE/translations.ts | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/locale/de_DE/translations.ts b/locale/de_DE/translations.ts
index e894ee760..7b940a3d0 100644
--- a/locale/de_DE/translations.ts
+++ b/locale/de_DE/translations.ts
@@ -1288,6 +1288,16 @@
Die Quelldatei ist mit diesem Client vollständig kompatibel und die Sitzung empfängt die Datei ohne Änderungen.
Direct play info box text in GetPlaybackInfoTask.brs
+
+
+ Willkommen bei der Version
+ WhatsNewDialog title - Welcome to version 2.0.0
+
+
+
+ Eine vollständige Liste der Änderungen findest du unter
+ WhatsNewDialog body text preceding the changelog URL
+
From bc7c64d01b2d2882988a4e1cb560168cfca98bea Mon Sep 17 00:00:00 2001
From: Andi Chandler
Date: Tue, 23 Jul 2024 21:27:13 +0000
Subject: [PATCH 21/84] Translated using Weblate (English (United Kingdom))
Currently translated at 100.0% (283 of 283 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/en_GB/
---
locale/en_GB/translations.ts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/locale/en_GB/translations.ts b/locale/en_GB/translations.ts
index aac600fa1..08ccb70d4 100644
--- a/locale/en_GB/translations.ts
+++ b/locale/en_GB/translations.ts
@@ -1264,6 +1264,26 @@
Ratings for how good a movie is
User Setting - Setting description
+
+
+ Rewatching Next Up
+ User Setting - Setting title
+
+
+
+ Welcome to version
+ WhatsNewDialog title - Welcome to version 2.0.0
+
+
+
+ To view a complete list of changes visit
+ WhatsNewDialog body text preceding the changelog URL
+
+
+
+ Show already watched episodes in 'Next Up' sections.
+ User Setting - Setting description
+
From 5557c9de4ba618a9ecfe81aa25c78c2d60d96fd8 Mon Sep 17 00:00:00 2001
From: Justin
Date: Wed, 24 Jul 2024 14:43:33 +0000
Subject: [PATCH 22/84] Translated using Weblate (German)
Currently translated at 100.0% (283 of 283 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/de/
---
locale/de_DE/translations.ts | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/locale/de_DE/translations.ts b/locale/de_DE/translations.ts
index 7b940a3d0..9beaa0edb 100644
--- a/locale/de_DE/translations.ts
+++ b/locale/de_DE/translations.ts
@@ -1298,6 +1298,16 @@
Eine vollständige Liste der Änderungen findest du unter
WhatsNewDialog body text preceding the changelog URL
+
+
+ Als nächstes noch einmal ansehen
+ User Setting - Setting title
+
+
+
+ Zeige bereits gesehene Episoden in der Rubrik 'Nächste Folge' an.
+ User Setting - Setting description
+
From ff590f665b741d9f2216e9b21fe8b082f72bf231 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 24 Jul 2024 19:16:29 +0000
Subject: [PATCH 23/84] Update dependency brighterscript to v0.67.4
---
package-lock.json | 10 +++++-----
package.json | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 587e92c34..9a1f822ac 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
},
"devDependencies": {
"@rokucommunity/bslint": "0.8.21",
- "brighterscript": "0.67.3",
+ "brighterscript": "0.67.4",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
"jsdoc": "4.0.3",
@@ -848,9 +848,9 @@
}
},
"node_modules/brighterscript": {
- "version": "0.67.3",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.3.tgz",
- "integrity": "sha512-uuAIvDmIENA+HdeuRiC1KM+n250m0J9k0Cdiwpby4cBZiFAHRkYoynEqmL8kwAaPtxdXI5RcZU4JqInCd1avlA==",
+ "version": "0.67.4",
+ "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.4.tgz",
+ "integrity": "sha512-1EbX2Po9WbIyi4r557fk6txkYR0VvbnGm1caS9AVlVek2R6d9+QsQxr+f24PePM4l/TOBvZ1JieBt6NheM4P2Q==",
"license": "MIT",
"dependencies": {
"@rokucommunity/bslib": "^0.1.1",
@@ -876,7 +876,7 @@
"parse-ms": "^2.1.0",
"readline": "^1.3.0",
"require-relative": "^0.8.7",
- "roku-deploy": "^3.12.0",
+ "roku-deploy": "^3.12.1",
"serialize-error": "^7.0.1",
"source-map": "^0.7.4",
"vscode-languageserver": "^9.0.1",
diff --git a/package.json b/package.json
index 31dbc4e5b..67cf2e850 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
},
"devDependencies": {
"@rokucommunity/bslint": "0.8.21",
- "brighterscript": "0.67.3",
+ "brighterscript": "0.67.4",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
"jsdoc": "4.0.3",
From c489ce9df8f1114014ae6ae6634230e32bff3e4f Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 24 Jul 2024 22:57:11 +0000
Subject: [PATCH 24/84] Update dependency @rokucommunity/bslint to v0.8.22
---
package-lock.json | 8 ++++----
package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 9a1f822ac..5fe0576c8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"log": "npm:roku-log@0.11.1"
},
"devDependencies": {
- "@rokucommunity/bslint": "0.8.21",
+ "@rokucommunity/bslint": "0.8.22",
"brighterscript": "0.67.4",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
@@ -315,9 +315,9 @@
"integrity": "sha512-2ox6EUL+UTtccTbD4dbVjZK3QHa0PHCqpoKMF8lZz9ayzzEP3iVPF8KZR6hOi6bxsIcbGXVjqmtCVkpC4P9SrA=="
},
"node_modules/@rokucommunity/bslint": {
- "version": "0.8.21",
- "resolved": "https://registry.npmjs.org/@rokucommunity/bslint/-/bslint-0.8.21.tgz",
- "integrity": "sha512-gPLddRR/MKoyKoy4sNo/q7HgWrn9AquV9XC66+SwtiepMThjltNk59teJFfX5D0/jqrDnmY/XuXoOLXhvLp/Eg==",
+ "version": "0.8.22",
+ "resolved": "https://registry.npmjs.org/@rokucommunity/bslint/-/bslint-0.8.22.tgz",
+ "integrity": "sha512-ulHGouWoIUuJ7lMRpTGWGjM9lcI/9tfas4hrXifDePZfga65DsBvnDh1aLgHp79X1SUtpV/QpWR3ymKCwlG0Yw==",
"dev": true,
"license": "MIT",
"dependencies": {
diff --git a/package.json b/package.json
index 67cf2e850..e12f7de9a 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"log": "npm:roku-log@0.11.1"
},
"devDependencies": {
- "@rokucommunity/bslint": "0.8.21",
+ "@rokucommunity/bslint": "0.8.22",
"brighterscript": "0.67.4",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
From 724dd62da392d9b5d012d59d6f2b449362367d80 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 24 Jul 2024 22:57:22 +0000
Subject: [PATCH 25/84] Update dependency brighterscript-formatter to v1.7.4
---
package-lock.json | 10 +++++-----
package.json | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 9a1f822ac..9a7108f02 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"license": "GPL-2.0",
"dependencies": {
"@rokucommunity/bslib": "0.1.1",
- "brighterscript-formatter": "1.7.3",
+ "brighterscript-formatter": "1.7.4",
"log": "npm:roku-log@0.11.1"
},
"devDependencies": {
@@ -892,12 +892,12 @@
}
},
"node_modules/brighterscript-formatter": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/brighterscript-formatter/-/brighterscript-formatter-1.7.3.tgz",
- "integrity": "sha512-UkxUcqlOvwdkFCel0lsHFmOk0qtb+bK9emIWtGLHW9s6/K8RA+yLEdcGKLqGwgrcnnuK2famP+V718yIvk1Sug==",
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/brighterscript-formatter/-/brighterscript-formatter-1.7.4.tgz",
+ "integrity": "sha512-a9RWMbCADBHLwaVirf5NuXPxZaRSraSf3Zm8/ecf5qx51gEU4DbwqpLE+d4ncnHn2/Y5M3mf0fJeQGfWlqo6Kg==",
"license": "MIT",
"dependencies": {
- "brighterscript": "^0.67.2",
+ "brighterscript": "^0.67.4",
"glob-all": "^3.3.0",
"jsonc-parser": "^3.0.0",
"source-map": "^0.7.3",
diff --git a/package.json b/package.json
index 67cf2e850..0d3863948 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"description": "Roku app for Jellyfin media server",
"dependencies": {
"@rokucommunity/bslib": "0.1.1",
- "brighterscript-formatter": "1.7.3",
+ "brighterscript-formatter": "1.7.4",
"log": "npm:roku-log@0.11.1"
},
"devDependencies": {
From 45144567f34d65c14281f27a8fa277615a16b0e2 Mon Sep 17 00:00:00 2001
From: Jimi
Date: Wed, 24 Jul 2024 18:38:41 -0600
Subject: [PATCH 26/84] Crash plus options observation
---
components/ItemGrid/ItemGrid.bs | 10 +---------
components/data/HomeData.bs | 4 ++--
source/Main.bs | 3 +++
3 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/components/ItemGrid/ItemGrid.bs b/components/ItemGrid/ItemGrid.bs
index 1cdeed3dd..1967ec9e7 100644
--- a/components/ItemGrid/ItemGrid.bs
+++ b/components/ItemGrid/ItemGrid.bs
@@ -366,12 +366,6 @@ sub setPhotoAlbumOptions(options)
options.filter = []
end sub
-sub setupViewAllNextUpOptions(options)
- options.views = []
- options.sort = []
- options.filter = []
-end sub
-
' Set Default view, sort, and filter options
sub setDefaultOptions(options)
options.views = [
@@ -417,8 +411,6 @@ sub SetUpOptions()
setPhotoAlbumOptions(options)
else if getCollectionType() = "music"
setMusicOptions(options)
- else if getCollectionType() = "nextup"
- setupViewAllNextUpOptions(options)
else
setDefaultOptions(options)
end if
@@ -802,7 +794,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
searchGrp.setFocus(false)
end if
- if key = "options"
+ if key = "options" and getCollectionType() <> "nextup"
if m.options.visible = true
m.options.visible = false
m.top.removeChild(m.options)
diff --git a/components/data/HomeData.bs b/components/data/HomeData.bs
index 996c24460..01b00be21 100644
--- a/components/data/HomeData.bs
+++ b/components/data/HomeData.bs
@@ -27,9 +27,9 @@ sub setData()
end if
' Add Icon URLs for display if there is no Poster
- if LCase(datum.CollectionType) = "livetv"
+ if LCase(m.top.CollectionType) = "livetv"
m.top.iconUrl = "pkg:/images/media_type_icons/live_tv_white.png"
- else if LCase(datum.CollectionType) = "folders" or LCase(datum.CollectionType) = "nextup"
+ else if LCase(m.top.CollectionType) = "folders" or LCase(m.top.CollectionType) = "nextup"
m.top.iconUrl = "pkg:/images/media_type_icons/folder_white.png"
end if
diff --git a/source/Main.bs b/source/Main.bs
index 814d1dff7..14e25f93b 100644
--- a/source/Main.bs
+++ b/source/Main.bs
@@ -268,6 +268,9 @@ sub Main (args as dynamic) as void
group = CreateMovieLibraryView(selectedItem)
else if selectedItem.collectionType = "music"
group = CreateMusicLibraryView(selectedItem)
+ else if selectedItem.collectionType = "nextup"
+ group = CreateItemGrid(selectedItem)
+ group.optionsAvailable = false
else
group = CreateItemGrid(selectedItem)
end if
From 376aa94ed472a5b714203a58dd42c9250fd14adb Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Thu, 25 Jul 2024 21:49:09 -0400
Subject: [PATCH 27/84] add vscode debug launch option to deploy already built
app from staging dir
---
.vscode/launch.json | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 482f3d164..59566402d 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -2,9 +2,9 @@
"version": "0.2.0",
"configurations": [
{
+ "name": "Build and Deploy",
"type": "brightscript",
"request": "launch",
- "name": "Jellyfin Debug",
"rootDir": "${workspaceFolder}/build/staging",
"preLaunchTask": "build-dev",
"stopOnEntry": false,
@@ -18,6 +18,22 @@
//WARNING: don't edit this value. Instead, set "brightscript.debug.password": "YOUR_PASSWORD_HERE" in your vscode user settings
//"password": "${promptForPassword}",
},
+ {
+ "name": "Deploy",
+ "type": "brightscript",
+ "request": "launch",
+ "rootDir": "${workspaceFolder}/build/staging",
+ "stopOnEntry": false,
+ // To enable RALE:
+ // set "brightscript.debug.raleTrackerTaskFileLocation": "/absolute/path/to/rale/TrackerTask.xml" in your vscode user settings
+ // set the below field to true
+ "injectRaleTrackerTask": false,
+ "injectRdbOnDeviceComponent": true,
+ //WARNING: don't edit this value. Instead, set "brightscript.debug.host": "YOUR_HOST_HERE" in your vscode user settings
+ //"host": "${promptForHost}",
+ //WARNING: don't edit this value. Instead, set "brightscript.debug.password": "YOUR_PASSWORD_HERE" in your vscode user settings
+ //"password": "${promptForPassword}",
+ },
{
"name": "Run tests",
"type": "brightscript",
From 5651128b8e667b44e0bb90a07183d6e07ca3da75 Mon Sep 17 00:00:00 2001
From: Jimi
Date: Sat, 27 Jul 2024 16:27:30 -0600
Subject: [PATCH 28/84] Remove non-wide poster mask from View All Next Up grid.
---
components/ItemGrid/GridItem.bs | 14 +++++++++++---
components/ItemGrid/ItemGrid.bs | 5 ++---
components/ItemGrid/LoadItemsTask2.bs | 4 +---
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/components/ItemGrid/GridItem.bs b/components/ItemGrid/GridItem.bs
index 3e95584c4..4df67550a 100644
--- a/components/ItemGrid/GridItem.bs
+++ b/components/ItemGrid/GridItem.bs
@@ -114,10 +114,18 @@ sub itemContentChanged()
end if
' Adjust to wide posters for "View All Next Up"
if m.topParent.overhangTitle = tr("View All Next Up")
- m.itemPoster.height = 331
- m.itemPoster.width = 464
+ m.posterMask.maskUri = ""
+
+ m.itemPoster.height = 300
+ m.itemPoster.width = 400
+ m.itemPoster.loadDisplayMode = "scaleToFit"
+
+ m.backdrop.height = 300
+ m.backdrop.width = 400
+ m.backdrop.loadDisplayMode = "scaleToFit"
+
m.itemText.translation = [0, m.itemPoster.height + 7]
- m.itemText.maxWidth = 464
+ m.itemText.maxWidth = 400
end if
else if itemData.type = "MusicArtist"
m.itemPoster.uri = itemData.PosterUrl
diff --git a/components/ItemGrid/ItemGrid.bs b/components/ItemGrid/ItemGrid.bs
index 1967ec9e7..df6a5d125 100644
--- a/components/ItemGrid/ItemGrid.bs
+++ b/components/ItemGrid/ItemGrid.bs
@@ -201,10 +201,9 @@ sub loadInitialItems()
if getCollectionType() = "nextup"
m.loadItemsTask.itemType = "NextUp"
- m.itemGrid.itemSize = "[464, 331]"
- m.itemGrid.itemSpacing = "[5, 5]"
+ m.itemGrid.itemSize = "[400, 300]"
m.top.imageDisplayMode = "scaleToFit"
- m.itemGrid.numColumns = 3
+ m.itemGrid.numColumns = 4
m.alpha.visible = false
end if
else if m.top.parentItem.json.type = "Studio"
diff --git a/components/ItemGrid/LoadItemsTask2.bs b/components/ItemGrid/LoadItemsTask2.bs
index 4d313b882..2290103d1 100644
--- a/components/ItemGrid/LoadItemsTask2.bs
+++ b/components/ItemGrid/LoadItemsTask2.bs
@@ -201,9 +201,7 @@ sub loadItems()
tmp = CreateObject("roSGNode", "TVEpisode")
if LCase(m.top.ItemType) = "nextup"
tmp.title = item.name
- tmp.json = item
tmp.type = "Episode"
- tmp.posterUrl = api.items.GetImageURL(item.id, "primary", 0, { "maxHeight": 331, "maxWidth": 464, "quality": "90" })
end if
else if LCase(item.Type) = "recording"
tmp = CreateObject("roSGNode", "RecordingData")
@@ -292,7 +290,7 @@ sub loadItems()
end if
if tmp <> invalid
- if LCase(item.Type) <> "genre" and LCase(item.Type) <> "musicgenre" and LCase(m.top.ItemType) <> "nextup"
+ if LCase(item.Type) <> "genre" and LCase(item.Type) <> "musicgenre"
tmp.parentFolder = m.top.itemId
tmp.json = item
if item.UserData <> invalid and item.UserData.isFavorite <> invalid
From 15b41e7d3f83e3fd993ff2cd40d3ce9407230dd6 Mon Sep 17 00:00:00 2001
From: Jimi
Date: Sat, 27 Jul 2024 21:15:56 -0600
Subject: [PATCH 29/84] Correct check for m.alpha
---
components/ItemGrid/ItemGrid.bs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/ItemGrid/ItemGrid.bs b/components/ItemGrid/ItemGrid.bs
index df6a5d125..6a5e768a2 100644
--- a/components/ItemGrid/ItemGrid.bs
+++ b/components/ItemGrid/ItemGrid.bs
@@ -843,7 +843,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
m.top.quickPlayNode = itemToPlay
return true
end if
- else if key = "left" and topGrp.isinFocusChain() and m.alpha.focusable
+ else if key = "left" and topGrp.isinFocusChain() and m.alpha.visible
m.top.alphaActive = true
topGrp.setFocus(false)
m.alphaMenu.setFocus(true)
From 5a4b71cc219789d134e60d8a582b9648c4417391 Mon Sep 17 00:00:00 2001
From: Jimi Dodge
Date: Sun, 28 Jul 2024 16:01:14 -0600
Subject: [PATCH 30/84] Make view all buttom smart
---
components/home/LoadItemsTask.bs | 47 ++++++++++++++++++++++----------
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/components/home/LoadItemsTask.bs b/components/home/LoadItemsTask.bs
index e93db10a2..f947d1250 100644
--- a/components/home/LoadItemsTask.bs
+++ b/components/home/LoadItemsTask.bs
@@ -85,6 +85,9 @@ sub loadItems()
end if
end if
+ addViewAll = true ' Assume there will be a "View All" to start
+ checkViewAll = false ' Only need to check if we don't have anything in the Next Up home row
+
resp = APIRequest(url, params)
data = getJson(resp)
if isValid(data) and isValid(data.Items)
@@ -93,22 +96,36 @@ sub loadItems()
tmp.json = item
results.push(tmp)
end for
- ' Add "View All"
- ' Note: Unfortunately you could have 0 items show up on the home screen and still have
- ' a bunch of items in NextUp that are > 365 days old. However, checking here for at
- ' least 1 item in Next Up means you won't have a "Next Up" section with nothing but a single View All folder.
- if data.Items.Count() > 0
- tmp = CreateObject("roSGNode", "HomeData")
- tmp.type = "CollectionFolder"
- tmp.usePoster = false
- tmp.json = {
- IsFolder: true,
- Name: tr("View All Next Up"),
- Type: "CollectionFolder",
- CollectionType: "nextup"
- }
- results.push(tmp)
+ if data.Items.Count() = 0
+ checkViewAll = true
end if
+ else
+ checkViewAll = true
+ end if
+
+ ' Add "View All"
+ if checkViewAll
+ ' Nothing to show in Next Up, but are there hidden items (e.g. > 365 days old)?
+ params.Delete("NextUpDateCutoff")
+ params["limit"] = 1 ' if there is even one, then we know we need to show "View All"
+ resp = APIRequest(url, params)
+ data = getJson(resp)
+ if not isValid(data) or isValid(data) and isValid(data.Items) and data.Items.Count() = 0
+ addViewAll = false
+ end if
+ end if
+
+ if addViewAll
+ tmp = CreateObject("roSGNode", "HomeData")
+ tmp.type = "CollectionFolder"
+ tmp.usePoster = false
+ tmp.json = {
+ IsFolder: true,
+ Name: tr("View All Next Up"),
+ Type: "CollectionFolder",
+ CollectionType: "nextup"
+ }
+ results.push(tmp)
end if
' Load Continue Watching
else if m.top.itemsToLoad = "continue"
From 82617e503dc8add4c5e2e3624a8847d781270846 Mon Sep 17 00:00:00 2001
From: jellyfin-bot
Date: Sun, 28 Jul 2024 23:30:55 +0000
Subject: [PATCH 31/84] Update API docs
---
...mponents_ItemGrid_MovieLibraryView.bs.html | 2 +-
docs/api/components_ListPoster.bs.html | 12 +-
docs/api/components_home_HomeItem.bs.html | 22 ++-
.../components_movies_MovieDetails.bs.html | 156 +++++++++---------
.../components_video_VideoPlayerView.bs.html | 9 +-
docs/api/data/search.json | 2 +-
docs/api/module-HomeItem.html | 2 +-
docs/api/source_ShowScenes.bs.html | 5 +-
8 files changed, 120 insertions(+), 90 deletions(-)
diff --git a/docs/api/components_ItemGrid_MovieLibraryView.bs.html b/docs/api/components_ItemGrid_MovieLibraryView.bs.html
index a9b0f0a63..2326fd8b9 100644
--- a/docs/api/components_ItemGrid_MovieLibraryView.bs.html
+++ b/docs/api/components_ItemGrid_MovieLibraryView.bs.html
@@ -682,7 +682,7 @@
'
'Swap Complete
sub swapDone()
- if m.swapAnimation.state = "stopped"
+ if isValid(m.swapAnimation) and m.swapAnimation.state = "stopped"
'Set main BG node image and hide transitioning node
m.backdrop.uri = m.newBackdrop.uri
m.backdrop.opacity = 1
diff --git a/docs/api/components_ListPoster.bs.html b/docs/api/components_ListPoster.bs.html
index f14118e61..3aca097e0 100644
--- a/docs/api/components_ListPoster.bs.html
+++ b/docs/api/components_ListPoster.bs.html
@@ -17,10 +17,16 @@
m.backdrop = m.top.findNode("backdrop")
- ' Randmomise the background colors
- posterBackgrounds = m.global.constants.poster_bg_pallet
- m.backdrop.color = posterBackgrounds[rnd(posterBackgrounds.count()) - 1]
+ ' Randomize the background colors
+ backdropColor = "#00a4db" ' set default in case global var is invalid
+ localGlobal = m.global
+ if isValid(localGlobal) and isValid(localGlobal.constants) and isValid(localGlobal.constants.poster_bg_pallet)
+ posterBackgrounds = localGlobal.constants.poster_bg_pallet
+ backdropColor = posterBackgrounds[rnd(posterBackgrounds.count()) - 1]
+ end if
+
+ m.backdrop.color = backdropColor
updateSize()
end sub
diff --git a/docs/api/components_home_HomeItem.bs.html b/docs/api/components_home_HomeItem.bs.html
index 9c7e5d988..dbb9cdd07 100644
--- a/docs/api/components_home_HomeItem.bs.html
+++ b/docs/api/components_home_HomeItem.bs.html
@@ -8,12 +8,12 @@
sub init()
m.log = log.Logger("HomeItem")
- m.itemText = m.top.findNode("itemText")
- m.itemPoster = m.top.findNode("itemPoster")
+ initItemText()
+ initItemPoster()
m.itemProgress = m.top.findNode("progress")
m.itemProgressBackground = m.top.findNode("progressBackground")
m.itemIcon = m.top.findNode("itemIcon")
- m.itemTextExtra = m.top.findNode("itemTextExtra")
+ initItemTextExtra()
m.itemPoster.observeField("loadStatus", "onPosterLoadStatusChanged")
m.unplayedCount = m.top.findNode("unplayedCount")
m.unplayedEpisodeCount = m.top.findNode("unplayedEpisodeCount")
@@ -36,6 +36,17 @@
m.backdrop.color = backdropColor
end sub
+sub initItemText()
+ m.itemText = m.top.findNode("itemText")
+end sub
+
+sub initItemPoster()
+ m.itemPoster = m.top.findNode("itemPoster")
+end sub
+
+sub initItemTextExtra()
+ m.itemTextExtra = m.top.findNode("itemTextExtra")
+end sub
sub itemContentChanged()
if isValid(m.unplayedCount) then m.unplayedCount.visible = false
@@ -45,6 +56,11 @@
itemData.Title = itemData.name ' Temporarily required while we move from "HomeItem" to "JFContentItem"
+ ' validate to prevent crash
+ if not isValid(m.itemPoster) then initItemPoster()
+ if not isValid(m.itemText) then initItemText()
+ if not isValid(m.itemTextExtra) then initItemTextExtra()
+
m.itemPoster.width = itemData.imageWidth
m.itemText.maxWidth = itemData.imageWidth
m.itemTextExtra.width = itemData.imageWidth
diff --git a/docs/api/components_movies_MovieDetails.bs.html b/docs/api/components_movies_MovieDetails.bs.html
index 0d40dc3bb..f1105f1cd 100644
--- a/docs/api/components_movies_MovieDetails.bs.html
+++ b/docs/api/components_movies_MovieDetails.bs.html
@@ -53,6 +53,7 @@
' onMoviePosterSwapAnimationStateChange: Handler for changes to m.moviePosterSwapAnimation.state
'
sub onMoviePosterSwapAnimationStateChange()
+ if not isValid(m.moviePosterSwapAnimation) then return
if LCase(m.moviePosterSwapAnimation.state) <> "stopped" then return
m.moviePoster.uri = m.moviePosterSwap.uri
m.moviePoster.opacity = 1
@@ -97,102 +98,105 @@
sub itemContentChanged()
' Updates video metadata
item = m.top.itemContent
- itemData = item.json
- m.top.id = itemData.id
- m.top.findNode("moviePoster").uri = m.top.itemContent.posterURL
-
- ' Set default video source if user hasn't selected one yet
- if m.top.selectedVideoStreamId = "" and isValid(itemData.MediaSources)
- m.top.selectedVideoStreamId = itemData.MediaSources[0].id
- end if
+ if isValid(item) and isValid(item.json)
+ itemData = item.json
+ m.top.id = itemData.id
+ m.top.findNode("moviePoster").uri = m.top.itemContent.posterURL
+
+ ' Set default video source if user hasn't selected one yet
+ if m.top.selectedVideoStreamId = "" and isValid(itemData.MediaSources)
+ m.top.selectedVideoStreamId = itemData.MediaSources[0].id
+ end if
- ' Find first Audio Stream and set that as default
- SetDefaultAudioTrack(itemData)
+ ' Find first Audio Stream and set that as default
+ SetDefaultAudioTrack(itemData)
- ' Handle all "As Is" fields
- m.top.overhangTitle = itemData.name
- setFieldText("releaseYear", itemData.productionYear)
- setFieldText("overview", itemData.overview)
+ ' Handle all "As Is" fields
+ m.top.overhangTitle = itemData.name
+ setFieldText("releaseYear", itemData.productionYear)
+ setFieldText("overview", itemData.overview)
- if itemData.officialRating <> invalid
- setFieldText("officialRating", itemData.officialRating)
- else
- m.infoGroup.removeChild(m.top.findNode("officialRating"))
- end if
-
- if m.global.session.user.settings["ui.movies.showRatings"]
- if isValid(itemData.communityRating)
- setFieldText("communityRating", int(itemData.communityRating * 10) / 10)
+ if itemData.officialRating <> invalid
+ setFieldText("officialRating", itemData.officialRating)
else
- m.infoGroup.removeChild(m.top.findNode("communityRatingGroup"))
+ m.infoGroup.removeChild(m.top.findNode("officialRating"))
end if
- if isValid(itemData.CriticRating)
- setFieldText("criticRatingLabel", itemData.criticRating)
- if itemData.CriticRating > 60
- tomato = "pkg:/images/fresh.png"
+
+ if m.global.session.user.settings["ui.movies.showRatings"]
+ if isValid(itemData.communityRating)
+ setFieldText("communityRating", int(itemData.communityRating * 10) / 10)
+ else
+ m.infoGroup.removeChild(m.top.findNode("communityRatingGroup"))
+ end if
+ if isValid(itemData.CriticRating)
+ setFieldText("criticRatingLabel", itemData.criticRating)
+ if itemData.CriticRating > 60
+ tomato = "pkg:/images/fresh.png"
+ else
+ tomato = "pkg:/images/rotten.png"
+ end if
+ criticRatingIcon = m.top.findNode("criticRatingIcon")
+ if isValid(criticRatingIcon) then criticRatingIcon.uri = tomato
else
- tomato = "pkg:/images/rotten.png"
+ m.infoGroup.removeChild(m.top.findNode("criticRatingGroup"))
end if
- m.top.findNode("criticRatingIcon").uri = tomato
else
+ m.infoGroup.removeChild(m.top.findNode("communityRatingGroup"))
m.infoGroup.removeChild(m.top.findNode("criticRatingGroup"))
end if
- else
- m.infoGroup.removeChild(m.top.findNode("communityRatingGroup"))
- m.infoGroup.removeChild(m.top.findNode("criticRatingGroup"))
- end if
- if type(itemData.RunTimeTicks) = "LongInteger"
- setFieldText("runtime", stri(getRuntime()) + " mins")
- if m.global.session.user.settings["ui.design.hideclock"] <> true
- setFieldText("ends-at", tr("Ends at %1").Replace("%1", getEndTime()))
+ if type(itemData.RunTimeTicks) = "LongInteger"
+ setFieldText("runtime", stri(getRuntime()) + " mins")
+ if m.global.session.user.settings["ui.design.hideclock"] <> true
+ setFieldText("ends-at", tr("Ends at %1").Replace("%1", getEndTime()))
+ end if
end if
- end if
- if itemData.genres.count() > 0
- setFieldText("genres", tr("Genres") + ": " + itemData.genres.join(", "))
- else
- m.top.findNode("details").removeChild(m.top.findNode("genres"))
- end if
+ if itemData.genres.count() > 0
+ setFieldText("genres", tr("Genres") + ": " + itemData.genres.join(", "))
+ else
+ m.top.findNode("details").removeChild(m.top.findNode("genres"))
+ end if
- ' show tags if there are no genres to display
- if itemData.genres.count() = 0 and isValid(itemData.tags) and itemData.tags.count() > 0
- setFieldText("genres", tr("Tags") + ": " + itemData.tags.join(", "))
- end if
+ ' show tags if there are no genres to display
+ if itemData.genres.count() = 0 and isValid(itemData.tags) and itemData.tags.count() > 0
+ setFieldText("genres", tr("Tags") + ": " + itemData.tags.join(", "))
+ end if
- directors = []
- for each person in itemData.people
- if person.type = "Director"
- directors.push(person.name)
+ directors = []
+ for each person in itemData.people
+ if person.type = "Director"
+ directors.push(person.name)
+ end if
+ end for
+ if directors.count() > 0
+ setFieldText("director", tr("Director") + ": " + directors.join(", "))
+ else
+ m.top.findNode("details").removeChild(m.top.findNode("director"))
end if
- end for
- if directors.count() > 0
- setFieldText("director", tr("Director") + ": " + directors.join(", "))
- else
- m.top.findNode("details").removeChild(m.top.findNode("director"))
- end if
- if m.global.session.user.settings["ui.details.hidetagline"] = false
- if itemData.taglines.count() > 0
- setFieldText("tagline", itemData.taglines[0])
+ if m.global.session.user.settings["ui.details.hidetagline"] = false
+ if itemData.taglines.count() > 0
+ setFieldText("tagline", itemData.taglines[0])
+ end if
+ else
+ m.details.removeChild(m.tagline)
end if
- else
- m.details.removeChild(m.tagline)
- end if
- 'set aired date if type is Episode
- if itemData.PremiereDate <> invalid and itemData.Type = "Episode"
- airDate = CreateObject("roDateTime")
- airDate.FromISO8601String(itemData.PremiereDate)
- m.top.findNode("aired").text = tr("Aired") + ": " + airDate.AsDateString("short-month-no-weekday")
- 'remove movie release year label
- m.infoGroup.removeChild(m.top.findNode("releaseYear"))
- end if
+ 'set aired date if type is Episode
+ if itemData.PremiereDate <> invalid and itemData.Type = "Episode"
+ airDate = CreateObject("roDateTime")
+ airDate.FromISO8601String(itemData.PremiereDate)
+ m.top.findNode("aired").text = tr("Aired") + ": " + airDate.AsDateString("short-month-no-weekday")
+ 'remove movie release year label
+ m.infoGroup.removeChild(m.top.findNode("releaseYear"))
+ end if
- setFavoriteColor()
- setWatchedColor()
- SetUpVideoOptions(itemData.mediaSources)
- SetUpAudioOptions(itemData.mediaStreams)
+ setFavoriteColor()
+ setWatchedColor()
+ SetUpVideoOptions(itemData.mediaSources)
+ SetUpAudioOptions(itemData.mediaStreams)
+ end if
m.buttonGrp.visible = true
stopLoadingSpinner()
end sub
diff --git a/docs/api/components_video_VideoPlayerView.bs.html b/docs/api/components_video_VideoPlayerView.bs.html
index 60313b65f..553070eb6 100644
--- a/docs/api/components_video_VideoPlayerView.bs.html
+++ b/docs/api/components_video_VideoPlayerView.bs.html
@@ -576,9 +576,12 @@
' When Video Player state changes
sub onPositionChanged()
-
' Pass video position data into OSD
- m.osd.progressPercentage = m.top.position / m.top.duration
+ if m.top.duration = 0
+ m.osd.progressPercentage = 0
+ else
+ m.osd.progressPercentage = m.top.position / m.top.duration
+ end if
m.osd.positionTime = m.top.position
m.osd.remainingPositionTime = m.top.duration - m.top.position
@@ -664,7 +667,7 @@
"PositionTicks": int(m.top.position) * 10000000&, 'Ensure a LongInteger is used
"IsPaused": (m.top.state = "paused")
}
- if m.top.content.live
+ if isValid(m.top.content) and isValid(m.top.content.live) and m.top.content.live
params.append({
"MediaSourceId": m.top.transcodeParams.MediaSourceId,
"LiveStreamId": m.top.transcodeParams.LiveStreamId
diff --git a/docs/api/data/search.json b/docs/api/data/search.json
index 43e8998be..39fc4991f 100644
--- a/docs/api/data/search.json
+++ b/docs/api/data/search.json
@@ -1 +1 @@
-{"list":[{"title":"module:AlbumData","link":"AlbumData"},{"title":"module:AlbumData.setFields","link":"setFields"},{"title":"module:AlbumGrid","link":"AlbumGrid"},{"title":"module:AlbumGrid.getData","link":"getData"},{"title":"module:AlbumGrid.init","link":"init"},{"title":"module:AlbumGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumTrackList","link":"AlbumTrackList"},{"title":"module:AlbumTrackList.getData","link":"getData"},{"title":"module:AlbumTrackList.init","link":"init"},{"title":"module:AlbumView","link":"AlbumView"},{"title":"module:AlbumView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:AlbumView.createDialogPallete","link":"createDialogPallete"},{"title":"module:AlbumView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:AlbumView.init","link":"init"},{"title":"module:AlbumView.onDoneLoading","link":"onDoneLoading"},{"title":"module:AlbumView.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:AlbumView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AlbumView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AlbumView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AlbumView.setupMainNode","link":"setupMainNode"},{"title":"module:Alpha","link":"Alpha"},{"title":"module:Alpha.init","link":"init"},{"title":"module:Alpha.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView","link":"ArtistView"},{"title":"module:ArtistView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:ArtistView.OnScreenShown","link":"OnScreenShown"},{"title":"module:ArtistView.artistOverviewChanged","link":"artistOverviewChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:ArtistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:ArtistView.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:ArtistView.init","link":"init"},{"title":"module:ArtistView.onAlbumsData","link":"onAlbumsData"},{"title":"module:ArtistView.onAlbumsEscape","link":"onAlbumsEscape"},{"title":"module:ArtistView.onAppearsOnData","link":"onAppearsOnData"},{"title":"module:ArtistView.onAppearsOnEscape","link":"onAppearsOnEscape"},{"title":"module:ArtistView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:ArtistView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:ArtistView.onEllipsisChanged","link":"onEllipsisChanged"},{"title":"module:ArtistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView.onSectionNavigationEscape","link":"onSectionNavigationEscape"},{"title":"module:ArtistView.onSectionNavigationSelected","link":"onSectionNavigationSelected"},{"title":"module:ArtistView.onSectionScrollerChange","link":"onSectionScrollerChange"},{"title":"module:ArtistView.pageContentChanged","link":"pageContentChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:ArtistView.setPosterImage","link":"setPosterImage"},{"title":"module:ArtistView.setScreenTitle","link":"setScreenTitle"},{"title":"module:ArtistView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:ArtistView.setupMainNode","link":"setupMainNode"},{"title":"module:AudioPlayer","link":"AudioPlayer"},{"title":"module:AudioPlayer.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:AudioPlayer.audioStateChanged","link":"audioStateChanged","description":"State Change Event Handler
"},{"title":"module:AudioPlayer.init","link":"init"},{"title":"module:AudioPlayerView","link":"AudioPlayerView"},{"title":"module:AudioPlayerView.LoadNextSong","link":"LoadNextSong"},{"title":"module:AudioPlayerView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:AudioPlayerView.audioPositionChanged","link":"audioPositionChanged"},{"title":"module:AudioPlayerView.audioStateChanged","link":"audioStateChanged"},{"title":"module:AudioPlayerView.bufferPositionChanged","link":"bufferPositionChanged"},{"title":"module:AudioPlayerView.endScreenSaver","link":"endScreenSaver"},{"title":"module:AudioPlayerView.exitScrubMode","link":"exitScrubMode","description":"exitScrubMode: Moves player out of scrub mode state, resets back to standard play mode
"},{"title":"module:AudioPlayerView.findCurrentSongIndex","link":"findCurrentSongIndex"},{"title":"module:AudioPlayerView.init","link":"init"},{"title":"module:AudioPlayerView.loadButtons","link":"loadButtons","description":"If we have more and 1 song to play, fade in the next and previous controls
"},{"title":"module:AudioPlayerView.loopClicked","link":"loopClicked"},{"title":"module:AudioPlayerView.moveSeekbarThumb","link":"moveSeekbarThumb","description":"moveSeekbarThumb: Positions the thumb on the seekbar
"},{"title":"module:AudioPlayerView.nextClicked","link":"nextClicked"},{"title":"module:AudioPlayerView.onAudioStreamLoaded","link":"onAudioStreamLoaded"},{"title":"module:AudioPlayerView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:AudioPlayerView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:AudioPlayerView.onKeyEvent","link":"onKeyEvent","description":"Process key press events
"},{"title":"module:AudioPlayerView.onMetaDataLoaded","link":"onMetaDataLoaded"},{"title":"module:AudioPlayerView.onScreensaverTimeoutLoaded","link":"onScreensaverTimeoutLoaded"},{"title":"module:AudioPlayerView.pageContentChanged","link":"pageContentChanged","description":"Update values on screen when page content changes
"},{"title":"module:AudioPlayerView.playAction","link":"playAction"},{"title":"module:AudioPlayerView.previousClicked","link":"previousClicked"},{"title":"module:AudioPlayerView.processScrubAction","link":"processScrubAction","description":"processScrubAction: Handles +/- seeking for the audio trickplay bar
"},{"title":"module:AudioPlayerView.resetLoopModeToDefault","link":"resetLoopModeToDefault"},{"title":"module:AudioPlayerView.resetSeekbarThumb","link":"resetSeekbarThumb","description":"resetSeekbarThumb: Resets the thumb to the playing position
"},{"title":"module:AudioPlayerView.screenSaverActive","link":"screenSaverActive"},{"title":"module:AudioPlayerView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:AudioPlayerView.setLoopButtonImage","link":"setLoopButtonImage"},{"title":"module:AudioPlayerView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AudioPlayerView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AudioPlayerView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AudioPlayerView.setSelectedButtonState","link":"setSelectedButtonState","description":"setSelectedButtonState: Changes the icon state url for the currently selected button
"},{"title":"module:AudioPlayerView.setShuffleIconState","link":"setShuffleIconState"},{"title":"module:AudioPlayerView.setTrackNumberDisplay","link":"setTrackNumberDisplay"},{"title":"module:AudioPlayerView.setupAnimationTasks","link":"setupAnimationTasks"},{"title":"module:AudioPlayerView.setupAudioNode","link":"setupAudioNode","description":"Creates audio node used to play song(s)
"},{"title":"module:AudioPlayerView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:AudioPlayerView.setupDataTasks","link":"setupDataTasks","description":"Creates tasks to gather data needed to render Scene and play song
"},{"title":"module:AudioPlayerView.setupInfoNodes","link":"setupInfoNodes"},{"title":"module:AudioPlayerView.setupScreenSaver","link":"setupScreenSaver"},{"title":"module:AudioPlayerView.shuffleClicked","link":"shuffleClicked"},{"title":"module:AudioPlayerView.startScreenSaver","link":"startScreenSaver"},{"title":"module:AudioPlayerView.toggleShuffleEnabled","link":"toggleShuffleEnabled"},{"title":"module:AudioTrackListItem","link":"AudioTrackListItem"},{"title":"module:AudioTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:AudioTrackListItem.init","link":"init"},{"title":"module:AudioTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ButtonGroupHoriz","link":"ButtonGroupHoriz"},{"title":"module:ButtonGroupHoriz.init","link":"init"},{"title":"module:ButtonGroupHoriz.onKeyEvent","link":"onKeyEvent"},{"title":"module:ButtonGroupVert","link":"ButtonGroupVert"},{"title":"module:ButtonGroupVert.init","link":"init"},{"title":"module:ButtonGroupVert.onFocusButtonChanged","link":"onFocusButtonChanged"},{"title":"module:ButtonGroupVert.onFocusChanged","link":"onFocusChanged"},{"title":"module:ButtonGroupVert.onKeyEvent","link":"onKeyEvent"},{"title":"module:ChannelData","link":"ChannelData"},{"title":"module:ChannelData.setFields","link":"setFields"},{"title":"module:ChannelData.setPoster","link":"setPoster"},{"title":"module:Clock","link":"Clock"},{"title":"module:Clock.format12HourTime","link":"format12HourTime","description":"format12HourTime: Returns a string with the current time formatted for a 12 hour clock
"},{"title":"module:Clock.format24HourTime","link":"format24HourTime","description":"format24HourTime: Returns a string with the current time formatted for a 24 hour clock
"},{"title":"module:Clock.formatTimeAsString","link":"formatTimeAsString","description":"formatTimeAsString: Returns a string with the current time formatted for either a 12 or 24 hour clock
"},{"title":"module:Clock.init","link":"init"},{"title":"module:Clock.onCurrentTimeTimerFire","link":"onCurrentTimeTimerFire","description":"onCurrentTimeTimerFire: Code that runs every time the currentTimeTimer fires
"},{"title":"module:CollectionData","link":"CollectionData"},{"title":"module:CollectionData.setFields","link":"setFields"},{"title":"module:CollectionData.setPoster","link":"setPoster"},{"title":"module:ConfigData","link":"ConfigData"},{"title":"module:ConfigData.init","link":"init"},{"title":"module:ConfigItem","link":"ConfigItem"},{"title":"module:ConfigItem.init","link":"init"},{"title":"module:ConfigItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ConfigItem.setColors","link":"setColors"},{"title":"module:ConfigList","link":"ConfigList"},{"title":"module:ConfigList.configListShowDialog","link":"configListShowDialog"},{"title":"module:ConfigList.dismiss_dialog","link":"dismiss_dialog"},{"title":"module:ConfigList.init","link":"init"},{"title":"module:ConfigList.onDialogButton","link":"onDialogButton"},{"title":"module:ConfigList.onItemSelected","link":"onItemSelected"},{"title":"module:ConfigList.setData","link":"setData"},{"title":"module:ExtrasItem","link":"ExtrasItem"},{"title":"module:ExtrasItem.focusChanged","link":"focusChanged"},{"title":"module:ExtrasItem.init","link":"init"},{"title":"module:ExtrasItem.showContent","link":"showContent"},{"title":"module:ExtrasRowList","link":"ExtrasRowList"},{"title":"module:ExtrasRowList.addRowSize","link":"addRowSize"},{"title":"module:ExtrasRowList.buildRow","link":"buildRow"},{"title":"module:ExtrasRowList.init","link":"init"},{"title":"module:ExtrasRowList.loadParts","link":"loadParts"},{"title":"module:ExtrasRowList.loadPersonVideos","link":"loadPersonVideos"},{"title":"module:ExtrasRowList.onAdditionalPartsLoaded","link":"onAdditionalPartsLoaded"},{"title":"module:ExtrasRowList.onLikeThisLoaded","link":"onLikeThisLoaded"},{"title":"module:ExtrasRowList.onMoviesLoaded","link":"onMoviesLoaded"},{"title":"module:ExtrasRowList.onPeopleLoaded","link":"onPeopleLoaded"},{"title":"module:ExtrasRowList.onRowItemFocused","link":"onRowItemFocused"},{"title":"module:ExtrasRowList.onRowItemSelected","link":"onRowItemSelected"},{"title":"module:ExtrasRowList.onSeriesLoaded","link":"onSeriesLoaded"},{"title":"module:ExtrasRowList.onShowsLoaded","link":"onShowsLoaded"},{"title":"module:ExtrasRowList.onSpecialFeaturesLoaded","link":"onSpecialFeaturesLoaded"},{"title":"module:ExtrasRowList.updateSize","link":"updateSize"},{"title":"module:FavoriteItemsTask","link":"FavoriteItemsTask"},{"title":"module:FavoriteItemsTask.init","link":"init"},{"title":"module:FavoriteItemsTask.setFavoriteStatus","link":"setFavoriteStatus"},{"title":"module:FolderData","link":"FolderData"},{"title":"module:FolderData.setFields","link":"setFields"},{"title":"module:FolderData.setPoster","link":"setPoster"},{"title":"module:GetFiltersTask","link":"GetFiltersTask"},{"title":"module:GetFiltersTask.getFiltersTask","link":"getFiltersTask"},{"title":"module:GetFiltersTask.init","link":"init"},{"title":"module:GetNextEpisodeTask","link":"GetNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.getNextEpisodeTask","link":"getNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.init","link":"init"},{"title":"module:GetPlaybackInfoTask","link":"GetPlaybackInfoTask"},{"title":"module:GetPlaybackInfoTask.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:GetPlaybackInfoTask.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:GetPlaybackInfoTask.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:GetPlaybackInfoTask.getPlaybackInfoTask","link":"getPlaybackInfoTask","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:GetPlaybackInfoTask.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:GetPlaybackInfoTask.init","link":"init"},{"title":"module:GetShuffleEpisodesTask","link":"GetShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.getShuffleEpisodesTask","link":"getShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.init","link":"init"},{"title":"module:GridItem","link":"GridItem"},{"title":"module:GridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:GridItem.focusChanging","link":"focusChanging","description":"Use FocusPercent to animate scaling of Poser Image
"},{"title":"module:GridItem.init","link":"init"},{"title":"module:GridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:GridItemSmall","link":"GridItemSmall"},{"title":"module:GridItemSmall.focusChanged","link":"focusChanged"},{"title":"module:GridItemSmall.init","link":"init"},{"title":"module:GridItemSmall.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItemSmall.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:Home","link":"Home"},{"title":"module:Home.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook called when the screen is hidden by the screen manager
"},{"title":"module:Home.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:Home.init","link":"init"},{"title":"module:Home.loadLibraries","link":"loadLibraries"},{"title":"module:Home.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:Home.refresh","link":"refresh"},{"title":"module:HomeData","link":"HomeData"},{"title":"module:HomeData.setData","link":"setData"},{"title":"module:HomeItem","link":"HomeItem"},{"title":"module:HomeItem.drawProgressBar","link":"drawProgressBar","description":"Draws and animates item progress bar
"},{"title":"module:HomeItem.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:HomeItem.init","link":"init"},{"title":"module:HomeItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:HomeItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and icon when poster loaded
"},{"title":"module:HomeRowItemSizes","link":"HomeRowItemSizes"},{"title":"module:HomeRows","link":"HomeRows"},{"title":"module:HomeRows.addHomeSection","link":"addHomeSection","description":"addHomeSection: Adds a new home section to the home rows.
"},{"title":"module:HomeRows.createContinueWatchingRow","link":"createContinueWatchingRow","description":"createContinueWatchingRow: Creates a row displaying items the user can continue watching
"},{"title":"module:HomeRows.createFavoritesRow","link":"createFavoritesRow","description":"createFavoritesRow: Creates a row displaying items from the user's favorites list
"},{"title":"module:HomeRows.createLatestInRows","link":"createLatestInRows","description":"createLatestInRows: Creates a row displaying latest items in each of the user's libraries
"},{"title":"module:HomeRows.createLibraryRow","link":"createLibraryRow","description":"createLibraryRow: Creates a row displaying the user's libraries
"},{"title":"module:HomeRows.createLiveTVRow","link":"createLiveTVRow","description":"createLiveTVRow: Creates a row displaying the live tv now on section
"},{"title":"module:HomeRows.createNextUpRow","link":"createNextUpRow","description":"createNextUpRow: Creates a row displaying next episodes up to watch
"},{"title":"module:HomeRows.filterNodeArray","link":"filterNodeArray"},{"title":"module:HomeRows.getOriginalSectionIndex","link":"getOriginalSectionIndex","description":"getOriginalSectionIndex: Gets the index of a section from user settings and adds count of currently known latest media sections
"},{"title":"module:HomeRows.getSectionIndex","link":"getSectionIndex","description":"getSectionIndex: Returns index of requested section in home row content
"},{"title":"module:HomeRows.init","link":"init"},{"title":"module:HomeRows.itemSelected","link":"itemSelected"},{"title":"module:HomeRows.loadLibraries","link":"loadLibraries"},{"title":"module:HomeRows.loadingTimerComplete","link":"loadingTimerComplete","description":"loadingTimerComplete: Event handler for when loading wait time has expired
"},{"title":"module:HomeRows.onKeyEvent","link":"onKeyEvent"},{"title":"module:HomeRows.onLibrariesLoaded","link":"onLibrariesLoaded","description":"onLibrariesLoaded: Handler when LoadLibrariesTask returns data
"},{"title":"module:HomeRows.processUserSections","link":"processUserSections","description":"processUserSections: Loop through user's chosen home section settings and generate the content for each row
"},{"title":"module:HomeRows.removeHomeSection","link":"removeHomeSection","description":"removeHomeSection: Removes a home section from the home rows
"},{"title":"module:HomeRows.sectionExists","link":"sectionExists","description":"sectionExists: Checks if passed section exists in home row content
"},{"title":"module:HomeRows.setRowItemSize","link":"setRowItemSize","description":"setRowItemSize: Loops through all home sections and sets the correct item sizes per row
"},{"title":"module:HomeRows.updateContinueWatchingItems","link":"updateContinueWatchingItems","description":"updateContinueWatchingItems: Processes LoadContinueWatchingTask content. Removes, Creates, or Updates continue watching row as needed
"},{"title":"module:HomeRows.updateFavoritesItems","link":"updateFavoritesItems","description":"updateFavoritesItems: Processes LoadFavoritesTask content. Removes, Creates, or Updates favorites row as needed
"},{"title":"module:HomeRows.updateHomeRows","link":"updateHomeRows","description":"updateHomeRows: Update function exposed to outside components
"},{"title":"module:HomeRows.updateLatestItems","link":"updateLatestItems","description":"updateLatestItems: Processes LoadItemsTask content. Removes, Creates, or Updates latest in {library} row as needed
"},{"title":"module:HomeRows.updateNextUpItems","link":"updateNextUpItems","description":"updateNextUpItems: Processes LoadNextUpTask content. Removes, Creates, or Updates next up row as needed
"},{"title":"module:HomeRows.updateOnNowItems","link":"updateOnNowItems","description":"updateOnNowItems: Processes LoadOnNowTask content. Removes, Creates, or Updates latest in on now row as needed
"},{"title":"module:HomeRows.updateSize","link":"updateSize"},{"title":"module:IconButton","link":"IconButton"},{"title":"module:IconButton.init","link":"init"},{"title":"module:IconButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:IconButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:IconButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:IconButton.onIconChanged","link":"onIconChanged"},{"title":"module:IconButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:IconButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:IconButton.onTextChanged","link":"onTextChanged"},{"title":"module:IconButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:IconButton.setIconSize","link":"setIconSize"},{"title":"module:Image","link":"Image"},{"title":"module:Image.ImageURL","link":"ImageURL"},{"title":"module:Image.ItemImages","link":"ItemImages"},{"title":"module:Image.PosterImage","link":"PosterImage"},{"title":"module:Image.UserImageURL","link":"UserImageURL"},{"title":"module:ImageData","link":"ImageData"},{"title":"module:ImageData.setFields","link":"setFields"},{"title":"module:IntegerKeyboard","link":"IntegerKeyboard"},{"title":"module:IntegerKeyboard.init","link":"init"},{"title":"module:IntegerKeyboard.keySelected","link":"keySelected"},{"title":"module:IntegerKeyboard.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid","link":"ItemGrid"},{"title":"module:ItemGrid.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:ItemGrid.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:ItemGrid.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:ItemGrid.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:ItemGrid.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:ItemGrid.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:ItemGrid.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:ItemGrid.init","link":"init"},{"title":"module:ItemGrid.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:ItemGrid.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:ItemGrid.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:ItemGrid.onChannelFocused","link":"onChannelFocused"},{"title":"module:ItemGrid.onChannelSelected","link":"onChannelSelected"},{"title":"module:ItemGrid.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:ItemGrid.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:ItemGrid.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:ItemGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:ItemGrid.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:ItemGrid.setBoxsetsOptions","link":"setBoxsetsOptions","description":"Set Boxset view, sort, and filter options
"},{"title":"module:ItemGrid.setDefaultOptions","link":"setDefaultOptions","description":"Set Default view, sort, and filter options
"},{"title":"module:ItemGrid.setLiveTvOptions","link":"setLiveTvOptions","description":"Set Live TV view, sort, and filter options
"},{"title":"module:ItemGrid.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:ItemGrid.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:ItemGrid.setPhotoAlbumOptions","link":"setPhotoAlbumOptions","description":"Set Photo Album view, sort, and filter options
"},{"title":"module:ItemGrid.setTvShowsOptions","link":"setTvShowsOptions","description":"Set TV Show view, sort, and filter options
"},{"title":"module:ItemGrid.showTVGuide","link":"showTVGuide"},{"title":"module:ItemGrid.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:ItemGrid.updateTitle","link":"updateTitle"},{"title":"module:ItemGridOptions","link":"ItemGridOptions"},{"title":"module:ItemGridOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:ItemGridOptions.hideChecklist","link":"hideChecklist"},{"title":"module:ItemGridOptions.init","link":"init"},{"title":"module:ItemGridOptions.isFilterMenuDataValid","link":"isFilterMenuDataValid","description":"Check if data for Filter Menu is valid
"},{"title":"module:ItemGridOptions.onFilterFocusChange","link":"onFilterFocusChange"},{"title":"module:ItemGridOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGridOptions.optionsSet","link":"optionsSet"},{"title":"module:ItemGridOptions.saveFavoriteItemSelected","link":"saveFavoriteItemSelected"},{"title":"module:ItemGridOptions.setHeartColor","link":"setHeartColor"},{"title":"module:ItemGridOptions.showChecklist","link":"showChecklist"},{"title":"module:ItemGridOptions.toggleFavorite","link":"toggleFavorite"},{"title":"module:Items","link":"Items"},{"title":"module:Items.AppearsOnList","link":"AppearsOnList","description":"Get list of albums an artist appears on
"},{"title":"module:Items.ArtistOverview","link":"ArtistOverview","description":"Music Artist Data
"},{"title":"module:Items.AudioItem","link":"AudioItem","description":"Get Songs that are on an Album
"},{"title":"module:Items.AudioStream","link":"AudioStream"},{"title":"module:Items.BackdropImage","link":"BackdropImage"},{"title":"module:Items.CreateArtistMix","link":"CreateArtistMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.CreateInstantMix","link":"CreateInstantMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.GetIntroVideos","link":"GetIntroVideos","description":"Get Intro Videos for an item
"},{"title":"module:Items.GetSongsByArtist","link":"GetSongsByArtist","description":"Get list of songs belonging to an artist
"},{"title":"module:Items.ItemGetPlaybackInfo","link":"ItemGetPlaybackInfo"},{"title":"module:Items.ItemMetaData","link":"ItemMetaData","description":"MetaData about an item
"},{"title":"module:Items.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:Items.MusicAlbumList","link":"MusicAlbumList","description":"Get list of albums belonging to an artist
"},{"title":"module:Items.MusicSongList","link":"MusicSongList","description":"Get Songs that are on an Album
"},{"title":"module:Items.PlaylistItemList","link":"PlaylistItemList","description":"Get Items that are under the provided item
"},{"title":"module:Items.TVEpisodeShuffleList","link":"TVEpisodeShuffleList"},{"title":"module:Items.TVEpisodes","link":"TVEpisodes","description":"Returns a list of TV Shows for a given TV Show and season\nAccepts strings for the TV Show Id and the season Id
"},{"title":"module:Items.TVSeasonExtras","link":"TVSeasonExtras","description":"Returns a list of extra features for a TV Show season\nAccepts a string that is a TV Show season id
"},{"title":"module:Items.TVSeasons","link":"TVSeasons","description":"Seasons for a TV Show
"},{"title":"module:Items.searchMedia","link":"searchMedia","description":"Search across all libraries
"},{"title":"module:Items.useTranscodeAudioStream","link":"useTranscodeAudioStream"},{"title":"module:JFButton","link":"JFButton"},{"title":"module:JFButton.init","link":"init"},{"title":"module:JFButton.onTextChanged","link":"onTextChanged","description":"Whenever the text changes, pad both sides with whitespace so we can center the button text
"},{"title":"module:JFButtons","link":"JFButtons"},{"title":"module:JFButtons.focusChanged","link":"focusChanged","description":"Change opacity of the highlighted menu item based on focus
"},{"title":"module:JFButtons.highlightSelected","link":"highlightSelected","description":"Highlight selected menu option
"},{"title":"module:JFButtons.init","link":"init"},{"title":"module:JFButtons.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFButtons.renderChanged","link":"renderChanged","description":"When options are fully displayed, set focus and selected option
"},{"title":"module:JFButtons.selectedIndexChanged","link":"selectedIndexChanged","description":"When Selected Index set, ensure it is the one Focused
"},{"title":"module:JFButtons.showButtons","link":"showButtons"},{"title":"module:JFButtons.updateButtons","link":"updateButtons"},{"title":"module:JFContentItem","link":"JFContentItem"},{"title":"module:JFContentItem.setFields","link":"setFields","description":"Called whenever m.top.json changes.\nIt is expected that each node that extends JFContentItem will override this function
"},{"title":"module:JFGroup","link":"JFGroup"},{"title":"module:JFGroup.init","link":"init"},{"title":"module:JFGroup.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog","link":"JFMessageDialog"},{"title":"module:JFMessageDialog.init","link":"init"},{"title":"module:JFMessageDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog.redraw","link":"redraw"},{"title":"module:JFMessageDialog.updateMessage","link":"updateMessage"},{"title":"module:JFMessageDialog.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang","link":"JFOverhang"},{"title":"module:JFOverhang.init","link":"init"},{"title":"module:JFOverhang.isLogoVisibleChange","link":"isLogoVisibleChange","description":"component boolean field isLogoVisibleChange has changed value
"},{"title":"module:JFOverhang.onVisibleChange","link":"onVisibleChange"},{"title":"module:JFOverhang.resetTime","link":"resetTime"},{"title":"module:JFOverhang.setClockVisibility","link":"setClockVisibility"},{"title":"module:JFOverhang.setRightSeperatorVisibility","link":"setRightSeperatorVisibility"},{"title":"module:JFOverhang.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang.updateTime","link":"updateTime"},{"title":"module:JFOverhang.updateTimeDisplay","link":"updateTimeDisplay"},{"title":"module:JFOverhang.updateTitle","link":"updateTitle"},{"title":"module:JFOverhang.updateUser","link":"updateUser"},{"title":"module:JFScene","link":"JFScene"},{"title":"module:JFScene.disableRemoteChanged","link":"disableRemoteChanged","description":"Triggered when the disableRemote boolean component field is changed
"},{"title":"module:JFScene.init","link":"init"},{"title":"module:JFScene.isLoadingChanged","link":"isLoadingChanged","description":"Triggered when the isLoading boolean component field is changed
"},{"title":"module:JFScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFScreen","link":"JFScreen"},{"title":"module:JFScreen.OnScreenHidden","link":"OnScreenHidden","description":"Function called when the screen is hidden by the screen manager\nIt is expected that screens override this function if required,\nto handle focus any actions required on the screen being hidden
"},{"title":"module:JFScreen.OnScreenShown","link":"OnScreenShown","description":"Function called when the screen is displayed by the screen manager\nIt is expected that screens override this function to handle focus\nmanagmenet and any other actions required on screen shown
"},{"title":"module:JFScreen.init","link":"init"},{"title":"module:JFServer","link":"JFServer"},{"title":"module:JFServer.init","link":"init"},{"title":"module:JFServer.itemContentChanged","link":"itemContentChanged"},{"title":"module:JFServer.onFocusPercentChange","link":"onFocusPercentChange"},{"title":"module:JFServer.setTextColor","link":"setTextColor"},{"title":"module:JFVideo","link":"JFVideo"},{"title":"module:JFVideo.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:JFVideo.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:JFVideo.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:JFVideo.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:JFVideo.init","link":"init"},{"title":"module:JFVideo.loadCaption","link":"loadCaption"},{"title":"module:JFVideo.onAllowCaptionsChange","link":"onAllowCaptionsChange"},{"title":"module:JFVideo.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:JFVideo.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFVideo.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:JFVideo.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:JFVideo.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:JFVideo.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:JFVideo.toggleCaption","link":"toggleCaption"},{"title":"module:JFVideo.updateCaption","link":"updateCaption"},{"title":"module:JFVideo.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:ListPoster","link":"ListPoster"},{"title":"module:ListPoster.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:ListPoster.init","link":"init"},{"title":"module:ListPoster.itemContentChanged","link":"itemContentChanged"},{"title":"module:ListPoster.updateSize","link":"updateSize"},{"title":"module:LoadChannelsTask","link":"LoadChannelsTask"},{"title":"module:LoadChannelsTask.init","link":"init"},{"title":"module:LoadChannelsTask.loadChannels","link":"loadChannels"},{"title":"module:LoadItemsTask","link":"LoadItemsTask"},{"title":"module:LoadItemsTask.getPersonVideos","link":"getPersonVideos"},{"title":"module:LoadItemsTask.init","link":"init"},{"title":"module:LoadItemsTask.loadItems","link":"loadItems"},{"title":"module:LoadItemsTask2","link":"LoadItemsTask2"},{"title":"module:LoadItemsTask2.init","link":"init"},{"title":"module:LoadItemsTask2.loadItems","link":"loadItems"},{"title":"module:LoadPhotoTask","link":"LoadPhotoTask"},{"title":"module:LoadPhotoTask.init","link":"init"},{"title":"module:LoadPhotoTask.loadItems","link":"loadItems"},{"title":"module:LoadProgramDetailsTask","link":"LoadProgramDetailsTask"},{"title":"module:LoadProgramDetailsTask.init","link":"init"},{"title":"module:LoadProgramDetailsTask.loadProgramDetails","link":"loadProgramDetails"},{"title":"module:LoadScreenSaverTimeoutTask","link":"LoadScreenSaverTimeoutTask"},{"title":"module:LoadScreenSaverTimeoutTask.getScreensaverTimeout","link":"getScreensaverTimeout"},{"title":"module:LoadScreenSaverTimeoutTask.init","link":"init"},{"title":"module:LoadSheduleTask","link":"LoadSheduleTask"},{"title":"module:LoadSheduleTask.init","link":"init"},{"title":"module:LoadSheduleTask.loadSchedule","link":"loadSchedule"},{"title":"module:LoadVideoContentTask","link":"LoadVideoContentTask"},{"title":"module:LoadVideoContentTask.FindPreferredAudioStream","link":"FindPreferredAudioStream"},{"title":"module:LoadVideoContentTask.LoadItems_AddVideoContent","link":"LoadItems_AddVideoContent"},{"title":"module:LoadVideoContentTask.LoadItems_VideoPlayer","link":"LoadItems_VideoPlayer"},{"title":"module:LoadVideoContentTask.addAudioStreamsToVideo","link":"addAudioStreamsToVideo","description":"addAudioStreamsToVideo: Add audio stream data to video
"},{"title":"module:LoadVideoContentTask.addNextEpisodesToQueue","link":"addNextEpisodesToQueue","description":"Add next episodes to the playback queue
"},{"title":"module:LoadVideoContentTask.addSubtitlesToVideo","link":"addSubtitlesToVideo"},{"title":"module:LoadVideoContentTask.addVideoContentURL","link":"addVideoContentURL"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"defaultSubtitleTrack:
"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"defaultSubtitleTrackFromVid: Identifies the default subtitle track given video id
"},{"title":"module:LoadVideoContentTask.directPlaySupported","link":"directPlaySupported"},{"title":"module:LoadVideoContentTask.getContainerType","link":"getContainerType"},{"title":"module:LoadVideoContentTask.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:LoadVideoContentTask.init","link":"init"},{"title":"module:LoadVideoContentTask.loadItems","link":"loadItems"},{"title":"module:LoadVideoContentTask.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:LoginScene","link":"LoginScene"},{"title":"module:LoginScene.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook.
"},{"title":"module:LoginScene.init","link":"init"},{"title":"module:LoginScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:Main","link":"Main"},{"title":"module:Main.Main","link":"Main"},{"title":"module:MovieData","link":"MovieData"},{"title":"module:MovieData.setContainer","link":"setContainer"},{"title":"module:MovieData.setFields","link":"setFields"},{"title":"module:MovieData.setPoster","link":"setPoster"},{"title":"module:MovieDetails","link":"MovieDetails"},{"title":"module:MovieDetails.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:MovieDetails.SetDefaultAudioTrack","link":"SetDefaultAudioTrack"},{"title":"module:MovieDetails.SetUpAudioOptions","link":"SetUpAudioOptions"},{"title":"module:MovieDetails.SetUpVideoOptions","link":"SetUpVideoOptions"},{"title":"module:MovieDetails.audioOptionsClosed","link":"audioOptionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieDetails.getEndTime","link":"getEndTime"},{"title":"module:MovieDetails.getRuntime","link":"getRuntime"},{"title":"module:MovieDetails.init","link":"init"},{"title":"module:MovieDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:MovieDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieDetails.onMoviePosterSwapAnimationStateChange","link":"onMoviePosterSwapAnimationStateChange","description":"onMoviePosterSwapAnimationStateChange: Handler for changes to m.moviePosterSwapAnimation.state
"},{"title":"module:MovieDetails.onNewPosterImageURIChange","link":"onNewPosterImageURIChange","description":"onNewPosterImageURIChange: Handler for newPosterImageURI param change
"},{"title":"module:MovieDetails.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"onPosterLoadStatusChanged: Handler for changes to m.moviePosterSwap.loadStatus
"},{"title":"module:MovieDetails.round","link":"round"},{"title":"module:MovieDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:MovieDetails.setFieldText","link":"setFieldText"},{"title":"module:MovieDetails.setWatchedColor","link":"setWatchedColor"},{"title":"module:MovieDetails.trailerAvailableChanged","link":"trailerAvailableChanged"},{"title":"module:MovieDetails.videoOptionsClosed","link":"videoOptionsClosed","description":"Check if options were updated and if any reloding is needed...
"},{"title":"module:MovieLibraryView","link":"MovieLibraryView"},{"title":"module:MovieLibraryView.FilterDataLoaded","link":"FilterDataLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MovieLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MovieLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MovieLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MovieLibraryView.SetName","link":"SetName","description":"Set Selected Movie Name
"},{"title":"module:MovieLibraryView.SetOfficialRating","link":"SetOfficialRating","description":"Set Selected Movie OfficialRating
"},{"title":"module:MovieLibraryView.SetOverview","link":"SetOverview","description":"Set Selected Movie Overview
"},{"title":"module:MovieLibraryView.SetProductionYear","link":"SetProductionYear","description":"Set Selected Movie ProductionYear
"},{"title":"module:MovieLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MovieLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MovieLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MovieLibraryView.getRuntime","link":"getRuntime"},{"title":"module:MovieLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MovieLibraryView.init","link":"init"},{"title":"module:MovieLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MovieLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MovieLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MovieLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MovieLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MovieLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MovieLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MovieLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MovieLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieLibraryView.round","link":"round"},{"title":"module:MovieLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MovieLibraryView.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:MovieLibraryView.setSelectedOptions","link":"setSelectedOptions","description":"Data to display when options button selected
"},{"title":"module:MovieLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MovieLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MovieOptions","link":"MovieOptions"},{"title":"module:MovieOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:MovieOptions.init","link":"init"},{"title":"module:MovieOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieOptions.optionsSet","link":"optionsSet"},{"title":"module:MusicAlbumData","link":"MusicAlbumData"},{"title":"module:MusicAlbumData.setFields","link":"setFields"},{"title":"module:MusicAlbumData.setPoster","link":"setPoster"},{"title":"module:MusicAlbumSongListData","link":"MusicAlbumSongListData"},{"title":"module:MusicAlbumSongListData.setFields","link":"setFields"},{"title":"module:MusicAlbumSongListData.setPoster","link":"setPoster"},{"title":"module:MusicArtistData","link":"MusicArtistData"},{"title":"module:MusicArtistData.setFields","link":"setFields"},{"title":"module:MusicArtistData.setPoster","link":"setPoster"},{"title":"module:MusicArtistGridItem","link":"MusicArtistGridItem"},{"title":"module:MusicArtistGridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:MusicArtistGridItem.init","link":"init"},{"title":"module:MusicArtistGridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:MusicArtistGridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:MusicLibraryView","link":"MusicLibraryView"},{"title":"module:MusicLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MusicLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MusicLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MusicLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MusicLibraryView.SetAlbumCount","link":"SetAlbumCount","description":"Set Selected Artist Album Count
"},{"title":"module:MusicLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MusicLibraryView.SetGenres","link":"SetGenres","description":"Set Selected Artist Genres
"},{"title":"module:MusicLibraryView.SetName","link":"SetName","description":"Set Selected Artist Name
"},{"title":"module:MusicLibraryView.SetSongCount","link":"SetSongCount","description":"Set Selected Artist Song Count
"},{"title":"module:MusicLibraryView.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:MusicLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MusicLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MusicLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MusicLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MusicLibraryView.init","link":"init"},{"title":"module:MusicLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MusicLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MusicLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MusicLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MusicLibraryView.onGenreItemFocused","link":"onGenreItemFocused","description":"Genre Item Focused
"},{"title":"module:MusicLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MusicLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MusicLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MusicLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MusicLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MusicLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MusicLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MusicLibraryView.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:MusicLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MusicLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MusicSongData","link":"MusicSongData"},{"title":"module:MusicSongData.setFields","link":"setFields"},{"title":"module:MusicSongData.setPoster","link":"setPoster"},{"title":"module:OSD","link":"OSD"},{"title":"module:OSD.inactiveCheck","link":"inactiveCheck","description":"inactiveCheck: Checks if the time since last keypress is greater than or equal to the allowed inactive time of the menu.
"},{"title":"module:OSD.init","link":"init"},{"title":"module:OSD.moveOptionControls","link":"moveOptionControls","description":"moveOptionControls: Moves option controls node based on passed pixel values
"},{"title":"module:OSD.onButtonSelected","link":"onButtonSelected","description":"onButtonSelected: Handler for selection of buttons from the menu.
"},{"title":"module:OSD.onEpisodeNumberChanged","link":"onEpisodeNumberChanged","description":"onEpisodeNumberChanged: Handler for changes to m.top.episodeNumber param.
"},{"title":"module:OSD.onEpisodeNumberEndChanged","link":"onEpisodeNumberEndChanged","description":"onEpisodeNumberEndChanged: Handler for changes to m.top.episodeNumberEnd param.
"},{"title":"module:OSD.onFocusChanged","link":"onFocusChanged","description":"onFocusChanged: Handler for changes to the focus of this menu.
"},{"title":"module:OSD.onItemTitleTextChanged","link":"onItemTitleTextChanged","description":"onItemTitleTextChanged: Handler for changes to m.top.itemTitleText param.
"},{"title":"module:OSD.onKeyEvent","link":"onKeyEvent"},{"title":"module:OSD.onLogoImageChanged","link":"onLogoImageChanged","description":"onLogoImageChanged: Handler for changes to m.top.logoImage param.
"},{"title":"module:OSD.onLogoLoadStatusChanged","link":"onLogoLoadStatusChanged","description":"onLogoLoadStatusChanged: Handler for changes to logo image's status.
"},{"title":"module:OSD.onPlaybackStateChanged","link":"onPlaybackStateChanged","description":"onPlaybackStateChanged: Handler for changes to m.top.playbackState param
"},{"title":"module:OSD.onProgressPercentageChanged","link":"onProgressPercentageChanged","description":"onProgressPercentageChanged: Handler for changes to m.top.progressPercentage param
"},{"title":"module:OSD.onSeasonNumberChanged","link":"onSeasonNumberChanged","description":"onSeasonNumberChanged: Handler for changes to m.top.seasonNumber param.
"},{"title":"module:OSD.onVisibleChanged","link":"onVisibleChanged","description":"onVisibleChanged: Handler for changes to the visibility of this menu.
"},{"title":"module:OSD.resetFocusToDefaultButton","link":"resetFocusToDefaultButton","description":"resetFocusToDefaultButton: Reset focus back to the default button
"},{"title":"module:OptionNode","link":"OptionNode"},{"title":"module:OptionNode.init","link":"init"},{"title":"module:OptionsButton","link":"OptionsButton"},{"title":"module:OptionsButton.init","link":"init"},{"title":"module:OptionsButton.press","link":"press"},{"title":"module:OptionsData","link":"OptionsData"},{"title":"module:OptionsData.init","link":"init"},{"title":"module:OptionsData.press","link":"press"},{"title":"module:OptionsData.update_title","link":"update_title"},{"title":"module:OptionsSlider","link":"OptionsSlider"},{"title":"module:OptionsSlider.init","link":"init"},{"title":"module:OptionsSlider.onKeyEvent","link":"onKeyEvent"},{"title":"module:OptionsSlider.setFields","link":"setFields"},{"title":"module:OverviewDialog","link":"OverviewDialog"},{"title":"module:OverviewDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:OverviewDialog.setOverview","link":"setOverview"},{"title":"module:OverviewDialog.setTitle","link":"setTitle"},{"title":"module:PersonData","link":"PersonData"},{"title":"module:PersonData.setFields","link":"setFields"},{"title":"module:PersonData.setPoster","link":"setPoster"},{"title":"module:PersonDetails","link":"PersonDetails"},{"title":"module:PersonDetails.createDialogPallete","link":"createDialogPallete"},{"title":"module:PersonDetails.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PersonDetails.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:PersonDetails.init","link":"init"},{"title":"module:PersonDetails.loadPerson","link":"loadPerson"},{"title":"module:PersonDetails.onButtonGroupEscaped","link":"onButtonGroupEscaped"},{"title":"module:PersonDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PersonDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:PersonDetails.shortDate","link":"shortDate"},{"title":"module:PhotoData","link":"PhotoData"},{"title":"module:PhotoData.setFields","link":"setFields"},{"title":"module:PhotoData.setPoster","link":"setPoster"},{"title":"module:PhotoDetails","link":"PhotoDetails"},{"title":"module:PhotoDetails.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook.\nUsed to ensure tasks are stopped
"},{"title":"module:PhotoDetails.init","link":"init"},{"title":"module:PhotoDetails.isRandomChanged","link":"isRandomChanged","description":"isRandom component field has changed
"},{"title":"module:PhotoDetails.isSlideshowChanged","link":"isSlideshowChanged","description":"isSlideshow component field has changed
"},{"title":"module:PhotoDetails.isValidToContinue","link":"isValidToContinue"},{"title":"module:PhotoDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:PhotoDetails.nextSlide","link":"nextSlide"},{"title":"module:PhotoDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PhotoDetails.onPhotoLoaded","link":"onPhotoLoaded"},{"title":"module:PhotoDetails.statusUpdate","link":"statusUpdate"},{"title":"module:PlaybackDialog","link":"PlaybackDialog"},{"title":"module:PlaybackDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlayedCheckmark","link":"PlayedCheckmark"},{"title":"module:PlayedCheckmark.init","link":"init"},{"title":"module:PlaylistData","link":"PlaylistData"},{"title":"module:PlaylistData.setFields","link":"setFields"},{"title":"module:PlaylistData.setPoster","link":"setPoster"},{"title":"module:PlaylistView","link":"PlaylistView"},{"title":"module:PlaylistView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:PlaylistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:PlaylistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PlaylistView.init","link":"init"},{"title":"module:PlaylistView.onDoneLoading","link":"onDoneLoading"},{"title":"module:PlaylistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlaylistView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:PlaylistView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:PlaylistView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:PlaylistView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:PlaylistView.setupMainNode","link":"setupMainNode"},{"title":"module:PlaystateTask","link":"PlaystateTask"},{"title":"module:PlaystateTask.PlaystateDefaults","link":"PlaystateDefaults"},{"title":"module:PlaystateTask.PlaystateUpdate","link":"PlaystateUpdate"},{"title":"module:PlaystateTask.init","link":"init"},{"title":"module:PostTask","link":"PostTask"},{"title":"module:PostTask.asyncPost","link":"asyncPost","description":"Post data and wait for response code
"},{"title":"module:PostTask.empty","link":"empty","description":"Revert PostTask to default state
"},{"title":"module:PostTask.init","link":"init"},{"title":"module:PostTask.postItems","link":"postItems","description":"Main function for PostTask.\nPosts either an array of data\nor a string of data to an API endpoint.\nSaves the response information
"},{"title":"module:ProgramDetails","link":"ProgramDetails"},{"title":"module:ProgramDetails.channelUpdated","link":"channelUpdated"},{"title":"module:ProgramDetails.focusChanged","link":"focusChanged","description":"Show view channel button when item has Focus
"},{"title":"module:ProgramDetails.getDurationStringFromSeconds","link":"getDurationStringFromSeconds","description":"Get program duration string (e.g. 1h 20m)
"},{"title":"module:ProgramDetails.getRelativeDayName","link":"getRelativeDayName","description":"Get relative date name for a date (yesterday, today, tomorrow, or otherwise weekday name )
"},{"title":"module:ProgramDetails.init","link":"init"},{"title":"module:ProgramDetails.onAnimationComplete","link":"onAnimationComplete"},{"title":"module:ProgramDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:ProgramDetails.programUpdated","link":"programUpdated"},{"title":"module:ProgramDetails.setupLabels","link":"setupLabels","description":"Set up Live and Repeat label sizes
"},{"title":"module:ProgramDetails.updateLabels","link":"updateLabels"},{"title":"module:PublicUserData","link":"PublicUserData"},{"title":"module:PublicUserData.init","link":"init"},{"title":"module:QueueManager","link":"QueueManager"},{"title":"module:QueueManager.clear","link":"clear","description":"Clear all content from play queue
"},{"title":"module:QueueManager.clearHold","link":"clearHold","description":"Clear all hold content
"},{"title":"module:QueueManager.deleteAtIndex","link":"deleteAtIndex","description":"Delete item from play queue at passed index
"},{"title":"module:QueueManager.getCount","link":"getCount","description":"Return the number of items in the play queue
"},{"title":"module:QueueManager.getCurrentItem","link":"getCurrentItem","description":"Return the item currently in focus from the play queue
"},{"title":"module:QueueManager.getHold","link":"getHold","description":"Return the items in the hold
"},{"title":"module:QueueManager.getIsShuffled","link":"getIsShuffled","description":"Return whether or not shuffle is enabled
"},{"title":"module:QueueManager.getItemByIndex","link":"getItemByIndex","description":"Return the item in the passed index from the play queue
"},{"title":"module:QueueManager.getItemType","link":"getItemType","description":"getItemType: Returns the media type of the passed item
"},{"title":"module:QueueManager.getPosition","link":"getPosition","description":"Returns current playback position within the queue
"},{"title":"module:QueueManager.getQueue","link":"getQueue","description":"Return the current play queue
"},{"title":"module:QueueManager.getQueueTypes","link":"getQueueTypes","description":"Return the types of items in current play queue
"},{"title":"module:QueueManager.getQueueUniqueTypes","link":"getQueueUniqueTypes","description":"Return the unique types of items in current play queue
"},{"title":"module:QueueManager.getUnshuffledQueue","link":"getUnshuffledQueue","description":"Return original, unshuffled queue
"},{"title":"module:QueueManager.hold","link":"hold","description":"Hold an item
"},{"title":"module:QueueManager.init","link":"init"},{"title":"module:QueueManager.isPrerollActive","link":"isPrerollActive","description":"Return isPrerollActive status
"},{"title":"module:QueueManager.moveBack","link":"moveBack","description":"Move queue position back one
"},{"title":"module:QueueManager.moveForward","link":"moveForward","description":"Move queue position ahead one
"},{"title":"module:QueueManager.peek","link":"peek","description":"Return item at end of play queue without removing
"},{"title":"module:QueueManager.playQueue","link":"playQueue","description":"Play items in queue
"},{"title":"module:QueueManager.pop","link":"pop","description":"Remove item at end of play queue
"},{"title":"module:QueueManager.push","link":"push","description":"Push new items to the play queue
"},{"title":"module:QueueManager.resetQueueItemOrder","link":"resetQueueItemOrder","description":"Reset queue items back to original, unshuffled order
"},{"title":"module:QueueManager.resetShuffle","link":"resetShuffle","description":"Reset shuffle to off state
"},{"title":"module:QueueManager.set","link":"set","description":"Replace play queue with passed array
"},{"title":"module:QueueManager.setPosition","link":"setPosition","description":"Set the queue position
"},{"title":"module:QueueManager.setPrerollStatus","link":"setPrerollStatus","description":"Set prerollActive status
"},{"title":"module:QueueManager.setTopStartingPoint","link":"setTopStartingPoint","description":"Set starting point for top item in the queue
"},{"title":"module:QueueManager.shuffleQueueItems","link":"shuffleQueueItems","description":"Save a copy of the original queue and randomize order of queue items
"},{"title":"module:QueueManager.toggleShuffle","link":"toggleShuffle","description":"Toggle shuffleEnabled state
"},{"title":"module:QueueManager.top","link":"top","description":"Return the fitst item in the play queue
"},{"title":"module:QuickConnect","link":"QuickConnect"},{"title":"module:QuickConnect.init","link":"init"},{"title":"module:QuickConnect.monitorQuickConnect","link":"monitorQuickConnect"},{"title":"module:QuickConnectDialog","link":"QuickConnectDialog"},{"title":"module:QuickConnectDialog.OnAuthenticated","link":"OnAuthenticated"},{"title":"module:QuickConnectDialog.init","link":"init"},{"title":"module:QuickConnectDialog.onButtonSelected","link":"onButtonSelected"},{"title":"module:QuickConnectDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:QuickConnectDialog.quickConnectClosed","link":"quickConnectClosed"},{"title":"module:QuickConnectDialog.quickConnectStatus","link":"quickConnectStatus"},{"title":"module:RadioDialog","link":"RadioDialog"},{"title":"module:RadioDialog.init","link":"init"},{"title":"module:RadioDialog.moveScrollBar","link":"moveScrollBar","description":"Move the popup's scroll bar
"},{"title":"module:RadioDialog.onButtonSelected","link":"onButtonSelected","description":"Event handler for when user selected a button
"},{"title":"module:RadioDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:RadioDialog.onItemFocused","link":"onItemFocused","description":"Event handler for when user's cursor highlights an option in the option list
"},{"title":"module:RadioDialog.onItemSelected","link":"onItemSelected","description":"Once user selected an item, move cursor down to OK button
"},{"title":"module:RadioDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:RadioDialog.onScrollBarFocus","link":"onScrollBarFocus","description":"If somehow the scrollbar gains focus, set focus back to the option list
"},{"title":"module:RecordProgramTask","link":"RecordProgramTask"},{"title":"module:RecordProgramTask.RecordOrCancelProgram","link":"RecordOrCancelProgram"},{"title":"module:RecordProgramTask.init","link":"init"},{"title":"module:RecordingData","link":"RecordingData"},{"title":"module:RecordingData.setFields","link":"setFields"},{"title":"module:RecordingData.setPoster","link":"setPoster"},{"title":"module:SceneManager","link":"SceneManager"},{"title":"module:SceneManager.clearPreviousScene","link":"clearPreviousScene","description":"Clear previous scene from group stack
"},{"title":"module:SceneManager.clearScenes","link":"clearScenes","description":"Clear all content from group stack
"},{"title":"module:SceneManager.deleteSceneAtIndex","link":"deleteSceneAtIndex","description":"Delete scene from group stack at passed index
"},{"title":"module:SceneManager.dismissDialog","link":"dismissDialog","description":"Close currently displayed dialog
"},{"title":"module:SceneManager.getActiveScene","link":"getActiveScene","description":"Return group at top of stack without removing
"},{"title":"module:SceneManager.init","link":"init"},{"title":"module:SceneManager.isDialogOpen","link":"isDialogOpen","description":"Returns bool indicating if dialog is currently displayed
"},{"title":"module:SceneManager.optionClosed","link":"optionClosed","description":"Return button the user selected
"},{"title":"module:SceneManager.optionDialog","link":"optionDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.optionSelected","link":"optionSelected","description":"Return button the user selected
"},{"title":"module:SceneManager.popScene","link":"popScene","description":"Remove the current group and load the last group from the stack
"},{"title":"module:SceneManager.pushScene","link":"pushScene","description":"Push a new group onto the stack, replacing the existing group on the screen
"},{"title":"module:SceneManager.radioDialog","link":"radioDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.registerOverhangData","link":"registerOverhangData","description":"Register observers for overhang data
"},{"title":"module:SceneManager.resetTime","link":"resetTime","description":"Reset time
"},{"title":"module:SceneManager.settings","link":"settings","description":"Display user/device settings screen
"},{"title":"module:SceneManager.standardDialog","link":"standardDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.unregisterOverhangData","link":"unregisterOverhangData","description":"Remove observers for overhang data
"},{"title":"module:SceneManager.updateOptions","link":"updateOptions","description":"Update options availability
"},{"title":"module:SceneManager.updateOverhangTitle","link":"updateOverhangTitle","description":"Update overhang title
"},{"title":"module:SceneManager.updateOverhangVisible","link":"updateOverhangVisible","description":"Update whether the overhang is visible or not
"},{"title":"module:SceneManager.updateUser","link":"updateUser","description":"Update username in overhang
"},{"title":"module:SceneManager.userMessage","link":"userMessage","description":"Display dialog to user with an OK button
"},{"title":"module:ScheduleProgramData","link":"ScheduleProgramData"},{"title":"module:ScheduleProgramData.setFields","link":"setFields"},{"title":"module:ScheduleProgramData.setPoster","link":"setPoster"},{"title":"module:SearchBox","link":"SearchBox"},{"title":"module:SearchBox.init","link":"init"},{"title":"module:SearchBox.searchMedias","link":"searchMedias"},{"title":"module:SearchData","link":"SearchData"},{"title":"module:SearchData.setFields","link":"setFields"},{"title":"module:SearchData.setPoster","link":"setPoster"},{"title":"module:SearchResults","link":"SearchResults"},{"title":"module:SearchResults.init","link":"init"},{"title":"module:SearchResults.loadResults","link":"loadResults"},{"title":"module:SearchResults.onKeyEvent","link":"onKeyEvent"},{"title":"module:SearchResults.searchMedias","link":"searchMedias"},{"title":"module:SearchRow","link":"SearchRow"},{"title":"module:SearchRow.addRow","link":"addRow"},{"title":"module:SearchRow.getData","link":"getData"},{"title":"module:SearchRow.init","link":"init"},{"title":"module:SearchRow.updateSize","link":"updateSize"},{"title":"module:SearchTask","link":"SearchTask"},{"title":"module:SearchTask.init","link":"init"},{"title":"module:SearchTask.search","link":"search"},{"title":"module:SeriesData","link":"SeriesData"},{"title":"module:SeriesData.setFields","link":"setFields"},{"title":"module:SeriesData.setPoster","link":"setPoster"},{"title":"module:ServerDiscoveryTask","link":"ServerDiscoveryTask"},{"title":"module:ServerDiscoveryTask.AddServer","link":"AddServer"},{"title":"module:ServerDiscoveryTask.ProcessClientDiscoveryResponse","link":"ProcessClientDiscoveryResponse"},{"title":"module:ServerDiscoveryTask.ProcessSSDPResponse","link":"ProcessSSDPResponse"},{"title":"module:ServerDiscoveryTask.SendClientDiscoveryBroadcast","link":"SendClientDiscoveryBroadcast"},{"title":"module:ServerDiscoveryTask.SendSSDPBroadcast","link":"SendSSDPBroadcast"},{"title":"module:ServerDiscoveryTask.execute","link":"execute"},{"title":"module:ServerDiscoveryTask.init","link":"init","description":"Task used to discover jellyfin servers on the local network
"},{"title":"module:SetServerScreen","link":"SetServerScreen"},{"title":"module:SetServerScreen.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:SetServerScreen.ScanForServers","link":"ScanForServers"},{"title":"module:SetServerScreen.ScanForServersComplete","link":"ScanForServersComplete"},{"title":"module:SetServerScreen.ShowKeyboard","link":"ShowKeyboard"},{"title":"module:SetServerScreen.clearErrorMessage","link":"clearErrorMessage"},{"title":"module:SetServerScreen.init","link":"init"},{"title":"module:SetServerScreen.onDialogButton","link":"onDialogButton"},{"title":"module:SetServerScreen.onKeyEvent","link":"onKeyEvent"},{"title":"module:ShowScenes","link":"ShowScenes"},{"title":"module:ShowScenes.CreateAlbumView","link":"CreateAlbumView","description":"Shows details on selected album. Description text, image, and list of available songs
"},{"title":"module:ShowScenes.CreateArtistView","link":"CreateArtistView","description":"Shows details on selected artist. Bio, image, and list of available albums
"},{"title":"module:ShowScenes.CreateHomeGroup","link":"CreateHomeGroup"},{"title":"module:ShowScenes.CreateItemGrid","link":"CreateItemGrid"},{"title":"module:ShowScenes.CreateMovieDetailsGroup","link":"CreateMovieDetailsGroup"},{"title":"module:ShowScenes.CreateMovieLibraryView","link":"CreateMovieLibraryView"},{"title":"module:ShowScenes.CreateMusicLibraryView","link":"CreateMusicLibraryView"},{"title":"module:ShowScenes.CreatePersonView","link":"CreatePersonView"},{"title":"module:ShowScenes.CreatePlaylistView","link":"CreatePlaylistView","description":"Shows details on selected playlist. Description text, image, and list of available items
"},{"title":"module:ShowScenes.CreateSearchPage","link":"CreateSearchPage"},{"title":"module:ShowScenes.CreateSeasonDetailsGroup","link":"CreateSeasonDetailsGroup"},{"title":"module:ShowScenes.CreateSeasonDetailsGroupByID","link":"CreateSeasonDetailsGroupByID"},{"title":"module:ShowScenes.CreateSeriesDetailsGroup","link":"CreateSeriesDetailsGroup"},{"title":"module:ShowScenes.CreateServerGroup","link":"CreateServerGroup"},{"title":"module:ShowScenes.CreateSigninGroup","link":"CreateSigninGroup"},{"title":"module:ShowScenes.CreateUserSelectGroup","link":"CreateUserSelectGroup"},{"title":"module:ShowScenes.CreateVideoPlayerGroup","link":"CreateVideoPlayerGroup"},{"title":"module:ShowScenes.DeleteFromServerList","link":"DeleteFromServerList"},{"title":"module:ShowScenes.LoginFlow","link":"LoginFlow"},{"title":"module:ShowScenes.SaveServerList","link":"SaveServerList"},{"title":"module:ShowScenes.SendPerformanceBeacon","link":"SendPerformanceBeacon","description":"Roku Performance monitoring
"},{"title":"module:ShowScenes.playbackOptionDialog","link":"playbackOptionDialog","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:SlideOutButton","link":"SlideOutButton"},{"title":"module:SlideOutButton.init","link":"init"},{"title":"module:SlideOutButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:SlideOutButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:SlideOutButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:SlideOutButton.onHighlightChanged","link":"onHighlightChanged"},{"title":"module:SlideOutButton.onIconChanged","link":"onIconChanged"},{"title":"module:SlideOutButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:SlideOutButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:SlideOutButton.onTextChanged","link":"onTextChanged"},{"title":"module:SlideOutButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:SlideOutButton.setIconSize","link":"setIconSize"},{"title":"module:SongItem","link":"SongItem"},{"title":"module:SongItem.focusChanged","link":"focusChanged"},{"title":"module:SongItem.init","link":"init"},{"title":"module:SongItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:Spinner","link":"Spinner"},{"title":"module:Spinner.init","link":"init"},{"title":"module:StandardDialog","link":"StandardDialog"},{"title":"module:StandardDialog.init","link":"init"},{"title":"module:StandardDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:Subtitles","link":"Subtitles"},{"title":"module:Subtitles.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:Subtitles.changeSubtitleDuringPlayback","link":"changeSubtitleDuringPlayback"},{"title":"module:Subtitles.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"Identify the default subtitle track\nif "requires_text" is true, only return a track if it is textual\nThis allows forcing text subs, since roku requires transcoding of non-text subs\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"Identify the default subtitle track for a given video id\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.getSubtitleLanguages","link":"getSubtitleLanguages"},{"title":"module:Subtitles.getSubtitleSelIdxFromSubIdx","link":"getSubtitleSelIdxFromSubIdx","description":"The subtitle index on the server differs from the index we track locally\nThis function converts the former into the latter
"},{"title":"module:Subtitles.selectSubtitleTrack","link":"selectSubtitleTrack"},{"title":"module:Subtitles.selectSubtitleTrackDialog","link":"selectSubtitleTrackDialog","description":"Present Dialog to user to select subtitle track
"},{"title":"module:Subtitles.setupSubtitle","link":"setupSubtitle","description":"Given a set of subtitles, and a subtitle index (the index on the server, not in the list provided)\nthis will set all relevant settings for roku (mainly closed captions) and return the index of the\nsubtitle track specified, but indexed based on the provided list of subtitles
"},{"title":"module:Subtitles.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:Subtitles.turnoffSubtitles","link":"turnoffSubtitles"},{"title":"module:TVEpisode","link":"TVEpisode"},{"title":"module:TVEpisode.setFields","link":"setFields"},{"title":"module:TVEpisode.setPoster","link":"setPoster"},{"title":"module:TVEpisodeData","link":"TVEpisodeData"},{"title":"module:TVEpisodeData.setFields","link":"setFields"},{"title":"module:TVEpisodeData.setPoster","link":"setPoster"},{"title":"module:TVEpisodeRow","link":"TVEpisodeRow"},{"title":"module:TVEpisodeRow.init","link":"init"},{"title":"module:TVEpisodeRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRow.setData","link":"setData"},{"title":"module:TVEpisodeRow.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRow.updateSize","link":"updateSize"},{"title":"module:TVEpisodeRowWithOptions","link":"TVEpisodeRowWithOptions"},{"title":"module:TVEpisodeRowWithOptions.SetUpAudioOptions","link":"SetUpAudioOptions","description":"List of audio tracks to choose from
"},{"title":"module:TVEpisodeRowWithOptions.SetUpVideoOptions","link":"SetUpVideoOptions","description":"List of video versions to choose from
"},{"title":"module:TVEpisodeRowWithOptions.audioOptionsClosed","link":"audioOptionsClosed"},{"title":"module:TVEpisodeRowWithOptions.init","link":"init"},{"title":"module:TVEpisodeRowWithOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRowWithOptions.rowsDoneLoading","link":"rowsDoneLoading"},{"title":"module:TVEpisodeRowWithOptions.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRowWithOptions.videoOptionsClosed","link":"videoOptionsClosed"},{"title":"module:TVEpisodes","link":"TVEpisodes"},{"title":"module:TVEpisodes.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:TVEpisodes.getFocusedItem","link":"getFocusedItem","description":"get the currently focused item
"},{"title":"module:TVEpisodes.init","link":"init"},{"title":"module:TVEpisodes.onKeyEvent","link":"onKeyEvent","description":"Handle navigation input from the remote and act on it
"},{"title":"module:TVEpisodes.setExtraButtonVisibility","link":"setExtraButtonVisibility","description":"Updates the visibility of the Extras button based on if this season has any extra features
"},{"title":"module:TVEpisodes.setSeasonLoading","link":"setSeasonLoading"},{"title":"module:TVEpisodes.updateSeason","link":"updateSeason"},{"title":"module:TVListDetails","link":"TVListDetails"},{"title":"module:TVListDetails.DisplayAudioAvailable","link":"DisplayAudioAvailable","description":"Adds "+N" (e.g. +1) if there is more than one audio track to choose from
"},{"title":"module:TVListDetails.DisplayVideoAvailable","link":"DisplayVideoAvailable","description":"Adds "+N" (e.g. +1) if there is more than one video version to choose from
"},{"title":"module:TVListDetails.SetupAudioDisplay","link":"SetupAudioDisplay","description":"Display current audio_codec and check if there is more than one audio track to choose from...
"},{"title":"module:TVListDetails.focusChanged","link":"focusChanged"},{"title":"module:TVListDetails.getEndTime","link":"getEndTime"},{"title":"module:TVListDetails.getRuntime","link":"getRuntime"},{"title":"module:TVListDetails.init","link":"init"},{"title":"module:TVListDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVListOptions","link":"TVListOptions"},{"title":"module:TVListOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:TVListOptions.init","link":"init"},{"title":"module:TVListOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVListOptions.optionsSet","link":"optionsSet"},{"title":"module:TVSeasonData","link":"TVSeasonData"},{"title":"module:TVSeasonData.setFields","link":"setFields"},{"title":"module:TVSeasonData.setPoster","link":"setPoster"},{"title":"module:TVSeasonRow","link":"TVSeasonRow"},{"title":"module:TVSeasonRow.getData","link":"getData"},{"title":"module:TVSeasonRow.init","link":"init"},{"title":"module:TVSeasonRow.updateSize","link":"updateSize"},{"title":"module:TVShowDescription","link":"TVShowDescription"},{"title":"module:TVShowDescription.getEndTime","link":"getEndTime"},{"title":"module:TVShowDescription.getHistory","link":"getHistory"},{"title":"module:TVShowDescription.getRuntime","link":"getRuntime"},{"title":"module:TVShowDescription.init","link":"init"},{"title":"module:TVShowDescription.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDescription.round","link":"round"},{"title":"module:TVShowDescription.setFieldText","link":"setFieldText"},{"title":"module:TVShowDetails","link":"TVShowDetails"},{"title":"module:TVShowDetails.getEndTime","link":"getEndTime"},{"title":"module:TVShowDetails.getHistory","link":"getHistory"},{"title":"module:TVShowDetails.getRuntime","link":"getRuntime"},{"title":"module:TVShowDetails.init","link":"init"},{"title":"module:TVShowDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVShowDetails.onShuffleEpisodeDataLoaded","link":"onShuffleEpisodeDataLoaded"},{"title":"module:TVShowDetails.round","link":"round"},{"title":"module:TVShowDetails.setFieldText","link":"setFieldText"},{"title":"module:TextSizeTask","link":"TextSizeTask"},{"title":"module:TextSizeTask.getTextSize","link":"getTextSize"},{"title":"module:TextSizeTask.init","link":"init"},{"title":"module:UserData","link":"UserData"},{"title":"module:UserData.getPreference","link":"getPreference"},{"title":"module:UserData.loadFromJSON","link":"loadFromJSON"},{"title":"module:UserData.loadFromRegistry","link":"loadFromRegistry"},{"title":"module:UserData.removeFromRegistry","link":"removeFromRegistry"},{"title":"module:UserData.saveToRegistry","link":"saveToRegistry"},{"title":"module:UserData.setDataFromJSON","link":"setDataFromJSON"},{"title":"module:UserData.setPreference","link":"setPreference"},{"title":"module:UserData.setServer","link":"setServer"},{"title":"module:UserItem","link":"UserItem"},{"title":"module:UserItem.init","link":"init"},{"title":"module:UserItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserLibrary","link":"UserLibrary"},{"title":"module:UserLibrary.MarkItemFavorite","link":"MarkItemFavorite"},{"title":"module:UserLibrary.MarkItemWatched","link":"MarkItemWatched"},{"title":"module:UserLibrary.UnmarkItemFavorite","link":"UnmarkItemFavorite"},{"title":"module:UserLibrary.UnmarkItemWatched","link":"UnmarkItemWatched"},{"title":"module:UserRow","link":"UserRow"},{"title":"module:UserRow.init","link":"init"},{"title":"module:UserRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserRow.setData","link":"setData"},{"title":"module:UserRow.setUser","link":"setUser"},{"title":"module:UserRow.updateSize","link":"updateSize"},{"title":"module:UserSelect","link":"UserSelect"},{"title":"module:UserSelect.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:UserSelect.init","link":"init"},{"title":"module:UserSelect.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserSelect.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserSelect.redraw","link":"redraw"},{"title":"module:VideoData","link":"VideoData"},{"title":"module:VideoData.setFields","link":"setFields"},{"title":"module:VideoData.setPoster","link":"setPoster"},{"title":"module:VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.AddVideoContent","link":"AddVideoContent"},{"title":"module:VideoPlayer.GetPlaybackInfo","link":"GetPlaybackInfo","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:VideoPlayer.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:VideoPlayer.PlayIntroVideo","link":"PlayIntroVideo"},{"title":"module:VideoPlayer.VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.autoPlayNextEpisode","link":"autoPlayNextEpisode"},{"title":"module:VideoPlayer.directPlaySupported","link":"directPlaySupported"},{"title":"module:VideoPlayer.getAudioFormat","link":"getAudioFormat"},{"title":"module:VideoPlayer.getAudioInfo","link":"getAudioInfo"},{"title":"module:VideoPlayer.getContainerType","link":"getContainerType"},{"title":"module:VideoPlayer.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:VideoPlayer.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:VideoPlayer.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:VideoPlayer.startPlayBackOver","link":"startPlayBackOver","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:VideoPlayerView","link":"VideoPlayerView"},{"title":"module:VideoPlayerView.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:VideoPlayerView.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"availSubtitleTrackIdx: Returns Roku's index for requested subtitle track
"},{"title":"module:VideoPlayerView.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:VideoPlayerView.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:VideoPlayerView.getCurrentChapterIndex","link":"getCurrentChapterIndex","description":"getCurrentChapterIndex: Finds current chapter index
"},{"title":"module:VideoPlayerView.handleChapterListAction","link":"handleChapterListAction","description":"handleChapterListAction: Handles action to show chapter list
"},{"title":"module:VideoPlayerView.handleChapterSkipAction","link":"handleChapterSkipAction","description":"handleChapterSkipAction: Handles user command to skip chapters in playing video
"},{"title":"module:VideoPlayerView.handleHideAction","link":"handleHideAction","description":"handleHideAction: Handles action to hide OSD menu
"},{"title":"module:VideoPlayerView.handleItemSkipAction","link":"handleItemSkipAction","description":"handleItemSkipAction: Handles user command to skip items
"},{"title":"module:VideoPlayerView.handleShowAudioMenuAction","link":"handleShowAudioMenuAction","description":"handleShowAudioMenuAction: Handles action to show audio selection menu
"},{"title":"module:VideoPlayerView.handleShowSubtitleMenuAction","link":"handleShowSubtitleMenuAction","description":"handleShowSubtitleMenuAction: Handles action to show subtitle selection menu
"},{"title":"module:VideoPlayerView.handleShowVideoInfoPopupAction","link":"handleShowVideoInfoPopupAction","description":"handleShowVideoInfoPopupAction: Handles action to show video info popup
"},{"title":"module:VideoPlayerView.handleVideoPlayPauseAction","link":"handleVideoPlayPauseAction","description":"handleVideoPlayPauseAction: Handles action to either play or pause the video content
"},{"title":"module:VideoPlayerView.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:VideoPlayerView.init","link":"init"},{"title":"module:VideoPlayerView.loadCaption","link":"loadCaption","description":"Set caption url to server subtitle track
"},{"title":"module:VideoPlayerView.onAllowCaptionsChange","link":"onAllowCaptionsChange","description":"Only setup caption items if captions are allowed
"},{"title":"module:VideoPlayerView.onAudioIndexChange","link":"onAudioIndexChange","description":"Event handler for when audioIndex changes
"},{"title":"module:VideoPlayerView.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:VideoPlayerView.onKeyEvent","link":"onKeyEvent"},{"title":"module:VideoPlayerView.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:VideoPlayerView.onOSDAction","link":"onOSDAction","description":"onOSDAction: Process action events from OSD to their respective handlers
"},{"title":"module:VideoPlayerView.onPlaybackErrorButtonSelected","link":"onPlaybackErrorButtonSelected"},{"title":"module:VideoPlayerView.onPlaybackErrorDialogClosed","link":"onPlaybackErrorDialogClosed"},{"title":"module:VideoPlayerView.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onSubtitleChange","link":"onSubtitleChange","description":"Event handler for when selectedSubtitle changes
"},{"title":"module:VideoPlayerView.onVideoContentLoaded","link":"onVideoContentLoaded"},{"title":"module:VideoPlayerView.populateChapterMenu","link":"populateChapterMenu","description":"populateChapterMenu: ' Parse chapter data from API and appeand to chapter list menu
"},{"title":"module:VideoPlayerView.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:VideoPlayerView.showPlaybackErrorDialog","link":"showPlaybackErrorDialog"},{"title":"module:VideoPlayerView.stateAllowsOSD","link":"stateAllowsOSD","description":"stateAllowsOSD: Check if current video state allows showing the OSD
"},{"title":"module:VideoPlayerView.toggleCaption","link":"toggleCaption","description":"Toggles visibility of custom subtitles and sets captionTask's player state
"},{"title":"module:VideoPlayerView.updateCaption","link":"updateCaption","description":"Removes old subtitle lines and adds new subtitle lines
"},{"title":"module:VideoPlayerView.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:VideoTrackListItem","link":"VideoTrackListItem"},{"title":"module:VideoTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:VideoTrackListItem.init","link":"init"},{"title":"module:VideoTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ViewCreator","link":"ViewCreator"},{"title":"module:ViewCreator.CreateAudioPlayerView","link":"CreateAudioPlayerView","description":"Play Audio
"},{"title":"module:ViewCreator.CreateVideoPlayerView","link":"CreateVideoPlayerView","description":"Play Video
"},{"title":"module:ViewCreator.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:ViewCreator.onPlaybackInfoLoaded","link":"onPlaybackInfoLoaded","description":"The playback info task has returned data
"},{"title":"module:ViewCreator.onSelectAudioPressed","link":"onSelectAudioPressed","description":"onSelectAudioPressed: Display audio selection dialog
"},{"title":"module:ViewCreator.onSelectPlaybackInfoPressed","link":"onSelectPlaybackInfoPressed","description":"User requested playback info
"},{"title":"module:ViewCreator.onSelectSubtitlePressed","link":"onSelectSubtitlePressed","description":"User requested subtitle selection popup
"},{"title":"module:ViewCreator.onSelectionMade","link":"onSelectionMade","description":"User has selected something from the radioDialog popup
"},{"title":"module:ViewCreator.onStateChange","link":"onStateChange","description":"Playback state change event handlers
"},{"title":"module:ViewCreator.processAudioSelection","link":"processAudioSelection","description":"processAudioSelection: Audio track selection handler
"},{"title":"module:ViewCreator.processSubtitleSelection","link":"processSubtitleSelection"},{"title":"module:WhatsNewDialog","link":"WhatsNewDialog"},{"title":"module:WhatsNewDialog.init","link":"init"},{"title":"module:WhatsNewDialog.setPalette","link":"setPalette"},{"title":"module:baserequest","link":"baserequest"},{"title":"module:baserequest.APIRequest","link":"APIRequest"},{"title":"module:baserequest.authRequest","link":"authRequest","description":"Takes and returns a roUrlTransfer object after adding a Jellyfin "Authorization" header
"},{"title":"module:baserequest.buildAuthHeader","link":"buildAuthHeader","description":"Returns a string containing the "Authorization" header payload
"},{"title":"module:baserequest.buildParams","link":"buildParams","description":"Functions for making requests to the API
"},{"title":"module:baserequest.buildURL","link":"buildURL"},{"title":"module:baserequest.deleteVoid","link":"deleteVoid"},{"title":"module:baserequest.getJson","link":"getJson"},{"title":"module:baserequest.getString","link":"getString"},{"title":"module:baserequest.getVoid","link":"getVoid"},{"title":"module:baserequest.get_url","link":"get_url"},{"title":"module:baserequest.headVoid","link":"headVoid"},{"title":"module:baserequest.postJson","link":"postJson"},{"title":"module:baserequest.postString","link":"postString"},{"title":"module:baserequest.postVoid","link":"postVoid"},{"title":"module:baserequest.setCertificateAuthority","link":"setCertificateAuthority","description":"sets the certificate authority by file path on the passed node
"},{"title":"module:captionTask","link":"captionTask"},{"title":"module:captionTask.fetchCaption","link":"fetchCaption"},{"title":"module:captionTask.init","link":"init"},{"title":"module:captionTask.isTime","link":"isTime"},{"title":"module:captionTask.newLayoutGroup","link":"newLayoutGroup"},{"title":"module:captionTask.newRect","link":"newRect"},{"title":"module:captionTask.newlabel","link":"newlabel"},{"title":"module:captionTask.parseVTT","link":"parseVTT"},{"title":"module:captionTask.setFont","link":"setFont"},{"title":"module:captionTask.toMs","link":"toMs"},{"title":"module:captionTask.updateCaption","link":"updateCaption"},{"title":"module:conditional","link":"conditional"},{"title":"module:conditional.printRegistry","link":"printRegistry","description":"Print out all of the registry contents to the debug log
"},{"title":"module:config","link":"config"},{"title":"module:config.GetConfigTree","link":"GetConfigTree","description":"Read config tree from json config file and return
"},{"title":"module:config.RegistryReadAll","link":"RegistryReadAll","description":"Return all data found inside a registry section
"},{"title":"module:config.findConfigTreeKey","link":"findConfigTreeKey","description":"Recursivly search the config tree for entry with settingname equal to key
"},{"title":"module:config.getRegistrySections","link":"getRegistrySections","description":"Return an array of all the registry section keys
"},{"title":"module:config.getSavedUsers","link":"getSavedUsers","description":"Returns an array of saved users from the registry\nthat belong to the active server
"},{"title":"module:config.get_setting","link":"get_setting","description":""Jellyfin" registry accessors for the default global settings
"},{"title":"module:config.get_user_setting","link":"get_user_setting","description":"User registry accessors for the currently active user
"},{"title":"module:config.registry_delete","link":"registry_delete"},{"title":"module:config.registry_read","link":"registry_read","description":"Generic registry accessors
"},{"title":"module:config.registry_write","link":"registry_write"},{"title":"module:config.set_setting","link":"set_setting"},{"title":"module:config.set_user_setting","link":"set_user_setting"},{"title":"module:config.unset_setting","link":"unset_setting"},{"title":"module:config.unset_user_setting","link":"unset_user_setting"},{"title":"module:deviceCapabilities","link":"deviceCapabilities"},{"title":"module:deviceCapabilities.GetBitRateLimit","link":"GetBitRateLimit"},{"title":"module:deviceCapabilities.GetDirectPlayProfiles","link":"GetDirectPlayProfiles"},{"title":"module:deviceCapabilities.getCodecProfiles","link":"getCodecProfiles"},{"title":"module:deviceCapabilities.getContainerProfiles","link":"getContainerProfiles"},{"title":"module:deviceCapabilities.getDeviceCapabilities","link":"getDeviceCapabilities","description":"Returns the Device Capabilities for Roku.\nAlso prints out the device profile for debugging
"},{"title":"module:deviceCapabilities.getDeviceProfile","link":"getDeviceProfile"},{"title":"module:deviceCapabilities.getMaxHeightArray","link":"getMaxHeightArray"},{"title":"module:deviceCapabilities.getMaxWidthArray","link":"getMaxWidthArray"},{"title":"module:deviceCapabilities.getSubtitleProfiles","link":"getSubtitleProfiles"},{"title":"module:deviceCapabilities.getTranscodingProfiles","link":"getTranscodingProfiles"},{"title":"module:deviceCapabilities.printDeviceProfile","link":"printDeviceProfile","description":"Print out the deviceProfile for debugging
"},{"title":"module:deviceCapabilities.removeDecimals","link":"removeDecimals","description":"Remove all decimals from a string
"},{"title":"module:deviceCapabilities.setPreferredCodec","link":"setPreferredCodec","description":"Takes and returns a comma delimited string of codecs.\nMoves the preferred codec to the front of the string
"},{"title":"module:deviceCapabilities.updateProfileArray","link":"updateProfileArray","description":"Recieves and returns an assArray of supported profiles and levels for each video codec
"},{"title":"module:globals","link":"globals"},{"title":"module:globals.SaveAppToGlobal","link":"SaveAppToGlobal","description":"Save information from roAppInfo to m.global.app
"},{"title":"module:globals.SaveDeviceToGlobal","link":"SaveDeviceToGlobal","description":"Save information from roDeviceInfo to m.global.device
"},{"title":"module:globals.setConstants","link":"setConstants","description":"Set global constants
"},{"title":"module:homeRowItemSizes","link":"homeRowItemSizes"},{"title":"module:migrations","link":"migrations"},{"title":"module:migrations.runGlobalMigrations","link":"runGlobalMigrations","description":"Run all necessary registry mirations on the "global" Jellyfin registry section
"},{"title":"module:migrations.runRegistryUserMigrations","link":"runRegistryUserMigrations"},{"title":"module:misc","link":"misc"},{"title":"module:misc.AssocArrayEqual","link":"AssocArrayEqual"},{"title":"module:misc.arrayHasValue","link":"arrayHasValue","description":"Check if a specific value is inside of an array
"},{"title":"module:misc.createLogoPoster","link":"createLogoPoster","description":"Create and return a Jellyfin logo poster node
"},{"title":"module:misc.createOverhangUser","link":"createOverhangUser"},{"title":"module:misc.createSeperator","link":"createSeperator","description":"Create and return a rectangle node used as a seperator in the overhang
"},{"title":"module:misc.div_ceiling","link":"div_ceiling"},{"title":"module:misc.findNodeBySubtype","link":"findNodeBySubtype"},{"title":"module:misc.formatTime","link":"formatTime","description":"Format time as 12 or 24 hour format based on system clock setting
"},{"title":"module:misc.getButton","link":"getButton"},{"title":"module:misc.getMinutes","link":"getMinutes","description":"Converts ticks to minutes
"},{"title":"module:misc.getMsgPicker","link":"getMsgPicker"},{"title":"module:misc.get_dialog_result","link":"get_dialog_result","description":"Returns the item selected or -1 on backpress or other unhandled closure of dialog.
"},{"title":"module:misc.inArray","link":"inArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:misc.inferServerUrl","link":"inferServerUrl","description":"take an incomplete url string and use it to make educated guesses about\nthe complete url. then tests these guesses to see if it can find a jf server\nreturns the url of the server it found, or an empty string
"},{"title":"module:misc.isAllValid","link":"isAllValid","description":"Returns whether or not all items in passed array are valid
"},{"title":"module:misc.isChainValid","link":"isChainValid","description":"isChainValid: Returns whether or not all the properties in the passed property chain are valid.\nStops evaluating at first found false value
"},{"title":"module:misc.isJellyfinServer","link":"isJellyfinServer","description":"accepts the raw json string of /system/info/public and returns\na boolean indicating if ProductName is "Jellyfin Server"
"},{"title":"module:misc.isLocalhost","link":"isLocalhost","description":"Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
"},{"title":"module:misc.isNodeEvent","link":"isNodeEvent"},{"title":"module:misc.isValid","link":"isValid","description":"Returns whether or not passed value is valid
"},{"title":"module:misc.isValidAndNotEmpty","link":"isValidAndNotEmpty","description":"Returns whether or not passed value is valid and not empty\nAccepts a string, or any countable type (arrays and lists)
"},{"title":"module:misc.lastFocusedChild","link":"lastFocusedChild"},{"title":"module:misc.leftPad","link":"leftPad"},{"title":"module:misc.message_dialog","link":"message_dialog"},{"title":"module:misc.option_dialog","link":"option_dialog"},{"title":"module:misc.parseUrl","link":"parseUrl","description":"Returns an array from a url = [ url, proto, host, port, subdir+params ]\nIf port or subdir are not found, an empty string will be added to the array\nProto must be declared or array will be empty
"},{"title":"module:misc.roundNumber","link":"roundNumber","description":"Rounds number to nearest integer
"},{"title":"module:misc.secondsToHuman","link":"secondsToHuman"},{"title":"module:misc.setFieldTextValue","link":"setFieldTextValue"},{"title":"module:misc.show_dialog","link":"show_dialog"},{"title":"module:misc.shuffleArray","link":"shuffleArray","description":"Takes an array of data, shuffles the order, then returns the array\nuses the Fisher-Yates shuffling algorithm
"},{"title":"module:misc.startLoadingSpinner","link":"startLoadingSpinner","description":"startLoadingSpinner: Start a loading spinner and attach it to the main JFScene.\nDisplays an invisible ProgressDialog node by default to disable keypresses while loading.
"},{"title":"module:misc.stopLoadingSpinner","link":"stopLoadingSpinner"},{"title":"module:misc.ticksToHuman","link":"ticksToHuman"},{"title":"module:misc.toString","link":"toString"},{"title":"module:misc.urlCandidates","link":"urlCandidates","description":"this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates\nfor the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated\nfull urls.
"},{"title":"module:misc.versionChecker","link":"versionChecker","description":"Returns whether or not a version number (e.g. 10.7.7) is greater or equal\nto some minimum version allowed (e.g. 10.8.0)
"},{"title":"module:quickplay","link":"quickplay"},{"title":"module:quickplay.album","link":"album","description":"A music album.\nPlay the entire album starting with track 1.
"},{"title":"module:quickplay.artist","link":"artist","description":"A music artist.\nShuffle play all songs by artist.
"},{"title":"module:quickplay.audio","link":"audio","description":"A single audio file.
"},{"title":"module:quickplay.boxset","link":"boxset","description":"A boxset.\nPlay all items inside.
"},{"title":"module:quickplay.collectionFolder","link":"collectionFolder","description":"Quick Play A CollectionFolder.\nShuffle play the items inside\nwith some differences based on collectionType.
"},{"title":"module:quickplay.folder","link":"folder","description":"Quick Play A folder.\nShuffle play all items found
"},{"title":"module:quickplay.multipleSeries","link":"multipleSeries","description":"More than one TV Show Series.\nShuffle play all watched episodes
"},{"title":"module:quickplay.musicVideo","link":"musicVideo","description":"A single music video file.
"},{"title":"module:quickplay.person","link":"person","description":"Quick Play A Person.\nShuffle play all videos found
"},{"title":"module:quickplay.photo","link":"photo","description":"A single photo.
"},{"title":"module:quickplay.photoAlbum","link":"photoAlbum","description":"A photo album.
"},{"title":"module:quickplay.playlist","link":"playlist","description":"Quick Play A Playlist.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.program","link":"program","description":"Quick Play A Live Program
"},{"title":"module:quickplay.pushToQueue","link":"pushToQueue","description":"Takes an array of items and adds to global queue.\nAlso shuffles the playlist if asked
"},{"title":"module:quickplay.season","link":"season","description":"A TV Show Season.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.series","link":"series","description":"A TV Show Series.\nPlay the first unwatched episode.\nIf none, shuffle play the whole series.
"},{"title":"module:quickplay.tvChannel","link":"tvChannel","description":"Quick Play A TVChannel
"},{"title":"module:quickplay.userView","link":"userView","description":"Quick Play A UserView.\nPlay logic depends on "collectionType".
"},{"title":"module:quickplay.video","link":"video","description":"A single video file.
"},{"title":"module:quickplay.videoContainer","link":"videoContainer","description":"A container with some kind of videos inside of it
"},{"title":"module:schedule","link":"schedule"},{"title":"module:schedule.channelFilterSet","link":"channelFilterSet"},{"title":"module:schedule.channelsearchTermSet","link":"channelsearchTermSet","description":"Voice Search set
"},{"title":"module:schedule.focusProgramDetails","link":"focusProgramDetails","description":"Move the TV Guide Grid down or up depending whether details are selected
"},{"title":"module:schedule.init","link":"init"},{"title":"module:schedule.onChannelsLoaded","link":"onChannelsLoaded","description":"Initial list of channels loaded
"},{"title":"module:schedule.onGridScrolled","link":"onGridScrolled","description":"As user scrolls grid, check if more data requries to be loaded
"},{"title":"module:schedule.onKeyEvent","link":"onKeyEvent"},{"title":"module:schedule.onProgramDetailsLoaded","link":"onProgramDetailsLoaded","description":"Update the Program Details with full information
"},{"title":"module:schedule.onProgramFocused","link":"onProgramFocused"},{"title":"module:schedule.onProgramSelected","link":"onProgramSelected"},{"title":"module:schedule.onRecordChannelSelected","link":"onRecordChannelSelected","description":"Handle user selecting "Record Channel" from Program Details
"},{"title":"module:schedule.onRecordOperationDone","link":"onRecordOperationDone"},{"title":"module:schedule.onRecordSeriesChannelSelected","link":"onRecordSeriesChannelSelected","description":"Handle user selecting "Record Series" from Program Details
"},{"title":"module:schedule.onScheduleLoaded","link":"onScheduleLoaded","description":"When LoadScheduleTask completes (initial or more data) and we have a schedule to display
"},{"title":"module:schedule.onWatchChannelSelected","link":"onWatchChannelSelected","description":"Handle user selecting "Watch Channel" from Program Details
"},{"title":"module:section","link":"section"},{"title":"module:section.init","link":"init"},{"title":"module:section.onFocusChange","link":"onFocusChange"},{"title":"module:section.onIDChange","link":"onIDChange"},{"title":"module:section.onTranslationChange","link":"onTranslationChange"},{"title":"module:section.scrollDownToOnDeck","link":"scrollDownToOnDeck"},{"title":"module:section.scrollOffBottom","link":"scrollOffBottom"},{"title":"module:section.scrollOffOnDeck","link":"scrollOffOnDeck"},{"title":"module:section.scrollOffTop","link":"scrollOffTop"},{"title":"module:section.scrollUpToOnDeck","link":"scrollUpToOnDeck"},{"title":"module:section.showFromBottom","link":"showFromBottom"},{"title":"module:section.showFromTop","link":"showFromTop"},{"title":"module:sectionScroller","link":"sectionScroller"},{"title":"module:sectionScroller.displayedIndexChanged","link":"displayedIndexChanged"},{"title":"module:sectionScroller.init","link":"init"},{"title":"module:sectionScroller.onFocusChange","link":"onFocusChange"},{"title":"module:settings","link":"settings"},{"title":"module:settings.LoadMenu","link":"LoadMenu"},{"title":"module:settings.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook that gets ran as needed.\nAssumes settings were changed and they affect the device profile.\nPosts a new device profile to the server using the task thread
"},{"title":"module:settings.boolSettingChanged","link":"boolSettingChanged"},{"title":"module:settings.init","link":"init"},{"title":"module:settings.isFormInFocus","link":"isFormInFocus","description":"Returns true if any of the data entry forms are in focus
"},{"title":"module:settings.onKeyEvent","link":"onKeyEvent"},{"title":"module:settings.onKeyGridEscape","link":"onKeyGridEscape"},{"title":"module:settings.onKeyGridSubmit","link":"onKeyGridSubmit"},{"title":"module:settings.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:settings.radioSettingChanged","link":"radioSettingChanged"},{"title":"module:settings.settingFocused","link":"settingFocused"},{"title":"module:settings.settingSelected","link":"settingSelected"},{"title":"module:userauth","link":"userauth"},{"title":"module:userauth.AboutMe","link":"AboutMe"},{"title":"module:userauth.AuthenticateViaQuickConnect","link":"AuthenticateViaQuickConnect"},{"title":"module:userauth.AvailableUsers","link":"AvailableUsers"},{"title":"module:userauth.GetPublicUsers","link":"GetPublicUsers"},{"title":"module:userauth.LoadUserAbilities","link":"LoadUserAbilities"},{"title":"module:userauth.ServerInfo","link":"ServerInfo"},{"title":"module:userauth.SignOut","link":"SignOut"},{"title":"module:userauth.checkQuickConnect","link":"checkQuickConnect"},{"title":"module:userauth.get_token","link":"get_token"},{"title":"module:userauth.initQuickConnect","link":"initQuickConnect"}]}
\ No newline at end of file
+{"list":[{"title":"module:AlbumData","link":"AlbumData"},{"title":"module:AlbumData.setFields","link":"setFields"},{"title":"module:AlbumGrid","link":"AlbumGrid"},{"title":"module:AlbumGrid.getData","link":"getData"},{"title":"module:AlbumGrid.init","link":"init"},{"title":"module:AlbumGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumTrackList","link":"AlbumTrackList"},{"title":"module:AlbumTrackList.getData","link":"getData"},{"title":"module:AlbumTrackList.init","link":"init"},{"title":"module:AlbumView","link":"AlbumView"},{"title":"module:AlbumView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:AlbumView.createDialogPallete","link":"createDialogPallete"},{"title":"module:AlbumView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:AlbumView.init","link":"init"},{"title":"module:AlbumView.onDoneLoading","link":"onDoneLoading"},{"title":"module:AlbumView.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:AlbumView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AlbumView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AlbumView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AlbumView.setupMainNode","link":"setupMainNode"},{"title":"module:Alpha","link":"Alpha"},{"title":"module:Alpha.init","link":"init"},{"title":"module:Alpha.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView","link":"ArtistView"},{"title":"module:ArtistView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:ArtistView.OnScreenShown","link":"OnScreenShown"},{"title":"module:ArtistView.artistOverviewChanged","link":"artistOverviewChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:ArtistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:ArtistView.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:ArtistView.init","link":"init"},{"title":"module:ArtistView.onAlbumsData","link":"onAlbumsData"},{"title":"module:ArtistView.onAlbumsEscape","link":"onAlbumsEscape"},{"title":"module:ArtistView.onAppearsOnData","link":"onAppearsOnData"},{"title":"module:ArtistView.onAppearsOnEscape","link":"onAppearsOnEscape"},{"title":"module:ArtistView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:ArtistView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:ArtistView.onEllipsisChanged","link":"onEllipsisChanged"},{"title":"module:ArtistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView.onSectionNavigationEscape","link":"onSectionNavigationEscape"},{"title":"module:ArtistView.onSectionNavigationSelected","link":"onSectionNavigationSelected"},{"title":"module:ArtistView.onSectionScrollerChange","link":"onSectionScrollerChange"},{"title":"module:ArtistView.pageContentChanged","link":"pageContentChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:ArtistView.setPosterImage","link":"setPosterImage"},{"title":"module:ArtistView.setScreenTitle","link":"setScreenTitle"},{"title":"module:ArtistView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:ArtistView.setupMainNode","link":"setupMainNode"},{"title":"module:AudioPlayer","link":"AudioPlayer"},{"title":"module:AudioPlayer.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:AudioPlayer.audioStateChanged","link":"audioStateChanged","description":"State Change Event Handler
"},{"title":"module:AudioPlayer.init","link":"init"},{"title":"module:AudioPlayerView","link":"AudioPlayerView"},{"title":"module:AudioPlayerView.LoadNextSong","link":"LoadNextSong"},{"title":"module:AudioPlayerView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:AudioPlayerView.audioPositionChanged","link":"audioPositionChanged"},{"title":"module:AudioPlayerView.audioStateChanged","link":"audioStateChanged"},{"title":"module:AudioPlayerView.bufferPositionChanged","link":"bufferPositionChanged"},{"title":"module:AudioPlayerView.endScreenSaver","link":"endScreenSaver"},{"title":"module:AudioPlayerView.exitScrubMode","link":"exitScrubMode","description":"exitScrubMode: Moves player out of scrub mode state, resets back to standard play mode
"},{"title":"module:AudioPlayerView.findCurrentSongIndex","link":"findCurrentSongIndex"},{"title":"module:AudioPlayerView.init","link":"init"},{"title":"module:AudioPlayerView.loadButtons","link":"loadButtons","description":"If we have more and 1 song to play, fade in the next and previous controls
"},{"title":"module:AudioPlayerView.loopClicked","link":"loopClicked"},{"title":"module:AudioPlayerView.moveSeekbarThumb","link":"moveSeekbarThumb","description":"moveSeekbarThumb: Positions the thumb on the seekbar
"},{"title":"module:AudioPlayerView.nextClicked","link":"nextClicked"},{"title":"module:AudioPlayerView.onAudioStreamLoaded","link":"onAudioStreamLoaded"},{"title":"module:AudioPlayerView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:AudioPlayerView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:AudioPlayerView.onKeyEvent","link":"onKeyEvent","description":"Process key press events
"},{"title":"module:AudioPlayerView.onMetaDataLoaded","link":"onMetaDataLoaded"},{"title":"module:AudioPlayerView.onScreensaverTimeoutLoaded","link":"onScreensaverTimeoutLoaded"},{"title":"module:AudioPlayerView.pageContentChanged","link":"pageContentChanged","description":"Update values on screen when page content changes
"},{"title":"module:AudioPlayerView.playAction","link":"playAction"},{"title":"module:AudioPlayerView.previousClicked","link":"previousClicked"},{"title":"module:AudioPlayerView.processScrubAction","link":"processScrubAction","description":"processScrubAction: Handles +/- seeking for the audio trickplay bar
"},{"title":"module:AudioPlayerView.resetLoopModeToDefault","link":"resetLoopModeToDefault"},{"title":"module:AudioPlayerView.resetSeekbarThumb","link":"resetSeekbarThumb","description":"resetSeekbarThumb: Resets the thumb to the playing position
"},{"title":"module:AudioPlayerView.screenSaverActive","link":"screenSaverActive"},{"title":"module:AudioPlayerView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:AudioPlayerView.setLoopButtonImage","link":"setLoopButtonImage"},{"title":"module:AudioPlayerView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AudioPlayerView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AudioPlayerView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AudioPlayerView.setSelectedButtonState","link":"setSelectedButtonState","description":"setSelectedButtonState: Changes the icon state url for the currently selected button
"},{"title":"module:AudioPlayerView.setShuffleIconState","link":"setShuffleIconState"},{"title":"module:AudioPlayerView.setTrackNumberDisplay","link":"setTrackNumberDisplay"},{"title":"module:AudioPlayerView.setupAnimationTasks","link":"setupAnimationTasks"},{"title":"module:AudioPlayerView.setupAudioNode","link":"setupAudioNode","description":"Creates audio node used to play song(s)
"},{"title":"module:AudioPlayerView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:AudioPlayerView.setupDataTasks","link":"setupDataTasks","description":"Creates tasks to gather data needed to render Scene and play song
"},{"title":"module:AudioPlayerView.setupInfoNodes","link":"setupInfoNodes"},{"title":"module:AudioPlayerView.setupScreenSaver","link":"setupScreenSaver"},{"title":"module:AudioPlayerView.shuffleClicked","link":"shuffleClicked"},{"title":"module:AudioPlayerView.startScreenSaver","link":"startScreenSaver"},{"title":"module:AudioPlayerView.toggleShuffleEnabled","link":"toggleShuffleEnabled"},{"title":"module:AudioTrackListItem","link":"AudioTrackListItem"},{"title":"module:AudioTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:AudioTrackListItem.init","link":"init"},{"title":"module:AudioTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ButtonGroupHoriz","link":"ButtonGroupHoriz"},{"title":"module:ButtonGroupHoriz.init","link":"init"},{"title":"module:ButtonGroupHoriz.onKeyEvent","link":"onKeyEvent"},{"title":"module:ButtonGroupVert","link":"ButtonGroupVert"},{"title":"module:ButtonGroupVert.init","link":"init"},{"title":"module:ButtonGroupVert.onFocusButtonChanged","link":"onFocusButtonChanged"},{"title":"module:ButtonGroupVert.onFocusChanged","link":"onFocusChanged"},{"title":"module:ButtonGroupVert.onKeyEvent","link":"onKeyEvent"},{"title":"module:ChannelData","link":"ChannelData"},{"title":"module:ChannelData.setFields","link":"setFields"},{"title":"module:ChannelData.setPoster","link":"setPoster"},{"title":"module:Clock","link":"Clock"},{"title":"module:Clock.format12HourTime","link":"format12HourTime","description":"format12HourTime: Returns a string with the current time formatted for a 12 hour clock
"},{"title":"module:Clock.format24HourTime","link":"format24HourTime","description":"format24HourTime: Returns a string with the current time formatted for a 24 hour clock
"},{"title":"module:Clock.formatTimeAsString","link":"formatTimeAsString","description":"formatTimeAsString: Returns a string with the current time formatted for either a 12 or 24 hour clock
"},{"title":"module:Clock.init","link":"init"},{"title":"module:Clock.onCurrentTimeTimerFire","link":"onCurrentTimeTimerFire","description":"onCurrentTimeTimerFire: Code that runs every time the currentTimeTimer fires
"},{"title":"module:CollectionData","link":"CollectionData"},{"title":"module:CollectionData.setFields","link":"setFields"},{"title":"module:CollectionData.setPoster","link":"setPoster"},{"title":"module:ConfigData","link":"ConfigData"},{"title":"module:ConfigData.init","link":"init"},{"title":"module:ConfigItem","link":"ConfigItem"},{"title":"module:ConfigItem.init","link":"init"},{"title":"module:ConfigItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ConfigItem.setColors","link":"setColors"},{"title":"module:ConfigList","link":"ConfigList"},{"title":"module:ConfigList.configListShowDialog","link":"configListShowDialog"},{"title":"module:ConfigList.dismiss_dialog","link":"dismiss_dialog"},{"title":"module:ConfigList.init","link":"init"},{"title":"module:ConfigList.onDialogButton","link":"onDialogButton"},{"title":"module:ConfigList.onItemSelected","link":"onItemSelected"},{"title":"module:ConfigList.setData","link":"setData"},{"title":"module:ExtrasItem","link":"ExtrasItem"},{"title":"module:ExtrasItem.focusChanged","link":"focusChanged"},{"title":"module:ExtrasItem.init","link":"init"},{"title":"module:ExtrasItem.showContent","link":"showContent"},{"title":"module:ExtrasRowList","link":"ExtrasRowList"},{"title":"module:ExtrasRowList.addRowSize","link":"addRowSize"},{"title":"module:ExtrasRowList.buildRow","link":"buildRow"},{"title":"module:ExtrasRowList.init","link":"init"},{"title":"module:ExtrasRowList.loadParts","link":"loadParts"},{"title":"module:ExtrasRowList.loadPersonVideos","link":"loadPersonVideos"},{"title":"module:ExtrasRowList.onAdditionalPartsLoaded","link":"onAdditionalPartsLoaded"},{"title":"module:ExtrasRowList.onLikeThisLoaded","link":"onLikeThisLoaded"},{"title":"module:ExtrasRowList.onMoviesLoaded","link":"onMoviesLoaded"},{"title":"module:ExtrasRowList.onPeopleLoaded","link":"onPeopleLoaded"},{"title":"module:ExtrasRowList.onRowItemFocused","link":"onRowItemFocused"},{"title":"module:ExtrasRowList.onRowItemSelected","link":"onRowItemSelected"},{"title":"module:ExtrasRowList.onSeriesLoaded","link":"onSeriesLoaded"},{"title":"module:ExtrasRowList.onShowsLoaded","link":"onShowsLoaded"},{"title":"module:ExtrasRowList.onSpecialFeaturesLoaded","link":"onSpecialFeaturesLoaded"},{"title":"module:ExtrasRowList.updateSize","link":"updateSize"},{"title":"module:FavoriteItemsTask","link":"FavoriteItemsTask"},{"title":"module:FavoriteItemsTask.init","link":"init"},{"title":"module:FavoriteItemsTask.setFavoriteStatus","link":"setFavoriteStatus"},{"title":"module:FolderData","link":"FolderData"},{"title":"module:FolderData.setFields","link":"setFields"},{"title":"module:FolderData.setPoster","link":"setPoster"},{"title":"module:GetFiltersTask","link":"GetFiltersTask"},{"title":"module:GetFiltersTask.getFiltersTask","link":"getFiltersTask"},{"title":"module:GetFiltersTask.init","link":"init"},{"title":"module:GetNextEpisodeTask","link":"GetNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.getNextEpisodeTask","link":"getNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.init","link":"init"},{"title":"module:GetPlaybackInfoTask","link":"GetPlaybackInfoTask"},{"title":"module:GetPlaybackInfoTask.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:GetPlaybackInfoTask.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:GetPlaybackInfoTask.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:GetPlaybackInfoTask.getPlaybackInfoTask","link":"getPlaybackInfoTask","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:GetPlaybackInfoTask.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:GetPlaybackInfoTask.init","link":"init"},{"title":"module:GetShuffleEpisodesTask","link":"GetShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.getShuffleEpisodesTask","link":"getShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.init","link":"init"},{"title":"module:GridItem","link":"GridItem"},{"title":"module:GridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:GridItem.focusChanging","link":"focusChanging","description":"Use FocusPercent to animate scaling of Poser Image
"},{"title":"module:GridItem.init","link":"init"},{"title":"module:GridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:GridItemSmall","link":"GridItemSmall"},{"title":"module:GridItemSmall.focusChanged","link":"focusChanged"},{"title":"module:GridItemSmall.init","link":"init"},{"title":"module:GridItemSmall.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItemSmall.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:Home","link":"Home"},{"title":"module:Home.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook called when the screen is hidden by the screen manager
"},{"title":"module:Home.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:Home.init","link":"init"},{"title":"module:Home.loadLibraries","link":"loadLibraries"},{"title":"module:Home.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:Home.refresh","link":"refresh"},{"title":"module:HomeData","link":"HomeData"},{"title":"module:HomeData.setData","link":"setData"},{"title":"module:HomeItem","link":"HomeItem"},{"title":"module:HomeItem.drawProgressBar","link":"drawProgressBar","description":"Draws and animates item progress bar
"},{"title":"module:HomeItem.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:HomeItem.init","link":"init"},{"title":"module:HomeItem.initItemPoster","link":"initItemPoster"},{"title":"module:HomeItem.initItemText","link":"initItemText"},{"title":"module:HomeItem.initItemTextExtra","link":"initItemTextExtra"},{"title":"module:HomeItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:HomeItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and icon when poster loaded
"},{"title":"module:HomeRowItemSizes","link":"HomeRowItemSizes"},{"title":"module:HomeRows","link":"HomeRows"},{"title":"module:HomeRows.addHomeSection","link":"addHomeSection","description":"addHomeSection: Adds a new home section to the home rows.
"},{"title":"module:HomeRows.createContinueWatchingRow","link":"createContinueWatchingRow","description":"createContinueWatchingRow: Creates a row displaying items the user can continue watching
"},{"title":"module:HomeRows.createFavoritesRow","link":"createFavoritesRow","description":"createFavoritesRow: Creates a row displaying items from the user's favorites list
"},{"title":"module:HomeRows.createLatestInRows","link":"createLatestInRows","description":"createLatestInRows: Creates a row displaying latest items in each of the user's libraries
"},{"title":"module:HomeRows.createLibraryRow","link":"createLibraryRow","description":"createLibraryRow: Creates a row displaying the user's libraries
"},{"title":"module:HomeRows.createLiveTVRow","link":"createLiveTVRow","description":"createLiveTVRow: Creates a row displaying the live tv now on section
"},{"title":"module:HomeRows.createNextUpRow","link":"createNextUpRow","description":"createNextUpRow: Creates a row displaying next episodes up to watch
"},{"title":"module:HomeRows.filterNodeArray","link":"filterNodeArray"},{"title":"module:HomeRows.getOriginalSectionIndex","link":"getOriginalSectionIndex","description":"getOriginalSectionIndex: Gets the index of a section from user settings and adds count of currently known latest media sections
"},{"title":"module:HomeRows.getSectionIndex","link":"getSectionIndex","description":"getSectionIndex: Returns index of requested section in home row content
"},{"title":"module:HomeRows.init","link":"init"},{"title":"module:HomeRows.itemSelected","link":"itemSelected"},{"title":"module:HomeRows.loadLibraries","link":"loadLibraries"},{"title":"module:HomeRows.loadingTimerComplete","link":"loadingTimerComplete","description":"loadingTimerComplete: Event handler for when loading wait time has expired
"},{"title":"module:HomeRows.onKeyEvent","link":"onKeyEvent"},{"title":"module:HomeRows.onLibrariesLoaded","link":"onLibrariesLoaded","description":"onLibrariesLoaded: Handler when LoadLibrariesTask returns data
"},{"title":"module:HomeRows.processUserSections","link":"processUserSections","description":"processUserSections: Loop through user's chosen home section settings and generate the content for each row
"},{"title":"module:HomeRows.removeHomeSection","link":"removeHomeSection","description":"removeHomeSection: Removes a home section from the home rows
"},{"title":"module:HomeRows.sectionExists","link":"sectionExists","description":"sectionExists: Checks if passed section exists in home row content
"},{"title":"module:HomeRows.setRowItemSize","link":"setRowItemSize","description":"setRowItemSize: Loops through all home sections and sets the correct item sizes per row
"},{"title":"module:HomeRows.updateContinueWatchingItems","link":"updateContinueWatchingItems","description":"updateContinueWatchingItems: Processes LoadContinueWatchingTask content. Removes, Creates, or Updates continue watching row as needed
"},{"title":"module:HomeRows.updateFavoritesItems","link":"updateFavoritesItems","description":"updateFavoritesItems: Processes LoadFavoritesTask content. Removes, Creates, or Updates favorites row as needed
"},{"title":"module:HomeRows.updateHomeRows","link":"updateHomeRows","description":"updateHomeRows: Update function exposed to outside components
"},{"title":"module:HomeRows.updateLatestItems","link":"updateLatestItems","description":"updateLatestItems: Processes LoadItemsTask content. Removes, Creates, or Updates latest in {library} row as needed
"},{"title":"module:HomeRows.updateNextUpItems","link":"updateNextUpItems","description":"updateNextUpItems: Processes LoadNextUpTask content. Removes, Creates, or Updates next up row as needed
"},{"title":"module:HomeRows.updateOnNowItems","link":"updateOnNowItems","description":"updateOnNowItems: Processes LoadOnNowTask content. Removes, Creates, or Updates latest in on now row as needed
"},{"title":"module:HomeRows.updateSize","link":"updateSize"},{"title":"module:IconButton","link":"IconButton"},{"title":"module:IconButton.init","link":"init"},{"title":"module:IconButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:IconButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:IconButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:IconButton.onIconChanged","link":"onIconChanged"},{"title":"module:IconButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:IconButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:IconButton.onTextChanged","link":"onTextChanged"},{"title":"module:IconButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:IconButton.setIconSize","link":"setIconSize"},{"title":"module:Image","link":"Image"},{"title":"module:Image.ImageURL","link":"ImageURL"},{"title":"module:Image.ItemImages","link":"ItemImages"},{"title":"module:Image.PosterImage","link":"PosterImage"},{"title":"module:Image.UserImageURL","link":"UserImageURL"},{"title":"module:ImageData","link":"ImageData"},{"title":"module:ImageData.setFields","link":"setFields"},{"title":"module:IntegerKeyboard","link":"IntegerKeyboard"},{"title":"module:IntegerKeyboard.init","link":"init"},{"title":"module:IntegerKeyboard.keySelected","link":"keySelected"},{"title":"module:IntegerKeyboard.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid","link":"ItemGrid"},{"title":"module:ItemGrid.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:ItemGrid.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:ItemGrid.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:ItemGrid.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:ItemGrid.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:ItemGrid.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:ItemGrid.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:ItemGrid.init","link":"init"},{"title":"module:ItemGrid.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:ItemGrid.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:ItemGrid.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:ItemGrid.onChannelFocused","link":"onChannelFocused"},{"title":"module:ItemGrid.onChannelSelected","link":"onChannelSelected"},{"title":"module:ItemGrid.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:ItemGrid.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:ItemGrid.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:ItemGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:ItemGrid.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:ItemGrid.setBoxsetsOptions","link":"setBoxsetsOptions","description":"Set Boxset view, sort, and filter options
"},{"title":"module:ItemGrid.setDefaultOptions","link":"setDefaultOptions","description":"Set Default view, sort, and filter options
"},{"title":"module:ItemGrid.setLiveTvOptions","link":"setLiveTvOptions","description":"Set Live TV view, sort, and filter options
"},{"title":"module:ItemGrid.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:ItemGrid.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:ItemGrid.setPhotoAlbumOptions","link":"setPhotoAlbumOptions","description":"Set Photo Album view, sort, and filter options
"},{"title":"module:ItemGrid.setTvShowsOptions","link":"setTvShowsOptions","description":"Set TV Show view, sort, and filter options
"},{"title":"module:ItemGrid.showTVGuide","link":"showTVGuide"},{"title":"module:ItemGrid.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:ItemGrid.updateTitle","link":"updateTitle"},{"title":"module:ItemGridOptions","link":"ItemGridOptions"},{"title":"module:ItemGridOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:ItemGridOptions.hideChecklist","link":"hideChecklist"},{"title":"module:ItemGridOptions.init","link":"init"},{"title":"module:ItemGridOptions.isFilterMenuDataValid","link":"isFilterMenuDataValid","description":"Check if data for Filter Menu is valid
"},{"title":"module:ItemGridOptions.onFilterFocusChange","link":"onFilterFocusChange"},{"title":"module:ItemGridOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGridOptions.optionsSet","link":"optionsSet"},{"title":"module:ItemGridOptions.saveFavoriteItemSelected","link":"saveFavoriteItemSelected"},{"title":"module:ItemGridOptions.setHeartColor","link":"setHeartColor"},{"title":"module:ItemGridOptions.showChecklist","link":"showChecklist"},{"title":"module:ItemGridOptions.toggleFavorite","link":"toggleFavorite"},{"title":"module:Items","link":"Items"},{"title":"module:Items.AppearsOnList","link":"AppearsOnList","description":"Get list of albums an artist appears on
"},{"title":"module:Items.ArtistOverview","link":"ArtistOverview","description":"Music Artist Data
"},{"title":"module:Items.AudioItem","link":"AudioItem","description":"Get Songs that are on an Album
"},{"title":"module:Items.AudioStream","link":"AudioStream"},{"title":"module:Items.BackdropImage","link":"BackdropImage"},{"title":"module:Items.CreateArtistMix","link":"CreateArtistMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.CreateInstantMix","link":"CreateInstantMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.GetIntroVideos","link":"GetIntroVideos","description":"Get Intro Videos for an item
"},{"title":"module:Items.GetSongsByArtist","link":"GetSongsByArtist","description":"Get list of songs belonging to an artist
"},{"title":"module:Items.ItemGetPlaybackInfo","link":"ItemGetPlaybackInfo"},{"title":"module:Items.ItemMetaData","link":"ItemMetaData","description":"MetaData about an item
"},{"title":"module:Items.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:Items.MusicAlbumList","link":"MusicAlbumList","description":"Get list of albums belonging to an artist
"},{"title":"module:Items.MusicSongList","link":"MusicSongList","description":"Get Songs that are on an Album
"},{"title":"module:Items.PlaylistItemList","link":"PlaylistItemList","description":"Get Items that are under the provided item
"},{"title":"module:Items.TVEpisodeShuffleList","link":"TVEpisodeShuffleList"},{"title":"module:Items.TVEpisodes","link":"TVEpisodes","description":"Returns a list of TV Shows for a given TV Show and season\nAccepts strings for the TV Show Id and the season Id
"},{"title":"module:Items.TVSeasonExtras","link":"TVSeasonExtras","description":"Returns a list of extra features for a TV Show season\nAccepts a string that is a TV Show season id
"},{"title":"module:Items.TVSeasons","link":"TVSeasons","description":"Seasons for a TV Show
"},{"title":"module:Items.searchMedia","link":"searchMedia","description":"Search across all libraries
"},{"title":"module:Items.useTranscodeAudioStream","link":"useTranscodeAudioStream"},{"title":"module:JFButton","link":"JFButton"},{"title":"module:JFButton.init","link":"init"},{"title":"module:JFButton.onTextChanged","link":"onTextChanged","description":"Whenever the text changes, pad both sides with whitespace so we can center the button text
"},{"title":"module:JFButtons","link":"JFButtons"},{"title":"module:JFButtons.focusChanged","link":"focusChanged","description":"Change opacity of the highlighted menu item based on focus
"},{"title":"module:JFButtons.highlightSelected","link":"highlightSelected","description":"Highlight selected menu option
"},{"title":"module:JFButtons.init","link":"init"},{"title":"module:JFButtons.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFButtons.renderChanged","link":"renderChanged","description":"When options are fully displayed, set focus and selected option
"},{"title":"module:JFButtons.selectedIndexChanged","link":"selectedIndexChanged","description":"When Selected Index set, ensure it is the one Focused
"},{"title":"module:JFButtons.showButtons","link":"showButtons"},{"title":"module:JFButtons.updateButtons","link":"updateButtons"},{"title":"module:JFContentItem","link":"JFContentItem"},{"title":"module:JFContentItem.setFields","link":"setFields","description":"Called whenever m.top.json changes.\nIt is expected that each node that extends JFContentItem will override this function
"},{"title":"module:JFGroup","link":"JFGroup"},{"title":"module:JFGroup.init","link":"init"},{"title":"module:JFGroup.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog","link":"JFMessageDialog"},{"title":"module:JFMessageDialog.init","link":"init"},{"title":"module:JFMessageDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog.redraw","link":"redraw"},{"title":"module:JFMessageDialog.updateMessage","link":"updateMessage"},{"title":"module:JFMessageDialog.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang","link":"JFOverhang"},{"title":"module:JFOverhang.init","link":"init"},{"title":"module:JFOverhang.isLogoVisibleChange","link":"isLogoVisibleChange","description":"component boolean field isLogoVisibleChange has changed value
"},{"title":"module:JFOverhang.onVisibleChange","link":"onVisibleChange"},{"title":"module:JFOverhang.resetTime","link":"resetTime"},{"title":"module:JFOverhang.setClockVisibility","link":"setClockVisibility"},{"title":"module:JFOverhang.setRightSeperatorVisibility","link":"setRightSeperatorVisibility"},{"title":"module:JFOverhang.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang.updateTime","link":"updateTime"},{"title":"module:JFOverhang.updateTimeDisplay","link":"updateTimeDisplay"},{"title":"module:JFOverhang.updateTitle","link":"updateTitle"},{"title":"module:JFOverhang.updateUser","link":"updateUser"},{"title":"module:JFScene","link":"JFScene"},{"title":"module:JFScene.disableRemoteChanged","link":"disableRemoteChanged","description":"Triggered when the disableRemote boolean component field is changed
"},{"title":"module:JFScene.init","link":"init"},{"title":"module:JFScene.isLoadingChanged","link":"isLoadingChanged","description":"Triggered when the isLoading boolean component field is changed
"},{"title":"module:JFScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFScreen","link":"JFScreen"},{"title":"module:JFScreen.OnScreenHidden","link":"OnScreenHidden","description":"Function called when the screen is hidden by the screen manager\nIt is expected that screens override this function if required,\nto handle focus any actions required on the screen being hidden
"},{"title":"module:JFScreen.OnScreenShown","link":"OnScreenShown","description":"Function called when the screen is displayed by the screen manager\nIt is expected that screens override this function to handle focus\nmanagmenet and any other actions required on screen shown
"},{"title":"module:JFScreen.init","link":"init"},{"title":"module:JFServer","link":"JFServer"},{"title":"module:JFServer.init","link":"init"},{"title":"module:JFServer.itemContentChanged","link":"itemContentChanged"},{"title":"module:JFServer.onFocusPercentChange","link":"onFocusPercentChange"},{"title":"module:JFServer.setTextColor","link":"setTextColor"},{"title":"module:JFVideo","link":"JFVideo"},{"title":"module:JFVideo.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:JFVideo.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:JFVideo.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:JFVideo.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:JFVideo.init","link":"init"},{"title":"module:JFVideo.loadCaption","link":"loadCaption"},{"title":"module:JFVideo.onAllowCaptionsChange","link":"onAllowCaptionsChange"},{"title":"module:JFVideo.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:JFVideo.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFVideo.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:JFVideo.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:JFVideo.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:JFVideo.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:JFVideo.toggleCaption","link":"toggleCaption"},{"title":"module:JFVideo.updateCaption","link":"updateCaption"},{"title":"module:JFVideo.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:ListPoster","link":"ListPoster"},{"title":"module:ListPoster.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:ListPoster.init","link":"init"},{"title":"module:ListPoster.itemContentChanged","link":"itemContentChanged"},{"title":"module:ListPoster.updateSize","link":"updateSize"},{"title":"module:LoadChannelsTask","link":"LoadChannelsTask"},{"title":"module:LoadChannelsTask.init","link":"init"},{"title":"module:LoadChannelsTask.loadChannels","link":"loadChannels"},{"title":"module:LoadItemsTask","link":"LoadItemsTask"},{"title":"module:LoadItemsTask.getPersonVideos","link":"getPersonVideos"},{"title":"module:LoadItemsTask.init","link":"init"},{"title":"module:LoadItemsTask.loadItems","link":"loadItems"},{"title":"module:LoadItemsTask2","link":"LoadItemsTask2"},{"title":"module:LoadItemsTask2.init","link":"init"},{"title":"module:LoadItemsTask2.loadItems","link":"loadItems"},{"title":"module:LoadPhotoTask","link":"LoadPhotoTask"},{"title":"module:LoadPhotoTask.init","link":"init"},{"title":"module:LoadPhotoTask.loadItems","link":"loadItems"},{"title":"module:LoadProgramDetailsTask","link":"LoadProgramDetailsTask"},{"title":"module:LoadProgramDetailsTask.init","link":"init"},{"title":"module:LoadProgramDetailsTask.loadProgramDetails","link":"loadProgramDetails"},{"title":"module:LoadScreenSaverTimeoutTask","link":"LoadScreenSaverTimeoutTask"},{"title":"module:LoadScreenSaverTimeoutTask.getScreensaverTimeout","link":"getScreensaverTimeout"},{"title":"module:LoadScreenSaverTimeoutTask.init","link":"init"},{"title":"module:LoadSheduleTask","link":"LoadSheduleTask"},{"title":"module:LoadSheduleTask.init","link":"init"},{"title":"module:LoadSheduleTask.loadSchedule","link":"loadSchedule"},{"title":"module:LoadVideoContentTask","link":"LoadVideoContentTask"},{"title":"module:LoadVideoContentTask.FindPreferredAudioStream","link":"FindPreferredAudioStream"},{"title":"module:LoadVideoContentTask.LoadItems_AddVideoContent","link":"LoadItems_AddVideoContent"},{"title":"module:LoadVideoContentTask.LoadItems_VideoPlayer","link":"LoadItems_VideoPlayer"},{"title":"module:LoadVideoContentTask.addAudioStreamsToVideo","link":"addAudioStreamsToVideo","description":"addAudioStreamsToVideo: Add audio stream data to video
"},{"title":"module:LoadVideoContentTask.addNextEpisodesToQueue","link":"addNextEpisodesToQueue","description":"Add next episodes to the playback queue
"},{"title":"module:LoadVideoContentTask.addSubtitlesToVideo","link":"addSubtitlesToVideo"},{"title":"module:LoadVideoContentTask.addVideoContentURL","link":"addVideoContentURL"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"defaultSubtitleTrack:
"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"defaultSubtitleTrackFromVid: Identifies the default subtitle track given video id
"},{"title":"module:LoadVideoContentTask.directPlaySupported","link":"directPlaySupported"},{"title":"module:LoadVideoContentTask.getContainerType","link":"getContainerType"},{"title":"module:LoadVideoContentTask.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:LoadVideoContentTask.init","link":"init"},{"title":"module:LoadVideoContentTask.loadItems","link":"loadItems"},{"title":"module:LoadVideoContentTask.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:LoginScene","link":"LoginScene"},{"title":"module:LoginScene.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook.
"},{"title":"module:LoginScene.init","link":"init"},{"title":"module:LoginScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:Main","link":"Main"},{"title":"module:Main.Main","link":"Main"},{"title":"module:MovieData","link":"MovieData"},{"title":"module:MovieData.setContainer","link":"setContainer"},{"title":"module:MovieData.setFields","link":"setFields"},{"title":"module:MovieData.setPoster","link":"setPoster"},{"title":"module:MovieDetails","link":"MovieDetails"},{"title":"module:MovieDetails.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:MovieDetails.SetDefaultAudioTrack","link":"SetDefaultAudioTrack"},{"title":"module:MovieDetails.SetUpAudioOptions","link":"SetUpAudioOptions"},{"title":"module:MovieDetails.SetUpVideoOptions","link":"SetUpVideoOptions"},{"title":"module:MovieDetails.audioOptionsClosed","link":"audioOptionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieDetails.getEndTime","link":"getEndTime"},{"title":"module:MovieDetails.getRuntime","link":"getRuntime"},{"title":"module:MovieDetails.init","link":"init"},{"title":"module:MovieDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:MovieDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieDetails.onMoviePosterSwapAnimationStateChange","link":"onMoviePosterSwapAnimationStateChange","description":"onMoviePosterSwapAnimationStateChange: Handler for changes to m.moviePosterSwapAnimation.state
"},{"title":"module:MovieDetails.onNewPosterImageURIChange","link":"onNewPosterImageURIChange","description":"onNewPosterImageURIChange: Handler for newPosterImageURI param change
"},{"title":"module:MovieDetails.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"onPosterLoadStatusChanged: Handler for changes to m.moviePosterSwap.loadStatus
"},{"title":"module:MovieDetails.round","link":"round"},{"title":"module:MovieDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:MovieDetails.setFieldText","link":"setFieldText"},{"title":"module:MovieDetails.setWatchedColor","link":"setWatchedColor"},{"title":"module:MovieDetails.trailerAvailableChanged","link":"trailerAvailableChanged"},{"title":"module:MovieDetails.videoOptionsClosed","link":"videoOptionsClosed","description":"Check if options were updated and if any reloding is needed...
"},{"title":"module:MovieLibraryView","link":"MovieLibraryView"},{"title":"module:MovieLibraryView.FilterDataLoaded","link":"FilterDataLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MovieLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MovieLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MovieLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MovieLibraryView.SetName","link":"SetName","description":"Set Selected Movie Name
"},{"title":"module:MovieLibraryView.SetOfficialRating","link":"SetOfficialRating","description":"Set Selected Movie OfficialRating
"},{"title":"module:MovieLibraryView.SetOverview","link":"SetOverview","description":"Set Selected Movie Overview
"},{"title":"module:MovieLibraryView.SetProductionYear","link":"SetProductionYear","description":"Set Selected Movie ProductionYear
"},{"title":"module:MovieLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MovieLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MovieLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MovieLibraryView.getRuntime","link":"getRuntime"},{"title":"module:MovieLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MovieLibraryView.init","link":"init"},{"title":"module:MovieLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MovieLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MovieLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MovieLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MovieLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MovieLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MovieLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MovieLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MovieLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieLibraryView.round","link":"round"},{"title":"module:MovieLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MovieLibraryView.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:MovieLibraryView.setSelectedOptions","link":"setSelectedOptions","description":"Data to display when options button selected
"},{"title":"module:MovieLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MovieLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MovieOptions","link":"MovieOptions"},{"title":"module:MovieOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:MovieOptions.init","link":"init"},{"title":"module:MovieOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieOptions.optionsSet","link":"optionsSet"},{"title":"module:MusicAlbumData","link":"MusicAlbumData"},{"title":"module:MusicAlbumData.setFields","link":"setFields"},{"title":"module:MusicAlbumData.setPoster","link":"setPoster"},{"title":"module:MusicAlbumSongListData","link":"MusicAlbumSongListData"},{"title":"module:MusicAlbumSongListData.setFields","link":"setFields"},{"title":"module:MusicAlbumSongListData.setPoster","link":"setPoster"},{"title":"module:MusicArtistData","link":"MusicArtistData"},{"title":"module:MusicArtistData.setFields","link":"setFields"},{"title":"module:MusicArtistData.setPoster","link":"setPoster"},{"title":"module:MusicArtistGridItem","link":"MusicArtistGridItem"},{"title":"module:MusicArtistGridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:MusicArtistGridItem.init","link":"init"},{"title":"module:MusicArtistGridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:MusicArtistGridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:MusicLibraryView","link":"MusicLibraryView"},{"title":"module:MusicLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MusicLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MusicLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MusicLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MusicLibraryView.SetAlbumCount","link":"SetAlbumCount","description":"Set Selected Artist Album Count
"},{"title":"module:MusicLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MusicLibraryView.SetGenres","link":"SetGenres","description":"Set Selected Artist Genres
"},{"title":"module:MusicLibraryView.SetName","link":"SetName","description":"Set Selected Artist Name
"},{"title":"module:MusicLibraryView.SetSongCount","link":"SetSongCount","description":"Set Selected Artist Song Count
"},{"title":"module:MusicLibraryView.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:MusicLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MusicLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MusicLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MusicLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MusicLibraryView.init","link":"init"},{"title":"module:MusicLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MusicLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MusicLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MusicLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MusicLibraryView.onGenreItemFocused","link":"onGenreItemFocused","description":"Genre Item Focused
"},{"title":"module:MusicLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MusicLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MusicLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MusicLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MusicLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MusicLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MusicLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MusicLibraryView.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:MusicLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MusicLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MusicSongData","link":"MusicSongData"},{"title":"module:MusicSongData.setFields","link":"setFields"},{"title":"module:MusicSongData.setPoster","link":"setPoster"},{"title":"module:OSD","link":"OSD"},{"title":"module:OSD.inactiveCheck","link":"inactiveCheck","description":"inactiveCheck: Checks if the time since last keypress is greater than or equal to the allowed inactive time of the menu.
"},{"title":"module:OSD.init","link":"init"},{"title":"module:OSD.moveOptionControls","link":"moveOptionControls","description":"moveOptionControls: Moves option controls node based on passed pixel values
"},{"title":"module:OSD.onButtonSelected","link":"onButtonSelected","description":"onButtonSelected: Handler for selection of buttons from the menu.
"},{"title":"module:OSD.onEpisodeNumberChanged","link":"onEpisodeNumberChanged","description":"onEpisodeNumberChanged: Handler for changes to m.top.episodeNumber param.
"},{"title":"module:OSD.onEpisodeNumberEndChanged","link":"onEpisodeNumberEndChanged","description":"onEpisodeNumberEndChanged: Handler for changes to m.top.episodeNumberEnd param.
"},{"title":"module:OSD.onFocusChanged","link":"onFocusChanged","description":"onFocusChanged: Handler for changes to the focus of this menu.
"},{"title":"module:OSD.onItemTitleTextChanged","link":"onItemTitleTextChanged","description":"onItemTitleTextChanged: Handler for changes to m.top.itemTitleText param.
"},{"title":"module:OSD.onKeyEvent","link":"onKeyEvent"},{"title":"module:OSD.onLogoImageChanged","link":"onLogoImageChanged","description":"onLogoImageChanged: Handler for changes to m.top.logoImage param.
"},{"title":"module:OSD.onLogoLoadStatusChanged","link":"onLogoLoadStatusChanged","description":"onLogoLoadStatusChanged: Handler for changes to logo image's status.
"},{"title":"module:OSD.onPlaybackStateChanged","link":"onPlaybackStateChanged","description":"onPlaybackStateChanged: Handler for changes to m.top.playbackState param
"},{"title":"module:OSD.onProgressPercentageChanged","link":"onProgressPercentageChanged","description":"onProgressPercentageChanged: Handler for changes to m.top.progressPercentage param
"},{"title":"module:OSD.onSeasonNumberChanged","link":"onSeasonNumberChanged","description":"onSeasonNumberChanged: Handler for changes to m.top.seasonNumber param.
"},{"title":"module:OSD.onVisibleChanged","link":"onVisibleChanged","description":"onVisibleChanged: Handler for changes to the visibility of this menu.
"},{"title":"module:OSD.resetFocusToDefaultButton","link":"resetFocusToDefaultButton","description":"resetFocusToDefaultButton: Reset focus back to the default button
"},{"title":"module:OptionNode","link":"OptionNode"},{"title":"module:OptionNode.init","link":"init"},{"title":"module:OptionsButton","link":"OptionsButton"},{"title":"module:OptionsButton.init","link":"init"},{"title":"module:OptionsButton.press","link":"press"},{"title":"module:OptionsData","link":"OptionsData"},{"title":"module:OptionsData.init","link":"init"},{"title":"module:OptionsData.press","link":"press"},{"title":"module:OptionsData.update_title","link":"update_title"},{"title":"module:OptionsSlider","link":"OptionsSlider"},{"title":"module:OptionsSlider.init","link":"init"},{"title":"module:OptionsSlider.onKeyEvent","link":"onKeyEvent"},{"title":"module:OptionsSlider.setFields","link":"setFields"},{"title":"module:OverviewDialog","link":"OverviewDialog"},{"title":"module:OverviewDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:OverviewDialog.setOverview","link":"setOverview"},{"title":"module:OverviewDialog.setTitle","link":"setTitle"},{"title":"module:PersonData","link":"PersonData"},{"title":"module:PersonData.setFields","link":"setFields"},{"title":"module:PersonData.setPoster","link":"setPoster"},{"title":"module:PersonDetails","link":"PersonDetails"},{"title":"module:PersonDetails.createDialogPallete","link":"createDialogPallete"},{"title":"module:PersonDetails.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PersonDetails.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:PersonDetails.init","link":"init"},{"title":"module:PersonDetails.loadPerson","link":"loadPerson"},{"title":"module:PersonDetails.onButtonGroupEscaped","link":"onButtonGroupEscaped"},{"title":"module:PersonDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PersonDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:PersonDetails.shortDate","link":"shortDate"},{"title":"module:PhotoData","link":"PhotoData"},{"title":"module:PhotoData.setFields","link":"setFields"},{"title":"module:PhotoData.setPoster","link":"setPoster"},{"title":"module:PhotoDetails","link":"PhotoDetails"},{"title":"module:PhotoDetails.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook.\nUsed to ensure tasks are stopped
"},{"title":"module:PhotoDetails.init","link":"init"},{"title":"module:PhotoDetails.isRandomChanged","link":"isRandomChanged","description":"isRandom component field has changed
"},{"title":"module:PhotoDetails.isSlideshowChanged","link":"isSlideshowChanged","description":"isSlideshow component field has changed
"},{"title":"module:PhotoDetails.isValidToContinue","link":"isValidToContinue"},{"title":"module:PhotoDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:PhotoDetails.nextSlide","link":"nextSlide"},{"title":"module:PhotoDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PhotoDetails.onPhotoLoaded","link":"onPhotoLoaded"},{"title":"module:PhotoDetails.statusUpdate","link":"statusUpdate"},{"title":"module:PlaybackDialog","link":"PlaybackDialog"},{"title":"module:PlaybackDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlayedCheckmark","link":"PlayedCheckmark"},{"title":"module:PlayedCheckmark.init","link":"init"},{"title":"module:PlaylistData","link":"PlaylistData"},{"title":"module:PlaylistData.setFields","link":"setFields"},{"title":"module:PlaylistData.setPoster","link":"setPoster"},{"title":"module:PlaylistView","link":"PlaylistView"},{"title":"module:PlaylistView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:PlaylistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:PlaylistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PlaylistView.init","link":"init"},{"title":"module:PlaylistView.onDoneLoading","link":"onDoneLoading"},{"title":"module:PlaylistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlaylistView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:PlaylistView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:PlaylistView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:PlaylistView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:PlaylistView.setupMainNode","link":"setupMainNode"},{"title":"module:PlaystateTask","link":"PlaystateTask"},{"title":"module:PlaystateTask.PlaystateDefaults","link":"PlaystateDefaults"},{"title":"module:PlaystateTask.PlaystateUpdate","link":"PlaystateUpdate"},{"title":"module:PlaystateTask.init","link":"init"},{"title":"module:PostTask","link":"PostTask"},{"title":"module:PostTask.asyncPost","link":"asyncPost","description":"Post data and wait for response code
"},{"title":"module:PostTask.empty","link":"empty","description":"Revert PostTask to default state
"},{"title":"module:PostTask.init","link":"init"},{"title":"module:PostTask.postItems","link":"postItems","description":"Main function for PostTask.\nPosts either an array of data\nor a string of data to an API endpoint.\nSaves the response information
"},{"title":"module:ProgramDetails","link":"ProgramDetails"},{"title":"module:ProgramDetails.channelUpdated","link":"channelUpdated"},{"title":"module:ProgramDetails.focusChanged","link":"focusChanged","description":"Show view channel button when item has Focus
"},{"title":"module:ProgramDetails.getDurationStringFromSeconds","link":"getDurationStringFromSeconds","description":"Get program duration string (e.g. 1h 20m)
"},{"title":"module:ProgramDetails.getRelativeDayName","link":"getRelativeDayName","description":"Get relative date name for a date (yesterday, today, tomorrow, or otherwise weekday name )
"},{"title":"module:ProgramDetails.init","link":"init"},{"title":"module:ProgramDetails.onAnimationComplete","link":"onAnimationComplete"},{"title":"module:ProgramDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:ProgramDetails.programUpdated","link":"programUpdated"},{"title":"module:ProgramDetails.setupLabels","link":"setupLabels","description":"Set up Live and Repeat label sizes
"},{"title":"module:ProgramDetails.updateLabels","link":"updateLabels"},{"title":"module:PublicUserData","link":"PublicUserData"},{"title":"module:PublicUserData.init","link":"init"},{"title":"module:QueueManager","link":"QueueManager"},{"title":"module:QueueManager.clear","link":"clear","description":"Clear all content from play queue
"},{"title":"module:QueueManager.clearHold","link":"clearHold","description":"Clear all hold content
"},{"title":"module:QueueManager.deleteAtIndex","link":"deleteAtIndex","description":"Delete item from play queue at passed index
"},{"title":"module:QueueManager.getCount","link":"getCount","description":"Return the number of items in the play queue
"},{"title":"module:QueueManager.getCurrentItem","link":"getCurrentItem","description":"Return the item currently in focus from the play queue
"},{"title":"module:QueueManager.getHold","link":"getHold","description":"Return the items in the hold
"},{"title":"module:QueueManager.getIsShuffled","link":"getIsShuffled","description":"Return whether or not shuffle is enabled
"},{"title":"module:QueueManager.getItemByIndex","link":"getItemByIndex","description":"Return the item in the passed index from the play queue
"},{"title":"module:QueueManager.getItemType","link":"getItemType","description":"getItemType: Returns the media type of the passed item
"},{"title":"module:QueueManager.getPosition","link":"getPosition","description":"Returns current playback position within the queue
"},{"title":"module:QueueManager.getQueue","link":"getQueue","description":"Return the current play queue
"},{"title":"module:QueueManager.getQueueTypes","link":"getQueueTypes","description":"Return the types of items in current play queue
"},{"title":"module:QueueManager.getQueueUniqueTypes","link":"getQueueUniqueTypes","description":"Return the unique types of items in current play queue
"},{"title":"module:QueueManager.getUnshuffledQueue","link":"getUnshuffledQueue","description":"Return original, unshuffled queue
"},{"title":"module:QueueManager.hold","link":"hold","description":"Hold an item
"},{"title":"module:QueueManager.init","link":"init"},{"title":"module:QueueManager.isPrerollActive","link":"isPrerollActive","description":"Return isPrerollActive status
"},{"title":"module:QueueManager.moveBack","link":"moveBack","description":"Move queue position back one
"},{"title":"module:QueueManager.moveForward","link":"moveForward","description":"Move queue position ahead one
"},{"title":"module:QueueManager.peek","link":"peek","description":"Return item at end of play queue without removing
"},{"title":"module:QueueManager.playQueue","link":"playQueue","description":"Play items in queue
"},{"title":"module:QueueManager.pop","link":"pop","description":"Remove item at end of play queue
"},{"title":"module:QueueManager.push","link":"push","description":"Push new items to the play queue
"},{"title":"module:QueueManager.resetQueueItemOrder","link":"resetQueueItemOrder","description":"Reset queue items back to original, unshuffled order
"},{"title":"module:QueueManager.resetShuffle","link":"resetShuffle","description":"Reset shuffle to off state
"},{"title":"module:QueueManager.set","link":"set","description":"Replace play queue with passed array
"},{"title":"module:QueueManager.setPosition","link":"setPosition","description":"Set the queue position
"},{"title":"module:QueueManager.setPrerollStatus","link":"setPrerollStatus","description":"Set prerollActive status
"},{"title":"module:QueueManager.setTopStartingPoint","link":"setTopStartingPoint","description":"Set starting point for top item in the queue
"},{"title":"module:QueueManager.shuffleQueueItems","link":"shuffleQueueItems","description":"Save a copy of the original queue and randomize order of queue items
"},{"title":"module:QueueManager.toggleShuffle","link":"toggleShuffle","description":"Toggle shuffleEnabled state
"},{"title":"module:QueueManager.top","link":"top","description":"Return the fitst item in the play queue
"},{"title":"module:QuickConnect","link":"QuickConnect"},{"title":"module:QuickConnect.init","link":"init"},{"title":"module:QuickConnect.monitorQuickConnect","link":"monitorQuickConnect"},{"title":"module:QuickConnectDialog","link":"QuickConnectDialog"},{"title":"module:QuickConnectDialog.OnAuthenticated","link":"OnAuthenticated"},{"title":"module:QuickConnectDialog.init","link":"init"},{"title":"module:QuickConnectDialog.onButtonSelected","link":"onButtonSelected"},{"title":"module:QuickConnectDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:QuickConnectDialog.quickConnectClosed","link":"quickConnectClosed"},{"title":"module:QuickConnectDialog.quickConnectStatus","link":"quickConnectStatus"},{"title":"module:RadioDialog","link":"RadioDialog"},{"title":"module:RadioDialog.init","link":"init"},{"title":"module:RadioDialog.moveScrollBar","link":"moveScrollBar","description":"Move the popup's scroll bar
"},{"title":"module:RadioDialog.onButtonSelected","link":"onButtonSelected","description":"Event handler for when user selected a button
"},{"title":"module:RadioDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:RadioDialog.onItemFocused","link":"onItemFocused","description":"Event handler for when user's cursor highlights an option in the option list
"},{"title":"module:RadioDialog.onItemSelected","link":"onItemSelected","description":"Once user selected an item, move cursor down to OK button
"},{"title":"module:RadioDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:RadioDialog.onScrollBarFocus","link":"onScrollBarFocus","description":"If somehow the scrollbar gains focus, set focus back to the option list
"},{"title":"module:RecordProgramTask","link":"RecordProgramTask"},{"title":"module:RecordProgramTask.RecordOrCancelProgram","link":"RecordOrCancelProgram"},{"title":"module:RecordProgramTask.init","link":"init"},{"title":"module:RecordingData","link":"RecordingData"},{"title":"module:RecordingData.setFields","link":"setFields"},{"title":"module:RecordingData.setPoster","link":"setPoster"},{"title":"module:SceneManager","link":"SceneManager"},{"title":"module:SceneManager.clearPreviousScene","link":"clearPreviousScene","description":"Clear previous scene from group stack
"},{"title":"module:SceneManager.clearScenes","link":"clearScenes","description":"Clear all content from group stack
"},{"title":"module:SceneManager.deleteSceneAtIndex","link":"deleteSceneAtIndex","description":"Delete scene from group stack at passed index
"},{"title":"module:SceneManager.dismissDialog","link":"dismissDialog","description":"Close currently displayed dialog
"},{"title":"module:SceneManager.getActiveScene","link":"getActiveScene","description":"Return group at top of stack without removing
"},{"title":"module:SceneManager.init","link":"init"},{"title":"module:SceneManager.isDialogOpen","link":"isDialogOpen","description":"Returns bool indicating if dialog is currently displayed
"},{"title":"module:SceneManager.optionClosed","link":"optionClosed","description":"Return button the user selected
"},{"title":"module:SceneManager.optionDialog","link":"optionDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.optionSelected","link":"optionSelected","description":"Return button the user selected
"},{"title":"module:SceneManager.popScene","link":"popScene","description":"Remove the current group and load the last group from the stack
"},{"title":"module:SceneManager.pushScene","link":"pushScene","description":"Push a new group onto the stack, replacing the existing group on the screen
"},{"title":"module:SceneManager.radioDialog","link":"radioDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.registerOverhangData","link":"registerOverhangData","description":"Register observers for overhang data
"},{"title":"module:SceneManager.resetTime","link":"resetTime","description":"Reset time
"},{"title":"module:SceneManager.settings","link":"settings","description":"Display user/device settings screen
"},{"title":"module:SceneManager.standardDialog","link":"standardDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.unregisterOverhangData","link":"unregisterOverhangData","description":"Remove observers for overhang data
"},{"title":"module:SceneManager.updateOptions","link":"updateOptions","description":"Update options availability
"},{"title":"module:SceneManager.updateOverhangTitle","link":"updateOverhangTitle","description":"Update overhang title
"},{"title":"module:SceneManager.updateOverhangVisible","link":"updateOverhangVisible","description":"Update whether the overhang is visible or not
"},{"title":"module:SceneManager.updateUser","link":"updateUser","description":"Update username in overhang
"},{"title":"module:SceneManager.userMessage","link":"userMessage","description":"Display dialog to user with an OK button
"},{"title":"module:ScheduleProgramData","link":"ScheduleProgramData"},{"title":"module:ScheduleProgramData.setFields","link":"setFields"},{"title":"module:ScheduleProgramData.setPoster","link":"setPoster"},{"title":"module:SearchBox","link":"SearchBox"},{"title":"module:SearchBox.init","link":"init"},{"title":"module:SearchBox.searchMedias","link":"searchMedias"},{"title":"module:SearchData","link":"SearchData"},{"title":"module:SearchData.setFields","link":"setFields"},{"title":"module:SearchData.setPoster","link":"setPoster"},{"title":"module:SearchResults","link":"SearchResults"},{"title":"module:SearchResults.init","link":"init"},{"title":"module:SearchResults.loadResults","link":"loadResults"},{"title":"module:SearchResults.onKeyEvent","link":"onKeyEvent"},{"title":"module:SearchResults.searchMedias","link":"searchMedias"},{"title":"module:SearchRow","link":"SearchRow"},{"title":"module:SearchRow.addRow","link":"addRow"},{"title":"module:SearchRow.getData","link":"getData"},{"title":"module:SearchRow.init","link":"init"},{"title":"module:SearchRow.updateSize","link":"updateSize"},{"title":"module:SearchTask","link":"SearchTask"},{"title":"module:SearchTask.init","link":"init"},{"title":"module:SearchTask.search","link":"search"},{"title":"module:SeriesData","link":"SeriesData"},{"title":"module:SeriesData.setFields","link":"setFields"},{"title":"module:SeriesData.setPoster","link":"setPoster"},{"title":"module:ServerDiscoveryTask","link":"ServerDiscoveryTask"},{"title":"module:ServerDiscoveryTask.AddServer","link":"AddServer"},{"title":"module:ServerDiscoveryTask.ProcessClientDiscoveryResponse","link":"ProcessClientDiscoveryResponse"},{"title":"module:ServerDiscoveryTask.ProcessSSDPResponse","link":"ProcessSSDPResponse"},{"title":"module:ServerDiscoveryTask.SendClientDiscoveryBroadcast","link":"SendClientDiscoveryBroadcast"},{"title":"module:ServerDiscoveryTask.SendSSDPBroadcast","link":"SendSSDPBroadcast"},{"title":"module:ServerDiscoveryTask.execute","link":"execute"},{"title":"module:ServerDiscoveryTask.init","link":"init","description":"Task used to discover jellyfin servers on the local network
"},{"title":"module:SetServerScreen","link":"SetServerScreen"},{"title":"module:SetServerScreen.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:SetServerScreen.ScanForServers","link":"ScanForServers"},{"title":"module:SetServerScreen.ScanForServersComplete","link":"ScanForServersComplete"},{"title":"module:SetServerScreen.ShowKeyboard","link":"ShowKeyboard"},{"title":"module:SetServerScreen.clearErrorMessage","link":"clearErrorMessage"},{"title":"module:SetServerScreen.init","link":"init"},{"title":"module:SetServerScreen.onDialogButton","link":"onDialogButton"},{"title":"module:SetServerScreen.onKeyEvent","link":"onKeyEvent"},{"title":"module:ShowScenes","link":"ShowScenes"},{"title":"module:ShowScenes.CreateAlbumView","link":"CreateAlbumView","description":"Shows details on selected album. Description text, image, and list of available songs
"},{"title":"module:ShowScenes.CreateArtistView","link":"CreateArtistView","description":"Shows details on selected artist. Bio, image, and list of available albums
"},{"title":"module:ShowScenes.CreateHomeGroup","link":"CreateHomeGroup"},{"title":"module:ShowScenes.CreateItemGrid","link":"CreateItemGrid"},{"title":"module:ShowScenes.CreateMovieDetailsGroup","link":"CreateMovieDetailsGroup"},{"title":"module:ShowScenes.CreateMovieLibraryView","link":"CreateMovieLibraryView"},{"title":"module:ShowScenes.CreateMusicLibraryView","link":"CreateMusicLibraryView"},{"title":"module:ShowScenes.CreatePersonView","link":"CreatePersonView"},{"title":"module:ShowScenes.CreatePlaylistView","link":"CreatePlaylistView","description":"Shows details on selected playlist. Description text, image, and list of available items
"},{"title":"module:ShowScenes.CreateSearchPage","link":"CreateSearchPage"},{"title":"module:ShowScenes.CreateSeasonDetailsGroup","link":"CreateSeasonDetailsGroup"},{"title":"module:ShowScenes.CreateSeasonDetailsGroupByID","link":"CreateSeasonDetailsGroupByID"},{"title":"module:ShowScenes.CreateSeriesDetailsGroup","link":"CreateSeriesDetailsGroup"},{"title":"module:ShowScenes.CreateServerGroup","link":"CreateServerGroup"},{"title":"module:ShowScenes.CreateSigninGroup","link":"CreateSigninGroup"},{"title":"module:ShowScenes.CreateUserSelectGroup","link":"CreateUserSelectGroup"},{"title":"module:ShowScenes.CreateVideoPlayerGroup","link":"CreateVideoPlayerGroup"},{"title":"module:ShowScenes.DeleteFromServerList","link":"DeleteFromServerList"},{"title":"module:ShowScenes.LoginFlow","link":"LoginFlow"},{"title":"module:ShowScenes.SaveServerList","link":"SaveServerList"},{"title":"module:ShowScenes.SendPerformanceBeacon","link":"SendPerformanceBeacon","description":"Roku Performance monitoring
"},{"title":"module:ShowScenes.playbackOptionDialog","link":"playbackOptionDialog","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:SlideOutButton","link":"SlideOutButton"},{"title":"module:SlideOutButton.init","link":"init"},{"title":"module:SlideOutButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:SlideOutButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:SlideOutButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:SlideOutButton.onHighlightChanged","link":"onHighlightChanged"},{"title":"module:SlideOutButton.onIconChanged","link":"onIconChanged"},{"title":"module:SlideOutButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:SlideOutButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:SlideOutButton.onTextChanged","link":"onTextChanged"},{"title":"module:SlideOutButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:SlideOutButton.setIconSize","link":"setIconSize"},{"title":"module:SongItem","link":"SongItem"},{"title":"module:SongItem.focusChanged","link":"focusChanged"},{"title":"module:SongItem.init","link":"init"},{"title":"module:SongItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:Spinner","link":"Spinner"},{"title":"module:Spinner.init","link":"init"},{"title":"module:StandardDialog","link":"StandardDialog"},{"title":"module:StandardDialog.init","link":"init"},{"title":"module:StandardDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:Subtitles","link":"Subtitles"},{"title":"module:Subtitles.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:Subtitles.changeSubtitleDuringPlayback","link":"changeSubtitleDuringPlayback"},{"title":"module:Subtitles.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"Identify the default subtitle track\nif "requires_text" is true, only return a track if it is textual\nThis allows forcing text subs, since roku requires transcoding of non-text subs\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"Identify the default subtitle track for a given video id\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.getSubtitleLanguages","link":"getSubtitleLanguages"},{"title":"module:Subtitles.getSubtitleSelIdxFromSubIdx","link":"getSubtitleSelIdxFromSubIdx","description":"The subtitle index on the server differs from the index we track locally\nThis function converts the former into the latter
"},{"title":"module:Subtitles.selectSubtitleTrack","link":"selectSubtitleTrack"},{"title":"module:Subtitles.selectSubtitleTrackDialog","link":"selectSubtitleTrackDialog","description":"Present Dialog to user to select subtitle track
"},{"title":"module:Subtitles.setupSubtitle","link":"setupSubtitle","description":"Given a set of subtitles, and a subtitle index (the index on the server, not in the list provided)\nthis will set all relevant settings for roku (mainly closed captions) and return the index of the\nsubtitle track specified, but indexed based on the provided list of subtitles
"},{"title":"module:Subtitles.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:Subtitles.turnoffSubtitles","link":"turnoffSubtitles"},{"title":"module:TVEpisode","link":"TVEpisode"},{"title":"module:TVEpisode.setFields","link":"setFields"},{"title":"module:TVEpisode.setPoster","link":"setPoster"},{"title":"module:TVEpisodeData","link":"TVEpisodeData"},{"title":"module:TVEpisodeData.setFields","link":"setFields"},{"title":"module:TVEpisodeData.setPoster","link":"setPoster"},{"title":"module:TVEpisodeRow","link":"TVEpisodeRow"},{"title":"module:TVEpisodeRow.init","link":"init"},{"title":"module:TVEpisodeRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRow.setData","link":"setData"},{"title":"module:TVEpisodeRow.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRow.updateSize","link":"updateSize"},{"title":"module:TVEpisodeRowWithOptions","link":"TVEpisodeRowWithOptions"},{"title":"module:TVEpisodeRowWithOptions.SetUpAudioOptions","link":"SetUpAudioOptions","description":"List of audio tracks to choose from
"},{"title":"module:TVEpisodeRowWithOptions.SetUpVideoOptions","link":"SetUpVideoOptions","description":"List of video versions to choose from
"},{"title":"module:TVEpisodeRowWithOptions.audioOptionsClosed","link":"audioOptionsClosed"},{"title":"module:TVEpisodeRowWithOptions.init","link":"init"},{"title":"module:TVEpisodeRowWithOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRowWithOptions.rowsDoneLoading","link":"rowsDoneLoading"},{"title":"module:TVEpisodeRowWithOptions.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRowWithOptions.videoOptionsClosed","link":"videoOptionsClosed"},{"title":"module:TVEpisodes","link":"TVEpisodes"},{"title":"module:TVEpisodes.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:TVEpisodes.getFocusedItem","link":"getFocusedItem","description":"get the currently focused item
"},{"title":"module:TVEpisodes.init","link":"init"},{"title":"module:TVEpisodes.onKeyEvent","link":"onKeyEvent","description":"Handle navigation input from the remote and act on it
"},{"title":"module:TVEpisodes.setExtraButtonVisibility","link":"setExtraButtonVisibility","description":"Updates the visibility of the Extras button based on if this season has any extra features
"},{"title":"module:TVEpisodes.setSeasonLoading","link":"setSeasonLoading"},{"title":"module:TVEpisodes.updateSeason","link":"updateSeason"},{"title":"module:TVListDetails","link":"TVListDetails"},{"title":"module:TVListDetails.DisplayAudioAvailable","link":"DisplayAudioAvailable","description":"Adds "+N" (e.g. +1) if there is more than one audio track to choose from
"},{"title":"module:TVListDetails.DisplayVideoAvailable","link":"DisplayVideoAvailable","description":"Adds "+N" (e.g. +1) if there is more than one video version to choose from
"},{"title":"module:TVListDetails.SetupAudioDisplay","link":"SetupAudioDisplay","description":"Display current audio_codec and check if there is more than one audio track to choose from...
"},{"title":"module:TVListDetails.focusChanged","link":"focusChanged"},{"title":"module:TVListDetails.getEndTime","link":"getEndTime"},{"title":"module:TVListDetails.getRuntime","link":"getRuntime"},{"title":"module:TVListDetails.init","link":"init"},{"title":"module:TVListDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVListOptions","link":"TVListOptions"},{"title":"module:TVListOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:TVListOptions.init","link":"init"},{"title":"module:TVListOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVListOptions.optionsSet","link":"optionsSet"},{"title":"module:TVSeasonData","link":"TVSeasonData"},{"title":"module:TVSeasonData.setFields","link":"setFields"},{"title":"module:TVSeasonData.setPoster","link":"setPoster"},{"title":"module:TVSeasonRow","link":"TVSeasonRow"},{"title":"module:TVSeasonRow.getData","link":"getData"},{"title":"module:TVSeasonRow.init","link":"init"},{"title":"module:TVSeasonRow.updateSize","link":"updateSize"},{"title":"module:TVShowDescription","link":"TVShowDescription"},{"title":"module:TVShowDescription.getEndTime","link":"getEndTime"},{"title":"module:TVShowDescription.getHistory","link":"getHistory"},{"title":"module:TVShowDescription.getRuntime","link":"getRuntime"},{"title":"module:TVShowDescription.init","link":"init"},{"title":"module:TVShowDescription.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDescription.round","link":"round"},{"title":"module:TVShowDescription.setFieldText","link":"setFieldText"},{"title":"module:TVShowDetails","link":"TVShowDetails"},{"title":"module:TVShowDetails.getEndTime","link":"getEndTime"},{"title":"module:TVShowDetails.getHistory","link":"getHistory"},{"title":"module:TVShowDetails.getRuntime","link":"getRuntime"},{"title":"module:TVShowDetails.init","link":"init"},{"title":"module:TVShowDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVShowDetails.onShuffleEpisodeDataLoaded","link":"onShuffleEpisodeDataLoaded"},{"title":"module:TVShowDetails.round","link":"round"},{"title":"module:TVShowDetails.setFieldText","link":"setFieldText"},{"title":"module:TextSizeTask","link":"TextSizeTask"},{"title":"module:TextSizeTask.getTextSize","link":"getTextSize"},{"title":"module:TextSizeTask.init","link":"init"},{"title":"module:UserData","link":"UserData"},{"title":"module:UserData.getPreference","link":"getPreference"},{"title":"module:UserData.loadFromJSON","link":"loadFromJSON"},{"title":"module:UserData.loadFromRegistry","link":"loadFromRegistry"},{"title":"module:UserData.removeFromRegistry","link":"removeFromRegistry"},{"title":"module:UserData.saveToRegistry","link":"saveToRegistry"},{"title":"module:UserData.setDataFromJSON","link":"setDataFromJSON"},{"title":"module:UserData.setPreference","link":"setPreference"},{"title":"module:UserData.setServer","link":"setServer"},{"title":"module:UserItem","link":"UserItem"},{"title":"module:UserItem.init","link":"init"},{"title":"module:UserItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserLibrary","link":"UserLibrary"},{"title":"module:UserLibrary.MarkItemFavorite","link":"MarkItemFavorite"},{"title":"module:UserLibrary.MarkItemWatched","link":"MarkItemWatched"},{"title":"module:UserLibrary.UnmarkItemFavorite","link":"UnmarkItemFavorite"},{"title":"module:UserLibrary.UnmarkItemWatched","link":"UnmarkItemWatched"},{"title":"module:UserRow","link":"UserRow"},{"title":"module:UserRow.init","link":"init"},{"title":"module:UserRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserRow.setData","link":"setData"},{"title":"module:UserRow.setUser","link":"setUser"},{"title":"module:UserRow.updateSize","link":"updateSize"},{"title":"module:UserSelect","link":"UserSelect"},{"title":"module:UserSelect.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:UserSelect.init","link":"init"},{"title":"module:UserSelect.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserSelect.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserSelect.redraw","link":"redraw"},{"title":"module:VideoData","link":"VideoData"},{"title":"module:VideoData.setFields","link":"setFields"},{"title":"module:VideoData.setPoster","link":"setPoster"},{"title":"module:VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.AddVideoContent","link":"AddVideoContent"},{"title":"module:VideoPlayer.GetPlaybackInfo","link":"GetPlaybackInfo","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:VideoPlayer.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:VideoPlayer.PlayIntroVideo","link":"PlayIntroVideo"},{"title":"module:VideoPlayer.VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.autoPlayNextEpisode","link":"autoPlayNextEpisode"},{"title":"module:VideoPlayer.directPlaySupported","link":"directPlaySupported"},{"title":"module:VideoPlayer.getAudioFormat","link":"getAudioFormat"},{"title":"module:VideoPlayer.getAudioInfo","link":"getAudioInfo"},{"title":"module:VideoPlayer.getContainerType","link":"getContainerType"},{"title":"module:VideoPlayer.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:VideoPlayer.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:VideoPlayer.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:VideoPlayer.startPlayBackOver","link":"startPlayBackOver","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:VideoPlayerView","link":"VideoPlayerView"},{"title":"module:VideoPlayerView.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:VideoPlayerView.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"availSubtitleTrackIdx: Returns Roku's index for requested subtitle track
"},{"title":"module:VideoPlayerView.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:VideoPlayerView.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:VideoPlayerView.getCurrentChapterIndex","link":"getCurrentChapterIndex","description":"getCurrentChapterIndex: Finds current chapter index
"},{"title":"module:VideoPlayerView.handleChapterListAction","link":"handleChapterListAction","description":"handleChapterListAction: Handles action to show chapter list
"},{"title":"module:VideoPlayerView.handleChapterSkipAction","link":"handleChapterSkipAction","description":"handleChapterSkipAction: Handles user command to skip chapters in playing video
"},{"title":"module:VideoPlayerView.handleHideAction","link":"handleHideAction","description":"handleHideAction: Handles action to hide OSD menu
"},{"title":"module:VideoPlayerView.handleItemSkipAction","link":"handleItemSkipAction","description":"handleItemSkipAction: Handles user command to skip items
"},{"title":"module:VideoPlayerView.handleShowAudioMenuAction","link":"handleShowAudioMenuAction","description":"handleShowAudioMenuAction: Handles action to show audio selection menu
"},{"title":"module:VideoPlayerView.handleShowSubtitleMenuAction","link":"handleShowSubtitleMenuAction","description":"handleShowSubtitleMenuAction: Handles action to show subtitle selection menu
"},{"title":"module:VideoPlayerView.handleShowVideoInfoPopupAction","link":"handleShowVideoInfoPopupAction","description":"handleShowVideoInfoPopupAction: Handles action to show video info popup
"},{"title":"module:VideoPlayerView.handleVideoPlayPauseAction","link":"handleVideoPlayPauseAction","description":"handleVideoPlayPauseAction: Handles action to either play or pause the video content
"},{"title":"module:VideoPlayerView.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:VideoPlayerView.init","link":"init"},{"title":"module:VideoPlayerView.loadCaption","link":"loadCaption","description":"Set caption url to server subtitle track
"},{"title":"module:VideoPlayerView.onAllowCaptionsChange","link":"onAllowCaptionsChange","description":"Only setup caption items if captions are allowed
"},{"title":"module:VideoPlayerView.onAudioIndexChange","link":"onAudioIndexChange","description":"Event handler for when audioIndex changes
"},{"title":"module:VideoPlayerView.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:VideoPlayerView.onKeyEvent","link":"onKeyEvent"},{"title":"module:VideoPlayerView.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:VideoPlayerView.onOSDAction","link":"onOSDAction","description":"onOSDAction: Process action events from OSD to their respective handlers
"},{"title":"module:VideoPlayerView.onPlaybackErrorButtonSelected","link":"onPlaybackErrorButtonSelected"},{"title":"module:VideoPlayerView.onPlaybackErrorDialogClosed","link":"onPlaybackErrorDialogClosed"},{"title":"module:VideoPlayerView.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onSubtitleChange","link":"onSubtitleChange","description":"Event handler for when selectedSubtitle changes
"},{"title":"module:VideoPlayerView.onVideoContentLoaded","link":"onVideoContentLoaded"},{"title":"module:VideoPlayerView.populateChapterMenu","link":"populateChapterMenu","description":"populateChapterMenu: ' Parse chapter data from API and appeand to chapter list menu
"},{"title":"module:VideoPlayerView.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:VideoPlayerView.showPlaybackErrorDialog","link":"showPlaybackErrorDialog"},{"title":"module:VideoPlayerView.stateAllowsOSD","link":"stateAllowsOSD","description":"stateAllowsOSD: Check if current video state allows showing the OSD
"},{"title":"module:VideoPlayerView.toggleCaption","link":"toggleCaption","description":"Toggles visibility of custom subtitles and sets captionTask's player state
"},{"title":"module:VideoPlayerView.updateCaption","link":"updateCaption","description":"Removes old subtitle lines and adds new subtitle lines
"},{"title":"module:VideoPlayerView.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:VideoTrackListItem","link":"VideoTrackListItem"},{"title":"module:VideoTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:VideoTrackListItem.init","link":"init"},{"title":"module:VideoTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ViewCreator","link":"ViewCreator"},{"title":"module:ViewCreator.CreateAudioPlayerView","link":"CreateAudioPlayerView","description":"Play Audio
"},{"title":"module:ViewCreator.CreateVideoPlayerView","link":"CreateVideoPlayerView","description":"Play Video
"},{"title":"module:ViewCreator.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:ViewCreator.onPlaybackInfoLoaded","link":"onPlaybackInfoLoaded","description":"The playback info task has returned data
"},{"title":"module:ViewCreator.onSelectAudioPressed","link":"onSelectAudioPressed","description":"onSelectAudioPressed: Display audio selection dialog
"},{"title":"module:ViewCreator.onSelectPlaybackInfoPressed","link":"onSelectPlaybackInfoPressed","description":"User requested playback info
"},{"title":"module:ViewCreator.onSelectSubtitlePressed","link":"onSelectSubtitlePressed","description":"User requested subtitle selection popup
"},{"title":"module:ViewCreator.onSelectionMade","link":"onSelectionMade","description":"User has selected something from the radioDialog popup
"},{"title":"module:ViewCreator.onStateChange","link":"onStateChange","description":"Playback state change event handlers
"},{"title":"module:ViewCreator.processAudioSelection","link":"processAudioSelection","description":"processAudioSelection: Audio track selection handler
"},{"title":"module:ViewCreator.processSubtitleSelection","link":"processSubtitleSelection"},{"title":"module:WhatsNewDialog","link":"WhatsNewDialog"},{"title":"module:WhatsNewDialog.init","link":"init"},{"title":"module:WhatsNewDialog.setPalette","link":"setPalette"},{"title":"module:baserequest","link":"baserequest"},{"title":"module:baserequest.APIRequest","link":"APIRequest"},{"title":"module:baserequest.authRequest","link":"authRequest","description":"Takes and returns a roUrlTransfer object after adding a Jellyfin "Authorization" header
"},{"title":"module:baserequest.buildAuthHeader","link":"buildAuthHeader","description":"Returns a string containing the "Authorization" header payload
"},{"title":"module:baserequest.buildParams","link":"buildParams","description":"Functions for making requests to the API
"},{"title":"module:baserequest.buildURL","link":"buildURL"},{"title":"module:baserequest.deleteVoid","link":"deleteVoid"},{"title":"module:baserequest.getJson","link":"getJson"},{"title":"module:baserequest.getString","link":"getString"},{"title":"module:baserequest.getVoid","link":"getVoid"},{"title":"module:baserequest.get_url","link":"get_url"},{"title":"module:baserequest.headVoid","link":"headVoid"},{"title":"module:baserequest.postJson","link":"postJson"},{"title":"module:baserequest.postString","link":"postString"},{"title":"module:baserequest.postVoid","link":"postVoid"},{"title":"module:baserequest.setCertificateAuthority","link":"setCertificateAuthority","description":"sets the certificate authority by file path on the passed node
"},{"title":"module:captionTask","link":"captionTask"},{"title":"module:captionTask.fetchCaption","link":"fetchCaption"},{"title":"module:captionTask.init","link":"init"},{"title":"module:captionTask.isTime","link":"isTime"},{"title":"module:captionTask.newLayoutGroup","link":"newLayoutGroup"},{"title":"module:captionTask.newRect","link":"newRect"},{"title":"module:captionTask.newlabel","link":"newlabel"},{"title":"module:captionTask.parseVTT","link":"parseVTT"},{"title":"module:captionTask.setFont","link":"setFont"},{"title":"module:captionTask.toMs","link":"toMs"},{"title":"module:captionTask.updateCaption","link":"updateCaption"},{"title":"module:conditional","link":"conditional"},{"title":"module:conditional.printRegistry","link":"printRegistry","description":"Print out all of the registry contents to the debug log
"},{"title":"module:config","link":"config"},{"title":"module:config.GetConfigTree","link":"GetConfigTree","description":"Read config tree from json config file and return
"},{"title":"module:config.RegistryReadAll","link":"RegistryReadAll","description":"Return all data found inside a registry section
"},{"title":"module:config.findConfigTreeKey","link":"findConfigTreeKey","description":"Recursivly search the config tree for entry with settingname equal to key
"},{"title":"module:config.getRegistrySections","link":"getRegistrySections","description":"Return an array of all the registry section keys
"},{"title":"module:config.getSavedUsers","link":"getSavedUsers","description":"Returns an array of saved users from the registry\nthat belong to the active server
"},{"title":"module:config.get_setting","link":"get_setting","description":""Jellyfin" registry accessors for the default global settings
"},{"title":"module:config.get_user_setting","link":"get_user_setting","description":"User registry accessors for the currently active user
"},{"title":"module:config.registry_delete","link":"registry_delete"},{"title":"module:config.registry_read","link":"registry_read","description":"Generic registry accessors
"},{"title":"module:config.registry_write","link":"registry_write"},{"title":"module:config.set_setting","link":"set_setting"},{"title":"module:config.set_user_setting","link":"set_user_setting"},{"title":"module:config.unset_setting","link":"unset_setting"},{"title":"module:config.unset_user_setting","link":"unset_user_setting"},{"title":"module:deviceCapabilities","link":"deviceCapabilities"},{"title":"module:deviceCapabilities.GetBitRateLimit","link":"GetBitRateLimit"},{"title":"module:deviceCapabilities.GetDirectPlayProfiles","link":"GetDirectPlayProfiles"},{"title":"module:deviceCapabilities.getCodecProfiles","link":"getCodecProfiles"},{"title":"module:deviceCapabilities.getContainerProfiles","link":"getContainerProfiles"},{"title":"module:deviceCapabilities.getDeviceCapabilities","link":"getDeviceCapabilities","description":"Returns the Device Capabilities for Roku.\nAlso prints out the device profile for debugging
"},{"title":"module:deviceCapabilities.getDeviceProfile","link":"getDeviceProfile"},{"title":"module:deviceCapabilities.getMaxHeightArray","link":"getMaxHeightArray"},{"title":"module:deviceCapabilities.getMaxWidthArray","link":"getMaxWidthArray"},{"title":"module:deviceCapabilities.getSubtitleProfiles","link":"getSubtitleProfiles"},{"title":"module:deviceCapabilities.getTranscodingProfiles","link":"getTranscodingProfiles"},{"title":"module:deviceCapabilities.printDeviceProfile","link":"printDeviceProfile","description":"Print out the deviceProfile for debugging
"},{"title":"module:deviceCapabilities.removeDecimals","link":"removeDecimals","description":"Remove all decimals from a string
"},{"title":"module:deviceCapabilities.setPreferredCodec","link":"setPreferredCodec","description":"Takes and returns a comma delimited string of codecs.\nMoves the preferred codec to the front of the string
"},{"title":"module:deviceCapabilities.updateProfileArray","link":"updateProfileArray","description":"Recieves and returns an assArray of supported profiles and levels for each video codec
"},{"title":"module:globals","link":"globals"},{"title":"module:globals.SaveAppToGlobal","link":"SaveAppToGlobal","description":"Save information from roAppInfo to m.global.app
"},{"title":"module:globals.SaveDeviceToGlobal","link":"SaveDeviceToGlobal","description":"Save information from roDeviceInfo to m.global.device
"},{"title":"module:globals.setConstants","link":"setConstants","description":"Set global constants
"},{"title":"module:homeRowItemSizes","link":"homeRowItemSizes"},{"title":"module:migrations","link":"migrations"},{"title":"module:migrations.runGlobalMigrations","link":"runGlobalMigrations","description":"Run all necessary registry mirations on the "global" Jellyfin registry section
"},{"title":"module:migrations.runRegistryUserMigrations","link":"runRegistryUserMigrations"},{"title":"module:misc","link":"misc"},{"title":"module:misc.AssocArrayEqual","link":"AssocArrayEqual"},{"title":"module:misc.arrayHasValue","link":"arrayHasValue","description":"Check if a specific value is inside of an array
"},{"title":"module:misc.createLogoPoster","link":"createLogoPoster","description":"Create and return a Jellyfin logo poster node
"},{"title":"module:misc.createOverhangUser","link":"createOverhangUser"},{"title":"module:misc.createSeperator","link":"createSeperator","description":"Create and return a rectangle node used as a seperator in the overhang
"},{"title":"module:misc.div_ceiling","link":"div_ceiling"},{"title":"module:misc.findNodeBySubtype","link":"findNodeBySubtype"},{"title":"module:misc.formatTime","link":"formatTime","description":"Format time as 12 or 24 hour format based on system clock setting
"},{"title":"module:misc.getButton","link":"getButton"},{"title":"module:misc.getMinutes","link":"getMinutes","description":"Converts ticks to minutes
"},{"title":"module:misc.getMsgPicker","link":"getMsgPicker"},{"title":"module:misc.get_dialog_result","link":"get_dialog_result","description":"Returns the item selected or -1 on backpress or other unhandled closure of dialog.
"},{"title":"module:misc.inArray","link":"inArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:misc.inferServerUrl","link":"inferServerUrl","description":"take an incomplete url string and use it to make educated guesses about\nthe complete url. then tests these guesses to see if it can find a jf server\nreturns the url of the server it found, or an empty string
"},{"title":"module:misc.isAllValid","link":"isAllValid","description":"Returns whether or not all items in passed array are valid
"},{"title":"module:misc.isChainValid","link":"isChainValid","description":"isChainValid: Returns whether or not all the properties in the passed property chain are valid.\nStops evaluating at first found false value
"},{"title":"module:misc.isJellyfinServer","link":"isJellyfinServer","description":"accepts the raw json string of /system/info/public and returns\na boolean indicating if ProductName is "Jellyfin Server"
"},{"title":"module:misc.isLocalhost","link":"isLocalhost","description":"Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
"},{"title":"module:misc.isNodeEvent","link":"isNodeEvent"},{"title":"module:misc.isValid","link":"isValid","description":"Returns whether or not passed value is valid
"},{"title":"module:misc.isValidAndNotEmpty","link":"isValidAndNotEmpty","description":"Returns whether or not passed value is valid and not empty\nAccepts a string, or any countable type (arrays and lists)
"},{"title":"module:misc.lastFocusedChild","link":"lastFocusedChild"},{"title":"module:misc.leftPad","link":"leftPad"},{"title":"module:misc.message_dialog","link":"message_dialog"},{"title":"module:misc.option_dialog","link":"option_dialog"},{"title":"module:misc.parseUrl","link":"parseUrl","description":"Returns an array from a url = [ url, proto, host, port, subdir+params ]\nIf port or subdir are not found, an empty string will be added to the array\nProto must be declared or array will be empty
"},{"title":"module:misc.roundNumber","link":"roundNumber","description":"Rounds number to nearest integer
"},{"title":"module:misc.secondsToHuman","link":"secondsToHuman"},{"title":"module:misc.setFieldTextValue","link":"setFieldTextValue"},{"title":"module:misc.show_dialog","link":"show_dialog"},{"title":"module:misc.shuffleArray","link":"shuffleArray","description":"Takes an array of data, shuffles the order, then returns the array\nuses the Fisher-Yates shuffling algorithm
"},{"title":"module:misc.startLoadingSpinner","link":"startLoadingSpinner","description":"startLoadingSpinner: Start a loading spinner and attach it to the main JFScene.\nDisplays an invisible ProgressDialog node by default to disable keypresses while loading.
"},{"title":"module:misc.stopLoadingSpinner","link":"stopLoadingSpinner"},{"title":"module:misc.ticksToHuman","link":"ticksToHuman"},{"title":"module:misc.toString","link":"toString"},{"title":"module:misc.urlCandidates","link":"urlCandidates","description":"this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates\nfor the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated\nfull urls.
"},{"title":"module:misc.versionChecker","link":"versionChecker","description":"Returns whether or not a version number (e.g. 10.7.7) is greater or equal\nto some minimum version allowed (e.g. 10.8.0)
"},{"title":"module:quickplay","link":"quickplay"},{"title":"module:quickplay.album","link":"album","description":"A music album.\nPlay the entire album starting with track 1.
"},{"title":"module:quickplay.artist","link":"artist","description":"A music artist.\nShuffle play all songs by artist.
"},{"title":"module:quickplay.audio","link":"audio","description":"A single audio file.
"},{"title":"module:quickplay.boxset","link":"boxset","description":"A boxset.\nPlay all items inside.
"},{"title":"module:quickplay.collectionFolder","link":"collectionFolder","description":"Quick Play A CollectionFolder.\nShuffle play the items inside\nwith some differences based on collectionType.
"},{"title":"module:quickplay.folder","link":"folder","description":"Quick Play A folder.\nShuffle play all items found
"},{"title":"module:quickplay.multipleSeries","link":"multipleSeries","description":"More than one TV Show Series.\nShuffle play all watched episodes
"},{"title":"module:quickplay.musicVideo","link":"musicVideo","description":"A single music video file.
"},{"title":"module:quickplay.person","link":"person","description":"Quick Play A Person.\nShuffle play all videos found
"},{"title":"module:quickplay.photo","link":"photo","description":"A single photo.
"},{"title":"module:quickplay.photoAlbum","link":"photoAlbum","description":"A photo album.
"},{"title":"module:quickplay.playlist","link":"playlist","description":"Quick Play A Playlist.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.program","link":"program","description":"Quick Play A Live Program
"},{"title":"module:quickplay.pushToQueue","link":"pushToQueue","description":"Takes an array of items and adds to global queue.\nAlso shuffles the playlist if asked
"},{"title":"module:quickplay.season","link":"season","description":"A TV Show Season.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.series","link":"series","description":"A TV Show Series.\nPlay the first unwatched episode.\nIf none, shuffle play the whole series.
"},{"title":"module:quickplay.tvChannel","link":"tvChannel","description":"Quick Play A TVChannel
"},{"title":"module:quickplay.userView","link":"userView","description":"Quick Play A UserView.\nPlay logic depends on "collectionType".
"},{"title":"module:quickplay.video","link":"video","description":"A single video file.
"},{"title":"module:quickplay.videoContainer","link":"videoContainer","description":"A container with some kind of videos inside of it
"},{"title":"module:schedule","link":"schedule"},{"title":"module:schedule.channelFilterSet","link":"channelFilterSet"},{"title":"module:schedule.channelsearchTermSet","link":"channelsearchTermSet","description":"Voice Search set
"},{"title":"module:schedule.focusProgramDetails","link":"focusProgramDetails","description":"Move the TV Guide Grid down or up depending whether details are selected
"},{"title":"module:schedule.init","link":"init"},{"title":"module:schedule.onChannelsLoaded","link":"onChannelsLoaded","description":"Initial list of channels loaded
"},{"title":"module:schedule.onGridScrolled","link":"onGridScrolled","description":"As user scrolls grid, check if more data requries to be loaded
"},{"title":"module:schedule.onKeyEvent","link":"onKeyEvent"},{"title":"module:schedule.onProgramDetailsLoaded","link":"onProgramDetailsLoaded","description":"Update the Program Details with full information
"},{"title":"module:schedule.onProgramFocused","link":"onProgramFocused"},{"title":"module:schedule.onProgramSelected","link":"onProgramSelected"},{"title":"module:schedule.onRecordChannelSelected","link":"onRecordChannelSelected","description":"Handle user selecting "Record Channel" from Program Details
"},{"title":"module:schedule.onRecordOperationDone","link":"onRecordOperationDone"},{"title":"module:schedule.onRecordSeriesChannelSelected","link":"onRecordSeriesChannelSelected","description":"Handle user selecting "Record Series" from Program Details
"},{"title":"module:schedule.onScheduleLoaded","link":"onScheduleLoaded","description":"When LoadScheduleTask completes (initial or more data) and we have a schedule to display
"},{"title":"module:schedule.onWatchChannelSelected","link":"onWatchChannelSelected","description":"Handle user selecting "Watch Channel" from Program Details
"},{"title":"module:section","link":"section"},{"title":"module:section.init","link":"init"},{"title":"module:section.onFocusChange","link":"onFocusChange"},{"title":"module:section.onIDChange","link":"onIDChange"},{"title":"module:section.onTranslationChange","link":"onTranslationChange"},{"title":"module:section.scrollDownToOnDeck","link":"scrollDownToOnDeck"},{"title":"module:section.scrollOffBottom","link":"scrollOffBottom"},{"title":"module:section.scrollOffOnDeck","link":"scrollOffOnDeck"},{"title":"module:section.scrollOffTop","link":"scrollOffTop"},{"title":"module:section.scrollUpToOnDeck","link":"scrollUpToOnDeck"},{"title":"module:section.showFromBottom","link":"showFromBottom"},{"title":"module:section.showFromTop","link":"showFromTop"},{"title":"module:sectionScroller","link":"sectionScroller"},{"title":"module:sectionScroller.displayedIndexChanged","link":"displayedIndexChanged"},{"title":"module:sectionScroller.init","link":"init"},{"title":"module:sectionScroller.onFocusChange","link":"onFocusChange"},{"title":"module:settings","link":"settings"},{"title":"module:settings.LoadMenu","link":"LoadMenu"},{"title":"module:settings.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook that gets ran as needed.\nAssumes settings were changed and they affect the device profile.\nPosts a new device profile to the server using the task thread
"},{"title":"module:settings.boolSettingChanged","link":"boolSettingChanged"},{"title":"module:settings.init","link":"init"},{"title":"module:settings.isFormInFocus","link":"isFormInFocus","description":"Returns true if any of the data entry forms are in focus
"},{"title":"module:settings.onKeyEvent","link":"onKeyEvent"},{"title":"module:settings.onKeyGridEscape","link":"onKeyGridEscape"},{"title":"module:settings.onKeyGridSubmit","link":"onKeyGridSubmit"},{"title":"module:settings.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:settings.radioSettingChanged","link":"radioSettingChanged"},{"title":"module:settings.settingFocused","link":"settingFocused"},{"title":"module:settings.settingSelected","link":"settingSelected"},{"title":"module:userauth","link":"userauth"},{"title":"module:userauth.AboutMe","link":"AboutMe"},{"title":"module:userauth.AuthenticateViaQuickConnect","link":"AuthenticateViaQuickConnect"},{"title":"module:userauth.AvailableUsers","link":"AvailableUsers"},{"title":"module:userauth.GetPublicUsers","link":"GetPublicUsers"},{"title":"module:userauth.LoadUserAbilities","link":"LoadUserAbilities"},{"title":"module:userauth.ServerInfo","link":"ServerInfo"},{"title":"module:userauth.SignOut","link":"SignOut"},{"title":"module:userauth.checkQuickConnect","link":"checkQuickConnect"},{"title":"module:userauth.get_token","link":"get_token"},{"title":"module:userauth.initQuickConnect","link":"initQuickConnect"}]}
\ No newline at end of file
diff --git a/docs/api/module-HomeItem.html b/docs/api/module-HomeItem.html
index d43606df3..c042f857b 100644
--- a/docs/api/module-HomeItem.html
+++ b/docs/api/module-HomeItem.html
@@ -1,3 +1,3 @@
Module: HomeItem On this pageMethods
(static) drawProgressBar(itemData) → {void}
Draws and animates item progress bar
Parameters:Name Type Description itemData
dynamic
Returns:- Type:
- void
(static) focusChanged() → {void}
Enable title scrolling based on item Focus
Returns:- Type:
- void
(static) init() → {void}
Returns:- Type:
- void
(static) itemContentChanged() → {void}
Returns:- Type:
- void
(static) onPosterLoadStatusChanged() → {void}
Hide backdrop and icon when poster loaded
Returns:- Type:
- void
\ No newline at end of file
+ On this pageMethods
(static) drawProgressBar(itemData) → {void}
Draws and animates item progress bar
Parameters:Name Type Description itemData
dynamic
Returns:- Type:
- void
(static) focusChanged() → {void}
Enable title scrolling based on item Focus
Returns:- Type:
- void
(static) init() → {void}
Returns:- Type:
- void
(static) initItemPoster() → {void}
Returns:- Type:
- void
(static) initItemText() → {void}
Returns:- Type:
- void
(static) initItemTextExtra() → {void}
Returns:- Type:
- void
(static) itemContentChanged() → {void}
Returns:- Type:
- void
(static) onPosterLoadStatusChanged() → {void}
Hide backdrop and icon when poster loaded
Returns:- Type:
- void
\ No newline at end of file
diff --git a/docs/api/source_ShowScenes.bs.html b/docs/api/source_ShowScenes.bs.html
index 14a6e39d7..44cdd569c 100644
--- a/docs/api/source_ShowScenes.bs.html
+++ b/docs/api/source_ShowScenes.bs.html
@@ -44,9 +44,10 @@
SendPerformanceBeacon("AppDialogInitiate") ' Roku Performance monitoring - Dialog Starting
publicUsers = GetPublicUsers()
- savedUsers = getSavedUsers()
+ numPubUsers = 0
+ if isValid(publicUsers) then numPubUsers = publicUsers.count()
- numPubUsers = publicUsers.count()
+ savedUsers = getSavedUsers()
numSavedUsers = savedUsers.count()
if numPubUsers > 0 or numSavedUsers > 0
From 422c670bea8f51586396d49659f1e83230ee534a Mon Sep 17 00:00:00 2001
From: Pierre Briois
Date: Mon, 29 Jul 2024 07:30:35 +0000
Subject: [PATCH 32/84] Translated using Weblate (French)
Currently translated at 99.6% (282 of 283 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/fr/
---
locale/fr/translations.ts | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/locale/fr/translations.ts b/locale/fr/translations.ts
index 99bf25095..b1fa35a24 100644
--- a/locale/fr/translations.ts
+++ b/locale/fr/translations.ts
@@ -1290,6 +1290,11 @@
Pour consulter la liste complète des modifications, visitez
WhatsNewDialog body text preceding the changelog URL
+
+
+ Voir les épisodes déjà vus dans la section "À suivre".
+ User Setting - Setting description
+
From 007e53bb06b4e20cb0ee8af89fdafcae6fc1fae8 Mon Sep 17 00:00:00 2001
From: jellyfin-bot
Date: Mon, 29 Jul 2024 12:44:46 +0000
Subject: [PATCH 33/84] Update API docs
---
docs/api/components_ItemGrid_GridItem.bs.html | 15 +++++++++
docs/api/components_ItemGrid_ItemGrid.bs.html | 13 ++++++--
...components_ItemGrid_LoadItemsTask2.bs.html | 11 ++++++-
docs/api/components_data_HomeData.bs.html | 14 ++++----
.../api/components_home_LoadItemsTask.bs.html | 33 +++++++++++++++++++
docs/api/source_Main.bs.html | 3 ++
6 files changed, 79 insertions(+), 10 deletions(-)
diff --git a/docs/api/components_ItemGrid_GridItem.bs.html b/docs/api/components_ItemGrid_GridItem.bs.html
index fbe36be96..237d51cb5 100644
--- a/docs/api/components_ItemGrid_GridItem.bs.html
+++ b/docs/api/components_ItemGrid_GridItem.bs.html
@@ -114,6 +114,21 @@
else
m.itemText.text = itemData.Title
end if
+ ' Adjust to wide posters for "View All Next Up"
+ if m.topParent.overhangTitle = tr("View All Next Up")
+ m.posterMask.maskUri = ""
+
+ m.itemPoster.height = 300
+ m.itemPoster.width = 400
+ m.itemPoster.loadDisplayMode = "scaleToFit"
+
+ m.backdrop.height = 300
+ m.backdrop.width = 400
+ m.backdrop.loadDisplayMode = "scaleToFit"
+
+ m.itemText.translation = [0, m.itemPoster.height + 7]
+ m.itemText.maxWidth = 400
+ end if
else if itemData.type = "MusicArtist"
m.itemPoster.uri = itemData.PosterUrl
m.itemText.text = itemData.Title
diff --git a/docs/api/components_ItemGrid_ItemGrid.bs.html b/docs/api/components_ItemGrid_ItemGrid.bs.html
index 417c23f56..f90793408 100644
--- a/docs/api/components_ItemGrid_ItemGrid.bs.html
+++ b/docs/api/components_ItemGrid_ItemGrid.bs.html
@@ -200,6 +200,14 @@
' non recursive for collections (folders, boxsets, photo albums, etc)
m.loadItemsTask.recursive = false
end if
+
+ if getCollectionType() = "nextup"
+ m.loadItemsTask.itemType = "NextUp"
+ m.itemGrid.itemSize = "[400, 300]"
+ m.top.imageDisplayMode = "scaleToFit"
+ m.itemGrid.numColumns = 4
+ m.alpha.visible = false
+ end if
else if m.top.parentItem.json.type = "Studio"
m.loadItemsTask.itemId = m.top.parentItem.parentFolder
m.loadItemsTask.itemType = "Series,Movie"
@@ -404,7 +412,6 @@
setPhotoAlbumOptions(options)
else if getCollectionType() = "music"
setMusicOptions(options)
-
else
setDefaultOptions(options)
end if
@@ -788,7 +795,7 @@
searchGrp.setFocus(false)
end if
- if key = "options"
+ if key = "options" and getCollectionType() <> "nextup"
if m.options.visible = true
m.options.visible = false
m.top.removeChild(m.options)
@@ -838,7 +845,7 @@
m.top.quickPlayNode = itemToPlay
return true
end if
- else if key = "left" and topGrp.isinFocusChain()
+ else if key = "left" and topGrp.isinFocusChain() and m.alpha.visible
m.top.alphaActive = true
topGrp.setFocus(false)
m.alphaMenu.setFocus(true)
diff --git a/docs/api/components_ItemGrid_LoadItemsTask2.bs.html b/docs/api/components_ItemGrid_LoadItemsTask2.bs.html
index e7d8cfff7..a0953bc3b 100644
--- a/docs/api/components_ItemGrid_LoadItemsTask2.bs.html
+++ b/docs/api/components_ItemGrid_LoadItemsTask2.bs.html
@@ -132,6 +132,11 @@
url = Substitute("Users/{0}/Items/", m.global.session.user.id)
params.append({ ImageTypeLimit: 1 })
params.append({ EnableImageTypes: "Primary,Backdrop,Banner,Thumb" })
+ else if LCase(m.top.ItemType) = "nextup"
+ url = "Shows/NextUp"
+ params.limit = 100 ' If you have more than 100 in your Next Up queue, maybe go outside a bit more.
+ params.append({ ImageTypeLimit: 1 })
+ params.append({ EnableImageTypes: "Primary,Backdrop,Banner,Thumb" })
else
url = Substitute("Users/{0}/Items/", m.global.session.user.id)
end if
@@ -196,6 +201,10 @@
tmp.image = PosterImage(item.id, { "maxHeight": 425, "maxWidth": 290, "quality": "90" })
else if item.type = "Episode"
tmp = CreateObject("roSGNode", "TVEpisode")
+ if LCase(m.top.ItemType) = "nextup"
+ tmp.title = item.name
+ tmp.type = "Episode"
+ end if
else if LCase(item.Type) = "recording"
tmp = CreateObject("roSGNode", "RecordingData")
else if item.Type = "Genre"
@@ -283,7 +292,7 @@
end if
if tmp <> invalid
- if item.Type <> "Genre" and item.Type <> "MusicGenre"
+ if LCase(item.Type) <> "genre" and LCase(item.Type) <> "musicgenre"
tmp.parentFolder = m.top.itemId
tmp.json = item
if item.UserData <> invalid and item.UserData.isFavorite <> invalid
diff --git a/docs/api/components_data_HomeData.bs.html b/docs/api/components_data_HomeData.bs.html
index c41f3739d..699f7e464 100644
--- a/docs/api/components_data_HomeData.bs.html
+++ b/docs/api/components_data_HomeData.bs.html
@@ -21,15 +21,17 @@
' Set appropriate Images for Wide and Tall based on type
- if datum.type = "CollectionFolder" or datum.type = "UserView"
- params = { "Tag": datum.ImageTags.Primary, "maxHeight": 261, "maxWidth": 464 }
- m.top.thumbnailURL = ImageURL(datum.id, "Primary", params)
- m.top.widePosterUrl = m.top.thumbnailURL
+ if LCase(datum.type) = "collectionfolder" or LCase(datum.type) = "userview"
+ if IsValid(datum.ImageTags)
+ params = { "Tag": datum.ImageTags.Primary, "maxHeight": 261, "maxWidth": 464 }
+ m.top.thumbnailURL = ImageURL(datum.id, "Primary", params)
+ m.top.widePosterUrl = m.top.thumbnailURL
+ end if
' Add Icon URLs for display if there is no Poster
- if datum.CollectionType = "livetv"
+ if LCase(m.top.CollectionType) = "livetv"
m.top.iconUrl = "pkg:/images/media_type_icons/live_tv_white.png"
- else if datum.CollectionType = "folders"
+ else if LCase(m.top.CollectionType) = "folders" or LCase(m.top.CollectionType) = "nextup"
m.top.iconUrl = "pkg:/images/media_type_icons/folder_white.png"
end if
diff --git a/docs/api/components_home_LoadItemsTask.bs.html b/docs/api/components_home_LoadItemsTask.bs.html
index c58f7275e..d64999acc 100644
--- a/docs/api/components_home_LoadItemsTask.bs.html
+++ b/docs/api/components_home_LoadItemsTask.bs.html
@@ -87,6 +87,9 @@
end if
end if
+ addViewAll = true ' Assume there will be a "View All" to start
+ checkViewAll = false ' Only need to check if we don't have anything in the Next Up home row
+
resp = APIRequest(url, params)
data = getJson(resp)
if isValid(data) and isValid(data.Items)
@@ -95,6 +98,36 @@
tmp.json = item
results.push(tmp)
end for
+ if data.Items.Count() = 0
+ checkViewAll = true
+ end if
+ else
+ checkViewAll = true
+ end if
+
+ ' Add "View All"
+ if checkViewAll
+ ' Nothing to show in Next Up, but are there hidden items (e.g. > 365 days old)?
+ params.Delete("NextUpDateCutoff")
+ params["limit"] = 1 ' if there is even one, then we know we need to show "View All"
+ resp = APIRequest(url, params)
+ data = getJson(resp)
+ if not isValid(data) or isValid(data) and isValid(data.Items) and data.Items.Count() = 0
+ addViewAll = false
+ end if
+ end if
+
+ if addViewAll
+ tmp = CreateObject("roSGNode", "HomeData")
+ tmp.type = "CollectionFolder"
+ tmp.usePoster = false
+ tmp.json = {
+ IsFolder: true,
+ Name: tr("View All Next Up"),
+ Type: "CollectionFolder",
+ CollectionType: "nextup"
+ }
+ results.push(tmp)
end if
' Load Continue Watching
else if m.top.itemsToLoad = "continue"
diff --git a/docs/api/source_Main.bs.html b/docs/api/source_Main.bs.html
index 3e36d1639..5be9514c8 100644
--- a/docs/api/source_Main.bs.html
+++ b/docs/api/source_Main.bs.html
@@ -270,6 +270,9 @@
group = CreateMovieLibraryView(selectedItem)
else if selectedItem.collectionType = "music"
group = CreateMusicLibraryView(selectedItem)
+ else if selectedItem.collectionType = "nextup"
+ group = CreateItemGrid(selectedItem)
+ group.optionsAvailable = false
else
group = CreateItemGrid(selectedItem)
end if
From 8da817618d7dca6d56ddd71b1e5a9012ea67bb1a Mon Sep 17 00:00:00 2001
From: DJSweder
Date: Mon, 29 Jul 2024 13:27:29 +0000
Subject: [PATCH 34/84] Translated using Weblate (Czech)
Currently translated at 100.0% (283 of 283 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/cs/
---
locale/cs/translations.ts | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/locale/cs/translations.ts b/locale/cs/translations.ts
index 267c0b474..4d81effa8 100644
--- a/locale/cs/translations.ts
+++ b/locale/cs/translations.ts
@@ -1280,6 +1280,26 @@
Zdrojový soubor je zcela kompatibilní s tímto klientem a relace přijímá soubor bez úprav.
Direct play info box text in GetPlaybackInfoTask.brs
+
+
+ Zobrazit již zhlédnuté díly v sekci 'Další díly'.
+ User Setting - Setting description
+
+
+
+ Sledujte znovu Další díly
+ User Setting - Setting title
+
+
+
+ Vítejte ve verzi
+ WhatsNewDialog title - Welcome to version 2.0.0
+
+
+
+ Pro zobrazení úplného seznamu změn navštivte
+ WhatsNewDialog body text preceding the changelog URL
+
From bac572ae716f0fb5e716b22bc660f39a8b13c324 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Tue, 30 Jul 2024 14:03:50 -0400
Subject: [PATCH 35/84] save useEpisodeImagesInNextUpAndResume from web client
to session
---
source/utils/misc.bs | 15 +++++++++++++++
source/utils/session.bs | 33 +++++++++++++++++----------------
2 files changed, 32 insertions(+), 16 deletions(-)
diff --git a/source/utils/misc.bs b/source/utils/misc.bs
index 8af32c61f..24c44f569 100644
--- a/source/utils/misc.bs
+++ b/source/utils/misc.bs
@@ -584,3 +584,18 @@ function createOverhangUser()
return userLabel
end function
+
+' convert value to boolean and return value
+function toBoolean(value as dynamic) as dynamic
+ if value = invalid then return invalid
+ if Type(value) = "Boolean" then return value
+ if Type(value) <> "String" then return value
+
+ if value = "true"
+ return true
+ else if value = "false"
+ return false
+ else
+ return value
+ end if
+end function
diff --git a/source/utils/session.bs b/source/utils/session.bs
index 497ff310b..20ff7a9b1 100644
--- a/source/utils/session.bs
+++ b/source/utils/session.bs
@@ -2,6 +2,7 @@
import "pkg:/source/api/userauth.bs"
import "pkg:/source/api/baserequest.bs"
import "pkg:/source/migrations.bs"
+import "pkg:/source/utils/misc.bs"
namespace session
' Initialize the global session array
@@ -182,13 +183,6 @@ namespace session
end if
end for
- if m.global.app.isDev
- print "m.global.session.user = ", m.global.session.user
- print "m.global.session.user.Configuration = ", m.global.session.user.Configuration
- print "m.global.session.user.Policy = ", m.global.session.user.Policy
- print "m.global.session.user.settings = ", m.global.session.user.settings
- end if
-
set_user_setting("serverId", m.global.session.server.id)
if saveCredentials
@@ -204,6 +198,13 @@ namespace session
session.user.SetServerDeviceName()
' Load user preferences from server
session.user.LoadUserPreferences()
+
+ if m.global.app.isDev
+ print "m.global.session.user = ", m.global.session.user
+ print "m.global.session.user.Configuration = ", m.global.session.user.Configuration
+ print "m.global.session.user.Policy = ", m.global.session.user.Policy
+ print "m.global.session.user.settings = ", m.global.session.user.settings
+ end if
end sub
' Sets the global server device name value used by the API
@@ -234,6 +235,14 @@ namespace session
jsonResponse = getJson(resp)
if isValid(jsonResponse) and isValid(jsonResponse.CustomPrefs)
+ ' save useEpisodeImagesInNextUpAndResume to global session
+ tmpSetting = jsonResponse.CustomPrefs.useEpisodeImagesInNextUpAndResume
+ if isValid(tmpSetting)
+ tmpConfig = m.global.session.user.Configuration
+ tmpConfig.AddReplace("useEpisodeImagesInNextUpAndResume", toBoolean(tmpSetting))
+ session.user.Update("Configuration", tmpConfig)
+ end if
+
session.user.SaveUserHomeSections(jsonResponse.CustomPrefs)
if isValid(jsonResponse.CustomPrefs["landing-livetv"])
@@ -414,16 +423,8 @@ namespace session
sub Save(name as string, value as string)
if name = invalid or value = invalid then return
tmpSettingArray = m.global.session.user.settings
- convertedValue = value
-
- ' convert to boolean
- if value = "true"
- convertedValue = true
- else if value = "false"
- convertedValue = false
- end if
- tmpSettingArray[name] = convertedValue
+ tmpSettingArray[name] = toBoolean(value)
session.user.Update("settings", tmpSettingArray)
end sub
From cae2bea5810f245007b23e9d0053b1725c49f6ee Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Tue, 30 Jul 2024 14:42:41 -0400
Subject: [PATCH 36/84] create and implement episode image user setting
---
components/home/HomeItem.bs | 11 +++++++++--
locale/en_US/translations.ts | 25 +++++++++++++++++++++++++
settings/settings.json | 21 +++++++++++++++++++++
3 files changed, 55 insertions(+), 2 deletions(-)
diff --git a/components/home/HomeItem.bs b/components/home/HomeItem.bs
index c5546d5ab..b49031a15 100644
--- a/components/home/HomeItem.bs
+++ b/components/home/HomeItem.bs
@@ -146,9 +146,16 @@ sub itemContentChanged()
drawProgressBar(itemData)
end if
- if itemData.usePoster = true
+ if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "webclient"
+ tmpSetting = localGlobal.session.user.Configuration.useEpisodeImagesInNextUpAndResume
+ if isValid(tmpSetting) and tmpSetting
+ m.itemPoster.uri = itemData.thumbnailURL
+ else
+ m.itemPoster.uri = itemData.widePosterURL
+ end if
+ else if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "show"
m.itemPoster.uri = itemData.widePosterURL
- else
+ else if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "episode"
m.itemPoster.uri = itemData.thumbnailURL
end if
diff --git a/locale/en_US/translations.ts b/locale/en_US/translations.ts
index fe5666d25..7ba3844b8 100644
--- a/locale/en_US/translations.ts
+++ b/locale/en_US/translations.ts
@@ -1286,5 +1286,30 @@
Show already watched episodes in 'Next Up' sections.
User Setting - Setting description
+
+
+ Episode Images Next Up
+ User Setting - Setting title
+
+
+
+ What type of images to use for Episodes shown in the 'Next Up' and 'Continue Watching' sections.
+ User Setting - Setting description
+
+
+
+ Use Web Client Setting
+ User Setting - Setting option title
+
+
+
+ Use Episode Image
+ User Setting - Setting option title
+
+
+
+ Use Show Image
+ User Setting - Setting option title
+
diff --git a/settings/settings.json b/settings/settings.json
index 6f5e15c00..99e053715 100644
--- a/settings/settings.json
+++ b/settings/settings.json
@@ -220,6 +220,27 @@
"title": "General",
"description": "Settings relating to the appearance of the Home screen and the program in general.",
"children": [
+ {
+ "title": "Episode Images Next Up",
+ "description": "What type of images to use for Episodes shown in the 'Next Up' and 'Continue Watching' sections.",
+ "settingName": "ui.general.episodeimagesnextup",
+ "type": "radio",
+ "default": "webclient",
+ "options": [
+ {
+ "title": "Use Web Client Setting",
+ "id": "webclient"
+ },
+ {
+ "title": "Use Episode Image",
+ "id": "episode"
+ },
+ {
+ "title": "Use Show Image",
+ "id": "show"
+ }
+ ]
+ },
{
"title": "Hide Clock",
"description": "Hide all clocks in Jellyfin. Jellyfin will need to be closed and reopened for changes to take effect.",
From 7c05e01fabd61f397a4ee2cdf8ef81593d6cf086 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Tue, 30 Jul 2024 20:06:14 -0400
Subject: [PATCH 37/84] remove invalid node field
---
components/settings/settings.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/components/settings/settings.xml b/components/settings/settings.xml
index 10f3a24da..ec0bc7b47 100644
--- a/components/settings/settings.xml
+++ b/components/settings/settings.xml
@@ -35,7 +35,7 @@
-
+
\ No newline at end of file
From 96591865e4e6d9a6a23622480e5bff2a4b398210 Mon Sep 17 00:00:00 2001
From: Charles Ewert
Date: Tue, 30 Jul 2024 21:27:46 -0400
Subject: [PATCH 38/84] add `Play Next Episode Automatically` user setting
---
components/ItemGrid/LoadVideoContentTask.bs | 6 +++---
components/JFVideo.bs | 14 ++++++++------
components/video/VideoPlayerView.bs | 14 ++++++++------
locale/en_US/translations.ts | 15 +++++++++++++++
settings/settings.json | 21 +++++++++++++++++++++
source/VideoPlayer.bs | 6 +++---
6 files changed, 58 insertions(+), 18 deletions(-)
diff --git a/components/ItemGrid/LoadVideoContentTask.bs b/components/ItemGrid/LoadVideoContentTask.bs
index 83cb4b0da..ff28efe34 100644
--- a/components/ItemGrid/LoadVideoContentTask.bs
+++ b/components/ItemGrid/LoadVideoContentTask.bs
@@ -119,9 +119,9 @@ sub LoadItems_AddVideoContent(video as object, mediaSourceId as dynamic, audio_s
video.logoImage = api.items.GetImageURL(logoLookupID, "logo", 0, { "maxHeight": 65, "maxWidth": 300, "quality": "90" })
end if
- user = AboutMe()
- if user.Configuration.EnableNextEpisodeAutoPlay
- if LCase(m.top.itemType) = "episode"
+ if LCase(m.top.itemType) = "episode"
+ userSession = m.global.session.user
+ if userSession.settings["playback.playnextepisode"] = "enabled" or userSession.settings["playback.playnextepisode"] = "webclient" and userSession.Configuration.EnableNextEpisodeAutoPlay
addNextEpisodesToQueue(video.showID)
end if
end if
diff --git a/components/JFVideo.bs b/components/JFVideo.bs
index f4dfb74e8..5be3d8537 100644
--- a/components/JFVideo.bs
+++ b/components/JFVideo.bs
@@ -92,12 +92,14 @@ end sub
sub showNextEpisodeButton()
if m.top.content.contenttype <> 4 then return ' only display when content is type "Episode"
if m.nextupbuttonseconds = 0 then return ' is the button disabled?
-
- if m.nextEpisodeButton.opacity = 0 and m.global.session.user.configuration.EnableNextEpisodeAutoPlay
- m.nextEpisodeButton.visible = true
- m.showNextEpisodeButtonAnimation.control = "start"
- m.nextEpisodeButton.setFocus(true)
- end if
+ if m.nextEpisodeButton.opacity <> 0 then return
+ userSession = m.global.session.user
+ if userSession.settings["playback.playnextepisode"] = "disabled" then return
+ if userSession.settings["playback.playnextepisode"] = "webclient" and not userSession.Configuration.EnableNextEpisodeAutoPlay then return
+
+ m.nextEpisodeButton.visible = true
+ m.showNextEpisodeButtonAnimation.control = "start"
+ m.nextEpisodeButton.setFocus(true)
end sub
'
diff --git a/components/video/VideoPlayerView.bs b/components/video/VideoPlayerView.bs
index 56f230ee8..be0d32be2 100644
--- a/components/video/VideoPlayerView.bs
+++ b/components/video/VideoPlayerView.bs
@@ -517,12 +517,14 @@ sub showNextEpisodeButton()
if m.osd.visible then return
if m.top.content.contenttype <> 4 then return ' only display when content is type "Episode"
if m.nextupbuttonseconds = 0 then return ' is the button disabled?
-
- if m.nextEpisodeButton.opacity = 0 and m.global.session.user.configuration.EnableNextEpisodeAutoPlay
- m.nextEpisodeButton.visible = true
- m.showNextEpisodeButtonAnimation.control = "start"
- m.nextEpisodeButton.setFocus(true)
- end if
+ if m.nextEpisodeButton.opacity <> 0 then return
+ userSession = m.global.session.user
+ if userSession.settings["playback.playnextepisode"] = "disabled" then return
+ if userSession.settings["playback.playnextepisode"] = "webclient" and not userSession.Configuration.EnableNextEpisodeAutoPlay then return
+
+ m.nextEpisodeButton.visible = true
+ m.showNextEpisodeButtonAnimation.control = "start"
+ m.nextEpisodeButton.setFocus(true)
end sub
'
diff --git a/locale/en_US/translations.ts b/locale/en_US/translations.ts
index fe5666d25..6d33ead83 100644
--- a/locale/en_US/translations.ts
+++ b/locale/en_US/translations.ts
@@ -1286,5 +1286,20 @@
Show already watched episodes in 'Next Up' sections.
User Setting - Setting description
+
+
+ Play Next Episode Automatically
+ User Setting - Setting title
+
+
+
+ When finished playing a single episode, play the next one automatically.
+ User Setting - Setting description
+
+
+
+ Use Web Client Setting
+ User Setting - Setting option title
+
diff --git a/settings/settings.json b/settings/settings.json
index 6f5e15c00..48a7da067 100644
--- a/settings/settings.json
+++ b/settings/settings.json
@@ -174,6 +174,27 @@
"type": "integer",
"default": "30"
},
+ {
+ "title": "Play Next Episode Automatically",
+ "description": "When finished playing a single episode, play the next one automatically.",
+ "settingName": "playback.playnextepisode",
+ "type": "radio",
+ "default": "webclient",
+ "options": [
+ {
+ "title": "Use Web Client Setting",
+ "id": "webclient"
+ },
+ {
+ "title": "Enabled",
+ "id": "enabled"
+ },
+ {
+ "title": "Disabled",
+ "id": "disabled"
+ }
+ ]
+ },
{
"title": "Preferred Audio Codec",
"description": "Use the selected audio codec for transcodes. If the device or stream does not support it, a fallback codec will be used.",
diff --git a/source/VideoPlayer.bs b/source/VideoPlayer.bs
index 1c4f7e758..d034b78ef 100644
--- a/source/VideoPlayer.bs
+++ b/source/VideoPlayer.bs
@@ -435,11 +435,11 @@ function getAudioInfo(meta as object) as object
end function
sub autoPlayNextEpisode(videoID as string, showID as string)
- ' use web client setting
- if m.global.session.user.configuration.EnableNextEpisodeAutoPlay
+ userSession = m.global.session.user
+ if userSession.settings["playback.playnextepisode"] = "enabled" or userSession.settings["playback.playnextepisode"] = "webclient" and userSession.Configuration.EnableNextEpisodeAutoPlay
' query API for next episode ID
url = Substitute("Shows/{0}/Episodes", showID)
- urlParams = { "UserId": m.global.session.user.id }
+ urlParams = { "UserId": userSession.id }
urlParams.Append({ "StartItemId": videoID })
urlParams.Append({ "Limit": 2 })
resp = APIRequest(url, urlParams)
From 39cbb65ff0de8f5c991d0cc7fd485d8ef9aa77a7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 31 Jul 2024 10:43:55 +0000
Subject: [PATCH 39/84] Update dependency brighterscript to v0.67.5
---
package-lock.json | 8 ++++----
package.json | 2 +-
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 2b39cc217..781c36d70 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
},
"devDependencies": {
"@rokucommunity/bslint": "0.8.22",
- "brighterscript": "0.67.4",
+ "brighterscript": "0.67.5",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
"jsdoc": "4.0.3",
@@ -848,9 +848,9 @@
}
},
"node_modules/brighterscript": {
- "version": "0.67.4",
- "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.4.tgz",
- "integrity": "sha512-1EbX2Po9WbIyi4r557fk6txkYR0VvbnGm1caS9AVlVek2R6d9+QsQxr+f24PePM4l/TOBvZ1JieBt6NheM4P2Q==",
+ "version": "0.67.5",
+ "resolved": "https://registry.npmjs.org/brighterscript/-/brighterscript-0.67.5.tgz",
+ "integrity": "sha512-OUJ5xLymzKXir8/RdWKamRIYbcqFy2JgqSp6eu2F+wdlCp3rlKCrP83pjEJ9kuqwJCo/V2pjTUcilcNBLkvuIg==",
"license": "MIT",
"dependencies": {
"@rokucommunity/bslib": "^0.1.1",
diff --git a/package.json b/package.json
index af4e8e015..f460d7b06 100644
--- a/package.json
+++ b/package.json
@@ -10,7 +10,7 @@
},
"devDependencies": {
"@rokucommunity/bslint": "0.8.22",
- "brighterscript": "0.67.4",
+ "brighterscript": "0.67.5",
"brighterscript-jsdocs-plugin": "0.6.0",
"clean-jsdoc-theme": "4.3.0",
"jsdoc": "4.0.3",
From e753d4b45d54e1fecd8bcf5a683418048effd118 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 1 Aug 2024 14:02:50 +0000
Subject: [PATCH 40/84] Update dependency ropm to v0.10.25
---
package-lock.json | 42 +++++++++++-------------------------------
package.json | 2 +-
2 files changed, 12 insertions(+), 32 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 781c36d70..5eeb57aa0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -26,7 +26,7 @@
"roku-deploy": "3.12.1",
"roku-log-bsc-plugin": "0.8.1",
"rooibos-roku": "5.12.0",
- "ropm": "0.10.24",
+ "ropm": "0.10.25",
"spellchecker-cli": "6.2.0",
"undent": "0.1.0"
}
@@ -3016,18 +3016,6 @@
"tslib": "^2.0.3"
}
},
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/luxon": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/luxon/-/luxon-2.5.2.tgz",
@@ -5323,22 +5311,22 @@
"dev": true
},
"node_modules/ropm": {
- "version": "0.10.24",
- "resolved": "https://registry.npmjs.org/ropm/-/ropm-0.10.24.tgz",
- "integrity": "sha512-Jqa7jhOwHBx83RO81H3e4dY9cSrkf4TpYQ23r0+l4MKpZW29FXFqrAirG11nIPXR4jG/MsDXTCSOBfojCs2zBg==",
+ "version": "0.10.25",
+ "resolved": "https://registry.npmjs.org/ropm/-/ropm-0.10.25.tgz",
+ "integrity": "sha512-8Lk62oU7zam4whLBQF3eEyg7yzOad5wulpwzK90DwSKzXGbPM67aZTMKBcOxH2AbMvps68UbGPWVMzeSCATNSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@xml-tools/ast": "^5.0.5",
"@xml-tools/parser": "1.0.10",
- "brighterscript": "^0.67.1",
+ "brighterscript": "^0.67.5",
"del": "6.0.0",
"fs-extra": "9.1.0",
"glob-all": "3.2.1",
"latinize": "0.5.0",
"npm-packlist": "2.1.4",
- "roku-deploy": "^3.12.0",
- "semver": "7.3.4",
+ "roku-deploy": "^3.12.1",
+ "semver": "^7.6.3",
"yargs": "16.2.0"
},
"bin": {
@@ -5482,13 +5470,11 @@
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"node_modules/semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -6490,12 +6476,6 @@
"node": ">=10"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/yargs": {
"version": "17.3.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz",
diff --git a/package.json b/package.json
index f460d7b06..e5e99bb30 100644
--- a/package.json
+++ b/package.json
@@ -20,7 +20,7 @@
"roku-deploy": "3.12.1",
"roku-log-bsc-plugin": "0.8.1",
"rooibos-roku": "5.12.0",
- "ropm": "0.10.24",
+ "ropm": "0.10.25",
"spellchecker-cli": "6.2.0",
"undent": "0.1.0"
},
From e8207530f9289505d9beecd49ff9bbb620800179 Mon Sep 17 00:00:00 2001
From: Xavier Bestel
Date: Fri, 2 Aug 2024 13:52:54 +0000
Subject: [PATCH 41/84] Translated using Weblate (French)
Currently translated at 100.0% (284 of 284 strings)
Translation: Jellyfin/Jellyfin Roku
Translate-URL: https://translate.jellyfin.org/projects/jellyfin/jellyfin-roku/fr/
---
locale/fr/translations.ts | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/locale/fr/translations.ts b/locale/fr/translations.ts
index b1fa35a24..469a4f08e 100644
--- a/locale/fr/translations.ts
+++ b/locale/fr/translations.ts
@@ -1295,6 +1295,16 @@
Voir les épisodes déjà vus dans la section "À suivre".
User Setting - Setting description
+
+
+ Revoir tout ce qui est à suivre
+ User Setting - Setting title
+
+
+
+ Voir tout ce qui est à suivre
+ Title for viewing all episodes available in the Next Up section
+
From 57b56b3e0bb20edfe4651a60d72c71c7655c4f05 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 2 Aug 2024 16:28:31 +0000
Subject: [PATCH 42/84] Update actions/upload-artifact digest to 89ef406
---
.github/workflows/build-dev.yml | 2 +-
.github/workflows/build-prod.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/build-dev.yml b/.github/workflows/build-dev.yml
index 723522b6d..b92387ff7 100644
--- a/.github/workflows/build-dev.yml
+++ b/.github/workflows/build-dev.yml
@@ -21,7 +21,7 @@ jobs:
run: npm run ropm
- name: Build app
run: npm run build
- - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4
+ - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4
with:
name: Jellyfin-Roku-dev-${{ github.sha }}
path: ${{ github.workspace }}/build/staging
diff --git a/.github/workflows/build-prod.yml b/.github/workflows/build-prod.yml
index 63e58dbbd..fc5f4c6c5 100644
--- a/.github/workflows/build-prod.yml
+++ b/.github/workflows/build-prod.yml
@@ -23,7 +23,7 @@ jobs:
run: npm run ropm
- name: Build app for production
run: npm run build-prod
- - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # v4
+ - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4
with:
name: Jellyfin-Roku-v${{ env.newManVersion }}-${{ github.sha }}
path: ${{ github.workspace }}/build/staging
From e9c596d256988e6a490e15aeb8a11ce7e238acb8 Mon Sep 17 00:00:00 2001
From: Michael Cresswell
Date: Fri, 2 Aug 2024 15:17:01 -0400
Subject: [PATCH 43/84] Queue entire playlist when selecting song
---
source/Main.bs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/source/Main.bs b/source/Main.bs
index a2e27b296..2f1b7135d 100644
--- a/source/Main.bs
+++ b/source/Main.bs
@@ -457,9 +457,9 @@ sub Main (args as dynamic) as void
selectedIndex = msg.getData()
screenContent = msg.getRoSGNode()
- m.global.queueManager.callFunc("clear")
m.global.queueManager.callFunc("resetShuffle")
- m.global.queueManager.callFunc("push", screenContent.albumData.items[selectedIndex])
+ m.global.queueManager.callFunc("set", screenContent.albumData.items)
+ m.global.queueManager.callFunc("setPosition", selectedIndex)
m.global.queueManager.callFunc("playQueue")
else if isNodeEvent(msg, "playAllSelected")
' User has selected playlist of of audio they want us to play
From f8c351cc79c0e0e253b169c7d7211ad53191f50b Mon Sep 17 00:00:00 2001
From: jellyfin-bot
Date: Sat, 3 Aug 2024 15:53:39 +0000
Subject: [PATCH 44/84] Update API docs
---
docs/api/components_home_HomeItem.bs.html | 11 +++++++++--
docs/api/data/search.json | 2 +-
docs/api/module-misc.html | 2 +-
docs/api/source_utils_misc.bs.html | 15 +++++++++++++++
4 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/docs/api/components_home_HomeItem.bs.html b/docs/api/components_home_HomeItem.bs.html
index dbb9cdd07..00e0aa40a 100644
--- a/docs/api/components_home_HomeItem.bs.html
+++ b/docs/api/components_home_HomeItem.bs.html
@@ -148,9 +148,16 @@
drawProgressBar(itemData)
end if
- if itemData.usePoster = true
+ if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "webclient"
+ tmpSetting = localGlobal.session.user.Configuration.useEpisodeImagesInNextUpAndResume
+ if isValid(tmpSetting) and tmpSetting
+ m.itemPoster.uri = itemData.thumbnailURL
+ else
+ m.itemPoster.uri = itemData.widePosterURL
+ end if
+ else if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "show"
m.itemPoster.uri = itemData.widePosterURL
- else
+ else if localGlobal.session.user.settings["ui.general.episodeimagesnextup"] = "episode"
m.itemPoster.uri = itemData.thumbnailURL
end if
diff --git a/docs/api/data/search.json b/docs/api/data/search.json
index 39fc4991f..58a0924fc 100644
--- a/docs/api/data/search.json
+++ b/docs/api/data/search.json
@@ -1 +1 @@
-{"list":[{"title":"module:AlbumData","link":"AlbumData"},{"title":"module:AlbumData.setFields","link":"setFields"},{"title":"module:AlbumGrid","link":"AlbumGrid"},{"title":"module:AlbumGrid.getData","link":"getData"},{"title":"module:AlbumGrid.init","link":"init"},{"title":"module:AlbumGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumTrackList","link":"AlbumTrackList"},{"title":"module:AlbumTrackList.getData","link":"getData"},{"title":"module:AlbumTrackList.init","link":"init"},{"title":"module:AlbumView","link":"AlbumView"},{"title":"module:AlbumView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:AlbumView.createDialogPallete","link":"createDialogPallete"},{"title":"module:AlbumView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:AlbumView.init","link":"init"},{"title":"module:AlbumView.onDoneLoading","link":"onDoneLoading"},{"title":"module:AlbumView.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:AlbumView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AlbumView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AlbumView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AlbumView.setupMainNode","link":"setupMainNode"},{"title":"module:Alpha","link":"Alpha"},{"title":"module:Alpha.init","link":"init"},{"title":"module:Alpha.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView","link":"ArtistView"},{"title":"module:ArtistView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:ArtistView.OnScreenShown","link":"OnScreenShown"},{"title":"module:ArtistView.artistOverviewChanged","link":"artistOverviewChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:ArtistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:ArtistView.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:ArtistView.init","link":"init"},{"title":"module:ArtistView.onAlbumsData","link":"onAlbumsData"},{"title":"module:ArtistView.onAlbumsEscape","link":"onAlbumsEscape"},{"title":"module:ArtistView.onAppearsOnData","link":"onAppearsOnData"},{"title":"module:ArtistView.onAppearsOnEscape","link":"onAppearsOnEscape"},{"title":"module:ArtistView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:ArtistView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:ArtistView.onEllipsisChanged","link":"onEllipsisChanged"},{"title":"module:ArtistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView.onSectionNavigationEscape","link":"onSectionNavigationEscape"},{"title":"module:ArtistView.onSectionNavigationSelected","link":"onSectionNavigationSelected"},{"title":"module:ArtistView.onSectionScrollerChange","link":"onSectionScrollerChange"},{"title":"module:ArtistView.pageContentChanged","link":"pageContentChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:ArtistView.setPosterImage","link":"setPosterImage"},{"title":"module:ArtistView.setScreenTitle","link":"setScreenTitle"},{"title":"module:ArtistView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:ArtistView.setupMainNode","link":"setupMainNode"},{"title":"module:AudioPlayer","link":"AudioPlayer"},{"title":"module:AudioPlayer.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:AudioPlayer.audioStateChanged","link":"audioStateChanged","description":"State Change Event Handler
"},{"title":"module:AudioPlayer.init","link":"init"},{"title":"module:AudioPlayerView","link":"AudioPlayerView"},{"title":"module:AudioPlayerView.LoadNextSong","link":"LoadNextSong"},{"title":"module:AudioPlayerView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:AudioPlayerView.audioPositionChanged","link":"audioPositionChanged"},{"title":"module:AudioPlayerView.audioStateChanged","link":"audioStateChanged"},{"title":"module:AudioPlayerView.bufferPositionChanged","link":"bufferPositionChanged"},{"title":"module:AudioPlayerView.endScreenSaver","link":"endScreenSaver"},{"title":"module:AudioPlayerView.exitScrubMode","link":"exitScrubMode","description":"exitScrubMode: Moves player out of scrub mode state, resets back to standard play mode
"},{"title":"module:AudioPlayerView.findCurrentSongIndex","link":"findCurrentSongIndex"},{"title":"module:AudioPlayerView.init","link":"init"},{"title":"module:AudioPlayerView.loadButtons","link":"loadButtons","description":"If we have more and 1 song to play, fade in the next and previous controls
"},{"title":"module:AudioPlayerView.loopClicked","link":"loopClicked"},{"title":"module:AudioPlayerView.moveSeekbarThumb","link":"moveSeekbarThumb","description":"moveSeekbarThumb: Positions the thumb on the seekbar
"},{"title":"module:AudioPlayerView.nextClicked","link":"nextClicked"},{"title":"module:AudioPlayerView.onAudioStreamLoaded","link":"onAudioStreamLoaded"},{"title":"module:AudioPlayerView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:AudioPlayerView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:AudioPlayerView.onKeyEvent","link":"onKeyEvent","description":"Process key press events
"},{"title":"module:AudioPlayerView.onMetaDataLoaded","link":"onMetaDataLoaded"},{"title":"module:AudioPlayerView.onScreensaverTimeoutLoaded","link":"onScreensaverTimeoutLoaded"},{"title":"module:AudioPlayerView.pageContentChanged","link":"pageContentChanged","description":"Update values on screen when page content changes
"},{"title":"module:AudioPlayerView.playAction","link":"playAction"},{"title":"module:AudioPlayerView.previousClicked","link":"previousClicked"},{"title":"module:AudioPlayerView.processScrubAction","link":"processScrubAction","description":"processScrubAction: Handles +/- seeking for the audio trickplay bar
"},{"title":"module:AudioPlayerView.resetLoopModeToDefault","link":"resetLoopModeToDefault"},{"title":"module:AudioPlayerView.resetSeekbarThumb","link":"resetSeekbarThumb","description":"resetSeekbarThumb: Resets the thumb to the playing position
"},{"title":"module:AudioPlayerView.screenSaverActive","link":"screenSaverActive"},{"title":"module:AudioPlayerView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:AudioPlayerView.setLoopButtonImage","link":"setLoopButtonImage"},{"title":"module:AudioPlayerView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AudioPlayerView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AudioPlayerView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AudioPlayerView.setSelectedButtonState","link":"setSelectedButtonState","description":"setSelectedButtonState: Changes the icon state url for the currently selected button
"},{"title":"module:AudioPlayerView.setShuffleIconState","link":"setShuffleIconState"},{"title":"module:AudioPlayerView.setTrackNumberDisplay","link":"setTrackNumberDisplay"},{"title":"module:AudioPlayerView.setupAnimationTasks","link":"setupAnimationTasks"},{"title":"module:AudioPlayerView.setupAudioNode","link":"setupAudioNode","description":"Creates audio node used to play song(s)
"},{"title":"module:AudioPlayerView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:AudioPlayerView.setupDataTasks","link":"setupDataTasks","description":"Creates tasks to gather data needed to render Scene and play song
"},{"title":"module:AudioPlayerView.setupInfoNodes","link":"setupInfoNodes"},{"title":"module:AudioPlayerView.setupScreenSaver","link":"setupScreenSaver"},{"title":"module:AudioPlayerView.shuffleClicked","link":"shuffleClicked"},{"title":"module:AudioPlayerView.startScreenSaver","link":"startScreenSaver"},{"title":"module:AudioPlayerView.toggleShuffleEnabled","link":"toggleShuffleEnabled"},{"title":"module:AudioTrackListItem","link":"AudioTrackListItem"},{"title":"module:AudioTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:AudioTrackListItem.init","link":"init"},{"title":"module:AudioTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ButtonGroupHoriz","link":"ButtonGroupHoriz"},{"title":"module:ButtonGroupHoriz.init","link":"init"},{"title":"module:ButtonGroupHoriz.onKeyEvent","link":"onKeyEvent"},{"title":"module:ButtonGroupVert","link":"ButtonGroupVert"},{"title":"module:ButtonGroupVert.init","link":"init"},{"title":"module:ButtonGroupVert.onFocusButtonChanged","link":"onFocusButtonChanged"},{"title":"module:ButtonGroupVert.onFocusChanged","link":"onFocusChanged"},{"title":"module:ButtonGroupVert.onKeyEvent","link":"onKeyEvent"},{"title":"module:ChannelData","link":"ChannelData"},{"title":"module:ChannelData.setFields","link":"setFields"},{"title":"module:ChannelData.setPoster","link":"setPoster"},{"title":"module:Clock","link":"Clock"},{"title":"module:Clock.format12HourTime","link":"format12HourTime","description":"format12HourTime: Returns a string with the current time formatted for a 12 hour clock
"},{"title":"module:Clock.format24HourTime","link":"format24HourTime","description":"format24HourTime: Returns a string with the current time formatted for a 24 hour clock
"},{"title":"module:Clock.formatTimeAsString","link":"formatTimeAsString","description":"formatTimeAsString: Returns a string with the current time formatted for either a 12 or 24 hour clock
"},{"title":"module:Clock.init","link":"init"},{"title":"module:Clock.onCurrentTimeTimerFire","link":"onCurrentTimeTimerFire","description":"onCurrentTimeTimerFire: Code that runs every time the currentTimeTimer fires
"},{"title":"module:CollectionData","link":"CollectionData"},{"title":"module:CollectionData.setFields","link":"setFields"},{"title":"module:CollectionData.setPoster","link":"setPoster"},{"title":"module:ConfigData","link":"ConfigData"},{"title":"module:ConfigData.init","link":"init"},{"title":"module:ConfigItem","link":"ConfigItem"},{"title":"module:ConfigItem.init","link":"init"},{"title":"module:ConfigItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ConfigItem.setColors","link":"setColors"},{"title":"module:ConfigList","link":"ConfigList"},{"title":"module:ConfigList.configListShowDialog","link":"configListShowDialog"},{"title":"module:ConfigList.dismiss_dialog","link":"dismiss_dialog"},{"title":"module:ConfigList.init","link":"init"},{"title":"module:ConfigList.onDialogButton","link":"onDialogButton"},{"title":"module:ConfigList.onItemSelected","link":"onItemSelected"},{"title":"module:ConfigList.setData","link":"setData"},{"title":"module:ExtrasItem","link":"ExtrasItem"},{"title":"module:ExtrasItem.focusChanged","link":"focusChanged"},{"title":"module:ExtrasItem.init","link":"init"},{"title":"module:ExtrasItem.showContent","link":"showContent"},{"title":"module:ExtrasRowList","link":"ExtrasRowList"},{"title":"module:ExtrasRowList.addRowSize","link":"addRowSize"},{"title":"module:ExtrasRowList.buildRow","link":"buildRow"},{"title":"module:ExtrasRowList.init","link":"init"},{"title":"module:ExtrasRowList.loadParts","link":"loadParts"},{"title":"module:ExtrasRowList.loadPersonVideos","link":"loadPersonVideos"},{"title":"module:ExtrasRowList.onAdditionalPartsLoaded","link":"onAdditionalPartsLoaded"},{"title":"module:ExtrasRowList.onLikeThisLoaded","link":"onLikeThisLoaded"},{"title":"module:ExtrasRowList.onMoviesLoaded","link":"onMoviesLoaded"},{"title":"module:ExtrasRowList.onPeopleLoaded","link":"onPeopleLoaded"},{"title":"module:ExtrasRowList.onRowItemFocused","link":"onRowItemFocused"},{"title":"module:ExtrasRowList.onRowItemSelected","link":"onRowItemSelected"},{"title":"module:ExtrasRowList.onSeriesLoaded","link":"onSeriesLoaded"},{"title":"module:ExtrasRowList.onShowsLoaded","link":"onShowsLoaded"},{"title":"module:ExtrasRowList.onSpecialFeaturesLoaded","link":"onSpecialFeaturesLoaded"},{"title":"module:ExtrasRowList.updateSize","link":"updateSize"},{"title":"module:FavoriteItemsTask","link":"FavoriteItemsTask"},{"title":"module:FavoriteItemsTask.init","link":"init"},{"title":"module:FavoriteItemsTask.setFavoriteStatus","link":"setFavoriteStatus"},{"title":"module:FolderData","link":"FolderData"},{"title":"module:FolderData.setFields","link":"setFields"},{"title":"module:FolderData.setPoster","link":"setPoster"},{"title":"module:GetFiltersTask","link":"GetFiltersTask"},{"title":"module:GetFiltersTask.getFiltersTask","link":"getFiltersTask"},{"title":"module:GetFiltersTask.init","link":"init"},{"title":"module:GetNextEpisodeTask","link":"GetNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.getNextEpisodeTask","link":"getNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.init","link":"init"},{"title":"module:GetPlaybackInfoTask","link":"GetPlaybackInfoTask"},{"title":"module:GetPlaybackInfoTask.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:GetPlaybackInfoTask.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:GetPlaybackInfoTask.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:GetPlaybackInfoTask.getPlaybackInfoTask","link":"getPlaybackInfoTask","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:GetPlaybackInfoTask.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:GetPlaybackInfoTask.init","link":"init"},{"title":"module:GetShuffleEpisodesTask","link":"GetShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.getShuffleEpisodesTask","link":"getShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.init","link":"init"},{"title":"module:GridItem","link":"GridItem"},{"title":"module:GridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:GridItem.focusChanging","link":"focusChanging","description":"Use FocusPercent to animate scaling of Poser Image
"},{"title":"module:GridItem.init","link":"init"},{"title":"module:GridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:GridItemSmall","link":"GridItemSmall"},{"title":"module:GridItemSmall.focusChanged","link":"focusChanged"},{"title":"module:GridItemSmall.init","link":"init"},{"title":"module:GridItemSmall.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItemSmall.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:Home","link":"Home"},{"title":"module:Home.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook called when the screen is hidden by the screen manager
"},{"title":"module:Home.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:Home.init","link":"init"},{"title":"module:Home.loadLibraries","link":"loadLibraries"},{"title":"module:Home.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:Home.refresh","link":"refresh"},{"title":"module:HomeData","link":"HomeData"},{"title":"module:HomeData.setData","link":"setData"},{"title":"module:HomeItem","link":"HomeItem"},{"title":"module:HomeItem.drawProgressBar","link":"drawProgressBar","description":"Draws and animates item progress bar
"},{"title":"module:HomeItem.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:HomeItem.init","link":"init"},{"title":"module:HomeItem.initItemPoster","link":"initItemPoster"},{"title":"module:HomeItem.initItemText","link":"initItemText"},{"title":"module:HomeItem.initItemTextExtra","link":"initItemTextExtra"},{"title":"module:HomeItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:HomeItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and icon when poster loaded
"},{"title":"module:HomeRowItemSizes","link":"HomeRowItemSizes"},{"title":"module:HomeRows","link":"HomeRows"},{"title":"module:HomeRows.addHomeSection","link":"addHomeSection","description":"addHomeSection: Adds a new home section to the home rows.
"},{"title":"module:HomeRows.createContinueWatchingRow","link":"createContinueWatchingRow","description":"createContinueWatchingRow: Creates a row displaying items the user can continue watching
"},{"title":"module:HomeRows.createFavoritesRow","link":"createFavoritesRow","description":"createFavoritesRow: Creates a row displaying items from the user's favorites list
"},{"title":"module:HomeRows.createLatestInRows","link":"createLatestInRows","description":"createLatestInRows: Creates a row displaying latest items in each of the user's libraries
"},{"title":"module:HomeRows.createLibraryRow","link":"createLibraryRow","description":"createLibraryRow: Creates a row displaying the user's libraries
"},{"title":"module:HomeRows.createLiveTVRow","link":"createLiveTVRow","description":"createLiveTVRow: Creates a row displaying the live tv now on section
"},{"title":"module:HomeRows.createNextUpRow","link":"createNextUpRow","description":"createNextUpRow: Creates a row displaying next episodes up to watch
"},{"title":"module:HomeRows.filterNodeArray","link":"filterNodeArray"},{"title":"module:HomeRows.getOriginalSectionIndex","link":"getOriginalSectionIndex","description":"getOriginalSectionIndex: Gets the index of a section from user settings and adds count of currently known latest media sections
"},{"title":"module:HomeRows.getSectionIndex","link":"getSectionIndex","description":"getSectionIndex: Returns index of requested section in home row content
"},{"title":"module:HomeRows.init","link":"init"},{"title":"module:HomeRows.itemSelected","link":"itemSelected"},{"title":"module:HomeRows.loadLibraries","link":"loadLibraries"},{"title":"module:HomeRows.loadingTimerComplete","link":"loadingTimerComplete","description":"loadingTimerComplete: Event handler for when loading wait time has expired
"},{"title":"module:HomeRows.onKeyEvent","link":"onKeyEvent"},{"title":"module:HomeRows.onLibrariesLoaded","link":"onLibrariesLoaded","description":"onLibrariesLoaded: Handler when LoadLibrariesTask returns data
"},{"title":"module:HomeRows.processUserSections","link":"processUserSections","description":"processUserSections: Loop through user's chosen home section settings and generate the content for each row
"},{"title":"module:HomeRows.removeHomeSection","link":"removeHomeSection","description":"removeHomeSection: Removes a home section from the home rows
"},{"title":"module:HomeRows.sectionExists","link":"sectionExists","description":"sectionExists: Checks if passed section exists in home row content
"},{"title":"module:HomeRows.setRowItemSize","link":"setRowItemSize","description":"setRowItemSize: Loops through all home sections and sets the correct item sizes per row
"},{"title":"module:HomeRows.updateContinueWatchingItems","link":"updateContinueWatchingItems","description":"updateContinueWatchingItems: Processes LoadContinueWatchingTask content. Removes, Creates, or Updates continue watching row as needed
"},{"title":"module:HomeRows.updateFavoritesItems","link":"updateFavoritesItems","description":"updateFavoritesItems: Processes LoadFavoritesTask content. Removes, Creates, or Updates favorites row as needed
"},{"title":"module:HomeRows.updateHomeRows","link":"updateHomeRows","description":"updateHomeRows: Update function exposed to outside components
"},{"title":"module:HomeRows.updateLatestItems","link":"updateLatestItems","description":"updateLatestItems: Processes LoadItemsTask content. Removes, Creates, or Updates latest in {library} row as needed
"},{"title":"module:HomeRows.updateNextUpItems","link":"updateNextUpItems","description":"updateNextUpItems: Processes LoadNextUpTask content. Removes, Creates, or Updates next up row as needed
"},{"title":"module:HomeRows.updateOnNowItems","link":"updateOnNowItems","description":"updateOnNowItems: Processes LoadOnNowTask content. Removes, Creates, or Updates latest in on now row as needed
"},{"title":"module:HomeRows.updateSize","link":"updateSize"},{"title":"module:IconButton","link":"IconButton"},{"title":"module:IconButton.init","link":"init"},{"title":"module:IconButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:IconButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:IconButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:IconButton.onIconChanged","link":"onIconChanged"},{"title":"module:IconButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:IconButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:IconButton.onTextChanged","link":"onTextChanged"},{"title":"module:IconButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:IconButton.setIconSize","link":"setIconSize"},{"title":"module:Image","link":"Image"},{"title":"module:Image.ImageURL","link":"ImageURL"},{"title":"module:Image.ItemImages","link":"ItemImages"},{"title":"module:Image.PosterImage","link":"PosterImage"},{"title":"module:Image.UserImageURL","link":"UserImageURL"},{"title":"module:ImageData","link":"ImageData"},{"title":"module:ImageData.setFields","link":"setFields"},{"title":"module:IntegerKeyboard","link":"IntegerKeyboard"},{"title":"module:IntegerKeyboard.init","link":"init"},{"title":"module:IntegerKeyboard.keySelected","link":"keySelected"},{"title":"module:IntegerKeyboard.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid","link":"ItemGrid"},{"title":"module:ItemGrid.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:ItemGrid.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:ItemGrid.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:ItemGrid.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:ItemGrid.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:ItemGrid.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:ItemGrid.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:ItemGrid.init","link":"init"},{"title":"module:ItemGrid.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:ItemGrid.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:ItemGrid.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:ItemGrid.onChannelFocused","link":"onChannelFocused"},{"title":"module:ItemGrid.onChannelSelected","link":"onChannelSelected"},{"title":"module:ItemGrid.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:ItemGrid.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:ItemGrid.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:ItemGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:ItemGrid.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:ItemGrid.setBoxsetsOptions","link":"setBoxsetsOptions","description":"Set Boxset view, sort, and filter options
"},{"title":"module:ItemGrid.setDefaultOptions","link":"setDefaultOptions","description":"Set Default view, sort, and filter options
"},{"title":"module:ItemGrid.setLiveTvOptions","link":"setLiveTvOptions","description":"Set Live TV view, sort, and filter options
"},{"title":"module:ItemGrid.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:ItemGrid.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:ItemGrid.setPhotoAlbumOptions","link":"setPhotoAlbumOptions","description":"Set Photo Album view, sort, and filter options
"},{"title":"module:ItemGrid.setTvShowsOptions","link":"setTvShowsOptions","description":"Set TV Show view, sort, and filter options
"},{"title":"module:ItemGrid.showTVGuide","link":"showTVGuide"},{"title":"module:ItemGrid.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:ItemGrid.updateTitle","link":"updateTitle"},{"title":"module:ItemGridOptions","link":"ItemGridOptions"},{"title":"module:ItemGridOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:ItemGridOptions.hideChecklist","link":"hideChecklist"},{"title":"module:ItemGridOptions.init","link":"init"},{"title":"module:ItemGridOptions.isFilterMenuDataValid","link":"isFilterMenuDataValid","description":"Check if data for Filter Menu is valid
"},{"title":"module:ItemGridOptions.onFilterFocusChange","link":"onFilterFocusChange"},{"title":"module:ItemGridOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGridOptions.optionsSet","link":"optionsSet"},{"title":"module:ItemGridOptions.saveFavoriteItemSelected","link":"saveFavoriteItemSelected"},{"title":"module:ItemGridOptions.setHeartColor","link":"setHeartColor"},{"title":"module:ItemGridOptions.showChecklist","link":"showChecklist"},{"title":"module:ItemGridOptions.toggleFavorite","link":"toggleFavorite"},{"title":"module:Items","link":"Items"},{"title":"module:Items.AppearsOnList","link":"AppearsOnList","description":"Get list of albums an artist appears on
"},{"title":"module:Items.ArtistOverview","link":"ArtistOverview","description":"Music Artist Data
"},{"title":"module:Items.AudioItem","link":"AudioItem","description":"Get Songs that are on an Album
"},{"title":"module:Items.AudioStream","link":"AudioStream"},{"title":"module:Items.BackdropImage","link":"BackdropImage"},{"title":"module:Items.CreateArtistMix","link":"CreateArtistMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.CreateInstantMix","link":"CreateInstantMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.GetIntroVideos","link":"GetIntroVideos","description":"Get Intro Videos for an item
"},{"title":"module:Items.GetSongsByArtist","link":"GetSongsByArtist","description":"Get list of songs belonging to an artist
"},{"title":"module:Items.ItemGetPlaybackInfo","link":"ItemGetPlaybackInfo"},{"title":"module:Items.ItemMetaData","link":"ItemMetaData","description":"MetaData about an item
"},{"title":"module:Items.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:Items.MusicAlbumList","link":"MusicAlbumList","description":"Get list of albums belonging to an artist
"},{"title":"module:Items.MusicSongList","link":"MusicSongList","description":"Get Songs that are on an Album
"},{"title":"module:Items.PlaylistItemList","link":"PlaylistItemList","description":"Get Items that are under the provided item
"},{"title":"module:Items.TVEpisodeShuffleList","link":"TVEpisodeShuffleList"},{"title":"module:Items.TVEpisodes","link":"TVEpisodes","description":"Returns a list of TV Shows for a given TV Show and season\nAccepts strings for the TV Show Id and the season Id
"},{"title":"module:Items.TVSeasonExtras","link":"TVSeasonExtras","description":"Returns a list of extra features for a TV Show season\nAccepts a string that is a TV Show season id
"},{"title":"module:Items.TVSeasons","link":"TVSeasons","description":"Seasons for a TV Show
"},{"title":"module:Items.searchMedia","link":"searchMedia","description":"Search across all libraries
"},{"title":"module:Items.useTranscodeAudioStream","link":"useTranscodeAudioStream"},{"title":"module:JFButton","link":"JFButton"},{"title":"module:JFButton.init","link":"init"},{"title":"module:JFButton.onTextChanged","link":"onTextChanged","description":"Whenever the text changes, pad both sides with whitespace so we can center the button text
"},{"title":"module:JFButtons","link":"JFButtons"},{"title":"module:JFButtons.focusChanged","link":"focusChanged","description":"Change opacity of the highlighted menu item based on focus
"},{"title":"module:JFButtons.highlightSelected","link":"highlightSelected","description":"Highlight selected menu option
"},{"title":"module:JFButtons.init","link":"init"},{"title":"module:JFButtons.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFButtons.renderChanged","link":"renderChanged","description":"When options are fully displayed, set focus and selected option
"},{"title":"module:JFButtons.selectedIndexChanged","link":"selectedIndexChanged","description":"When Selected Index set, ensure it is the one Focused
"},{"title":"module:JFButtons.showButtons","link":"showButtons"},{"title":"module:JFButtons.updateButtons","link":"updateButtons"},{"title":"module:JFContentItem","link":"JFContentItem"},{"title":"module:JFContentItem.setFields","link":"setFields","description":"Called whenever m.top.json changes.\nIt is expected that each node that extends JFContentItem will override this function
"},{"title":"module:JFGroup","link":"JFGroup"},{"title":"module:JFGroup.init","link":"init"},{"title":"module:JFGroup.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog","link":"JFMessageDialog"},{"title":"module:JFMessageDialog.init","link":"init"},{"title":"module:JFMessageDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog.redraw","link":"redraw"},{"title":"module:JFMessageDialog.updateMessage","link":"updateMessage"},{"title":"module:JFMessageDialog.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang","link":"JFOverhang"},{"title":"module:JFOverhang.init","link":"init"},{"title":"module:JFOverhang.isLogoVisibleChange","link":"isLogoVisibleChange","description":"component boolean field isLogoVisibleChange has changed value
"},{"title":"module:JFOverhang.onVisibleChange","link":"onVisibleChange"},{"title":"module:JFOverhang.resetTime","link":"resetTime"},{"title":"module:JFOverhang.setClockVisibility","link":"setClockVisibility"},{"title":"module:JFOverhang.setRightSeperatorVisibility","link":"setRightSeperatorVisibility"},{"title":"module:JFOverhang.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang.updateTime","link":"updateTime"},{"title":"module:JFOverhang.updateTimeDisplay","link":"updateTimeDisplay"},{"title":"module:JFOverhang.updateTitle","link":"updateTitle"},{"title":"module:JFOverhang.updateUser","link":"updateUser"},{"title":"module:JFScene","link":"JFScene"},{"title":"module:JFScene.disableRemoteChanged","link":"disableRemoteChanged","description":"Triggered when the disableRemote boolean component field is changed
"},{"title":"module:JFScene.init","link":"init"},{"title":"module:JFScene.isLoadingChanged","link":"isLoadingChanged","description":"Triggered when the isLoading boolean component field is changed
"},{"title":"module:JFScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFScreen","link":"JFScreen"},{"title":"module:JFScreen.OnScreenHidden","link":"OnScreenHidden","description":"Function called when the screen is hidden by the screen manager\nIt is expected that screens override this function if required,\nto handle focus any actions required on the screen being hidden
"},{"title":"module:JFScreen.OnScreenShown","link":"OnScreenShown","description":"Function called when the screen is displayed by the screen manager\nIt is expected that screens override this function to handle focus\nmanagmenet and any other actions required on screen shown
"},{"title":"module:JFScreen.init","link":"init"},{"title":"module:JFServer","link":"JFServer"},{"title":"module:JFServer.init","link":"init"},{"title":"module:JFServer.itemContentChanged","link":"itemContentChanged"},{"title":"module:JFServer.onFocusPercentChange","link":"onFocusPercentChange"},{"title":"module:JFServer.setTextColor","link":"setTextColor"},{"title":"module:JFVideo","link":"JFVideo"},{"title":"module:JFVideo.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:JFVideo.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:JFVideo.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:JFVideo.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:JFVideo.init","link":"init"},{"title":"module:JFVideo.loadCaption","link":"loadCaption"},{"title":"module:JFVideo.onAllowCaptionsChange","link":"onAllowCaptionsChange"},{"title":"module:JFVideo.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:JFVideo.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFVideo.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:JFVideo.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:JFVideo.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:JFVideo.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:JFVideo.toggleCaption","link":"toggleCaption"},{"title":"module:JFVideo.updateCaption","link":"updateCaption"},{"title":"module:JFVideo.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:ListPoster","link":"ListPoster"},{"title":"module:ListPoster.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:ListPoster.init","link":"init"},{"title":"module:ListPoster.itemContentChanged","link":"itemContentChanged"},{"title":"module:ListPoster.updateSize","link":"updateSize"},{"title":"module:LoadChannelsTask","link":"LoadChannelsTask"},{"title":"module:LoadChannelsTask.init","link":"init"},{"title":"module:LoadChannelsTask.loadChannels","link":"loadChannels"},{"title":"module:LoadItemsTask","link":"LoadItemsTask"},{"title":"module:LoadItemsTask.getPersonVideos","link":"getPersonVideos"},{"title":"module:LoadItemsTask.init","link":"init"},{"title":"module:LoadItemsTask.loadItems","link":"loadItems"},{"title":"module:LoadItemsTask2","link":"LoadItemsTask2"},{"title":"module:LoadItemsTask2.init","link":"init"},{"title":"module:LoadItemsTask2.loadItems","link":"loadItems"},{"title":"module:LoadPhotoTask","link":"LoadPhotoTask"},{"title":"module:LoadPhotoTask.init","link":"init"},{"title":"module:LoadPhotoTask.loadItems","link":"loadItems"},{"title":"module:LoadProgramDetailsTask","link":"LoadProgramDetailsTask"},{"title":"module:LoadProgramDetailsTask.init","link":"init"},{"title":"module:LoadProgramDetailsTask.loadProgramDetails","link":"loadProgramDetails"},{"title":"module:LoadScreenSaverTimeoutTask","link":"LoadScreenSaverTimeoutTask"},{"title":"module:LoadScreenSaverTimeoutTask.getScreensaverTimeout","link":"getScreensaverTimeout"},{"title":"module:LoadScreenSaverTimeoutTask.init","link":"init"},{"title":"module:LoadSheduleTask","link":"LoadSheduleTask"},{"title":"module:LoadSheduleTask.init","link":"init"},{"title":"module:LoadSheduleTask.loadSchedule","link":"loadSchedule"},{"title":"module:LoadVideoContentTask","link":"LoadVideoContentTask"},{"title":"module:LoadVideoContentTask.FindPreferredAudioStream","link":"FindPreferredAudioStream"},{"title":"module:LoadVideoContentTask.LoadItems_AddVideoContent","link":"LoadItems_AddVideoContent"},{"title":"module:LoadVideoContentTask.LoadItems_VideoPlayer","link":"LoadItems_VideoPlayer"},{"title":"module:LoadVideoContentTask.addAudioStreamsToVideo","link":"addAudioStreamsToVideo","description":"addAudioStreamsToVideo: Add audio stream data to video
"},{"title":"module:LoadVideoContentTask.addNextEpisodesToQueue","link":"addNextEpisodesToQueue","description":"Add next episodes to the playback queue
"},{"title":"module:LoadVideoContentTask.addSubtitlesToVideo","link":"addSubtitlesToVideo"},{"title":"module:LoadVideoContentTask.addVideoContentURL","link":"addVideoContentURL"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"defaultSubtitleTrack:
"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"defaultSubtitleTrackFromVid: Identifies the default subtitle track given video id
"},{"title":"module:LoadVideoContentTask.directPlaySupported","link":"directPlaySupported"},{"title":"module:LoadVideoContentTask.getContainerType","link":"getContainerType"},{"title":"module:LoadVideoContentTask.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:LoadVideoContentTask.init","link":"init"},{"title":"module:LoadVideoContentTask.loadItems","link":"loadItems"},{"title":"module:LoadVideoContentTask.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:LoginScene","link":"LoginScene"},{"title":"module:LoginScene.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook.
"},{"title":"module:LoginScene.init","link":"init"},{"title":"module:LoginScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:Main","link":"Main"},{"title":"module:Main.Main","link":"Main"},{"title":"module:MovieData","link":"MovieData"},{"title":"module:MovieData.setContainer","link":"setContainer"},{"title":"module:MovieData.setFields","link":"setFields"},{"title":"module:MovieData.setPoster","link":"setPoster"},{"title":"module:MovieDetails","link":"MovieDetails"},{"title":"module:MovieDetails.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:MovieDetails.SetDefaultAudioTrack","link":"SetDefaultAudioTrack"},{"title":"module:MovieDetails.SetUpAudioOptions","link":"SetUpAudioOptions"},{"title":"module:MovieDetails.SetUpVideoOptions","link":"SetUpVideoOptions"},{"title":"module:MovieDetails.audioOptionsClosed","link":"audioOptionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieDetails.getEndTime","link":"getEndTime"},{"title":"module:MovieDetails.getRuntime","link":"getRuntime"},{"title":"module:MovieDetails.init","link":"init"},{"title":"module:MovieDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:MovieDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieDetails.onMoviePosterSwapAnimationStateChange","link":"onMoviePosterSwapAnimationStateChange","description":"onMoviePosterSwapAnimationStateChange: Handler for changes to m.moviePosterSwapAnimation.state
"},{"title":"module:MovieDetails.onNewPosterImageURIChange","link":"onNewPosterImageURIChange","description":"onNewPosterImageURIChange: Handler for newPosterImageURI param change
"},{"title":"module:MovieDetails.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"onPosterLoadStatusChanged: Handler for changes to m.moviePosterSwap.loadStatus
"},{"title":"module:MovieDetails.round","link":"round"},{"title":"module:MovieDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:MovieDetails.setFieldText","link":"setFieldText"},{"title":"module:MovieDetails.setWatchedColor","link":"setWatchedColor"},{"title":"module:MovieDetails.trailerAvailableChanged","link":"trailerAvailableChanged"},{"title":"module:MovieDetails.videoOptionsClosed","link":"videoOptionsClosed","description":"Check if options were updated and if any reloding is needed...
"},{"title":"module:MovieLibraryView","link":"MovieLibraryView"},{"title":"module:MovieLibraryView.FilterDataLoaded","link":"FilterDataLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MovieLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MovieLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MovieLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MovieLibraryView.SetName","link":"SetName","description":"Set Selected Movie Name
"},{"title":"module:MovieLibraryView.SetOfficialRating","link":"SetOfficialRating","description":"Set Selected Movie OfficialRating
"},{"title":"module:MovieLibraryView.SetOverview","link":"SetOverview","description":"Set Selected Movie Overview
"},{"title":"module:MovieLibraryView.SetProductionYear","link":"SetProductionYear","description":"Set Selected Movie ProductionYear
"},{"title":"module:MovieLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MovieLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MovieLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MovieLibraryView.getRuntime","link":"getRuntime"},{"title":"module:MovieLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MovieLibraryView.init","link":"init"},{"title":"module:MovieLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MovieLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MovieLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MovieLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MovieLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MovieLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MovieLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MovieLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MovieLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieLibraryView.round","link":"round"},{"title":"module:MovieLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MovieLibraryView.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:MovieLibraryView.setSelectedOptions","link":"setSelectedOptions","description":"Data to display when options button selected
"},{"title":"module:MovieLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MovieLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MovieOptions","link":"MovieOptions"},{"title":"module:MovieOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:MovieOptions.init","link":"init"},{"title":"module:MovieOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieOptions.optionsSet","link":"optionsSet"},{"title":"module:MusicAlbumData","link":"MusicAlbumData"},{"title":"module:MusicAlbumData.setFields","link":"setFields"},{"title":"module:MusicAlbumData.setPoster","link":"setPoster"},{"title":"module:MusicAlbumSongListData","link":"MusicAlbumSongListData"},{"title":"module:MusicAlbumSongListData.setFields","link":"setFields"},{"title":"module:MusicAlbumSongListData.setPoster","link":"setPoster"},{"title":"module:MusicArtistData","link":"MusicArtistData"},{"title":"module:MusicArtistData.setFields","link":"setFields"},{"title":"module:MusicArtistData.setPoster","link":"setPoster"},{"title":"module:MusicArtistGridItem","link":"MusicArtistGridItem"},{"title":"module:MusicArtistGridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:MusicArtistGridItem.init","link":"init"},{"title":"module:MusicArtistGridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:MusicArtistGridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:MusicLibraryView","link":"MusicLibraryView"},{"title":"module:MusicLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MusicLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MusicLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MusicLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MusicLibraryView.SetAlbumCount","link":"SetAlbumCount","description":"Set Selected Artist Album Count
"},{"title":"module:MusicLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MusicLibraryView.SetGenres","link":"SetGenres","description":"Set Selected Artist Genres
"},{"title":"module:MusicLibraryView.SetName","link":"SetName","description":"Set Selected Artist Name
"},{"title":"module:MusicLibraryView.SetSongCount","link":"SetSongCount","description":"Set Selected Artist Song Count
"},{"title":"module:MusicLibraryView.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:MusicLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MusicLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MusicLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MusicLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MusicLibraryView.init","link":"init"},{"title":"module:MusicLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MusicLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MusicLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MusicLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MusicLibraryView.onGenreItemFocused","link":"onGenreItemFocused","description":"Genre Item Focused
"},{"title":"module:MusicLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MusicLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MusicLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MusicLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MusicLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MusicLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MusicLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MusicLibraryView.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:MusicLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MusicLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MusicSongData","link":"MusicSongData"},{"title":"module:MusicSongData.setFields","link":"setFields"},{"title":"module:MusicSongData.setPoster","link":"setPoster"},{"title":"module:OSD","link":"OSD"},{"title":"module:OSD.inactiveCheck","link":"inactiveCheck","description":"inactiveCheck: Checks if the time since last keypress is greater than or equal to the allowed inactive time of the menu.
"},{"title":"module:OSD.init","link":"init"},{"title":"module:OSD.moveOptionControls","link":"moveOptionControls","description":"moveOptionControls: Moves option controls node based on passed pixel values
"},{"title":"module:OSD.onButtonSelected","link":"onButtonSelected","description":"onButtonSelected: Handler for selection of buttons from the menu.
"},{"title":"module:OSD.onEpisodeNumberChanged","link":"onEpisodeNumberChanged","description":"onEpisodeNumberChanged: Handler for changes to m.top.episodeNumber param.
"},{"title":"module:OSD.onEpisodeNumberEndChanged","link":"onEpisodeNumberEndChanged","description":"onEpisodeNumberEndChanged: Handler for changes to m.top.episodeNumberEnd param.
"},{"title":"module:OSD.onFocusChanged","link":"onFocusChanged","description":"onFocusChanged: Handler for changes to the focus of this menu.
"},{"title":"module:OSD.onItemTitleTextChanged","link":"onItemTitleTextChanged","description":"onItemTitleTextChanged: Handler for changes to m.top.itemTitleText param.
"},{"title":"module:OSD.onKeyEvent","link":"onKeyEvent"},{"title":"module:OSD.onLogoImageChanged","link":"onLogoImageChanged","description":"onLogoImageChanged: Handler for changes to m.top.logoImage param.
"},{"title":"module:OSD.onLogoLoadStatusChanged","link":"onLogoLoadStatusChanged","description":"onLogoLoadStatusChanged: Handler for changes to logo image's status.
"},{"title":"module:OSD.onPlaybackStateChanged","link":"onPlaybackStateChanged","description":"onPlaybackStateChanged: Handler for changes to m.top.playbackState param
"},{"title":"module:OSD.onProgressPercentageChanged","link":"onProgressPercentageChanged","description":"onProgressPercentageChanged: Handler for changes to m.top.progressPercentage param
"},{"title":"module:OSD.onSeasonNumberChanged","link":"onSeasonNumberChanged","description":"onSeasonNumberChanged: Handler for changes to m.top.seasonNumber param.
"},{"title":"module:OSD.onVisibleChanged","link":"onVisibleChanged","description":"onVisibleChanged: Handler for changes to the visibility of this menu.
"},{"title":"module:OSD.resetFocusToDefaultButton","link":"resetFocusToDefaultButton","description":"resetFocusToDefaultButton: Reset focus back to the default button
"},{"title":"module:OptionNode","link":"OptionNode"},{"title":"module:OptionNode.init","link":"init"},{"title":"module:OptionsButton","link":"OptionsButton"},{"title":"module:OptionsButton.init","link":"init"},{"title":"module:OptionsButton.press","link":"press"},{"title":"module:OptionsData","link":"OptionsData"},{"title":"module:OptionsData.init","link":"init"},{"title":"module:OptionsData.press","link":"press"},{"title":"module:OptionsData.update_title","link":"update_title"},{"title":"module:OptionsSlider","link":"OptionsSlider"},{"title":"module:OptionsSlider.init","link":"init"},{"title":"module:OptionsSlider.onKeyEvent","link":"onKeyEvent"},{"title":"module:OptionsSlider.setFields","link":"setFields"},{"title":"module:OverviewDialog","link":"OverviewDialog"},{"title":"module:OverviewDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:OverviewDialog.setOverview","link":"setOverview"},{"title":"module:OverviewDialog.setTitle","link":"setTitle"},{"title":"module:PersonData","link":"PersonData"},{"title":"module:PersonData.setFields","link":"setFields"},{"title":"module:PersonData.setPoster","link":"setPoster"},{"title":"module:PersonDetails","link":"PersonDetails"},{"title":"module:PersonDetails.createDialogPallete","link":"createDialogPallete"},{"title":"module:PersonDetails.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PersonDetails.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:PersonDetails.init","link":"init"},{"title":"module:PersonDetails.loadPerson","link":"loadPerson"},{"title":"module:PersonDetails.onButtonGroupEscaped","link":"onButtonGroupEscaped"},{"title":"module:PersonDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PersonDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:PersonDetails.shortDate","link":"shortDate"},{"title":"module:PhotoData","link":"PhotoData"},{"title":"module:PhotoData.setFields","link":"setFields"},{"title":"module:PhotoData.setPoster","link":"setPoster"},{"title":"module:PhotoDetails","link":"PhotoDetails"},{"title":"module:PhotoDetails.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook.\nUsed to ensure tasks are stopped
"},{"title":"module:PhotoDetails.init","link":"init"},{"title":"module:PhotoDetails.isRandomChanged","link":"isRandomChanged","description":"isRandom component field has changed
"},{"title":"module:PhotoDetails.isSlideshowChanged","link":"isSlideshowChanged","description":"isSlideshow component field has changed
"},{"title":"module:PhotoDetails.isValidToContinue","link":"isValidToContinue"},{"title":"module:PhotoDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:PhotoDetails.nextSlide","link":"nextSlide"},{"title":"module:PhotoDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PhotoDetails.onPhotoLoaded","link":"onPhotoLoaded"},{"title":"module:PhotoDetails.statusUpdate","link":"statusUpdate"},{"title":"module:PlaybackDialog","link":"PlaybackDialog"},{"title":"module:PlaybackDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlayedCheckmark","link":"PlayedCheckmark"},{"title":"module:PlayedCheckmark.init","link":"init"},{"title":"module:PlaylistData","link":"PlaylistData"},{"title":"module:PlaylistData.setFields","link":"setFields"},{"title":"module:PlaylistData.setPoster","link":"setPoster"},{"title":"module:PlaylistView","link":"PlaylistView"},{"title":"module:PlaylistView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:PlaylistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:PlaylistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PlaylistView.init","link":"init"},{"title":"module:PlaylistView.onDoneLoading","link":"onDoneLoading"},{"title":"module:PlaylistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlaylistView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:PlaylistView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:PlaylistView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:PlaylistView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:PlaylistView.setupMainNode","link":"setupMainNode"},{"title":"module:PlaystateTask","link":"PlaystateTask"},{"title":"module:PlaystateTask.PlaystateDefaults","link":"PlaystateDefaults"},{"title":"module:PlaystateTask.PlaystateUpdate","link":"PlaystateUpdate"},{"title":"module:PlaystateTask.init","link":"init"},{"title":"module:PostTask","link":"PostTask"},{"title":"module:PostTask.asyncPost","link":"asyncPost","description":"Post data and wait for response code
"},{"title":"module:PostTask.empty","link":"empty","description":"Revert PostTask to default state
"},{"title":"module:PostTask.init","link":"init"},{"title":"module:PostTask.postItems","link":"postItems","description":"Main function for PostTask.\nPosts either an array of data\nor a string of data to an API endpoint.\nSaves the response information
"},{"title":"module:ProgramDetails","link":"ProgramDetails"},{"title":"module:ProgramDetails.channelUpdated","link":"channelUpdated"},{"title":"module:ProgramDetails.focusChanged","link":"focusChanged","description":"Show view channel button when item has Focus
"},{"title":"module:ProgramDetails.getDurationStringFromSeconds","link":"getDurationStringFromSeconds","description":"Get program duration string (e.g. 1h 20m)
"},{"title":"module:ProgramDetails.getRelativeDayName","link":"getRelativeDayName","description":"Get relative date name for a date (yesterday, today, tomorrow, or otherwise weekday name )
"},{"title":"module:ProgramDetails.init","link":"init"},{"title":"module:ProgramDetails.onAnimationComplete","link":"onAnimationComplete"},{"title":"module:ProgramDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:ProgramDetails.programUpdated","link":"programUpdated"},{"title":"module:ProgramDetails.setupLabels","link":"setupLabels","description":"Set up Live and Repeat label sizes
"},{"title":"module:ProgramDetails.updateLabels","link":"updateLabels"},{"title":"module:PublicUserData","link":"PublicUserData"},{"title":"module:PublicUserData.init","link":"init"},{"title":"module:QueueManager","link":"QueueManager"},{"title":"module:QueueManager.clear","link":"clear","description":"Clear all content from play queue
"},{"title":"module:QueueManager.clearHold","link":"clearHold","description":"Clear all hold content
"},{"title":"module:QueueManager.deleteAtIndex","link":"deleteAtIndex","description":"Delete item from play queue at passed index
"},{"title":"module:QueueManager.getCount","link":"getCount","description":"Return the number of items in the play queue
"},{"title":"module:QueueManager.getCurrentItem","link":"getCurrentItem","description":"Return the item currently in focus from the play queue
"},{"title":"module:QueueManager.getHold","link":"getHold","description":"Return the items in the hold
"},{"title":"module:QueueManager.getIsShuffled","link":"getIsShuffled","description":"Return whether or not shuffle is enabled
"},{"title":"module:QueueManager.getItemByIndex","link":"getItemByIndex","description":"Return the item in the passed index from the play queue
"},{"title":"module:QueueManager.getItemType","link":"getItemType","description":"getItemType: Returns the media type of the passed item
"},{"title":"module:QueueManager.getPosition","link":"getPosition","description":"Returns current playback position within the queue
"},{"title":"module:QueueManager.getQueue","link":"getQueue","description":"Return the current play queue
"},{"title":"module:QueueManager.getQueueTypes","link":"getQueueTypes","description":"Return the types of items in current play queue
"},{"title":"module:QueueManager.getQueueUniqueTypes","link":"getQueueUniqueTypes","description":"Return the unique types of items in current play queue
"},{"title":"module:QueueManager.getUnshuffledQueue","link":"getUnshuffledQueue","description":"Return original, unshuffled queue
"},{"title":"module:QueueManager.hold","link":"hold","description":"Hold an item
"},{"title":"module:QueueManager.init","link":"init"},{"title":"module:QueueManager.isPrerollActive","link":"isPrerollActive","description":"Return isPrerollActive status
"},{"title":"module:QueueManager.moveBack","link":"moveBack","description":"Move queue position back one
"},{"title":"module:QueueManager.moveForward","link":"moveForward","description":"Move queue position ahead one
"},{"title":"module:QueueManager.peek","link":"peek","description":"Return item at end of play queue without removing
"},{"title":"module:QueueManager.playQueue","link":"playQueue","description":"Play items in queue
"},{"title":"module:QueueManager.pop","link":"pop","description":"Remove item at end of play queue
"},{"title":"module:QueueManager.push","link":"push","description":"Push new items to the play queue
"},{"title":"module:QueueManager.resetQueueItemOrder","link":"resetQueueItemOrder","description":"Reset queue items back to original, unshuffled order
"},{"title":"module:QueueManager.resetShuffle","link":"resetShuffle","description":"Reset shuffle to off state
"},{"title":"module:QueueManager.set","link":"set","description":"Replace play queue with passed array
"},{"title":"module:QueueManager.setPosition","link":"setPosition","description":"Set the queue position
"},{"title":"module:QueueManager.setPrerollStatus","link":"setPrerollStatus","description":"Set prerollActive status
"},{"title":"module:QueueManager.setTopStartingPoint","link":"setTopStartingPoint","description":"Set starting point for top item in the queue
"},{"title":"module:QueueManager.shuffleQueueItems","link":"shuffleQueueItems","description":"Save a copy of the original queue and randomize order of queue items
"},{"title":"module:QueueManager.toggleShuffle","link":"toggleShuffle","description":"Toggle shuffleEnabled state
"},{"title":"module:QueueManager.top","link":"top","description":"Return the fitst item in the play queue
"},{"title":"module:QuickConnect","link":"QuickConnect"},{"title":"module:QuickConnect.init","link":"init"},{"title":"module:QuickConnect.monitorQuickConnect","link":"monitorQuickConnect"},{"title":"module:QuickConnectDialog","link":"QuickConnectDialog"},{"title":"module:QuickConnectDialog.OnAuthenticated","link":"OnAuthenticated"},{"title":"module:QuickConnectDialog.init","link":"init"},{"title":"module:QuickConnectDialog.onButtonSelected","link":"onButtonSelected"},{"title":"module:QuickConnectDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:QuickConnectDialog.quickConnectClosed","link":"quickConnectClosed"},{"title":"module:QuickConnectDialog.quickConnectStatus","link":"quickConnectStatus"},{"title":"module:RadioDialog","link":"RadioDialog"},{"title":"module:RadioDialog.init","link":"init"},{"title":"module:RadioDialog.moveScrollBar","link":"moveScrollBar","description":"Move the popup's scroll bar
"},{"title":"module:RadioDialog.onButtonSelected","link":"onButtonSelected","description":"Event handler for when user selected a button
"},{"title":"module:RadioDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:RadioDialog.onItemFocused","link":"onItemFocused","description":"Event handler for when user's cursor highlights an option in the option list
"},{"title":"module:RadioDialog.onItemSelected","link":"onItemSelected","description":"Once user selected an item, move cursor down to OK button
"},{"title":"module:RadioDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:RadioDialog.onScrollBarFocus","link":"onScrollBarFocus","description":"If somehow the scrollbar gains focus, set focus back to the option list
"},{"title":"module:RecordProgramTask","link":"RecordProgramTask"},{"title":"module:RecordProgramTask.RecordOrCancelProgram","link":"RecordOrCancelProgram"},{"title":"module:RecordProgramTask.init","link":"init"},{"title":"module:RecordingData","link":"RecordingData"},{"title":"module:RecordingData.setFields","link":"setFields"},{"title":"module:RecordingData.setPoster","link":"setPoster"},{"title":"module:SceneManager","link":"SceneManager"},{"title":"module:SceneManager.clearPreviousScene","link":"clearPreviousScene","description":"Clear previous scene from group stack
"},{"title":"module:SceneManager.clearScenes","link":"clearScenes","description":"Clear all content from group stack
"},{"title":"module:SceneManager.deleteSceneAtIndex","link":"deleteSceneAtIndex","description":"Delete scene from group stack at passed index
"},{"title":"module:SceneManager.dismissDialog","link":"dismissDialog","description":"Close currently displayed dialog
"},{"title":"module:SceneManager.getActiveScene","link":"getActiveScene","description":"Return group at top of stack without removing
"},{"title":"module:SceneManager.init","link":"init"},{"title":"module:SceneManager.isDialogOpen","link":"isDialogOpen","description":"Returns bool indicating if dialog is currently displayed
"},{"title":"module:SceneManager.optionClosed","link":"optionClosed","description":"Return button the user selected
"},{"title":"module:SceneManager.optionDialog","link":"optionDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.optionSelected","link":"optionSelected","description":"Return button the user selected
"},{"title":"module:SceneManager.popScene","link":"popScene","description":"Remove the current group and load the last group from the stack
"},{"title":"module:SceneManager.pushScene","link":"pushScene","description":"Push a new group onto the stack, replacing the existing group on the screen
"},{"title":"module:SceneManager.radioDialog","link":"radioDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.registerOverhangData","link":"registerOverhangData","description":"Register observers for overhang data
"},{"title":"module:SceneManager.resetTime","link":"resetTime","description":"Reset time
"},{"title":"module:SceneManager.settings","link":"settings","description":"Display user/device settings screen
"},{"title":"module:SceneManager.standardDialog","link":"standardDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.unregisterOverhangData","link":"unregisterOverhangData","description":"Remove observers for overhang data
"},{"title":"module:SceneManager.updateOptions","link":"updateOptions","description":"Update options availability
"},{"title":"module:SceneManager.updateOverhangTitle","link":"updateOverhangTitle","description":"Update overhang title
"},{"title":"module:SceneManager.updateOverhangVisible","link":"updateOverhangVisible","description":"Update whether the overhang is visible or not
"},{"title":"module:SceneManager.updateUser","link":"updateUser","description":"Update username in overhang
"},{"title":"module:SceneManager.userMessage","link":"userMessage","description":"Display dialog to user with an OK button
"},{"title":"module:ScheduleProgramData","link":"ScheduleProgramData"},{"title":"module:ScheduleProgramData.setFields","link":"setFields"},{"title":"module:ScheduleProgramData.setPoster","link":"setPoster"},{"title":"module:SearchBox","link":"SearchBox"},{"title":"module:SearchBox.init","link":"init"},{"title":"module:SearchBox.searchMedias","link":"searchMedias"},{"title":"module:SearchData","link":"SearchData"},{"title":"module:SearchData.setFields","link":"setFields"},{"title":"module:SearchData.setPoster","link":"setPoster"},{"title":"module:SearchResults","link":"SearchResults"},{"title":"module:SearchResults.init","link":"init"},{"title":"module:SearchResults.loadResults","link":"loadResults"},{"title":"module:SearchResults.onKeyEvent","link":"onKeyEvent"},{"title":"module:SearchResults.searchMedias","link":"searchMedias"},{"title":"module:SearchRow","link":"SearchRow"},{"title":"module:SearchRow.addRow","link":"addRow"},{"title":"module:SearchRow.getData","link":"getData"},{"title":"module:SearchRow.init","link":"init"},{"title":"module:SearchRow.updateSize","link":"updateSize"},{"title":"module:SearchTask","link":"SearchTask"},{"title":"module:SearchTask.init","link":"init"},{"title":"module:SearchTask.search","link":"search"},{"title":"module:SeriesData","link":"SeriesData"},{"title":"module:SeriesData.setFields","link":"setFields"},{"title":"module:SeriesData.setPoster","link":"setPoster"},{"title":"module:ServerDiscoveryTask","link":"ServerDiscoveryTask"},{"title":"module:ServerDiscoveryTask.AddServer","link":"AddServer"},{"title":"module:ServerDiscoveryTask.ProcessClientDiscoveryResponse","link":"ProcessClientDiscoveryResponse"},{"title":"module:ServerDiscoveryTask.ProcessSSDPResponse","link":"ProcessSSDPResponse"},{"title":"module:ServerDiscoveryTask.SendClientDiscoveryBroadcast","link":"SendClientDiscoveryBroadcast"},{"title":"module:ServerDiscoveryTask.SendSSDPBroadcast","link":"SendSSDPBroadcast"},{"title":"module:ServerDiscoveryTask.execute","link":"execute"},{"title":"module:ServerDiscoveryTask.init","link":"init","description":"Task used to discover jellyfin servers on the local network
"},{"title":"module:SetServerScreen","link":"SetServerScreen"},{"title":"module:SetServerScreen.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:SetServerScreen.ScanForServers","link":"ScanForServers"},{"title":"module:SetServerScreen.ScanForServersComplete","link":"ScanForServersComplete"},{"title":"module:SetServerScreen.ShowKeyboard","link":"ShowKeyboard"},{"title":"module:SetServerScreen.clearErrorMessage","link":"clearErrorMessage"},{"title":"module:SetServerScreen.init","link":"init"},{"title":"module:SetServerScreen.onDialogButton","link":"onDialogButton"},{"title":"module:SetServerScreen.onKeyEvent","link":"onKeyEvent"},{"title":"module:ShowScenes","link":"ShowScenes"},{"title":"module:ShowScenes.CreateAlbumView","link":"CreateAlbumView","description":"Shows details on selected album. Description text, image, and list of available songs
"},{"title":"module:ShowScenes.CreateArtistView","link":"CreateArtistView","description":"Shows details on selected artist. Bio, image, and list of available albums
"},{"title":"module:ShowScenes.CreateHomeGroup","link":"CreateHomeGroup"},{"title":"module:ShowScenes.CreateItemGrid","link":"CreateItemGrid"},{"title":"module:ShowScenes.CreateMovieDetailsGroup","link":"CreateMovieDetailsGroup"},{"title":"module:ShowScenes.CreateMovieLibraryView","link":"CreateMovieLibraryView"},{"title":"module:ShowScenes.CreateMusicLibraryView","link":"CreateMusicLibraryView"},{"title":"module:ShowScenes.CreatePersonView","link":"CreatePersonView"},{"title":"module:ShowScenes.CreatePlaylistView","link":"CreatePlaylistView","description":"Shows details on selected playlist. Description text, image, and list of available items
"},{"title":"module:ShowScenes.CreateSearchPage","link":"CreateSearchPage"},{"title":"module:ShowScenes.CreateSeasonDetailsGroup","link":"CreateSeasonDetailsGroup"},{"title":"module:ShowScenes.CreateSeasonDetailsGroupByID","link":"CreateSeasonDetailsGroupByID"},{"title":"module:ShowScenes.CreateSeriesDetailsGroup","link":"CreateSeriesDetailsGroup"},{"title":"module:ShowScenes.CreateServerGroup","link":"CreateServerGroup"},{"title":"module:ShowScenes.CreateSigninGroup","link":"CreateSigninGroup"},{"title":"module:ShowScenes.CreateUserSelectGroup","link":"CreateUserSelectGroup"},{"title":"module:ShowScenes.CreateVideoPlayerGroup","link":"CreateVideoPlayerGroup"},{"title":"module:ShowScenes.DeleteFromServerList","link":"DeleteFromServerList"},{"title":"module:ShowScenes.LoginFlow","link":"LoginFlow"},{"title":"module:ShowScenes.SaveServerList","link":"SaveServerList"},{"title":"module:ShowScenes.SendPerformanceBeacon","link":"SendPerformanceBeacon","description":"Roku Performance monitoring
"},{"title":"module:ShowScenes.playbackOptionDialog","link":"playbackOptionDialog","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:SlideOutButton","link":"SlideOutButton"},{"title":"module:SlideOutButton.init","link":"init"},{"title":"module:SlideOutButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:SlideOutButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:SlideOutButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:SlideOutButton.onHighlightChanged","link":"onHighlightChanged"},{"title":"module:SlideOutButton.onIconChanged","link":"onIconChanged"},{"title":"module:SlideOutButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:SlideOutButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:SlideOutButton.onTextChanged","link":"onTextChanged"},{"title":"module:SlideOutButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:SlideOutButton.setIconSize","link":"setIconSize"},{"title":"module:SongItem","link":"SongItem"},{"title":"module:SongItem.focusChanged","link":"focusChanged"},{"title":"module:SongItem.init","link":"init"},{"title":"module:SongItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:Spinner","link":"Spinner"},{"title":"module:Spinner.init","link":"init"},{"title":"module:StandardDialog","link":"StandardDialog"},{"title":"module:StandardDialog.init","link":"init"},{"title":"module:StandardDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:Subtitles","link":"Subtitles"},{"title":"module:Subtitles.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:Subtitles.changeSubtitleDuringPlayback","link":"changeSubtitleDuringPlayback"},{"title":"module:Subtitles.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"Identify the default subtitle track\nif "requires_text" is true, only return a track if it is textual\nThis allows forcing text subs, since roku requires transcoding of non-text subs\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"Identify the default subtitle track for a given video id\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.getSubtitleLanguages","link":"getSubtitleLanguages"},{"title":"module:Subtitles.getSubtitleSelIdxFromSubIdx","link":"getSubtitleSelIdxFromSubIdx","description":"The subtitle index on the server differs from the index we track locally\nThis function converts the former into the latter
"},{"title":"module:Subtitles.selectSubtitleTrack","link":"selectSubtitleTrack"},{"title":"module:Subtitles.selectSubtitleTrackDialog","link":"selectSubtitleTrackDialog","description":"Present Dialog to user to select subtitle track
"},{"title":"module:Subtitles.setupSubtitle","link":"setupSubtitle","description":"Given a set of subtitles, and a subtitle index (the index on the server, not in the list provided)\nthis will set all relevant settings for roku (mainly closed captions) and return the index of the\nsubtitle track specified, but indexed based on the provided list of subtitles
"},{"title":"module:Subtitles.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:Subtitles.turnoffSubtitles","link":"turnoffSubtitles"},{"title":"module:TVEpisode","link":"TVEpisode"},{"title":"module:TVEpisode.setFields","link":"setFields"},{"title":"module:TVEpisode.setPoster","link":"setPoster"},{"title":"module:TVEpisodeData","link":"TVEpisodeData"},{"title":"module:TVEpisodeData.setFields","link":"setFields"},{"title":"module:TVEpisodeData.setPoster","link":"setPoster"},{"title":"module:TVEpisodeRow","link":"TVEpisodeRow"},{"title":"module:TVEpisodeRow.init","link":"init"},{"title":"module:TVEpisodeRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRow.setData","link":"setData"},{"title":"module:TVEpisodeRow.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRow.updateSize","link":"updateSize"},{"title":"module:TVEpisodeRowWithOptions","link":"TVEpisodeRowWithOptions"},{"title":"module:TVEpisodeRowWithOptions.SetUpAudioOptions","link":"SetUpAudioOptions","description":"List of audio tracks to choose from
"},{"title":"module:TVEpisodeRowWithOptions.SetUpVideoOptions","link":"SetUpVideoOptions","description":"List of video versions to choose from
"},{"title":"module:TVEpisodeRowWithOptions.audioOptionsClosed","link":"audioOptionsClosed"},{"title":"module:TVEpisodeRowWithOptions.init","link":"init"},{"title":"module:TVEpisodeRowWithOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRowWithOptions.rowsDoneLoading","link":"rowsDoneLoading"},{"title":"module:TVEpisodeRowWithOptions.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRowWithOptions.videoOptionsClosed","link":"videoOptionsClosed"},{"title":"module:TVEpisodes","link":"TVEpisodes"},{"title":"module:TVEpisodes.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:TVEpisodes.getFocusedItem","link":"getFocusedItem","description":"get the currently focused item
"},{"title":"module:TVEpisodes.init","link":"init"},{"title":"module:TVEpisodes.onKeyEvent","link":"onKeyEvent","description":"Handle navigation input from the remote and act on it
"},{"title":"module:TVEpisodes.setExtraButtonVisibility","link":"setExtraButtonVisibility","description":"Updates the visibility of the Extras button based on if this season has any extra features
"},{"title":"module:TVEpisodes.setSeasonLoading","link":"setSeasonLoading"},{"title":"module:TVEpisodes.updateSeason","link":"updateSeason"},{"title":"module:TVListDetails","link":"TVListDetails"},{"title":"module:TVListDetails.DisplayAudioAvailable","link":"DisplayAudioAvailable","description":"Adds "+N" (e.g. +1) if there is more than one audio track to choose from
"},{"title":"module:TVListDetails.DisplayVideoAvailable","link":"DisplayVideoAvailable","description":"Adds "+N" (e.g. +1) if there is more than one video version to choose from
"},{"title":"module:TVListDetails.SetupAudioDisplay","link":"SetupAudioDisplay","description":"Display current audio_codec and check if there is more than one audio track to choose from...
"},{"title":"module:TVListDetails.focusChanged","link":"focusChanged"},{"title":"module:TVListDetails.getEndTime","link":"getEndTime"},{"title":"module:TVListDetails.getRuntime","link":"getRuntime"},{"title":"module:TVListDetails.init","link":"init"},{"title":"module:TVListDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVListOptions","link":"TVListOptions"},{"title":"module:TVListOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:TVListOptions.init","link":"init"},{"title":"module:TVListOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVListOptions.optionsSet","link":"optionsSet"},{"title":"module:TVSeasonData","link":"TVSeasonData"},{"title":"module:TVSeasonData.setFields","link":"setFields"},{"title":"module:TVSeasonData.setPoster","link":"setPoster"},{"title":"module:TVSeasonRow","link":"TVSeasonRow"},{"title":"module:TVSeasonRow.getData","link":"getData"},{"title":"module:TVSeasonRow.init","link":"init"},{"title":"module:TVSeasonRow.updateSize","link":"updateSize"},{"title":"module:TVShowDescription","link":"TVShowDescription"},{"title":"module:TVShowDescription.getEndTime","link":"getEndTime"},{"title":"module:TVShowDescription.getHistory","link":"getHistory"},{"title":"module:TVShowDescription.getRuntime","link":"getRuntime"},{"title":"module:TVShowDescription.init","link":"init"},{"title":"module:TVShowDescription.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDescription.round","link":"round"},{"title":"module:TVShowDescription.setFieldText","link":"setFieldText"},{"title":"module:TVShowDetails","link":"TVShowDetails"},{"title":"module:TVShowDetails.getEndTime","link":"getEndTime"},{"title":"module:TVShowDetails.getHistory","link":"getHistory"},{"title":"module:TVShowDetails.getRuntime","link":"getRuntime"},{"title":"module:TVShowDetails.init","link":"init"},{"title":"module:TVShowDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVShowDetails.onShuffleEpisodeDataLoaded","link":"onShuffleEpisodeDataLoaded"},{"title":"module:TVShowDetails.round","link":"round"},{"title":"module:TVShowDetails.setFieldText","link":"setFieldText"},{"title":"module:TextSizeTask","link":"TextSizeTask"},{"title":"module:TextSizeTask.getTextSize","link":"getTextSize"},{"title":"module:TextSizeTask.init","link":"init"},{"title":"module:UserData","link":"UserData"},{"title":"module:UserData.getPreference","link":"getPreference"},{"title":"module:UserData.loadFromJSON","link":"loadFromJSON"},{"title":"module:UserData.loadFromRegistry","link":"loadFromRegistry"},{"title":"module:UserData.removeFromRegistry","link":"removeFromRegistry"},{"title":"module:UserData.saveToRegistry","link":"saveToRegistry"},{"title":"module:UserData.setDataFromJSON","link":"setDataFromJSON"},{"title":"module:UserData.setPreference","link":"setPreference"},{"title":"module:UserData.setServer","link":"setServer"},{"title":"module:UserItem","link":"UserItem"},{"title":"module:UserItem.init","link":"init"},{"title":"module:UserItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserLibrary","link":"UserLibrary"},{"title":"module:UserLibrary.MarkItemFavorite","link":"MarkItemFavorite"},{"title":"module:UserLibrary.MarkItemWatched","link":"MarkItemWatched"},{"title":"module:UserLibrary.UnmarkItemFavorite","link":"UnmarkItemFavorite"},{"title":"module:UserLibrary.UnmarkItemWatched","link":"UnmarkItemWatched"},{"title":"module:UserRow","link":"UserRow"},{"title":"module:UserRow.init","link":"init"},{"title":"module:UserRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserRow.setData","link":"setData"},{"title":"module:UserRow.setUser","link":"setUser"},{"title":"module:UserRow.updateSize","link":"updateSize"},{"title":"module:UserSelect","link":"UserSelect"},{"title":"module:UserSelect.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:UserSelect.init","link":"init"},{"title":"module:UserSelect.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserSelect.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserSelect.redraw","link":"redraw"},{"title":"module:VideoData","link":"VideoData"},{"title":"module:VideoData.setFields","link":"setFields"},{"title":"module:VideoData.setPoster","link":"setPoster"},{"title":"module:VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.AddVideoContent","link":"AddVideoContent"},{"title":"module:VideoPlayer.GetPlaybackInfo","link":"GetPlaybackInfo","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:VideoPlayer.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:VideoPlayer.PlayIntroVideo","link":"PlayIntroVideo"},{"title":"module:VideoPlayer.VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.autoPlayNextEpisode","link":"autoPlayNextEpisode"},{"title":"module:VideoPlayer.directPlaySupported","link":"directPlaySupported"},{"title":"module:VideoPlayer.getAudioFormat","link":"getAudioFormat"},{"title":"module:VideoPlayer.getAudioInfo","link":"getAudioInfo"},{"title":"module:VideoPlayer.getContainerType","link":"getContainerType"},{"title":"module:VideoPlayer.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:VideoPlayer.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:VideoPlayer.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:VideoPlayer.startPlayBackOver","link":"startPlayBackOver","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:VideoPlayerView","link":"VideoPlayerView"},{"title":"module:VideoPlayerView.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:VideoPlayerView.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"availSubtitleTrackIdx: Returns Roku's index for requested subtitle track
"},{"title":"module:VideoPlayerView.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:VideoPlayerView.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:VideoPlayerView.getCurrentChapterIndex","link":"getCurrentChapterIndex","description":"getCurrentChapterIndex: Finds current chapter index
"},{"title":"module:VideoPlayerView.handleChapterListAction","link":"handleChapterListAction","description":"handleChapterListAction: Handles action to show chapter list
"},{"title":"module:VideoPlayerView.handleChapterSkipAction","link":"handleChapterSkipAction","description":"handleChapterSkipAction: Handles user command to skip chapters in playing video
"},{"title":"module:VideoPlayerView.handleHideAction","link":"handleHideAction","description":"handleHideAction: Handles action to hide OSD menu
"},{"title":"module:VideoPlayerView.handleItemSkipAction","link":"handleItemSkipAction","description":"handleItemSkipAction: Handles user command to skip items
"},{"title":"module:VideoPlayerView.handleShowAudioMenuAction","link":"handleShowAudioMenuAction","description":"handleShowAudioMenuAction: Handles action to show audio selection menu
"},{"title":"module:VideoPlayerView.handleShowSubtitleMenuAction","link":"handleShowSubtitleMenuAction","description":"handleShowSubtitleMenuAction: Handles action to show subtitle selection menu
"},{"title":"module:VideoPlayerView.handleShowVideoInfoPopupAction","link":"handleShowVideoInfoPopupAction","description":"handleShowVideoInfoPopupAction: Handles action to show video info popup
"},{"title":"module:VideoPlayerView.handleVideoPlayPauseAction","link":"handleVideoPlayPauseAction","description":"handleVideoPlayPauseAction: Handles action to either play or pause the video content
"},{"title":"module:VideoPlayerView.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:VideoPlayerView.init","link":"init"},{"title":"module:VideoPlayerView.loadCaption","link":"loadCaption","description":"Set caption url to server subtitle track
"},{"title":"module:VideoPlayerView.onAllowCaptionsChange","link":"onAllowCaptionsChange","description":"Only setup caption items if captions are allowed
"},{"title":"module:VideoPlayerView.onAudioIndexChange","link":"onAudioIndexChange","description":"Event handler for when audioIndex changes
"},{"title":"module:VideoPlayerView.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:VideoPlayerView.onKeyEvent","link":"onKeyEvent"},{"title":"module:VideoPlayerView.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:VideoPlayerView.onOSDAction","link":"onOSDAction","description":"onOSDAction: Process action events from OSD to their respective handlers
"},{"title":"module:VideoPlayerView.onPlaybackErrorButtonSelected","link":"onPlaybackErrorButtonSelected"},{"title":"module:VideoPlayerView.onPlaybackErrorDialogClosed","link":"onPlaybackErrorDialogClosed"},{"title":"module:VideoPlayerView.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onSubtitleChange","link":"onSubtitleChange","description":"Event handler for when selectedSubtitle changes
"},{"title":"module:VideoPlayerView.onVideoContentLoaded","link":"onVideoContentLoaded"},{"title":"module:VideoPlayerView.populateChapterMenu","link":"populateChapterMenu","description":"populateChapterMenu: ' Parse chapter data from API and appeand to chapter list menu
"},{"title":"module:VideoPlayerView.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:VideoPlayerView.showPlaybackErrorDialog","link":"showPlaybackErrorDialog"},{"title":"module:VideoPlayerView.stateAllowsOSD","link":"stateAllowsOSD","description":"stateAllowsOSD: Check if current video state allows showing the OSD
"},{"title":"module:VideoPlayerView.toggleCaption","link":"toggleCaption","description":"Toggles visibility of custom subtitles and sets captionTask's player state
"},{"title":"module:VideoPlayerView.updateCaption","link":"updateCaption","description":"Removes old subtitle lines and adds new subtitle lines
"},{"title":"module:VideoPlayerView.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:VideoTrackListItem","link":"VideoTrackListItem"},{"title":"module:VideoTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:VideoTrackListItem.init","link":"init"},{"title":"module:VideoTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ViewCreator","link":"ViewCreator"},{"title":"module:ViewCreator.CreateAudioPlayerView","link":"CreateAudioPlayerView","description":"Play Audio
"},{"title":"module:ViewCreator.CreateVideoPlayerView","link":"CreateVideoPlayerView","description":"Play Video
"},{"title":"module:ViewCreator.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:ViewCreator.onPlaybackInfoLoaded","link":"onPlaybackInfoLoaded","description":"The playback info task has returned data
"},{"title":"module:ViewCreator.onSelectAudioPressed","link":"onSelectAudioPressed","description":"onSelectAudioPressed: Display audio selection dialog
"},{"title":"module:ViewCreator.onSelectPlaybackInfoPressed","link":"onSelectPlaybackInfoPressed","description":"User requested playback info
"},{"title":"module:ViewCreator.onSelectSubtitlePressed","link":"onSelectSubtitlePressed","description":"User requested subtitle selection popup
"},{"title":"module:ViewCreator.onSelectionMade","link":"onSelectionMade","description":"User has selected something from the radioDialog popup
"},{"title":"module:ViewCreator.onStateChange","link":"onStateChange","description":"Playback state change event handlers
"},{"title":"module:ViewCreator.processAudioSelection","link":"processAudioSelection","description":"processAudioSelection: Audio track selection handler
"},{"title":"module:ViewCreator.processSubtitleSelection","link":"processSubtitleSelection"},{"title":"module:WhatsNewDialog","link":"WhatsNewDialog"},{"title":"module:WhatsNewDialog.init","link":"init"},{"title":"module:WhatsNewDialog.setPalette","link":"setPalette"},{"title":"module:baserequest","link":"baserequest"},{"title":"module:baserequest.APIRequest","link":"APIRequest"},{"title":"module:baserequest.authRequest","link":"authRequest","description":"Takes and returns a roUrlTransfer object after adding a Jellyfin "Authorization" header
"},{"title":"module:baserequest.buildAuthHeader","link":"buildAuthHeader","description":"Returns a string containing the "Authorization" header payload
"},{"title":"module:baserequest.buildParams","link":"buildParams","description":"Functions for making requests to the API
"},{"title":"module:baserequest.buildURL","link":"buildURL"},{"title":"module:baserequest.deleteVoid","link":"deleteVoid"},{"title":"module:baserequest.getJson","link":"getJson"},{"title":"module:baserequest.getString","link":"getString"},{"title":"module:baserequest.getVoid","link":"getVoid"},{"title":"module:baserequest.get_url","link":"get_url"},{"title":"module:baserequest.headVoid","link":"headVoid"},{"title":"module:baserequest.postJson","link":"postJson"},{"title":"module:baserequest.postString","link":"postString"},{"title":"module:baserequest.postVoid","link":"postVoid"},{"title":"module:baserequest.setCertificateAuthority","link":"setCertificateAuthority","description":"sets the certificate authority by file path on the passed node
"},{"title":"module:captionTask","link":"captionTask"},{"title":"module:captionTask.fetchCaption","link":"fetchCaption"},{"title":"module:captionTask.init","link":"init"},{"title":"module:captionTask.isTime","link":"isTime"},{"title":"module:captionTask.newLayoutGroup","link":"newLayoutGroup"},{"title":"module:captionTask.newRect","link":"newRect"},{"title":"module:captionTask.newlabel","link":"newlabel"},{"title":"module:captionTask.parseVTT","link":"parseVTT"},{"title":"module:captionTask.setFont","link":"setFont"},{"title":"module:captionTask.toMs","link":"toMs"},{"title":"module:captionTask.updateCaption","link":"updateCaption"},{"title":"module:conditional","link":"conditional"},{"title":"module:conditional.printRegistry","link":"printRegistry","description":"Print out all of the registry contents to the debug log
"},{"title":"module:config","link":"config"},{"title":"module:config.GetConfigTree","link":"GetConfigTree","description":"Read config tree from json config file and return
"},{"title":"module:config.RegistryReadAll","link":"RegistryReadAll","description":"Return all data found inside a registry section
"},{"title":"module:config.findConfigTreeKey","link":"findConfigTreeKey","description":"Recursivly search the config tree for entry with settingname equal to key
"},{"title":"module:config.getRegistrySections","link":"getRegistrySections","description":"Return an array of all the registry section keys
"},{"title":"module:config.getSavedUsers","link":"getSavedUsers","description":"Returns an array of saved users from the registry\nthat belong to the active server
"},{"title":"module:config.get_setting","link":"get_setting","description":""Jellyfin" registry accessors for the default global settings
"},{"title":"module:config.get_user_setting","link":"get_user_setting","description":"User registry accessors for the currently active user
"},{"title":"module:config.registry_delete","link":"registry_delete"},{"title":"module:config.registry_read","link":"registry_read","description":"Generic registry accessors
"},{"title":"module:config.registry_write","link":"registry_write"},{"title":"module:config.set_setting","link":"set_setting"},{"title":"module:config.set_user_setting","link":"set_user_setting"},{"title":"module:config.unset_setting","link":"unset_setting"},{"title":"module:config.unset_user_setting","link":"unset_user_setting"},{"title":"module:deviceCapabilities","link":"deviceCapabilities"},{"title":"module:deviceCapabilities.GetBitRateLimit","link":"GetBitRateLimit"},{"title":"module:deviceCapabilities.GetDirectPlayProfiles","link":"GetDirectPlayProfiles"},{"title":"module:deviceCapabilities.getCodecProfiles","link":"getCodecProfiles"},{"title":"module:deviceCapabilities.getContainerProfiles","link":"getContainerProfiles"},{"title":"module:deviceCapabilities.getDeviceCapabilities","link":"getDeviceCapabilities","description":"Returns the Device Capabilities for Roku.\nAlso prints out the device profile for debugging
"},{"title":"module:deviceCapabilities.getDeviceProfile","link":"getDeviceProfile"},{"title":"module:deviceCapabilities.getMaxHeightArray","link":"getMaxHeightArray"},{"title":"module:deviceCapabilities.getMaxWidthArray","link":"getMaxWidthArray"},{"title":"module:deviceCapabilities.getSubtitleProfiles","link":"getSubtitleProfiles"},{"title":"module:deviceCapabilities.getTranscodingProfiles","link":"getTranscodingProfiles"},{"title":"module:deviceCapabilities.printDeviceProfile","link":"printDeviceProfile","description":"Print out the deviceProfile for debugging
"},{"title":"module:deviceCapabilities.removeDecimals","link":"removeDecimals","description":"Remove all decimals from a string
"},{"title":"module:deviceCapabilities.setPreferredCodec","link":"setPreferredCodec","description":"Takes and returns a comma delimited string of codecs.\nMoves the preferred codec to the front of the string
"},{"title":"module:deviceCapabilities.updateProfileArray","link":"updateProfileArray","description":"Recieves and returns an assArray of supported profiles and levels for each video codec
"},{"title":"module:globals","link":"globals"},{"title":"module:globals.SaveAppToGlobal","link":"SaveAppToGlobal","description":"Save information from roAppInfo to m.global.app
"},{"title":"module:globals.SaveDeviceToGlobal","link":"SaveDeviceToGlobal","description":"Save information from roDeviceInfo to m.global.device
"},{"title":"module:globals.setConstants","link":"setConstants","description":"Set global constants
"},{"title":"module:homeRowItemSizes","link":"homeRowItemSizes"},{"title":"module:migrations","link":"migrations"},{"title":"module:migrations.runGlobalMigrations","link":"runGlobalMigrations","description":"Run all necessary registry mirations on the "global" Jellyfin registry section
"},{"title":"module:migrations.runRegistryUserMigrations","link":"runRegistryUserMigrations"},{"title":"module:misc","link":"misc"},{"title":"module:misc.AssocArrayEqual","link":"AssocArrayEqual"},{"title":"module:misc.arrayHasValue","link":"arrayHasValue","description":"Check if a specific value is inside of an array
"},{"title":"module:misc.createLogoPoster","link":"createLogoPoster","description":"Create and return a Jellyfin logo poster node
"},{"title":"module:misc.createOverhangUser","link":"createOverhangUser"},{"title":"module:misc.createSeperator","link":"createSeperator","description":"Create and return a rectangle node used as a seperator in the overhang
"},{"title":"module:misc.div_ceiling","link":"div_ceiling"},{"title":"module:misc.findNodeBySubtype","link":"findNodeBySubtype"},{"title":"module:misc.formatTime","link":"formatTime","description":"Format time as 12 or 24 hour format based on system clock setting
"},{"title":"module:misc.getButton","link":"getButton"},{"title":"module:misc.getMinutes","link":"getMinutes","description":"Converts ticks to minutes
"},{"title":"module:misc.getMsgPicker","link":"getMsgPicker"},{"title":"module:misc.get_dialog_result","link":"get_dialog_result","description":"Returns the item selected or -1 on backpress or other unhandled closure of dialog.
"},{"title":"module:misc.inArray","link":"inArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:misc.inferServerUrl","link":"inferServerUrl","description":"take an incomplete url string and use it to make educated guesses about\nthe complete url. then tests these guesses to see if it can find a jf server\nreturns the url of the server it found, or an empty string
"},{"title":"module:misc.isAllValid","link":"isAllValid","description":"Returns whether or not all items in passed array are valid
"},{"title":"module:misc.isChainValid","link":"isChainValid","description":"isChainValid: Returns whether or not all the properties in the passed property chain are valid.\nStops evaluating at first found false value
"},{"title":"module:misc.isJellyfinServer","link":"isJellyfinServer","description":"accepts the raw json string of /system/info/public and returns\na boolean indicating if ProductName is "Jellyfin Server"
"},{"title":"module:misc.isLocalhost","link":"isLocalhost","description":"Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
"},{"title":"module:misc.isNodeEvent","link":"isNodeEvent"},{"title":"module:misc.isValid","link":"isValid","description":"Returns whether or not passed value is valid
"},{"title":"module:misc.isValidAndNotEmpty","link":"isValidAndNotEmpty","description":"Returns whether or not passed value is valid and not empty\nAccepts a string, or any countable type (arrays and lists)
"},{"title":"module:misc.lastFocusedChild","link":"lastFocusedChild"},{"title":"module:misc.leftPad","link":"leftPad"},{"title":"module:misc.message_dialog","link":"message_dialog"},{"title":"module:misc.option_dialog","link":"option_dialog"},{"title":"module:misc.parseUrl","link":"parseUrl","description":"Returns an array from a url = [ url, proto, host, port, subdir+params ]\nIf port or subdir are not found, an empty string will be added to the array\nProto must be declared or array will be empty
"},{"title":"module:misc.roundNumber","link":"roundNumber","description":"Rounds number to nearest integer
"},{"title":"module:misc.secondsToHuman","link":"secondsToHuman"},{"title":"module:misc.setFieldTextValue","link":"setFieldTextValue"},{"title":"module:misc.show_dialog","link":"show_dialog"},{"title":"module:misc.shuffleArray","link":"shuffleArray","description":"Takes an array of data, shuffles the order, then returns the array\nuses the Fisher-Yates shuffling algorithm
"},{"title":"module:misc.startLoadingSpinner","link":"startLoadingSpinner","description":"startLoadingSpinner: Start a loading spinner and attach it to the main JFScene.\nDisplays an invisible ProgressDialog node by default to disable keypresses while loading.
"},{"title":"module:misc.stopLoadingSpinner","link":"stopLoadingSpinner"},{"title":"module:misc.ticksToHuman","link":"ticksToHuman"},{"title":"module:misc.toString","link":"toString"},{"title":"module:misc.urlCandidates","link":"urlCandidates","description":"this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates\nfor the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated\nfull urls.
"},{"title":"module:misc.versionChecker","link":"versionChecker","description":"Returns whether or not a version number (e.g. 10.7.7) is greater or equal\nto some minimum version allowed (e.g. 10.8.0)
"},{"title":"module:quickplay","link":"quickplay"},{"title":"module:quickplay.album","link":"album","description":"A music album.\nPlay the entire album starting with track 1.
"},{"title":"module:quickplay.artist","link":"artist","description":"A music artist.\nShuffle play all songs by artist.
"},{"title":"module:quickplay.audio","link":"audio","description":"A single audio file.
"},{"title":"module:quickplay.boxset","link":"boxset","description":"A boxset.\nPlay all items inside.
"},{"title":"module:quickplay.collectionFolder","link":"collectionFolder","description":"Quick Play A CollectionFolder.\nShuffle play the items inside\nwith some differences based on collectionType.
"},{"title":"module:quickplay.folder","link":"folder","description":"Quick Play A folder.\nShuffle play all items found
"},{"title":"module:quickplay.multipleSeries","link":"multipleSeries","description":"More than one TV Show Series.\nShuffle play all watched episodes
"},{"title":"module:quickplay.musicVideo","link":"musicVideo","description":"A single music video file.
"},{"title":"module:quickplay.person","link":"person","description":"Quick Play A Person.\nShuffle play all videos found
"},{"title":"module:quickplay.photo","link":"photo","description":"A single photo.
"},{"title":"module:quickplay.photoAlbum","link":"photoAlbum","description":"A photo album.
"},{"title":"module:quickplay.playlist","link":"playlist","description":"Quick Play A Playlist.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.program","link":"program","description":"Quick Play A Live Program
"},{"title":"module:quickplay.pushToQueue","link":"pushToQueue","description":"Takes an array of items and adds to global queue.\nAlso shuffles the playlist if asked
"},{"title":"module:quickplay.season","link":"season","description":"A TV Show Season.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.series","link":"series","description":"A TV Show Series.\nPlay the first unwatched episode.\nIf none, shuffle play the whole series.
"},{"title":"module:quickplay.tvChannel","link":"tvChannel","description":"Quick Play A TVChannel
"},{"title":"module:quickplay.userView","link":"userView","description":"Quick Play A UserView.\nPlay logic depends on "collectionType".
"},{"title":"module:quickplay.video","link":"video","description":"A single video file.
"},{"title":"module:quickplay.videoContainer","link":"videoContainer","description":"A container with some kind of videos inside of it
"},{"title":"module:schedule","link":"schedule"},{"title":"module:schedule.channelFilterSet","link":"channelFilterSet"},{"title":"module:schedule.channelsearchTermSet","link":"channelsearchTermSet","description":"Voice Search set
"},{"title":"module:schedule.focusProgramDetails","link":"focusProgramDetails","description":"Move the TV Guide Grid down or up depending whether details are selected
"},{"title":"module:schedule.init","link":"init"},{"title":"module:schedule.onChannelsLoaded","link":"onChannelsLoaded","description":"Initial list of channels loaded
"},{"title":"module:schedule.onGridScrolled","link":"onGridScrolled","description":"As user scrolls grid, check if more data requries to be loaded
"},{"title":"module:schedule.onKeyEvent","link":"onKeyEvent"},{"title":"module:schedule.onProgramDetailsLoaded","link":"onProgramDetailsLoaded","description":"Update the Program Details with full information
"},{"title":"module:schedule.onProgramFocused","link":"onProgramFocused"},{"title":"module:schedule.onProgramSelected","link":"onProgramSelected"},{"title":"module:schedule.onRecordChannelSelected","link":"onRecordChannelSelected","description":"Handle user selecting "Record Channel" from Program Details
"},{"title":"module:schedule.onRecordOperationDone","link":"onRecordOperationDone"},{"title":"module:schedule.onRecordSeriesChannelSelected","link":"onRecordSeriesChannelSelected","description":"Handle user selecting "Record Series" from Program Details
"},{"title":"module:schedule.onScheduleLoaded","link":"onScheduleLoaded","description":"When LoadScheduleTask completes (initial or more data) and we have a schedule to display
"},{"title":"module:schedule.onWatchChannelSelected","link":"onWatchChannelSelected","description":"Handle user selecting "Watch Channel" from Program Details
"},{"title":"module:section","link":"section"},{"title":"module:section.init","link":"init"},{"title":"module:section.onFocusChange","link":"onFocusChange"},{"title":"module:section.onIDChange","link":"onIDChange"},{"title":"module:section.onTranslationChange","link":"onTranslationChange"},{"title":"module:section.scrollDownToOnDeck","link":"scrollDownToOnDeck"},{"title":"module:section.scrollOffBottom","link":"scrollOffBottom"},{"title":"module:section.scrollOffOnDeck","link":"scrollOffOnDeck"},{"title":"module:section.scrollOffTop","link":"scrollOffTop"},{"title":"module:section.scrollUpToOnDeck","link":"scrollUpToOnDeck"},{"title":"module:section.showFromBottom","link":"showFromBottom"},{"title":"module:section.showFromTop","link":"showFromTop"},{"title":"module:sectionScroller","link":"sectionScroller"},{"title":"module:sectionScroller.displayedIndexChanged","link":"displayedIndexChanged"},{"title":"module:sectionScroller.init","link":"init"},{"title":"module:sectionScroller.onFocusChange","link":"onFocusChange"},{"title":"module:settings","link":"settings"},{"title":"module:settings.LoadMenu","link":"LoadMenu"},{"title":"module:settings.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook that gets ran as needed.\nAssumes settings were changed and they affect the device profile.\nPosts a new device profile to the server using the task thread
"},{"title":"module:settings.boolSettingChanged","link":"boolSettingChanged"},{"title":"module:settings.init","link":"init"},{"title":"module:settings.isFormInFocus","link":"isFormInFocus","description":"Returns true if any of the data entry forms are in focus
"},{"title":"module:settings.onKeyEvent","link":"onKeyEvent"},{"title":"module:settings.onKeyGridEscape","link":"onKeyGridEscape"},{"title":"module:settings.onKeyGridSubmit","link":"onKeyGridSubmit"},{"title":"module:settings.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:settings.radioSettingChanged","link":"radioSettingChanged"},{"title":"module:settings.settingFocused","link":"settingFocused"},{"title":"module:settings.settingSelected","link":"settingSelected"},{"title":"module:userauth","link":"userauth"},{"title":"module:userauth.AboutMe","link":"AboutMe"},{"title":"module:userauth.AuthenticateViaQuickConnect","link":"AuthenticateViaQuickConnect"},{"title":"module:userauth.AvailableUsers","link":"AvailableUsers"},{"title":"module:userauth.GetPublicUsers","link":"GetPublicUsers"},{"title":"module:userauth.LoadUserAbilities","link":"LoadUserAbilities"},{"title":"module:userauth.ServerInfo","link":"ServerInfo"},{"title":"module:userauth.SignOut","link":"SignOut"},{"title":"module:userauth.checkQuickConnect","link":"checkQuickConnect"},{"title":"module:userauth.get_token","link":"get_token"},{"title":"module:userauth.initQuickConnect","link":"initQuickConnect"}]}
\ No newline at end of file
+{"list":[{"title":"module:AlbumData","link":"AlbumData"},{"title":"module:AlbumData.setFields","link":"setFields"},{"title":"module:AlbumGrid","link":"AlbumGrid"},{"title":"module:AlbumGrid.getData","link":"getData"},{"title":"module:AlbumGrid.init","link":"init"},{"title":"module:AlbumGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumTrackList","link":"AlbumTrackList"},{"title":"module:AlbumTrackList.getData","link":"getData"},{"title":"module:AlbumTrackList.init","link":"init"},{"title":"module:AlbumView","link":"AlbumView"},{"title":"module:AlbumView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:AlbumView.createDialogPallete","link":"createDialogPallete"},{"title":"module:AlbumView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:AlbumView.init","link":"init"},{"title":"module:AlbumView.onDoneLoading","link":"onDoneLoading"},{"title":"module:AlbumView.onKeyEvent","link":"onKeyEvent"},{"title":"module:AlbumView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:AlbumView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AlbumView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AlbumView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AlbumView.setupMainNode","link":"setupMainNode"},{"title":"module:Alpha","link":"Alpha"},{"title":"module:Alpha.init","link":"init"},{"title":"module:Alpha.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView","link":"ArtistView"},{"title":"module:ArtistView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:ArtistView.OnScreenShown","link":"OnScreenShown"},{"title":"module:ArtistView.artistOverviewChanged","link":"artistOverviewChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:ArtistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:ArtistView.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:ArtistView.init","link":"init"},{"title":"module:ArtistView.onAlbumsData","link":"onAlbumsData"},{"title":"module:ArtistView.onAlbumsEscape","link":"onAlbumsEscape"},{"title":"module:ArtistView.onAppearsOnData","link":"onAppearsOnData"},{"title":"module:ArtistView.onAppearsOnEscape","link":"onAppearsOnEscape"},{"title":"module:ArtistView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:ArtistView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:ArtistView.onEllipsisChanged","link":"onEllipsisChanged"},{"title":"module:ArtistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:ArtistView.onSectionNavigationEscape","link":"onSectionNavigationEscape"},{"title":"module:ArtistView.onSectionNavigationSelected","link":"onSectionNavigationSelected"},{"title":"module:ArtistView.onSectionScrollerChange","link":"onSectionScrollerChange"},{"title":"module:ArtistView.pageContentChanged","link":"pageContentChanged","description":"Event fired when page data is loaded
"},{"title":"module:ArtistView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:ArtistView.setPosterImage","link":"setPosterImage"},{"title":"module:ArtistView.setScreenTitle","link":"setScreenTitle"},{"title":"module:ArtistView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:ArtistView.setupMainNode","link":"setupMainNode"},{"title":"module:AudioPlayer","link":"AudioPlayer"},{"title":"module:AudioPlayer.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:AudioPlayer.audioStateChanged","link":"audioStateChanged","description":"State Change Event Handler
"},{"title":"module:AudioPlayer.init","link":"init"},{"title":"module:AudioPlayerView","link":"AudioPlayerView"},{"title":"module:AudioPlayerView.LoadNextSong","link":"LoadNextSong"},{"title":"module:AudioPlayerView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:AudioPlayerView.audioPositionChanged","link":"audioPositionChanged"},{"title":"module:AudioPlayerView.audioStateChanged","link":"audioStateChanged"},{"title":"module:AudioPlayerView.bufferPositionChanged","link":"bufferPositionChanged"},{"title":"module:AudioPlayerView.endScreenSaver","link":"endScreenSaver"},{"title":"module:AudioPlayerView.exitScrubMode","link":"exitScrubMode","description":"exitScrubMode: Moves player out of scrub mode state, resets back to standard play mode
"},{"title":"module:AudioPlayerView.findCurrentSongIndex","link":"findCurrentSongIndex"},{"title":"module:AudioPlayerView.init","link":"init"},{"title":"module:AudioPlayerView.loadButtons","link":"loadButtons","description":"If we have more and 1 song to play, fade in the next and previous controls
"},{"title":"module:AudioPlayerView.loopClicked","link":"loopClicked"},{"title":"module:AudioPlayerView.moveSeekbarThumb","link":"moveSeekbarThumb","description":"moveSeekbarThumb: Positions the thumb on the seekbar
"},{"title":"module:AudioPlayerView.nextClicked","link":"nextClicked"},{"title":"module:AudioPlayerView.onAudioStreamLoaded","link":"onAudioStreamLoaded"},{"title":"module:AudioPlayerView.onBackdropImageLoaded","link":"onBackdropImageLoaded"},{"title":"module:AudioPlayerView.onButtonSelectedChange","link":"onButtonSelectedChange","description":"Event handler when user selected a different playback button
"},{"title":"module:AudioPlayerView.onKeyEvent","link":"onKeyEvent","description":"Process key press events
"},{"title":"module:AudioPlayerView.onMetaDataLoaded","link":"onMetaDataLoaded"},{"title":"module:AudioPlayerView.onScreensaverTimeoutLoaded","link":"onScreensaverTimeoutLoaded"},{"title":"module:AudioPlayerView.pageContentChanged","link":"pageContentChanged","description":"Update values on screen when page content changes
"},{"title":"module:AudioPlayerView.playAction","link":"playAction"},{"title":"module:AudioPlayerView.previousClicked","link":"previousClicked"},{"title":"module:AudioPlayerView.processScrubAction","link":"processScrubAction","description":"processScrubAction: Handles +/- seeking for the audio trickplay bar
"},{"title":"module:AudioPlayerView.resetLoopModeToDefault","link":"resetLoopModeToDefault"},{"title":"module:AudioPlayerView.resetSeekbarThumb","link":"resetSeekbarThumb","description":"resetSeekbarThumb: Resets the thumb to the playing position
"},{"title":"module:AudioPlayerView.screenSaverActive","link":"screenSaverActive"},{"title":"module:AudioPlayerView.setBackdropImage","link":"setBackdropImage","description":"Add backdrop image to screen
"},{"title":"module:AudioPlayerView.setLoopButtonImage","link":"setLoopButtonImage"},{"title":"module:AudioPlayerView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:AudioPlayerView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:AudioPlayerView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:AudioPlayerView.setSelectedButtonState","link":"setSelectedButtonState","description":"setSelectedButtonState: Changes the icon state url for the currently selected button
"},{"title":"module:AudioPlayerView.setShuffleIconState","link":"setShuffleIconState"},{"title":"module:AudioPlayerView.setTrackNumberDisplay","link":"setTrackNumberDisplay"},{"title":"module:AudioPlayerView.setupAnimationTasks","link":"setupAnimationTasks"},{"title":"module:AudioPlayerView.setupAudioNode","link":"setupAudioNode","description":"Creates audio node used to play song(s)
"},{"title":"module:AudioPlayerView.setupButtons","link":"setupButtons","description":"Setup playback buttons, default to Play button selected
"},{"title":"module:AudioPlayerView.setupDataTasks","link":"setupDataTasks","description":"Creates tasks to gather data needed to render Scene and play song
"},{"title":"module:AudioPlayerView.setupInfoNodes","link":"setupInfoNodes"},{"title":"module:AudioPlayerView.setupScreenSaver","link":"setupScreenSaver"},{"title":"module:AudioPlayerView.shuffleClicked","link":"shuffleClicked"},{"title":"module:AudioPlayerView.startScreenSaver","link":"startScreenSaver"},{"title":"module:AudioPlayerView.toggleShuffleEnabled","link":"toggleShuffleEnabled"},{"title":"module:AudioTrackListItem","link":"AudioTrackListItem"},{"title":"module:AudioTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:AudioTrackListItem.init","link":"init"},{"title":"module:AudioTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ButtonGroupHoriz","link":"ButtonGroupHoriz"},{"title":"module:ButtonGroupHoriz.init","link":"init"},{"title":"module:ButtonGroupHoriz.onKeyEvent","link":"onKeyEvent"},{"title":"module:ButtonGroupVert","link":"ButtonGroupVert"},{"title":"module:ButtonGroupVert.init","link":"init"},{"title":"module:ButtonGroupVert.onFocusButtonChanged","link":"onFocusButtonChanged"},{"title":"module:ButtonGroupVert.onFocusChanged","link":"onFocusChanged"},{"title":"module:ButtonGroupVert.onKeyEvent","link":"onKeyEvent"},{"title":"module:ChannelData","link":"ChannelData"},{"title":"module:ChannelData.setFields","link":"setFields"},{"title":"module:ChannelData.setPoster","link":"setPoster"},{"title":"module:Clock","link":"Clock"},{"title":"module:Clock.format12HourTime","link":"format12HourTime","description":"format12HourTime: Returns a string with the current time formatted for a 12 hour clock
"},{"title":"module:Clock.format24HourTime","link":"format24HourTime","description":"format24HourTime: Returns a string with the current time formatted for a 24 hour clock
"},{"title":"module:Clock.formatTimeAsString","link":"formatTimeAsString","description":"formatTimeAsString: Returns a string with the current time formatted for either a 12 or 24 hour clock
"},{"title":"module:Clock.init","link":"init"},{"title":"module:Clock.onCurrentTimeTimerFire","link":"onCurrentTimeTimerFire","description":"onCurrentTimeTimerFire: Code that runs every time the currentTimeTimer fires
"},{"title":"module:CollectionData","link":"CollectionData"},{"title":"module:CollectionData.setFields","link":"setFields"},{"title":"module:CollectionData.setPoster","link":"setPoster"},{"title":"module:ConfigData","link":"ConfigData"},{"title":"module:ConfigData.init","link":"init"},{"title":"module:ConfigItem","link":"ConfigItem"},{"title":"module:ConfigItem.init","link":"init"},{"title":"module:ConfigItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ConfigItem.setColors","link":"setColors"},{"title":"module:ConfigList","link":"ConfigList"},{"title":"module:ConfigList.configListShowDialog","link":"configListShowDialog"},{"title":"module:ConfigList.dismiss_dialog","link":"dismiss_dialog"},{"title":"module:ConfigList.init","link":"init"},{"title":"module:ConfigList.onDialogButton","link":"onDialogButton"},{"title":"module:ConfigList.onItemSelected","link":"onItemSelected"},{"title":"module:ConfigList.setData","link":"setData"},{"title":"module:ExtrasItem","link":"ExtrasItem"},{"title":"module:ExtrasItem.focusChanged","link":"focusChanged"},{"title":"module:ExtrasItem.init","link":"init"},{"title":"module:ExtrasItem.showContent","link":"showContent"},{"title":"module:ExtrasRowList","link":"ExtrasRowList"},{"title":"module:ExtrasRowList.addRowSize","link":"addRowSize"},{"title":"module:ExtrasRowList.buildRow","link":"buildRow"},{"title":"module:ExtrasRowList.init","link":"init"},{"title":"module:ExtrasRowList.loadParts","link":"loadParts"},{"title":"module:ExtrasRowList.loadPersonVideos","link":"loadPersonVideos"},{"title":"module:ExtrasRowList.onAdditionalPartsLoaded","link":"onAdditionalPartsLoaded"},{"title":"module:ExtrasRowList.onLikeThisLoaded","link":"onLikeThisLoaded"},{"title":"module:ExtrasRowList.onMoviesLoaded","link":"onMoviesLoaded"},{"title":"module:ExtrasRowList.onPeopleLoaded","link":"onPeopleLoaded"},{"title":"module:ExtrasRowList.onRowItemFocused","link":"onRowItemFocused"},{"title":"module:ExtrasRowList.onRowItemSelected","link":"onRowItemSelected"},{"title":"module:ExtrasRowList.onSeriesLoaded","link":"onSeriesLoaded"},{"title":"module:ExtrasRowList.onShowsLoaded","link":"onShowsLoaded"},{"title":"module:ExtrasRowList.onSpecialFeaturesLoaded","link":"onSpecialFeaturesLoaded"},{"title":"module:ExtrasRowList.updateSize","link":"updateSize"},{"title":"module:FavoriteItemsTask","link":"FavoriteItemsTask"},{"title":"module:FavoriteItemsTask.init","link":"init"},{"title":"module:FavoriteItemsTask.setFavoriteStatus","link":"setFavoriteStatus"},{"title":"module:FolderData","link":"FolderData"},{"title":"module:FolderData.setFields","link":"setFields"},{"title":"module:FolderData.setPoster","link":"setPoster"},{"title":"module:GetFiltersTask","link":"GetFiltersTask"},{"title":"module:GetFiltersTask.getFiltersTask","link":"getFiltersTask"},{"title":"module:GetFiltersTask.init","link":"init"},{"title":"module:GetNextEpisodeTask","link":"GetNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.getNextEpisodeTask","link":"getNextEpisodeTask"},{"title":"module:GetNextEpisodeTask.init","link":"init"},{"title":"module:GetPlaybackInfoTask","link":"GetPlaybackInfoTask"},{"title":"module:GetPlaybackInfoTask.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:GetPlaybackInfoTask.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:GetPlaybackInfoTask.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:GetPlaybackInfoTask.getPlaybackInfoTask","link":"getPlaybackInfoTask","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:GetPlaybackInfoTask.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:GetPlaybackInfoTask.init","link":"init"},{"title":"module:GetShuffleEpisodesTask","link":"GetShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.getShuffleEpisodesTask","link":"getShuffleEpisodesTask"},{"title":"module:GetShuffleEpisodesTask.init","link":"init"},{"title":"module:GridItem","link":"GridItem"},{"title":"module:GridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:GridItem.focusChanging","link":"focusChanging","description":"Use FocusPercent to animate scaling of Poser Image
"},{"title":"module:GridItem.init","link":"init"},{"title":"module:GridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:GridItemSmall","link":"GridItemSmall"},{"title":"module:GridItemSmall.focusChanged","link":"focusChanged"},{"title":"module:GridItemSmall.init","link":"init"},{"title":"module:GridItemSmall.itemContentChanged","link":"itemContentChanged"},{"title":"module:GridItemSmall.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:Home","link":"Home"},{"title":"module:Home.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook called when the screen is hidden by the screen manager
"},{"title":"module:Home.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:Home.init","link":"init"},{"title":"module:Home.loadLibraries","link":"loadLibraries"},{"title":"module:Home.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:Home.refresh","link":"refresh"},{"title":"module:HomeData","link":"HomeData"},{"title":"module:HomeData.setData","link":"setData"},{"title":"module:HomeItem","link":"HomeItem"},{"title":"module:HomeItem.drawProgressBar","link":"drawProgressBar","description":"Draws and animates item progress bar
"},{"title":"module:HomeItem.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:HomeItem.init","link":"init"},{"title":"module:HomeItem.initItemPoster","link":"initItemPoster"},{"title":"module:HomeItem.initItemText","link":"initItemText"},{"title":"module:HomeItem.initItemTextExtra","link":"initItemTextExtra"},{"title":"module:HomeItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:HomeItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and icon when poster loaded
"},{"title":"module:HomeRowItemSizes","link":"HomeRowItemSizes"},{"title":"module:HomeRows","link":"HomeRows"},{"title":"module:HomeRows.addHomeSection","link":"addHomeSection","description":"addHomeSection: Adds a new home section to the home rows.
"},{"title":"module:HomeRows.createContinueWatchingRow","link":"createContinueWatchingRow","description":"createContinueWatchingRow: Creates a row displaying items the user can continue watching
"},{"title":"module:HomeRows.createFavoritesRow","link":"createFavoritesRow","description":"createFavoritesRow: Creates a row displaying items from the user's favorites list
"},{"title":"module:HomeRows.createLatestInRows","link":"createLatestInRows","description":"createLatestInRows: Creates a row displaying latest items in each of the user's libraries
"},{"title":"module:HomeRows.createLibraryRow","link":"createLibraryRow","description":"createLibraryRow: Creates a row displaying the user's libraries
"},{"title":"module:HomeRows.createLiveTVRow","link":"createLiveTVRow","description":"createLiveTVRow: Creates a row displaying the live tv now on section
"},{"title":"module:HomeRows.createNextUpRow","link":"createNextUpRow","description":"createNextUpRow: Creates a row displaying next episodes up to watch
"},{"title":"module:HomeRows.filterNodeArray","link":"filterNodeArray"},{"title":"module:HomeRows.getOriginalSectionIndex","link":"getOriginalSectionIndex","description":"getOriginalSectionIndex: Gets the index of a section from user settings and adds count of currently known latest media sections
"},{"title":"module:HomeRows.getSectionIndex","link":"getSectionIndex","description":"getSectionIndex: Returns index of requested section in home row content
"},{"title":"module:HomeRows.init","link":"init"},{"title":"module:HomeRows.itemSelected","link":"itemSelected"},{"title":"module:HomeRows.loadLibraries","link":"loadLibraries"},{"title":"module:HomeRows.loadingTimerComplete","link":"loadingTimerComplete","description":"loadingTimerComplete: Event handler for when loading wait time has expired
"},{"title":"module:HomeRows.onKeyEvent","link":"onKeyEvent"},{"title":"module:HomeRows.onLibrariesLoaded","link":"onLibrariesLoaded","description":"onLibrariesLoaded: Handler when LoadLibrariesTask returns data
"},{"title":"module:HomeRows.processUserSections","link":"processUserSections","description":"processUserSections: Loop through user's chosen home section settings and generate the content for each row
"},{"title":"module:HomeRows.removeHomeSection","link":"removeHomeSection","description":"removeHomeSection: Removes a home section from the home rows
"},{"title":"module:HomeRows.sectionExists","link":"sectionExists","description":"sectionExists: Checks if passed section exists in home row content
"},{"title":"module:HomeRows.setRowItemSize","link":"setRowItemSize","description":"setRowItemSize: Loops through all home sections and sets the correct item sizes per row
"},{"title":"module:HomeRows.updateContinueWatchingItems","link":"updateContinueWatchingItems","description":"updateContinueWatchingItems: Processes LoadContinueWatchingTask content. Removes, Creates, or Updates continue watching row as needed
"},{"title":"module:HomeRows.updateFavoritesItems","link":"updateFavoritesItems","description":"updateFavoritesItems: Processes LoadFavoritesTask content. Removes, Creates, or Updates favorites row as needed
"},{"title":"module:HomeRows.updateHomeRows","link":"updateHomeRows","description":"updateHomeRows: Update function exposed to outside components
"},{"title":"module:HomeRows.updateLatestItems","link":"updateLatestItems","description":"updateLatestItems: Processes LoadItemsTask content. Removes, Creates, or Updates latest in {library} row as needed
"},{"title":"module:HomeRows.updateNextUpItems","link":"updateNextUpItems","description":"updateNextUpItems: Processes LoadNextUpTask content. Removes, Creates, or Updates next up row as needed
"},{"title":"module:HomeRows.updateOnNowItems","link":"updateOnNowItems","description":"updateOnNowItems: Processes LoadOnNowTask content. Removes, Creates, or Updates latest in on now row as needed
"},{"title":"module:HomeRows.updateSize","link":"updateSize"},{"title":"module:IconButton","link":"IconButton"},{"title":"module:IconButton.init","link":"init"},{"title":"module:IconButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:IconButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:IconButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:IconButton.onIconChanged","link":"onIconChanged"},{"title":"module:IconButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:IconButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:IconButton.onTextChanged","link":"onTextChanged"},{"title":"module:IconButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:IconButton.setIconSize","link":"setIconSize"},{"title":"module:Image","link":"Image"},{"title":"module:Image.ImageURL","link":"ImageURL"},{"title":"module:Image.ItemImages","link":"ItemImages"},{"title":"module:Image.PosterImage","link":"PosterImage"},{"title":"module:Image.UserImageURL","link":"UserImageURL"},{"title":"module:ImageData","link":"ImageData"},{"title":"module:ImageData.setFields","link":"setFields"},{"title":"module:IntegerKeyboard","link":"IntegerKeyboard"},{"title":"module:IntegerKeyboard.init","link":"init"},{"title":"module:IntegerKeyboard.keySelected","link":"keySelected"},{"title":"module:IntegerKeyboard.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid","link":"ItemGrid"},{"title":"module:ItemGrid.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:ItemGrid.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:ItemGrid.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:ItemGrid.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:ItemGrid.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:ItemGrid.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:ItemGrid.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:ItemGrid.init","link":"init"},{"title":"module:ItemGrid.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:ItemGrid.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:ItemGrid.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:ItemGrid.onChannelFocused","link":"onChannelFocused"},{"title":"module:ItemGrid.onChannelSelected","link":"onChannelSelected"},{"title":"module:ItemGrid.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:ItemGrid.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:ItemGrid.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:ItemGrid.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGrid.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:ItemGrid.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:ItemGrid.setBoxsetsOptions","link":"setBoxsetsOptions","description":"Set Boxset view, sort, and filter options
"},{"title":"module:ItemGrid.setDefaultOptions","link":"setDefaultOptions","description":"Set Default view, sort, and filter options
"},{"title":"module:ItemGrid.setLiveTvOptions","link":"setLiveTvOptions","description":"Set Live TV view, sort, and filter options
"},{"title":"module:ItemGrid.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:ItemGrid.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:ItemGrid.setPhotoAlbumOptions","link":"setPhotoAlbumOptions","description":"Set Photo Album view, sort, and filter options
"},{"title":"module:ItemGrid.setTvShowsOptions","link":"setTvShowsOptions","description":"Set TV Show view, sort, and filter options
"},{"title":"module:ItemGrid.showTVGuide","link":"showTVGuide"},{"title":"module:ItemGrid.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:ItemGrid.updateTitle","link":"updateTitle"},{"title":"module:ItemGridOptions","link":"ItemGridOptions"},{"title":"module:ItemGridOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:ItemGridOptions.hideChecklist","link":"hideChecklist"},{"title":"module:ItemGridOptions.init","link":"init"},{"title":"module:ItemGridOptions.isFilterMenuDataValid","link":"isFilterMenuDataValid","description":"Check if data for Filter Menu is valid
"},{"title":"module:ItemGridOptions.onFilterFocusChange","link":"onFilterFocusChange"},{"title":"module:ItemGridOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:ItemGridOptions.optionsSet","link":"optionsSet"},{"title":"module:ItemGridOptions.saveFavoriteItemSelected","link":"saveFavoriteItemSelected"},{"title":"module:ItemGridOptions.setHeartColor","link":"setHeartColor"},{"title":"module:ItemGridOptions.showChecklist","link":"showChecklist"},{"title":"module:ItemGridOptions.toggleFavorite","link":"toggleFavorite"},{"title":"module:Items","link":"Items"},{"title":"module:Items.AppearsOnList","link":"AppearsOnList","description":"Get list of albums an artist appears on
"},{"title":"module:Items.ArtistOverview","link":"ArtistOverview","description":"Music Artist Data
"},{"title":"module:Items.AudioItem","link":"AudioItem","description":"Get Songs that are on an Album
"},{"title":"module:Items.AudioStream","link":"AudioStream"},{"title":"module:Items.BackdropImage","link":"BackdropImage"},{"title":"module:Items.CreateArtistMix","link":"CreateArtistMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.CreateInstantMix","link":"CreateInstantMix","description":"Get Instant Mix based on item
"},{"title":"module:Items.GetIntroVideos","link":"GetIntroVideos","description":"Get Intro Videos for an item
"},{"title":"module:Items.GetSongsByArtist","link":"GetSongsByArtist","description":"Get list of songs belonging to an artist
"},{"title":"module:Items.ItemGetPlaybackInfo","link":"ItemGetPlaybackInfo"},{"title":"module:Items.ItemMetaData","link":"ItemMetaData","description":"MetaData about an item
"},{"title":"module:Items.ItemPostPlaybackInfo","link":"ItemPostPlaybackInfo"},{"title":"module:Items.MusicAlbumList","link":"MusicAlbumList","description":"Get list of albums belonging to an artist
"},{"title":"module:Items.MusicSongList","link":"MusicSongList","description":"Get Songs that are on an Album
"},{"title":"module:Items.PlaylistItemList","link":"PlaylistItemList","description":"Get Items that are under the provided item
"},{"title":"module:Items.TVEpisodeShuffleList","link":"TVEpisodeShuffleList"},{"title":"module:Items.TVEpisodes","link":"TVEpisodes","description":"Returns a list of TV Shows for a given TV Show and season\nAccepts strings for the TV Show Id and the season Id
"},{"title":"module:Items.TVSeasonExtras","link":"TVSeasonExtras","description":"Returns a list of extra features for a TV Show season\nAccepts a string that is a TV Show season id
"},{"title":"module:Items.TVSeasons","link":"TVSeasons","description":"Seasons for a TV Show
"},{"title":"module:Items.searchMedia","link":"searchMedia","description":"Search across all libraries
"},{"title":"module:Items.useTranscodeAudioStream","link":"useTranscodeAudioStream"},{"title":"module:JFButton","link":"JFButton"},{"title":"module:JFButton.init","link":"init"},{"title":"module:JFButton.onTextChanged","link":"onTextChanged","description":"Whenever the text changes, pad both sides with whitespace so we can center the button text
"},{"title":"module:JFButtons","link":"JFButtons"},{"title":"module:JFButtons.focusChanged","link":"focusChanged","description":"Change opacity of the highlighted menu item based on focus
"},{"title":"module:JFButtons.highlightSelected","link":"highlightSelected","description":"Highlight selected menu option
"},{"title":"module:JFButtons.init","link":"init"},{"title":"module:JFButtons.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFButtons.renderChanged","link":"renderChanged","description":"When options are fully displayed, set focus and selected option
"},{"title":"module:JFButtons.selectedIndexChanged","link":"selectedIndexChanged","description":"When Selected Index set, ensure it is the one Focused
"},{"title":"module:JFButtons.showButtons","link":"showButtons"},{"title":"module:JFButtons.updateButtons","link":"updateButtons"},{"title":"module:JFContentItem","link":"JFContentItem"},{"title":"module:JFContentItem.setFields","link":"setFields","description":"Called whenever m.top.json changes.\nIt is expected that each node that extends JFContentItem will override this function
"},{"title":"module:JFGroup","link":"JFGroup"},{"title":"module:JFGroup.init","link":"init"},{"title":"module:JFGroup.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog","link":"JFMessageDialog"},{"title":"module:JFMessageDialog.init","link":"init"},{"title":"module:JFMessageDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFMessageDialog.redraw","link":"redraw"},{"title":"module:JFMessageDialog.updateMessage","link":"updateMessage"},{"title":"module:JFMessageDialog.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang","link":"JFOverhang"},{"title":"module:JFOverhang.init","link":"init"},{"title":"module:JFOverhang.isLogoVisibleChange","link":"isLogoVisibleChange","description":"component boolean field isLogoVisibleChange has changed value
"},{"title":"module:JFOverhang.onVisibleChange","link":"onVisibleChange"},{"title":"module:JFOverhang.resetTime","link":"resetTime"},{"title":"module:JFOverhang.setClockVisibility","link":"setClockVisibility"},{"title":"module:JFOverhang.setRightSeperatorVisibility","link":"setRightSeperatorVisibility"},{"title":"module:JFOverhang.updateOptions","link":"updateOptions"},{"title":"module:JFOverhang.updateTime","link":"updateTime"},{"title":"module:JFOverhang.updateTimeDisplay","link":"updateTimeDisplay"},{"title":"module:JFOverhang.updateTitle","link":"updateTitle"},{"title":"module:JFOverhang.updateUser","link":"updateUser"},{"title":"module:JFScene","link":"JFScene"},{"title":"module:JFScene.disableRemoteChanged","link":"disableRemoteChanged","description":"Triggered when the disableRemote boolean component field is changed
"},{"title":"module:JFScene.init","link":"init"},{"title":"module:JFScene.isLoadingChanged","link":"isLoadingChanged","description":"Triggered when the isLoading boolean component field is changed
"},{"title":"module:JFScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFScreen","link":"JFScreen"},{"title":"module:JFScreen.OnScreenHidden","link":"OnScreenHidden","description":"Function called when the screen is hidden by the screen manager\nIt is expected that screens override this function if required,\nto handle focus any actions required on the screen being hidden
"},{"title":"module:JFScreen.OnScreenShown","link":"OnScreenShown","description":"Function called when the screen is displayed by the screen manager\nIt is expected that screens override this function to handle focus\nmanagmenet and any other actions required on screen shown
"},{"title":"module:JFScreen.init","link":"init"},{"title":"module:JFServer","link":"JFServer"},{"title":"module:JFServer.init","link":"init"},{"title":"module:JFServer.itemContentChanged","link":"itemContentChanged"},{"title":"module:JFServer.onFocusPercentChange","link":"onFocusPercentChange"},{"title":"module:JFServer.setTextColor","link":"setTextColor"},{"title":"module:JFVideo","link":"JFVideo"},{"title":"module:JFVideo.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:JFVideo.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:JFVideo.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:JFVideo.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:JFVideo.init","link":"init"},{"title":"module:JFVideo.loadCaption","link":"loadCaption"},{"title":"module:JFVideo.onAllowCaptionsChange","link":"onAllowCaptionsChange"},{"title":"module:JFVideo.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:JFVideo.onKeyEvent","link":"onKeyEvent"},{"title":"module:JFVideo.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:JFVideo.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:JFVideo.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:JFVideo.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:JFVideo.toggleCaption","link":"toggleCaption"},{"title":"module:JFVideo.updateCaption","link":"updateCaption"},{"title":"module:JFVideo.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:ListPoster","link":"ListPoster"},{"title":"module:ListPoster.focusChanged","link":"focusChanged","description":"Enable title scrolling based on item Focus
"},{"title":"module:ListPoster.init","link":"init"},{"title":"module:ListPoster.itemContentChanged","link":"itemContentChanged"},{"title":"module:ListPoster.updateSize","link":"updateSize"},{"title":"module:LoadChannelsTask","link":"LoadChannelsTask"},{"title":"module:LoadChannelsTask.init","link":"init"},{"title":"module:LoadChannelsTask.loadChannels","link":"loadChannels"},{"title":"module:LoadItemsTask","link":"LoadItemsTask"},{"title":"module:LoadItemsTask.getPersonVideos","link":"getPersonVideos"},{"title":"module:LoadItemsTask.init","link":"init"},{"title":"module:LoadItemsTask.loadItems","link":"loadItems"},{"title":"module:LoadItemsTask2","link":"LoadItemsTask2"},{"title":"module:LoadItemsTask2.init","link":"init"},{"title":"module:LoadItemsTask2.loadItems","link":"loadItems"},{"title":"module:LoadPhotoTask","link":"LoadPhotoTask"},{"title":"module:LoadPhotoTask.init","link":"init"},{"title":"module:LoadPhotoTask.loadItems","link":"loadItems"},{"title":"module:LoadProgramDetailsTask","link":"LoadProgramDetailsTask"},{"title":"module:LoadProgramDetailsTask.init","link":"init"},{"title":"module:LoadProgramDetailsTask.loadProgramDetails","link":"loadProgramDetails"},{"title":"module:LoadScreenSaverTimeoutTask","link":"LoadScreenSaverTimeoutTask"},{"title":"module:LoadScreenSaverTimeoutTask.getScreensaverTimeout","link":"getScreensaverTimeout"},{"title":"module:LoadScreenSaverTimeoutTask.init","link":"init"},{"title":"module:LoadSheduleTask","link":"LoadSheduleTask"},{"title":"module:LoadSheduleTask.init","link":"init"},{"title":"module:LoadSheduleTask.loadSchedule","link":"loadSchedule"},{"title":"module:LoadVideoContentTask","link":"LoadVideoContentTask"},{"title":"module:LoadVideoContentTask.FindPreferredAudioStream","link":"FindPreferredAudioStream"},{"title":"module:LoadVideoContentTask.LoadItems_AddVideoContent","link":"LoadItems_AddVideoContent"},{"title":"module:LoadVideoContentTask.LoadItems_VideoPlayer","link":"LoadItems_VideoPlayer"},{"title":"module:LoadVideoContentTask.addAudioStreamsToVideo","link":"addAudioStreamsToVideo","description":"addAudioStreamsToVideo: Add audio stream data to video
"},{"title":"module:LoadVideoContentTask.addNextEpisodesToQueue","link":"addNextEpisodesToQueue","description":"Add next episodes to the playback queue
"},{"title":"module:LoadVideoContentTask.addSubtitlesToVideo","link":"addSubtitlesToVideo"},{"title":"module:LoadVideoContentTask.addVideoContentURL","link":"addVideoContentURL"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"defaultSubtitleTrack:
"},{"title":"module:LoadVideoContentTask.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"defaultSubtitleTrackFromVid: Identifies the default subtitle track given video id
"},{"title":"module:LoadVideoContentTask.directPlaySupported","link":"directPlaySupported"},{"title":"module:LoadVideoContentTask.getContainerType","link":"getContainerType"},{"title":"module:LoadVideoContentTask.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:LoadVideoContentTask.init","link":"init"},{"title":"module:LoadVideoContentTask.loadItems","link":"loadItems"},{"title":"module:LoadVideoContentTask.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:LoginScene","link":"LoginScene"},{"title":"module:LoginScene.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook.
"},{"title":"module:LoginScene.init","link":"init"},{"title":"module:LoginScene.onKeyEvent","link":"onKeyEvent"},{"title":"module:Main","link":"Main"},{"title":"module:Main.Main","link":"Main"},{"title":"module:MovieData","link":"MovieData"},{"title":"module:MovieData.setContainer","link":"setContainer"},{"title":"module:MovieData.setFields","link":"setFields"},{"title":"module:MovieData.setPoster","link":"setPoster"},{"title":"module:MovieDetails","link":"MovieDetails"},{"title":"module:MovieDetails.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:MovieDetails.SetDefaultAudioTrack","link":"SetDefaultAudioTrack"},{"title":"module:MovieDetails.SetUpAudioOptions","link":"SetUpAudioOptions"},{"title":"module:MovieDetails.SetUpVideoOptions","link":"SetUpVideoOptions"},{"title":"module:MovieDetails.audioOptionsClosed","link":"audioOptionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieDetails.getEndTime","link":"getEndTime"},{"title":"module:MovieDetails.getRuntime","link":"getRuntime"},{"title":"module:MovieDetails.init","link":"init"},{"title":"module:MovieDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:MovieDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieDetails.onMoviePosterSwapAnimationStateChange","link":"onMoviePosterSwapAnimationStateChange","description":"onMoviePosterSwapAnimationStateChange: Handler for changes to m.moviePosterSwapAnimation.state
"},{"title":"module:MovieDetails.onNewPosterImageURIChange","link":"onNewPosterImageURIChange","description":"onNewPosterImageURIChange: Handler for newPosterImageURI param change
"},{"title":"module:MovieDetails.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"onPosterLoadStatusChanged: Handler for changes to m.moviePosterSwap.loadStatus
"},{"title":"module:MovieDetails.round","link":"round"},{"title":"module:MovieDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:MovieDetails.setFieldText","link":"setFieldText"},{"title":"module:MovieDetails.setWatchedColor","link":"setWatchedColor"},{"title":"module:MovieDetails.trailerAvailableChanged","link":"trailerAvailableChanged"},{"title":"module:MovieDetails.videoOptionsClosed","link":"videoOptionsClosed","description":"Check if options were updated and if any reloding is needed...
"},{"title":"module:MovieLibraryView","link":"MovieLibraryView"},{"title":"module:MovieLibraryView.FilterDataLoaded","link":"FilterDataLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MovieLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MovieLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MovieLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MovieLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MovieLibraryView.SetName","link":"SetName","description":"Set Selected Movie Name
"},{"title":"module:MovieLibraryView.SetOfficialRating","link":"SetOfficialRating","description":"Set Selected Movie OfficialRating
"},{"title":"module:MovieLibraryView.SetOverview","link":"SetOverview","description":"Set Selected Movie Overview
"},{"title":"module:MovieLibraryView.SetProductionYear","link":"SetProductionYear","description":"Set Selected Movie ProductionYear
"},{"title":"module:MovieLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MovieLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MovieLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MovieLibraryView.getRuntime","link":"getRuntime"},{"title":"module:MovieLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MovieLibraryView.init","link":"init"},{"title":"module:MovieLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MovieLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MovieLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MovieLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MovieLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MovieLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MovieLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MovieLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MovieLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MovieLibraryView.round","link":"round"},{"title":"module:MovieLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MovieLibraryView.setMoviesOptions","link":"setMoviesOptions","description":"Set Movies view, sort, and filter options
"},{"title":"module:MovieLibraryView.setSelectedOptions","link":"setSelectedOptions","description":"Data to display when options button selected
"},{"title":"module:MovieLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MovieLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MovieOptions","link":"MovieOptions"},{"title":"module:MovieOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:MovieOptions.init","link":"init"},{"title":"module:MovieOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:MovieOptions.optionsSet","link":"optionsSet"},{"title":"module:MusicAlbumData","link":"MusicAlbumData"},{"title":"module:MusicAlbumData.setFields","link":"setFields"},{"title":"module:MusicAlbumData.setPoster","link":"setPoster"},{"title":"module:MusicAlbumSongListData","link":"MusicAlbumSongListData"},{"title":"module:MusicAlbumSongListData.setFields","link":"setFields"},{"title":"module:MusicAlbumSongListData.setPoster","link":"setPoster"},{"title":"module:MusicArtistData","link":"MusicArtistData"},{"title":"module:MusicArtistData.setFields","link":"setFields"},{"title":"module:MusicArtistData.setPoster","link":"setPoster"},{"title":"module:MusicArtistGridItem","link":"MusicArtistGridItem"},{"title":"module:MusicArtistGridItem.focusChanged","link":"focusChanged","description":"Display or hide title Visibility on focus change
"},{"title":"module:MusicArtistGridItem.init","link":"init"},{"title":"module:MusicArtistGridItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:MusicArtistGridItem.onPosterLoadStatusChanged","link":"onPosterLoadStatusChanged","description":"Hide backdrop and text when poster loaded
"},{"title":"module:MusicLibraryView","link":"MusicLibraryView"},{"title":"module:MusicLibraryView.ItemDataLoaded","link":"ItemDataLoaded","description":"Handle loaded data, and add to Grid
"},{"title":"module:MusicLibraryView.LogoImageLoaded","link":"LogoImageLoaded","description":"Logo Image Loaded Event Handler
"},{"title":"module:MusicLibraryView.OnScreenHidden","link":"OnScreenHidden"},{"title":"module:MusicLibraryView.OnScreenShown","link":"OnScreenShown"},{"title":"module:MusicLibraryView.SetAlbumCount","link":"SetAlbumCount","description":"Set Selected Artist Album Count
"},{"title":"module:MusicLibraryView.SetBackground","link":"SetBackground","description":"Set Background Image
"},{"title":"module:MusicLibraryView.SetGenres","link":"SetGenres","description":"Set Selected Artist Genres
"},{"title":"module:MusicLibraryView.SetName","link":"SetName","description":"Set Selected Artist Name
"},{"title":"module:MusicLibraryView.SetSongCount","link":"SetSongCount","description":"Set Selected Artist Song Count
"},{"title":"module:MusicLibraryView.SetUpOptions","link":"SetUpOptions","description":"Data to display when options button selected
"},{"title":"module:MusicLibraryView.alphaSelectedChanged","link":"alphaSelectedChanged"},{"title":"module:MusicLibraryView.getCollectionType","link":"getCollectionType","description":"Return parent collection type
"},{"title":"module:MusicLibraryView.getItemFocused","link":"getItemFocused","description":"Returns Focused Item
"},{"title":"module:MusicLibraryView.inStringArray","link":"inStringArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:MusicLibraryView.init","link":"init"},{"title":"module:MusicLibraryView.loadInitialItems","link":"loadInitialItems","description":"Load initial set of Data
"},{"title":"module:MusicLibraryView.loadMoreData","link":"loadMoreData","description":"Load next set of items
"},{"title":"module:MusicLibraryView.newBGLoaded","link":"newBGLoaded","description":"When Image Loading Status changes
"},{"title":"module:MusicLibraryView.onChannelSelected","link":"onChannelSelected"},{"title":"module:MusicLibraryView.onGenreItemFocused","link":"onGenreItemFocused","description":"Genre Item Focused
"},{"title":"module:MusicLibraryView.onGenreItemSelected","link":"onGenreItemSelected","description":"Genre Item Selected
"},{"title":"module:MusicLibraryView.onItemFocused","link":"onItemFocused","description":"Handle new item being focused
"},{"title":"module:MusicLibraryView.onItemSelected","link":"onItemSelected","description":"Item Selected
"},{"title":"module:MusicLibraryView.onKeyEvent","link":"onKeyEvent"},{"title":"module:MusicLibraryView.onvoiceFilter","link":"onvoiceFilter"},{"title":"module:MusicLibraryView.optionsClosed","link":"optionsClosed","description":"Check if options updated and any reloading required
"},{"title":"module:MusicLibraryView.setFieldText","link":"setFieldText"},{"title":"module:MusicLibraryView.setMusicOptions","link":"setMusicOptions","description":"Set Music view, sort, and filter options
"},{"title":"module:MusicLibraryView.setupNodes","link":"setupNodes"},{"title":"module:MusicLibraryView.swapDone","link":"swapDone","description":"Swap Complete
"},{"title":"module:MusicSongData","link":"MusicSongData"},{"title":"module:MusicSongData.setFields","link":"setFields"},{"title":"module:MusicSongData.setPoster","link":"setPoster"},{"title":"module:OSD","link":"OSD"},{"title":"module:OSD.inactiveCheck","link":"inactiveCheck","description":"inactiveCheck: Checks if the time since last keypress is greater than or equal to the allowed inactive time of the menu.
"},{"title":"module:OSD.init","link":"init"},{"title":"module:OSD.moveOptionControls","link":"moveOptionControls","description":"moveOptionControls: Moves option controls node based on passed pixel values
"},{"title":"module:OSD.onButtonSelected","link":"onButtonSelected","description":"onButtonSelected: Handler for selection of buttons from the menu.
"},{"title":"module:OSD.onEpisodeNumberChanged","link":"onEpisodeNumberChanged","description":"onEpisodeNumberChanged: Handler for changes to m.top.episodeNumber param.
"},{"title":"module:OSD.onEpisodeNumberEndChanged","link":"onEpisodeNumberEndChanged","description":"onEpisodeNumberEndChanged: Handler for changes to m.top.episodeNumberEnd param.
"},{"title":"module:OSD.onFocusChanged","link":"onFocusChanged","description":"onFocusChanged: Handler for changes to the focus of this menu.
"},{"title":"module:OSD.onItemTitleTextChanged","link":"onItemTitleTextChanged","description":"onItemTitleTextChanged: Handler for changes to m.top.itemTitleText param.
"},{"title":"module:OSD.onKeyEvent","link":"onKeyEvent"},{"title":"module:OSD.onLogoImageChanged","link":"onLogoImageChanged","description":"onLogoImageChanged: Handler for changes to m.top.logoImage param.
"},{"title":"module:OSD.onLogoLoadStatusChanged","link":"onLogoLoadStatusChanged","description":"onLogoLoadStatusChanged: Handler for changes to logo image's status.
"},{"title":"module:OSD.onPlaybackStateChanged","link":"onPlaybackStateChanged","description":"onPlaybackStateChanged: Handler for changes to m.top.playbackState param
"},{"title":"module:OSD.onProgressPercentageChanged","link":"onProgressPercentageChanged","description":"onProgressPercentageChanged: Handler for changes to m.top.progressPercentage param
"},{"title":"module:OSD.onSeasonNumberChanged","link":"onSeasonNumberChanged","description":"onSeasonNumberChanged: Handler for changes to m.top.seasonNumber param.
"},{"title":"module:OSD.onVisibleChanged","link":"onVisibleChanged","description":"onVisibleChanged: Handler for changes to the visibility of this menu.
"},{"title":"module:OSD.resetFocusToDefaultButton","link":"resetFocusToDefaultButton","description":"resetFocusToDefaultButton: Reset focus back to the default button
"},{"title":"module:OptionNode","link":"OptionNode"},{"title":"module:OptionNode.init","link":"init"},{"title":"module:OptionsButton","link":"OptionsButton"},{"title":"module:OptionsButton.init","link":"init"},{"title":"module:OptionsButton.press","link":"press"},{"title":"module:OptionsData","link":"OptionsData"},{"title":"module:OptionsData.init","link":"init"},{"title":"module:OptionsData.press","link":"press"},{"title":"module:OptionsData.update_title","link":"update_title"},{"title":"module:OptionsSlider","link":"OptionsSlider"},{"title":"module:OptionsSlider.init","link":"init"},{"title":"module:OptionsSlider.onKeyEvent","link":"onKeyEvent"},{"title":"module:OptionsSlider.setFields","link":"setFields"},{"title":"module:OverviewDialog","link":"OverviewDialog"},{"title":"module:OverviewDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:OverviewDialog.setOverview","link":"setOverview"},{"title":"module:OverviewDialog.setTitle","link":"setTitle"},{"title":"module:PersonData","link":"PersonData"},{"title":"module:PersonData.setFields","link":"setFields"},{"title":"module:PersonData.setPoster","link":"setPoster"},{"title":"module:PersonDetails","link":"PersonDetails"},{"title":"module:PersonDetails.createDialogPallete","link":"createDialogPallete"},{"title":"module:PersonDetails.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PersonDetails.dscrShowFocus","link":"dscrShowFocus"},{"title":"module:PersonDetails.init","link":"init"},{"title":"module:PersonDetails.loadPerson","link":"loadPerson"},{"title":"module:PersonDetails.onButtonGroupEscaped","link":"onButtonGroupEscaped"},{"title":"module:PersonDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PersonDetails.setFavoriteColor","link":"setFavoriteColor"},{"title":"module:PersonDetails.shortDate","link":"shortDate"},{"title":"module:PhotoData","link":"PhotoData"},{"title":"module:PhotoData.setFields","link":"setFields"},{"title":"module:PhotoData.setPoster","link":"setPoster"},{"title":"module:PhotoDetails","link":"PhotoDetails"},{"title":"module:PhotoDetails.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook.\nUsed to ensure tasks are stopped
"},{"title":"module:PhotoDetails.init","link":"init"},{"title":"module:PhotoDetails.isRandomChanged","link":"isRandomChanged","description":"isRandom component field has changed
"},{"title":"module:PhotoDetails.isSlideshowChanged","link":"isSlideshowChanged","description":"isSlideshow component field has changed
"},{"title":"module:PhotoDetails.isValidToContinue","link":"isValidToContinue"},{"title":"module:PhotoDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:PhotoDetails.nextSlide","link":"nextSlide"},{"title":"module:PhotoDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:PhotoDetails.onPhotoLoaded","link":"onPhotoLoaded"},{"title":"module:PhotoDetails.statusUpdate","link":"statusUpdate"},{"title":"module:PlaybackDialog","link":"PlaybackDialog"},{"title":"module:PlaybackDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlayedCheckmark","link":"PlayedCheckmark"},{"title":"module:PlayedCheckmark.init","link":"init"},{"title":"module:PlaylistData","link":"PlaylistData"},{"title":"module:PlaylistData.setFields","link":"setFields"},{"title":"module:PlaylistData.setPoster","link":"setPoster"},{"title":"module:PlaylistView","link":"PlaylistView"},{"title":"module:PlaylistView.adjustScreenForNoOverview","link":"adjustScreenForNoOverview","description":"Adjust scene by removing overview node and showing more songs
"},{"title":"module:PlaylistView.createDialogPallete","link":"createDialogPallete"},{"title":"module:PlaylistView.createFullDscrDlg","link":"createFullDscrDlg"},{"title":"module:PlaylistView.init","link":"init"},{"title":"module:PlaylistView.onDoneLoading","link":"onDoneLoading"},{"title":"module:PlaylistView.onKeyEvent","link":"onKeyEvent"},{"title":"module:PlaylistView.pageContentChanged","link":"pageContentChanged","description":"Set values for displayed values on screen
"},{"title":"module:PlaylistView.setOnScreenTextValues","link":"setOnScreenTextValues","description":"Populate on screen text variables
"},{"title":"module:PlaylistView.setPosterImage","link":"setPosterImage","description":"Set poster image on screen
"},{"title":"module:PlaylistView.setScreenTitle","link":"setScreenTitle","description":"Set screen's title text
"},{"title":"module:PlaylistView.setupMainNode","link":"setupMainNode"},{"title":"module:PlaystateTask","link":"PlaystateTask"},{"title":"module:PlaystateTask.PlaystateDefaults","link":"PlaystateDefaults"},{"title":"module:PlaystateTask.PlaystateUpdate","link":"PlaystateUpdate"},{"title":"module:PlaystateTask.init","link":"init"},{"title":"module:PostTask","link":"PostTask"},{"title":"module:PostTask.asyncPost","link":"asyncPost","description":"Post data and wait for response code
"},{"title":"module:PostTask.empty","link":"empty","description":"Revert PostTask to default state
"},{"title":"module:PostTask.init","link":"init"},{"title":"module:PostTask.postItems","link":"postItems","description":"Main function for PostTask.\nPosts either an array of data\nor a string of data to an API endpoint.\nSaves the response information
"},{"title":"module:ProgramDetails","link":"ProgramDetails"},{"title":"module:ProgramDetails.channelUpdated","link":"channelUpdated"},{"title":"module:ProgramDetails.focusChanged","link":"focusChanged","description":"Show view channel button when item has Focus
"},{"title":"module:ProgramDetails.getDurationStringFromSeconds","link":"getDurationStringFromSeconds","description":"Get program duration string (e.g. 1h 20m)
"},{"title":"module:ProgramDetails.getRelativeDayName","link":"getRelativeDayName","description":"Get relative date name for a date (yesterday, today, tomorrow, or otherwise weekday name )
"},{"title":"module:ProgramDetails.init","link":"init"},{"title":"module:ProgramDetails.onAnimationComplete","link":"onAnimationComplete"},{"title":"module:ProgramDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:ProgramDetails.programUpdated","link":"programUpdated"},{"title":"module:ProgramDetails.setupLabels","link":"setupLabels","description":"Set up Live and Repeat label sizes
"},{"title":"module:ProgramDetails.updateLabels","link":"updateLabels"},{"title":"module:PublicUserData","link":"PublicUserData"},{"title":"module:PublicUserData.init","link":"init"},{"title":"module:QueueManager","link":"QueueManager"},{"title":"module:QueueManager.clear","link":"clear","description":"Clear all content from play queue
"},{"title":"module:QueueManager.clearHold","link":"clearHold","description":"Clear all hold content
"},{"title":"module:QueueManager.deleteAtIndex","link":"deleteAtIndex","description":"Delete item from play queue at passed index
"},{"title":"module:QueueManager.getCount","link":"getCount","description":"Return the number of items in the play queue
"},{"title":"module:QueueManager.getCurrentItem","link":"getCurrentItem","description":"Return the item currently in focus from the play queue
"},{"title":"module:QueueManager.getHold","link":"getHold","description":"Return the items in the hold
"},{"title":"module:QueueManager.getIsShuffled","link":"getIsShuffled","description":"Return whether or not shuffle is enabled
"},{"title":"module:QueueManager.getItemByIndex","link":"getItemByIndex","description":"Return the item in the passed index from the play queue
"},{"title":"module:QueueManager.getItemType","link":"getItemType","description":"getItemType: Returns the media type of the passed item
"},{"title":"module:QueueManager.getPosition","link":"getPosition","description":"Returns current playback position within the queue
"},{"title":"module:QueueManager.getQueue","link":"getQueue","description":"Return the current play queue
"},{"title":"module:QueueManager.getQueueTypes","link":"getQueueTypes","description":"Return the types of items in current play queue
"},{"title":"module:QueueManager.getQueueUniqueTypes","link":"getQueueUniqueTypes","description":"Return the unique types of items in current play queue
"},{"title":"module:QueueManager.getUnshuffledQueue","link":"getUnshuffledQueue","description":"Return original, unshuffled queue
"},{"title":"module:QueueManager.hold","link":"hold","description":"Hold an item
"},{"title":"module:QueueManager.init","link":"init"},{"title":"module:QueueManager.isPrerollActive","link":"isPrerollActive","description":"Return isPrerollActive status
"},{"title":"module:QueueManager.moveBack","link":"moveBack","description":"Move queue position back one
"},{"title":"module:QueueManager.moveForward","link":"moveForward","description":"Move queue position ahead one
"},{"title":"module:QueueManager.peek","link":"peek","description":"Return item at end of play queue without removing
"},{"title":"module:QueueManager.playQueue","link":"playQueue","description":"Play items in queue
"},{"title":"module:QueueManager.pop","link":"pop","description":"Remove item at end of play queue
"},{"title":"module:QueueManager.push","link":"push","description":"Push new items to the play queue
"},{"title":"module:QueueManager.resetQueueItemOrder","link":"resetQueueItemOrder","description":"Reset queue items back to original, unshuffled order
"},{"title":"module:QueueManager.resetShuffle","link":"resetShuffle","description":"Reset shuffle to off state
"},{"title":"module:QueueManager.set","link":"set","description":"Replace play queue with passed array
"},{"title":"module:QueueManager.setPosition","link":"setPosition","description":"Set the queue position
"},{"title":"module:QueueManager.setPrerollStatus","link":"setPrerollStatus","description":"Set prerollActive status
"},{"title":"module:QueueManager.setTopStartingPoint","link":"setTopStartingPoint","description":"Set starting point for top item in the queue
"},{"title":"module:QueueManager.shuffleQueueItems","link":"shuffleQueueItems","description":"Save a copy of the original queue and randomize order of queue items
"},{"title":"module:QueueManager.toggleShuffle","link":"toggleShuffle","description":"Toggle shuffleEnabled state
"},{"title":"module:QueueManager.top","link":"top","description":"Return the fitst item in the play queue
"},{"title":"module:QuickConnect","link":"QuickConnect"},{"title":"module:QuickConnect.init","link":"init"},{"title":"module:QuickConnect.monitorQuickConnect","link":"monitorQuickConnect"},{"title":"module:QuickConnectDialog","link":"QuickConnectDialog"},{"title":"module:QuickConnectDialog.OnAuthenticated","link":"OnAuthenticated"},{"title":"module:QuickConnectDialog.init","link":"init"},{"title":"module:QuickConnectDialog.onButtonSelected","link":"onButtonSelected"},{"title":"module:QuickConnectDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:QuickConnectDialog.quickConnectClosed","link":"quickConnectClosed"},{"title":"module:QuickConnectDialog.quickConnectStatus","link":"quickConnectStatus"},{"title":"module:RadioDialog","link":"RadioDialog"},{"title":"module:RadioDialog.init","link":"init"},{"title":"module:RadioDialog.moveScrollBar","link":"moveScrollBar","description":"Move the popup's scroll bar
"},{"title":"module:RadioDialog.onButtonSelected","link":"onButtonSelected","description":"Event handler for when user selected a button
"},{"title":"module:RadioDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:RadioDialog.onItemFocused","link":"onItemFocused","description":"Event handler for when user's cursor highlights an option in the option list
"},{"title":"module:RadioDialog.onItemSelected","link":"onItemSelected","description":"Once user selected an item, move cursor down to OK button
"},{"title":"module:RadioDialog.onKeyEvent","link":"onKeyEvent"},{"title":"module:RadioDialog.onScrollBarFocus","link":"onScrollBarFocus","description":"If somehow the scrollbar gains focus, set focus back to the option list
"},{"title":"module:RecordProgramTask","link":"RecordProgramTask"},{"title":"module:RecordProgramTask.RecordOrCancelProgram","link":"RecordOrCancelProgram"},{"title":"module:RecordProgramTask.init","link":"init"},{"title":"module:RecordingData","link":"RecordingData"},{"title":"module:RecordingData.setFields","link":"setFields"},{"title":"module:RecordingData.setPoster","link":"setPoster"},{"title":"module:SceneManager","link":"SceneManager"},{"title":"module:SceneManager.clearPreviousScene","link":"clearPreviousScene","description":"Clear previous scene from group stack
"},{"title":"module:SceneManager.clearScenes","link":"clearScenes","description":"Clear all content from group stack
"},{"title":"module:SceneManager.deleteSceneAtIndex","link":"deleteSceneAtIndex","description":"Delete scene from group stack at passed index
"},{"title":"module:SceneManager.dismissDialog","link":"dismissDialog","description":"Close currently displayed dialog
"},{"title":"module:SceneManager.getActiveScene","link":"getActiveScene","description":"Return group at top of stack without removing
"},{"title":"module:SceneManager.init","link":"init"},{"title":"module:SceneManager.isDialogOpen","link":"isDialogOpen","description":"Returns bool indicating if dialog is currently displayed
"},{"title":"module:SceneManager.optionClosed","link":"optionClosed","description":"Return button the user selected
"},{"title":"module:SceneManager.optionDialog","link":"optionDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.optionSelected","link":"optionSelected","description":"Return button the user selected
"},{"title":"module:SceneManager.popScene","link":"popScene","description":"Remove the current group and load the last group from the stack
"},{"title":"module:SceneManager.pushScene","link":"pushScene","description":"Push a new group onto the stack, replacing the existing group on the screen
"},{"title":"module:SceneManager.radioDialog","link":"radioDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.registerOverhangData","link":"registerOverhangData","description":"Register observers for overhang data
"},{"title":"module:SceneManager.resetTime","link":"resetTime","description":"Reset time
"},{"title":"module:SceneManager.settings","link":"settings","description":"Display user/device settings screen
"},{"title":"module:SceneManager.standardDialog","link":"standardDialog","description":"Display dialog to user with an OK button
"},{"title":"module:SceneManager.unregisterOverhangData","link":"unregisterOverhangData","description":"Remove observers for overhang data
"},{"title":"module:SceneManager.updateOptions","link":"updateOptions","description":"Update options availability
"},{"title":"module:SceneManager.updateOverhangTitle","link":"updateOverhangTitle","description":"Update overhang title
"},{"title":"module:SceneManager.updateOverhangVisible","link":"updateOverhangVisible","description":"Update whether the overhang is visible or not
"},{"title":"module:SceneManager.updateUser","link":"updateUser","description":"Update username in overhang
"},{"title":"module:SceneManager.userMessage","link":"userMessage","description":"Display dialog to user with an OK button
"},{"title":"module:ScheduleProgramData","link":"ScheduleProgramData"},{"title":"module:ScheduleProgramData.setFields","link":"setFields"},{"title":"module:ScheduleProgramData.setPoster","link":"setPoster"},{"title":"module:SearchBox","link":"SearchBox"},{"title":"module:SearchBox.init","link":"init"},{"title":"module:SearchBox.searchMedias","link":"searchMedias"},{"title":"module:SearchData","link":"SearchData"},{"title":"module:SearchData.setFields","link":"setFields"},{"title":"module:SearchData.setPoster","link":"setPoster"},{"title":"module:SearchResults","link":"SearchResults"},{"title":"module:SearchResults.init","link":"init"},{"title":"module:SearchResults.loadResults","link":"loadResults"},{"title":"module:SearchResults.onKeyEvent","link":"onKeyEvent"},{"title":"module:SearchResults.searchMedias","link":"searchMedias"},{"title":"module:SearchRow","link":"SearchRow"},{"title":"module:SearchRow.addRow","link":"addRow"},{"title":"module:SearchRow.getData","link":"getData"},{"title":"module:SearchRow.init","link":"init"},{"title":"module:SearchRow.updateSize","link":"updateSize"},{"title":"module:SearchTask","link":"SearchTask"},{"title":"module:SearchTask.init","link":"init"},{"title":"module:SearchTask.search","link":"search"},{"title":"module:SeriesData","link":"SeriesData"},{"title":"module:SeriesData.setFields","link":"setFields"},{"title":"module:SeriesData.setPoster","link":"setPoster"},{"title":"module:ServerDiscoveryTask","link":"ServerDiscoveryTask"},{"title":"module:ServerDiscoveryTask.AddServer","link":"AddServer"},{"title":"module:ServerDiscoveryTask.ProcessClientDiscoveryResponse","link":"ProcessClientDiscoveryResponse"},{"title":"module:ServerDiscoveryTask.ProcessSSDPResponse","link":"ProcessSSDPResponse"},{"title":"module:ServerDiscoveryTask.SendClientDiscoveryBroadcast","link":"SendClientDiscoveryBroadcast"},{"title":"module:ServerDiscoveryTask.SendSSDPBroadcast","link":"SendSSDPBroadcast"},{"title":"module:ServerDiscoveryTask.execute","link":"execute"},{"title":"module:ServerDiscoveryTask.init","link":"init","description":"Task used to discover jellyfin servers on the local network
"},{"title":"module:SetServerScreen","link":"SetServerScreen"},{"title":"module:SetServerScreen.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:SetServerScreen.ScanForServers","link":"ScanForServers"},{"title":"module:SetServerScreen.ScanForServersComplete","link":"ScanForServersComplete"},{"title":"module:SetServerScreen.ShowKeyboard","link":"ShowKeyboard"},{"title":"module:SetServerScreen.clearErrorMessage","link":"clearErrorMessage"},{"title":"module:SetServerScreen.init","link":"init"},{"title":"module:SetServerScreen.onDialogButton","link":"onDialogButton"},{"title":"module:SetServerScreen.onKeyEvent","link":"onKeyEvent"},{"title":"module:ShowScenes","link":"ShowScenes"},{"title":"module:ShowScenes.CreateAlbumView","link":"CreateAlbumView","description":"Shows details on selected album. Description text, image, and list of available songs
"},{"title":"module:ShowScenes.CreateArtistView","link":"CreateArtistView","description":"Shows details on selected artist. Bio, image, and list of available albums
"},{"title":"module:ShowScenes.CreateHomeGroup","link":"CreateHomeGroup"},{"title":"module:ShowScenes.CreateItemGrid","link":"CreateItemGrid"},{"title":"module:ShowScenes.CreateMovieDetailsGroup","link":"CreateMovieDetailsGroup"},{"title":"module:ShowScenes.CreateMovieLibraryView","link":"CreateMovieLibraryView"},{"title":"module:ShowScenes.CreateMusicLibraryView","link":"CreateMusicLibraryView"},{"title":"module:ShowScenes.CreatePersonView","link":"CreatePersonView"},{"title":"module:ShowScenes.CreatePlaylistView","link":"CreatePlaylistView","description":"Shows details on selected playlist. Description text, image, and list of available items
"},{"title":"module:ShowScenes.CreateSearchPage","link":"CreateSearchPage"},{"title":"module:ShowScenes.CreateSeasonDetailsGroup","link":"CreateSeasonDetailsGroup"},{"title":"module:ShowScenes.CreateSeasonDetailsGroupByID","link":"CreateSeasonDetailsGroupByID"},{"title":"module:ShowScenes.CreateSeriesDetailsGroup","link":"CreateSeriesDetailsGroup"},{"title":"module:ShowScenes.CreateServerGroup","link":"CreateServerGroup"},{"title":"module:ShowScenes.CreateSigninGroup","link":"CreateSigninGroup"},{"title":"module:ShowScenes.CreateUserSelectGroup","link":"CreateUserSelectGroup"},{"title":"module:ShowScenes.CreateVideoPlayerGroup","link":"CreateVideoPlayerGroup"},{"title":"module:ShowScenes.DeleteFromServerList","link":"DeleteFromServerList"},{"title":"module:ShowScenes.LoginFlow","link":"LoginFlow"},{"title":"module:ShowScenes.SaveServerList","link":"SaveServerList"},{"title":"module:ShowScenes.SendPerformanceBeacon","link":"SendPerformanceBeacon","description":"Roku Performance monitoring
"},{"title":"module:ShowScenes.playbackOptionDialog","link":"playbackOptionDialog","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:SlideOutButton","link":"SlideOutButton"},{"title":"module:SlideOutButton.init","link":"init"},{"title":"module:SlideOutButton.onBackgroundChanged","link":"onBackgroundChanged"},{"title":"module:SlideOutButton.onFocusChanged","link":"onFocusChanged"},{"title":"module:SlideOutButton.onHeightChanged","link":"onHeightChanged"},{"title":"module:SlideOutButton.onHighlightChanged","link":"onHighlightChanged"},{"title":"module:SlideOutButton.onIconChanged","link":"onIconChanged"},{"title":"module:SlideOutButton.onKeyEvent","link":"onKeyEvent"},{"title":"module:SlideOutButton.onPaddingChanged","link":"onPaddingChanged"},{"title":"module:SlideOutButton.onTextChanged","link":"onTextChanged"},{"title":"module:SlideOutButton.onWidthChanged","link":"onWidthChanged"},{"title":"module:SlideOutButton.setIconSize","link":"setIconSize"},{"title":"module:SongItem","link":"SongItem"},{"title":"module:SongItem.focusChanged","link":"focusChanged"},{"title":"module:SongItem.init","link":"init"},{"title":"module:SongItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:Spinner","link":"Spinner"},{"title":"module:Spinner.init","link":"init"},{"title":"module:StandardDialog","link":"StandardDialog"},{"title":"module:StandardDialog.init","link":"init"},{"title":"module:StandardDialog.onContentDataChanged","link":"onContentDataChanged"},{"title":"module:Subtitles","link":"Subtitles"},{"title":"module:Subtitles.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:Subtitles.changeSubtitleDuringPlayback","link":"changeSubtitleDuringPlayback"},{"title":"module:Subtitles.defaultSubtitleTrack","link":"defaultSubtitleTrack","description":"Identify the default subtitle track\nif "requires_text" is true, only return a track if it is textual\nThis allows forcing text subs, since roku requires transcoding of non-text subs\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.defaultSubtitleTrackFromVid","link":"defaultSubtitleTrackFromVid","description":"Identify the default subtitle track for a given video id\nreturns the server-side track index for the appriate subtitle
"},{"title":"module:Subtitles.getSubtitleLanguages","link":"getSubtitleLanguages"},{"title":"module:Subtitles.getSubtitleSelIdxFromSubIdx","link":"getSubtitleSelIdxFromSubIdx","description":"The subtitle index on the server differs from the index we track locally\nThis function converts the former into the latter
"},{"title":"module:Subtitles.selectSubtitleTrack","link":"selectSubtitleTrack"},{"title":"module:Subtitles.selectSubtitleTrackDialog","link":"selectSubtitleTrackDialog","description":"Present Dialog to user to select subtitle track
"},{"title":"module:Subtitles.setupSubtitle","link":"setupSubtitle","description":"Given a set of subtitles, and a subtitle index (the index on the server, not in the list provided)\nthis will set all relevant settings for roku (mainly closed captions) and return the index of the\nsubtitle track specified, but indexed based on the provided list of subtitles
"},{"title":"module:Subtitles.sortSubtitles","link":"sortSubtitles","description":"Checks available subtitle tracks and puts subtitles in forced, default, and non-default/forced but preferred language at the top
"},{"title":"module:Subtitles.turnoffSubtitles","link":"turnoffSubtitles"},{"title":"module:TVEpisode","link":"TVEpisode"},{"title":"module:TVEpisode.setFields","link":"setFields"},{"title":"module:TVEpisode.setPoster","link":"setPoster"},{"title":"module:TVEpisodeData","link":"TVEpisodeData"},{"title":"module:TVEpisodeData.setFields","link":"setFields"},{"title":"module:TVEpisodeData.setPoster","link":"setPoster"},{"title":"module:TVEpisodeRow","link":"TVEpisodeRow"},{"title":"module:TVEpisodeRow.init","link":"init"},{"title":"module:TVEpisodeRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRow.setData","link":"setData"},{"title":"module:TVEpisodeRow.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRow.updateSize","link":"updateSize"},{"title":"module:TVEpisodeRowWithOptions","link":"TVEpisodeRowWithOptions"},{"title":"module:TVEpisodeRowWithOptions.SetUpAudioOptions","link":"SetUpAudioOptions","description":"List of audio tracks to choose from
"},{"title":"module:TVEpisodeRowWithOptions.SetUpVideoOptions","link":"SetUpVideoOptions","description":"List of video versions to choose from
"},{"title":"module:TVEpisodeRowWithOptions.audioOptionsClosed","link":"audioOptionsClosed"},{"title":"module:TVEpisodeRowWithOptions.init","link":"init"},{"title":"module:TVEpisodeRowWithOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVEpisodeRowWithOptions.rowsDoneLoading","link":"rowsDoneLoading"},{"title":"module:TVEpisodeRowWithOptions.setupRows","link":"setupRows"},{"title":"module:TVEpisodeRowWithOptions.videoOptionsClosed","link":"videoOptionsClosed"},{"title":"module:TVEpisodes","link":"TVEpisodes"},{"title":"module:TVEpisodes.OnScreenShown","link":"OnScreenShown","description":"OnScreenShown: Callback function when view is presented on screen
"},{"title":"module:TVEpisodes.getFocusedItem","link":"getFocusedItem","description":"get the currently focused item
"},{"title":"module:TVEpisodes.init","link":"init"},{"title":"module:TVEpisodes.onKeyEvent","link":"onKeyEvent","description":"Handle navigation input from the remote and act on it
"},{"title":"module:TVEpisodes.setExtraButtonVisibility","link":"setExtraButtonVisibility","description":"Updates the visibility of the Extras button based on if this season has any extra features
"},{"title":"module:TVEpisodes.setSeasonLoading","link":"setSeasonLoading"},{"title":"module:TVEpisodes.updateSeason","link":"updateSeason"},{"title":"module:TVListDetails","link":"TVListDetails"},{"title":"module:TVListDetails.DisplayAudioAvailable","link":"DisplayAudioAvailable","description":"Adds "+N" (e.g. +1) if there is more than one audio track to choose from
"},{"title":"module:TVListDetails.DisplayVideoAvailable","link":"DisplayVideoAvailable","description":"Adds "+N" (e.g. +1) if there is more than one video version to choose from
"},{"title":"module:TVListDetails.SetupAudioDisplay","link":"SetupAudioDisplay","description":"Display current audio_codec and check if there is more than one audio track to choose from...
"},{"title":"module:TVListDetails.focusChanged","link":"focusChanged"},{"title":"module:TVListDetails.getEndTime","link":"getEndTime"},{"title":"module:TVListDetails.getRuntime","link":"getRuntime"},{"title":"module:TVListDetails.init","link":"init"},{"title":"module:TVListDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVListOptions","link":"TVListOptions"},{"title":"module:TVListOptions.buttonFocusChanged","link":"buttonFocusChanged","description":"Switch menu shown when button focus changes
"},{"title":"module:TVListOptions.init","link":"init"},{"title":"module:TVListOptions.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVListOptions.optionsSet","link":"optionsSet"},{"title":"module:TVSeasonData","link":"TVSeasonData"},{"title":"module:TVSeasonData.setFields","link":"setFields"},{"title":"module:TVSeasonData.setPoster","link":"setPoster"},{"title":"module:TVSeasonRow","link":"TVSeasonRow"},{"title":"module:TVSeasonRow.getData","link":"getData"},{"title":"module:TVSeasonRow.init","link":"init"},{"title":"module:TVSeasonRow.updateSize","link":"updateSize"},{"title":"module:TVShowDescription","link":"TVShowDescription"},{"title":"module:TVShowDescription.getEndTime","link":"getEndTime"},{"title":"module:TVShowDescription.getHistory","link":"getHistory"},{"title":"module:TVShowDescription.getRuntime","link":"getRuntime"},{"title":"module:TVShowDescription.init","link":"init"},{"title":"module:TVShowDescription.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDescription.round","link":"round"},{"title":"module:TVShowDescription.setFieldText","link":"setFieldText"},{"title":"module:TVShowDetails","link":"TVShowDetails"},{"title":"module:TVShowDetails.getEndTime","link":"getEndTime"},{"title":"module:TVShowDetails.getHistory","link":"getHistory"},{"title":"module:TVShowDetails.getRuntime","link":"getRuntime"},{"title":"module:TVShowDetails.init","link":"init"},{"title":"module:TVShowDetails.itemContentChanged","link":"itemContentChanged"},{"title":"module:TVShowDetails.onKeyEvent","link":"onKeyEvent"},{"title":"module:TVShowDetails.onShuffleEpisodeDataLoaded","link":"onShuffleEpisodeDataLoaded"},{"title":"module:TVShowDetails.round","link":"round"},{"title":"module:TVShowDetails.setFieldText","link":"setFieldText"},{"title":"module:TextSizeTask","link":"TextSizeTask"},{"title":"module:TextSizeTask.getTextSize","link":"getTextSize"},{"title":"module:TextSizeTask.init","link":"init"},{"title":"module:UserData","link":"UserData"},{"title":"module:UserData.getPreference","link":"getPreference"},{"title":"module:UserData.loadFromJSON","link":"loadFromJSON"},{"title":"module:UserData.loadFromRegistry","link":"loadFromRegistry"},{"title":"module:UserData.removeFromRegistry","link":"removeFromRegistry"},{"title":"module:UserData.saveToRegistry","link":"saveToRegistry"},{"title":"module:UserData.setDataFromJSON","link":"setDataFromJSON"},{"title":"module:UserData.setPreference","link":"setPreference"},{"title":"module:UserData.setServer","link":"setServer"},{"title":"module:UserItem","link":"UserItem"},{"title":"module:UserItem.init","link":"init"},{"title":"module:UserItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserLibrary","link":"UserLibrary"},{"title":"module:UserLibrary.MarkItemFavorite","link":"MarkItemFavorite"},{"title":"module:UserLibrary.MarkItemWatched","link":"MarkItemWatched"},{"title":"module:UserLibrary.UnmarkItemFavorite","link":"UnmarkItemFavorite"},{"title":"module:UserLibrary.UnmarkItemWatched","link":"UnmarkItemWatched"},{"title":"module:UserRow","link":"UserRow"},{"title":"module:UserRow.init","link":"init"},{"title":"module:UserRow.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserRow.setData","link":"setData"},{"title":"module:UserRow.setUser","link":"setUser"},{"title":"module:UserRow.updateSize","link":"updateSize"},{"title":"module:UserSelect","link":"UserSelect"},{"title":"module:UserSelect.OnScreenShown","link":"OnScreenShown","description":"JFScreen hook called when the screen is displayed by the screen manager
"},{"title":"module:UserSelect.init","link":"init"},{"title":"module:UserSelect.itemContentChanged","link":"itemContentChanged"},{"title":"module:UserSelect.onKeyEvent","link":"onKeyEvent"},{"title":"module:UserSelect.redraw","link":"redraw"},{"title":"module:VideoData","link":"VideoData"},{"title":"module:VideoData.setFields","link":"setFields"},{"title":"module:VideoData.setPoster","link":"setPoster"},{"title":"module:VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.AddVideoContent","link":"AddVideoContent"},{"title":"module:VideoPlayer.GetPlaybackInfo","link":"GetPlaybackInfo","description":"Returns an array of playback info to be displayed during playback.\nIn the future, with a custom playback info view, we can return an associated array.
"},{"title":"module:VideoPlayer.GetTranscodingStats","link":"GetTranscodingStats"},{"title":"module:VideoPlayer.PlayIntroVideo","link":"PlayIntroVideo"},{"title":"module:VideoPlayer.VideoPlayer","link":"VideoPlayer"},{"title":"module:VideoPlayer.autoPlayNextEpisode","link":"autoPlayNextEpisode"},{"title":"module:VideoPlayer.directPlaySupported","link":"directPlaySupported"},{"title":"module:VideoPlayer.getAudioFormat","link":"getAudioFormat"},{"title":"module:VideoPlayer.getAudioInfo","link":"getAudioInfo"},{"title":"module:VideoPlayer.getContainerType","link":"getContainerType"},{"title":"module:VideoPlayer.getDisplayBitrate","link":"getDisplayBitrate"},{"title":"module:VideoPlayer.getTranscodeReasons","link":"getTranscodeReasons","description":"Extract array of Transcode Reasons from the content URL
"},{"title":"module:VideoPlayer.havePlaybackInfo","link":"havePlaybackInfo"},{"title":"module:VideoPlayer.startPlayBackOver","link":"startPlayBackOver","description":"Opens dialog asking user if they want to resume video or start playback over only on the home screen
"},{"title":"module:VideoPlayerView","link":"VideoPlayerView"},{"title":"module:VideoPlayerView.ReportPlayback","link":"ReportPlayback","description":"Report playback to server
"},{"title":"module:VideoPlayerView.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"availSubtitleTrackIdx: Returns Roku's index for requested subtitle track
"},{"title":"module:VideoPlayerView.bufferCheck","link":"bufferCheck","description":"Check the the buffering has not hung
"},{"title":"module:VideoPlayerView.checkTimeToDisplayNextEpisode","link":"checkTimeToDisplayNextEpisode","description":"Checks if we need to display the Next Episode button
"},{"title":"module:VideoPlayerView.getCurrentChapterIndex","link":"getCurrentChapterIndex","description":"getCurrentChapterIndex: Finds current chapter index
"},{"title":"module:VideoPlayerView.handleChapterListAction","link":"handleChapterListAction","description":"handleChapterListAction: Handles action to show chapter list
"},{"title":"module:VideoPlayerView.handleChapterSkipAction","link":"handleChapterSkipAction","description":"handleChapterSkipAction: Handles user command to skip chapters in playing video
"},{"title":"module:VideoPlayerView.handleHideAction","link":"handleHideAction","description":"handleHideAction: Handles action to hide OSD menu
"},{"title":"module:VideoPlayerView.handleItemSkipAction","link":"handleItemSkipAction","description":"handleItemSkipAction: Handles user command to skip items
"},{"title":"module:VideoPlayerView.handleShowAudioMenuAction","link":"handleShowAudioMenuAction","description":"handleShowAudioMenuAction: Handles action to show audio selection menu
"},{"title":"module:VideoPlayerView.handleShowSubtitleMenuAction","link":"handleShowSubtitleMenuAction","description":"handleShowSubtitleMenuAction: Handles action to show subtitle selection menu
"},{"title":"module:VideoPlayerView.handleShowVideoInfoPopupAction","link":"handleShowVideoInfoPopupAction","description":"handleShowVideoInfoPopupAction: Handles action to show video info popup
"},{"title":"module:VideoPlayerView.handleVideoPlayPauseAction","link":"handleVideoPlayPauseAction","description":"handleVideoPlayPauseAction: Handles action to either play or pause the video content
"},{"title":"module:VideoPlayerView.hideNextEpisodeButton","link":"hideNextEpisodeButton","description":"Runs hide Next Episode button animation and sets focus back to video
"},{"title":"module:VideoPlayerView.init","link":"init"},{"title":"module:VideoPlayerView.loadCaption","link":"loadCaption","description":"Set caption url to server subtitle track
"},{"title":"module:VideoPlayerView.onAllowCaptionsChange","link":"onAllowCaptionsChange","description":"Only setup caption items if captions are allowed
"},{"title":"module:VideoPlayerView.onAudioIndexChange","link":"onAudioIndexChange","description":"Event handler for when audioIndex changes
"},{"title":"module:VideoPlayerView.onContentChange","link":"onContentChange","description":"Event handler for when video content field changes
"},{"title":"module:VideoPlayerView.onKeyEvent","link":"onKeyEvent"},{"title":"module:VideoPlayerView.onNextEpisodeDataLoaded","link":"onNextEpisodeDataLoaded"},{"title":"module:VideoPlayerView.onOSDAction","link":"onOSDAction","description":"onOSDAction: Process action events from OSD to their respective handlers
"},{"title":"module:VideoPlayerView.onPlaybackErrorButtonSelected","link":"onPlaybackErrorButtonSelected"},{"title":"module:VideoPlayerView.onPlaybackErrorDialogClosed","link":"onPlaybackErrorDialogClosed"},{"title":"module:VideoPlayerView.onPositionChanged","link":"onPositionChanged","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onState","link":"onState","description":"When Video Player state changes
"},{"title":"module:VideoPlayerView.onSubtitleChange","link":"onSubtitleChange","description":"Event handler for when selectedSubtitle changes
"},{"title":"module:VideoPlayerView.onVideoContentLoaded","link":"onVideoContentLoaded"},{"title":"module:VideoPlayerView.populateChapterMenu","link":"populateChapterMenu","description":"populateChapterMenu: ' Parse chapter data from API and appeand to chapter list menu
"},{"title":"module:VideoPlayerView.showNextEpisodeButton","link":"showNextEpisodeButton","description":"Runs Next Episode button animation and sets focus to button
"},{"title":"module:VideoPlayerView.showPlaybackErrorDialog","link":"showPlaybackErrorDialog"},{"title":"module:VideoPlayerView.stateAllowsOSD","link":"stateAllowsOSD","description":"stateAllowsOSD: Check if current video state allows showing the OSD
"},{"title":"module:VideoPlayerView.toggleCaption","link":"toggleCaption","description":"Toggles visibility of custom subtitles and sets captionTask's player state
"},{"title":"module:VideoPlayerView.updateCaption","link":"updateCaption","description":"Removes old subtitle lines and adds new subtitle lines
"},{"title":"module:VideoPlayerView.updateCount","link":"updateCount","description":"Update count down text
"},{"title":"module:VideoTrackListItem","link":"VideoTrackListItem"},{"title":"module:VideoTrackListItem.focusChanged","link":"focusChanged","description":"Scroll description if focused
"},{"title":"module:VideoTrackListItem.init","link":"init"},{"title":"module:VideoTrackListItem.itemContentChanged","link":"itemContentChanged"},{"title":"module:ViewCreator","link":"ViewCreator"},{"title":"module:ViewCreator.CreateAudioPlayerView","link":"CreateAudioPlayerView","description":"Play Audio
"},{"title":"module:ViewCreator.CreateVideoPlayerView","link":"CreateVideoPlayerView","description":"Play Video
"},{"title":"module:ViewCreator.availSubtitleTrackIdx","link":"availSubtitleTrackIdx","description":"Roku translates the info provided in subtitleTracks into availableSubtitleTracks\nIncluding ignoring tracks, if they are not understood, thus making indexing unpredictable.\nThis function translates between our internel selected subtitle index\nand the corresponding index in availableSubtitleTracks.
"},{"title":"module:ViewCreator.onPlaybackInfoLoaded","link":"onPlaybackInfoLoaded","description":"The playback info task has returned data
"},{"title":"module:ViewCreator.onSelectAudioPressed","link":"onSelectAudioPressed","description":"onSelectAudioPressed: Display audio selection dialog
"},{"title":"module:ViewCreator.onSelectPlaybackInfoPressed","link":"onSelectPlaybackInfoPressed","description":"User requested playback info
"},{"title":"module:ViewCreator.onSelectSubtitlePressed","link":"onSelectSubtitlePressed","description":"User requested subtitle selection popup
"},{"title":"module:ViewCreator.onSelectionMade","link":"onSelectionMade","description":"User has selected something from the radioDialog popup
"},{"title":"module:ViewCreator.onStateChange","link":"onStateChange","description":"Playback state change event handlers
"},{"title":"module:ViewCreator.processAudioSelection","link":"processAudioSelection","description":"processAudioSelection: Audio track selection handler
"},{"title":"module:ViewCreator.processSubtitleSelection","link":"processSubtitleSelection"},{"title":"module:WhatsNewDialog","link":"WhatsNewDialog"},{"title":"module:WhatsNewDialog.init","link":"init"},{"title":"module:WhatsNewDialog.setPalette","link":"setPalette"},{"title":"module:baserequest","link":"baserequest"},{"title":"module:baserequest.APIRequest","link":"APIRequest"},{"title":"module:baserequest.authRequest","link":"authRequest","description":"Takes and returns a roUrlTransfer object after adding a Jellyfin "Authorization" header
"},{"title":"module:baserequest.buildAuthHeader","link":"buildAuthHeader","description":"Returns a string containing the "Authorization" header payload
"},{"title":"module:baserequest.buildParams","link":"buildParams","description":"Functions for making requests to the API
"},{"title":"module:baserequest.buildURL","link":"buildURL"},{"title":"module:baserequest.deleteVoid","link":"deleteVoid"},{"title":"module:baserequest.getJson","link":"getJson"},{"title":"module:baserequest.getString","link":"getString"},{"title":"module:baserequest.getVoid","link":"getVoid"},{"title":"module:baserequest.get_url","link":"get_url"},{"title":"module:baserequest.headVoid","link":"headVoid"},{"title":"module:baserequest.postJson","link":"postJson"},{"title":"module:baserequest.postString","link":"postString"},{"title":"module:baserequest.postVoid","link":"postVoid"},{"title":"module:baserequest.setCertificateAuthority","link":"setCertificateAuthority","description":"sets the certificate authority by file path on the passed node
"},{"title":"module:captionTask","link":"captionTask"},{"title":"module:captionTask.fetchCaption","link":"fetchCaption"},{"title":"module:captionTask.init","link":"init"},{"title":"module:captionTask.isTime","link":"isTime"},{"title":"module:captionTask.newLayoutGroup","link":"newLayoutGroup"},{"title":"module:captionTask.newRect","link":"newRect"},{"title":"module:captionTask.newlabel","link":"newlabel"},{"title":"module:captionTask.parseVTT","link":"parseVTT"},{"title":"module:captionTask.setFont","link":"setFont"},{"title":"module:captionTask.toMs","link":"toMs"},{"title":"module:captionTask.updateCaption","link":"updateCaption"},{"title":"module:conditional","link":"conditional"},{"title":"module:conditional.printRegistry","link":"printRegistry","description":"Print out all of the registry contents to the debug log
"},{"title":"module:config","link":"config"},{"title":"module:config.GetConfigTree","link":"GetConfigTree","description":"Read config tree from json config file and return
"},{"title":"module:config.RegistryReadAll","link":"RegistryReadAll","description":"Return all data found inside a registry section
"},{"title":"module:config.findConfigTreeKey","link":"findConfigTreeKey","description":"Recursivly search the config tree for entry with settingname equal to key
"},{"title":"module:config.getRegistrySections","link":"getRegistrySections","description":"Return an array of all the registry section keys
"},{"title":"module:config.getSavedUsers","link":"getSavedUsers","description":"Returns an array of saved users from the registry\nthat belong to the active server
"},{"title":"module:config.get_setting","link":"get_setting","description":""Jellyfin" registry accessors for the default global settings
"},{"title":"module:config.get_user_setting","link":"get_user_setting","description":"User registry accessors for the currently active user
"},{"title":"module:config.registry_delete","link":"registry_delete"},{"title":"module:config.registry_read","link":"registry_read","description":"Generic registry accessors
"},{"title":"module:config.registry_write","link":"registry_write"},{"title":"module:config.set_setting","link":"set_setting"},{"title":"module:config.set_user_setting","link":"set_user_setting"},{"title":"module:config.unset_setting","link":"unset_setting"},{"title":"module:config.unset_user_setting","link":"unset_user_setting"},{"title":"module:deviceCapabilities","link":"deviceCapabilities"},{"title":"module:deviceCapabilities.GetBitRateLimit","link":"GetBitRateLimit"},{"title":"module:deviceCapabilities.GetDirectPlayProfiles","link":"GetDirectPlayProfiles"},{"title":"module:deviceCapabilities.getCodecProfiles","link":"getCodecProfiles"},{"title":"module:deviceCapabilities.getContainerProfiles","link":"getContainerProfiles"},{"title":"module:deviceCapabilities.getDeviceCapabilities","link":"getDeviceCapabilities","description":"Returns the Device Capabilities for Roku.\nAlso prints out the device profile for debugging
"},{"title":"module:deviceCapabilities.getDeviceProfile","link":"getDeviceProfile"},{"title":"module:deviceCapabilities.getMaxHeightArray","link":"getMaxHeightArray"},{"title":"module:deviceCapabilities.getMaxWidthArray","link":"getMaxWidthArray"},{"title":"module:deviceCapabilities.getSubtitleProfiles","link":"getSubtitleProfiles"},{"title":"module:deviceCapabilities.getTranscodingProfiles","link":"getTranscodingProfiles"},{"title":"module:deviceCapabilities.printDeviceProfile","link":"printDeviceProfile","description":"Print out the deviceProfile for debugging
"},{"title":"module:deviceCapabilities.removeDecimals","link":"removeDecimals","description":"Remove all decimals from a string
"},{"title":"module:deviceCapabilities.setPreferredCodec","link":"setPreferredCodec","description":"Takes and returns a comma delimited string of codecs.\nMoves the preferred codec to the front of the string
"},{"title":"module:deviceCapabilities.updateProfileArray","link":"updateProfileArray","description":"Recieves and returns an assArray of supported profiles and levels for each video codec
"},{"title":"module:globals","link":"globals"},{"title":"module:globals.SaveAppToGlobal","link":"SaveAppToGlobal","description":"Save information from roAppInfo to m.global.app
"},{"title":"module:globals.SaveDeviceToGlobal","link":"SaveDeviceToGlobal","description":"Save information from roDeviceInfo to m.global.device
"},{"title":"module:globals.setConstants","link":"setConstants","description":"Set global constants
"},{"title":"module:homeRowItemSizes","link":"homeRowItemSizes"},{"title":"module:migrations","link":"migrations"},{"title":"module:migrations.runGlobalMigrations","link":"runGlobalMigrations","description":"Run all necessary registry mirations on the "global" Jellyfin registry section
"},{"title":"module:migrations.runRegistryUserMigrations","link":"runRegistryUserMigrations"},{"title":"module:misc","link":"misc"},{"title":"module:misc.AssocArrayEqual","link":"AssocArrayEqual"},{"title":"module:misc.arrayHasValue","link":"arrayHasValue","description":"Check if a specific value is inside of an array
"},{"title":"module:misc.createLogoPoster","link":"createLogoPoster","description":"Create and return a Jellyfin logo poster node
"},{"title":"module:misc.createOverhangUser","link":"createOverhangUser"},{"title":"module:misc.createSeperator","link":"createSeperator","description":"Create and return a rectangle node used as a seperator in the overhang
"},{"title":"module:misc.div_ceiling","link":"div_ceiling"},{"title":"module:misc.findNodeBySubtype","link":"findNodeBySubtype"},{"title":"module:misc.formatTime","link":"formatTime","description":"Format time as 12 or 24 hour format based on system clock setting
"},{"title":"module:misc.getButton","link":"getButton"},{"title":"module:misc.getMinutes","link":"getMinutes","description":"Converts ticks to minutes
"},{"title":"module:misc.getMsgPicker","link":"getMsgPicker"},{"title":"module:misc.get_dialog_result","link":"get_dialog_result","description":"Returns the item selected or -1 on backpress or other unhandled closure of dialog.
"},{"title":"module:misc.inArray","link":"inArray","description":"Search string array for search value. Return if it's found
"},{"title":"module:misc.inferServerUrl","link":"inferServerUrl","description":"take an incomplete url string and use it to make educated guesses about\nthe complete url. then tests these guesses to see if it can find a jf server\nreturns the url of the server it found, or an empty string
"},{"title":"module:misc.isAllValid","link":"isAllValid","description":"Returns whether or not all items in passed array are valid
"},{"title":"module:misc.isChainValid","link":"isChainValid","description":"isChainValid: Returns whether or not all the properties in the passed property chain are valid.\nStops evaluating at first found false value
"},{"title":"module:misc.isJellyfinServer","link":"isJellyfinServer","description":"accepts the raw json string of /system/info/public and returns\na boolean indicating if ProductName is "Jellyfin Server"
"},{"title":"module:misc.isLocalhost","link":"isLocalhost","description":"Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
"},{"title":"module:misc.isNodeEvent","link":"isNodeEvent"},{"title":"module:misc.isValid","link":"isValid","description":"Returns whether or not passed value is valid
"},{"title":"module:misc.isValidAndNotEmpty","link":"isValidAndNotEmpty","description":"Returns whether or not passed value is valid and not empty\nAccepts a string, or any countable type (arrays and lists)
"},{"title":"module:misc.lastFocusedChild","link":"lastFocusedChild"},{"title":"module:misc.leftPad","link":"leftPad"},{"title":"module:misc.message_dialog","link":"message_dialog"},{"title":"module:misc.option_dialog","link":"option_dialog"},{"title":"module:misc.parseUrl","link":"parseUrl","description":"Returns an array from a url = [ url, proto, host, port, subdir+params ]\nIf port or subdir are not found, an empty string will be added to the array\nProto must be declared or array will be empty
"},{"title":"module:misc.roundNumber","link":"roundNumber","description":"Rounds number to nearest integer
"},{"title":"module:misc.secondsToHuman","link":"secondsToHuman"},{"title":"module:misc.setFieldTextValue","link":"setFieldTextValue"},{"title":"module:misc.show_dialog","link":"show_dialog"},{"title":"module:misc.shuffleArray","link":"shuffleArray","description":"Takes an array of data, shuffles the order, then returns the array\nuses the Fisher-Yates shuffling algorithm
"},{"title":"module:misc.startLoadingSpinner","link":"startLoadingSpinner","description":"startLoadingSpinner: Start a loading spinner and attach it to the main JFScene.\nDisplays an invisible ProgressDialog node by default to disable keypresses while loading.
"},{"title":"module:misc.stopLoadingSpinner","link":"stopLoadingSpinner"},{"title":"module:misc.ticksToHuman","link":"ticksToHuman"},{"title":"module:misc.toBoolean","link":"toBoolean","description":"convert value to boolean and return value
"},{"title":"module:misc.toString","link":"toString"},{"title":"module:misc.urlCandidates","link":"urlCandidates","description":"this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates\nfor the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated\nfull urls.
"},{"title":"module:misc.versionChecker","link":"versionChecker","description":"Returns whether or not a version number (e.g. 10.7.7) is greater or equal\nto some minimum version allowed (e.g. 10.8.0)
"},{"title":"module:quickplay","link":"quickplay"},{"title":"module:quickplay.album","link":"album","description":"A music album.\nPlay the entire album starting with track 1.
"},{"title":"module:quickplay.artist","link":"artist","description":"A music artist.\nShuffle play all songs by artist.
"},{"title":"module:quickplay.audio","link":"audio","description":"A single audio file.
"},{"title":"module:quickplay.boxset","link":"boxset","description":"A boxset.\nPlay all items inside.
"},{"title":"module:quickplay.collectionFolder","link":"collectionFolder","description":"Quick Play A CollectionFolder.\nShuffle play the items inside\nwith some differences based on collectionType.
"},{"title":"module:quickplay.folder","link":"folder","description":"Quick Play A folder.\nShuffle play all items found
"},{"title":"module:quickplay.multipleSeries","link":"multipleSeries","description":"More than one TV Show Series.\nShuffle play all watched episodes
"},{"title":"module:quickplay.musicVideo","link":"musicVideo","description":"A single music video file.
"},{"title":"module:quickplay.person","link":"person","description":"Quick Play A Person.\nShuffle play all videos found
"},{"title":"module:quickplay.photo","link":"photo","description":"A single photo.
"},{"title":"module:quickplay.photoAlbum","link":"photoAlbum","description":"A photo album.
"},{"title":"module:quickplay.playlist","link":"playlist","description":"Quick Play A Playlist.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.program","link":"program","description":"Quick Play A Live Program
"},{"title":"module:quickplay.pushToQueue","link":"pushToQueue","description":"Takes an array of items and adds to global queue.\nAlso shuffles the playlist if asked
"},{"title":"module:quickplay.season","link":"season","description":"A TV Show Season.\nPlay the first unwatched episode.\nIf none, play the whole season starting with episode 1.
"},{"title":"module:quickplay.series","link":"series","description":"A TV Show Series.\nPlay the first unwatched episode.\nIf none, shuffle play the whole series.
"},{"title":"module:quickplay.tvChannel","link":"tvChannel","description":"Quick Play A TVChannel
"},{"title":"module:quickplay.userView","link":"userView","description":"Quick Play A UserView.\nPlay logic depends on "collectionType".
"},{"title":"module:quickplay.video","link":"video","description":"A single video file.
"},{"title":"module:quickplay.videoContainer","link":"videoContainer","description":"A container with some kind of videos inside of it
"},{"title":"module:schedule","link":"schedule"},{"title":"module:schedule.channelFilterSet","link":"channelFilterSet"},{"title":"module:schedule.channelsearchTermSet","link":"channelsearchTermSet","description":"Voice Search set
"},{"title":"module:schedule.focusProgramDetails","link":"focusProgramDetails","description":"Move the TV Guide Grid down or up depending whether details are selected
"},{"title":"module:schedule.init","link":"init"},{"title":"module:schedule.onChannelsLoaded","link":"onChannelsLoaded","description":"Initial list of channels loaded
"},{"title":"module:schedule.onGridScrolled","link":"onGridScrolled","description":"As user scrolls grid, check if more data requries to be loaded
"},{"title":"module:schedule.onKeyEvent","link":"onKeyEvent"},{"title":"module:schedule.onProgramDetailsLoaded","link":"onProgramDetailsLoaded","description":"Update the Program Details with full information
"},{"title":"module:schedule.onProgramFocused","link":"onProgramFocused"},{"title":"module:schedule.onProgramSelected","link":"onProgramSelected"},{"title":"module:schedule.onRecordChannelSelected","link":"onRecordChannelSelected","description":"Handle user selecting "Record Channel" from Program Details
"},{"title":"module:schedule.onRecordOperationDone","link":"onRecordOperationDone"},{"title":"module:schedule.onRecordSeriesChannelSelected","link":"onRecordSeriesChannelSelected","description":"Handle user selecting "Record Series" from Program Details
"},{"title":"module:schedule.onScheduleLoaded","link":"onScheduleLoaded","description":"When LoadScheduleTask completes (initial or more data) and we have a schedule to display
"},{"title":"module:schedule.onWatchChannelSelected","link":"onWatchChannelSelected","description":"Handle user selecting "Watch Channel" from Program Details
"},{"title":"module:section","link":"section"},{"title":"module:section.init","link":"init"},{"title":"module:section.onFocusChange","link":"onFocusChange"},{"title":"module:section.onIDChange","link":"onIDChange"},{"title":"module:section.onTranslationChange","link":"onTranslationChange"},{"title":"module:section.scrollDownToOnDeck","link":"scrollDownToOnDeck"},{"title":"module:section.scrollOffBottom","link":"scrollOffBottom"},{"title":"module:section.scrollOffOnDeck","link":"scrollOffOnDeck"},{"title":"module:section.scrollOffTop","link":"scrollOffTop"},{"title":"module:section.scrollUpToOnDeck","link":"scrollUpToOnDeck"},{"title":"module:section.showFromBottom","link":"showFromBottom"},{"title":"module:section.showFromTop","link":"showFromTop"},{"title":"module:sectionScroller","link":"sectionScroller"},{"title":"module:sectionScroller.displayedIndexChanged","link":"displayedIndexChanged"},{"title":"module:sectionScroller.init","link":"init"},{"title":"module:sectionScroller.onFocusChange","link":"onFocusChange"},{"title":"module:settings","link":"settings"},{"title":"module:settings.LoadMenu","link":"LoadMenu"},{"title":"module:settings.OnScreenHidden","link":"OnScreenHidden","description":"JFScreen hook that gets ran as needed.\nAssumes settings were changed and they affect the device profile.\nPosts a new device profile to the server using the task thread
"},{"title":"module:settings.boolSettingChanged","link":"boolSettingChanged"},{"title":"module:settings.init","link":"init"},{"title":"module:settings.isFormInFocus","link":"isFormInFocus","description":"Returns true if any of the data entry forms are in focus
"},{"title":"module:settings.onKeyEvent","link":"onKeyEvent"},{"title":"module:settings.onKeyGridEscape","link":"onKeyGridEscape"},{"title":"module:settings.onKeyGridSubmit","link":"onKeyGridSubmit"},{"title":"module:settings.postFinished","link":"postFinished","description":"Triggered by m.postTask after completing a post.\nEmpty the task data when finished.
"},{"title":"module:settings.radioSettingChanged","link":"radioSettingChanged"},{"title":"module:settings.settingFocused","link":"settingFocused"},{"title":"module:settings.settingSelected","link":"settingSelected"},{"title":"module:userauth","link":"userauth"},{"title":"module:userauth.AboutMe","link":"AboutMe"},{"title":"module:userauth.AuthenticateViaQuickConnect","link":"AuthenticateViaQuickConnect"},{"title":"module:userauth.AvailableUsers","link":"AvailableUsers"},{"title":"module:userauth.GetPublicUsers","link":"GetPublicUsers"},{"title":"module:userauth.LoadUserAbilities","link":"LoadUserAbilities"},{"title":"module:userauth.ServerInfo","link":"ServerInfo"},{"title":"module:userauth.SignOut","link":"SignOut"},{"title":"module:userauth.checkQuickConnect","link":"checkQuickConnect"},{"title":"module:userauth.get_token","link":"get_token"},{"title":"module:userauth.initQuickConnect","link":"initQuickConnect"}]}
\ No newline at end of file
diff --git a/docs/api/module-misc.html b/docs/api/module-misc.html
index b31208f9f..491ab4629 100644
--- a/docs/api/module-misc.html
+++ b/docs/api/module-misc.html
@@ -1,3 +1,3 @@
Module: misc On this page- Source
Methods
(static) AssocArrayEqual(Array1, Array2) → {boolean}
Parameters:Name Type Description Array1
object Array2
object
- Source
Returns:- Type:
- boolean
(static) arrayHasValue(arr, value) → {boolean}
Check if a specific value is inside of an array
Parameters:Name Type Description arr
object value
dynamic
- Source
Returns:- Type:
- boolean
(static) createLogoPoster() → {dynamic}
Create and return a Jellyfin logo poster node
- Source
Returns:- Type:
- dynamic
(static) createOverhangUser() → {dynamic}
- Source
Returns:- Type:
- dynamic
(static) createSeperator(id) → {dynamic}
Create and return a rectangle node used as a seperator in the overhang
Parameters:Name Type Description id
string
- Source
Returns:- Type:
- dynamic
(static) div_ceiling(a, b) → {integer}
Parameters:Name Type Description a
integer b
integer
- Source
Returns:- Type:
- integer
(static) findNodeBySubtype(node, subtype) → {dynamic}
Parameters:Name Type Description node
dynamic subtype
dynamic
- Source
Returns:- Type:
- dynamic
(static) formatTime(time) → {string}
Format time as 12 or 24 hour format based on system clock setting
Parameters:Name Type Description time
dynamic
- Source
Returns:- Type:
- string
(static) getButton(msg, subnodeopt) → {object}
Parameters:Name Type Attributes Default Description msg
dynamic subnode
string <optional>
"buttons"
- Source
Returns:- Type:
- object
(static) getMinutes(ticks) → {integer}
Converts ticks to minutes
Parameters:Name Type Description ticks
dynamic
- Source
Returns:- Type:
- integer
(static) getMsgPicker(msg, subnodeopt) → {object}
Parameters:Name Type Attributes Default Description msg
dynamic subnode
string <optional>
""
- Source
Returns:- Type:
- object
(static) get_dialog_result(dialog, port) → {dynamic}
Returns the item selected or -1 on backpress or other unhandled closure of dialog.
Parameters:Name Type Description dialog
dynamic port
dynamic
- Source
Returns:- Type:
- dynamic
(static) inArray(haystack, needle) → {boolean}
Search string array for search value. Return if it's found
Parameters:Name Type Description haystack
dynamic needle
dynamic
- Source
Returns:- Type:
- boolean
(static) inferServerUrl(url) → {string}
take an incomplete url string and use it to make educated guesses about the complete url. then tests these guesses to see if it can find a jf server returns the url of the server it found, or an empty string
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- string
(static) isAllValid(input) → {boolean}
Returns whether or not all items in passed array are valid
Parameters:Name Type Description input
object
- Source
Returns:- Type:
- boolean
(static) isChainValid(root, propertyPath) → {boolean}
isChainValid: Returns whether or not all the properties in the passed property chain are valid. Stops evaluating at first found false value
Parameters:Name Type Description root
dynamic high-level object to test property chain against
propertyPath
string chain of properties under root object to test
- Source
Returns:- indicating if all properties in chain are valid
- Type:
- boolean
(static) isJellyfinServer(systemInfo) → {boolean}
accepts the raw json string of /system/info/public and returns a boolean indicating if ProductName is "Jellyfin Server"
Parameters:Name Type Description systemInfo
object
- Source
Returns:- Type:
- boolean
(static) isLocalhost(url) → {boolean}
Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- boolean
(static) isNodeEvent(msg, field) → {boolean}
Parameters:Name Type Description msg
dynamic field
string
- Source
Returns:- Type:
- boolean
(static) isValid(input) → {boolean}
Returns whether or not passed value is valid
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- boolean
(static) isValidAndNotEmpty(input) → {boolean}
Returns whether or not passed value is valid and not empty Accepts a string, or any countable type (arrays and lists)
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- boolean
(static) lastFocusedChild(obj) → {object}
Parameters:Name Type Description obj
object
- Source
Returns:- Type:
- object
(static) leftPad(base, fill, length) → {string}
Parameters:Name Type Description base
string fill
string length
integer
- Source
Returns:- Type:
- string
(static) message_dialog(messageopt) → {dynamic}
Parameters:Name Type Attributes Default Description message
string <optional>
""
- Source
Returns:- Type:
- dynamic
(static) option_dialog(options, messageopt, defaultSelectionopt) → {integer}
Parameters:Name Type Attributes Default Description options
dynamic message
dynamic <optional>
"" defaultSelection
dynamic <optional>
0
- Source
Returns:- Type:
- integer
(static) parseUrl(url) → {object}
Returns an array from a url = [ url, proto, host, port, subdir+params ] If port or subdir are not found, an empty string will be added to the array Proto must be declared or array will be empty
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- object
(static) roundNumber(f) → {integer}
Rounds number to nearest integer
Parameters:Name Type Description f
float
- Source
Returns:- Type:
- integer
(static) secondsToHuman(totalSeconds, addLeadingMinuteZero) → {string}
Parameters:Name Type Description totalSeconds
integer addLeadingMinuteZero
boolean
- Source
Returns:- Type:
- string
(static) setFieldTextValue(field, value) → {void}
Parameters:Name Type Description field
dynamic value
dynamic
- Source
Returns:- Type:
- void
(static) show_dialog(message, optionsopt, defaultSelectionopt) → {integer}
Parameters:Name Type Attributes Default Description message
string options
dynamic <optional>
[] defaultSelection
dynamic <optional>
0
- Source
Returns:- Type:
- integer
(static) shuffleArray(array) → {object}
Takes an array of data, shuffles the order, then returns the array uses the Fisher-Yates shuffling algorithm
Parameters:Name Type Description array
object
- Source
Returns:- Type:
- object
(static) startLoadingSpinner(disableRemoteopt) → {void}
startLoadingSpinner: Start a loading spinner and attach it to the main JFScene. Displays an invisible ProgressDialog node by default to disable keypresses while loading.
Parameters:Name Type Attributes Default Description disableRemote
boolean <optional>
true
- Source
Returns:- Type:
- void
(static) stopLoadingSpinner() → {void}
- Source
Returns:- Type:
- void
(static) ticksToHuman(ticks) → {string}
Parameters:Name Type Description ticks
longinteger
- Source
Returns:- Type:
- string
(static) toString(input) → {string}
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- string
(static) urlCandidates(input) → {dynamic}
this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates for the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated full urls.
Parameters:Name Type Description input
string
- Source
Returns:- Type:
- dynamic
(static) versionChecker(versionToCheck, minVersionAccepted) → {dynamic}
Returns whether or not a version number (e.g. 10.7.7) is greater or equal to some minimum version allowed (e.g. 10.8.0)
Parameters:Name Type Description versionToCheck
string minVersionAccepted
string
- Source
Returns:- Type:
- dynamic
\ No newline at end of file
+ On this page- Source
Methods
(static) AssocArrayEqual(Array1, Array2) → {boolean}
Parameters:Name Type Description Array1
object Array2
object
- Source
Returns:- Type:
- boolean
(static) arrayHasValue(arr, value) → {boolean}
Check if a specific value is inside of an array
Parameters:Name Type Description arr
object value
dynamic
- Source
Returns:- Type:
- boolean
(static) createLogoPoster() → {dynamic}
Create and return a Jellyfin logo poster node
- Source
Returns:- Type:
- dynamic
(static) createOverhangUser() → {dynamic}
- Source
Returns:- Type:
- dynamic
(static) createSeperator(id) → {dynamic}
Create and return a rectangle node used as a seperator in the overhang
Parameters:Name Type Description id
string
- Source
Returns:- Type:
- dynamic
(static) div_ceiling(a, b) → {integer}
Parameters:Name Type Description a
integer b
integer
- Source
Returns:- Type:
- integer
(static) findNodeBySubtype(node, subtype) → {dynamic}
Parameters:Name Type Description node
dynamic subtype
dynamic
- Source
Returns:- Type:
- dynamic
(static) formatTime(time) → {string}
Format time as 12 or 24 hour format based on system clock setting
Parameters:Name Type Description time
dynamic
- Source
Returns:- Type:
- string
(static) getButton(msg, subnodeopt) → {object}
Parameters:Name Type Attributes Default Description msg
dynamic subnode
string <optional>
"buttons"
- Source
Returns:- Type:
- object
(static) getMinutes(ticks) → {integer}
Converts ticks to minutes
Parameters:Name Type Description ticks
dynamic
- Source
Returns:- Type:
- integer
(static) getMsgPicker(msg, subnodeopt) → {object}
Parameters:Name Type Attributes Default Description msg
dynamic subnode
string <optional>
""
- Source
Returns:- Type:
- object
(static) get_dialog_result(dialog, port) → {dynamic}
Returns the item selected or -1 on backpress or other unhandled closure of dialog.
Parameters:Name Type Description dialog
dynamic port
dynamic
- Source
Returns:- Type:
- dynamic
(static) inArray(haystack, needle) → {boolean}
Search string array for search value. Return if it's found
Parameters:Name Type Description haystack
dynamic needle
dynamic
- Source
Returns:- Type:
- boolean
(static) inferServerUrl(url) → {string}
take an incomplete url string and use it to make educated guesses about the complete url. then tests these guesses to see if it can find a jf server returns the url of the server it found, or an empty string
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- string
(static) isAllValid(input) → {boolean}
Returns whether or not all items in passed array are valid
Parameters:Name Type Description input
object
- Source
Returns:- Type:
- boolean
(static) isChainValid(root, propertyPath) → {boolean}
isChainValid: Returns whether or not all the properties in the passed property chain are valid. Stops evaluating at first found false value
Parameters:Name Type Description root
dynamic high-level object to test property chain against
propertyPath
string chain of properties under root object to test
- Source
Returns:- indicating if all properties in chain are valid
- Type:
- boolean
(static) isJellyfinServer(systemInfo) → {boolean}
accepts the raw json string of /system/info/public and returns a boolean indicating if ProductName is "Jellyfin Server"
Parameters:Name Type Description systemInfo
object
- Source
Returns:- Type:
- boolean
(static) isLocalhost(url) → {boolean}
Returns true if the string is a loopback, such as 'localhost' or '127.0.0.1'
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- boolean
(static) isNodeEvent(msg, field) → {boolean}
Parameters:Name Type Description msg
dynamic field
string
- Source
Returns:- Type:
- boolean
(static) isValid(input) → {boolean}
Returns whether or not passed value is valid
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- boolean
(static) isValidAndNotEmpty(input) → {boolean}
Returns whether or not passed value is valid and not empty Accepts a string, or any countable type (arrays and lists)
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- boolean
(static) lastFocusedChild(obj) → {object}
Parameters:Name Type Description obj
object
- Source
Returns:- Type:
- object
(static) leftPad(base, fill, length) → {string}
Parameters:Name Type Description base
string fill
string length
integer
- Source
Returns:- Type:
- string
(static) message_dialog(messageopt) → {dynamic}
Parameters:Name Type Attributes Default Description message
string <optional>
""
- Source
Returns:- Type:
- dynamic
(static) option_dialog(options, messageopt, defaultSelectionopt) → {integer}
Parameters:Name Type Attributes Default Description options
dynamic message
dynamic <optional>
"" defaultSelection
dynamic <optional>
0
- Source
Returns:- Type:
- integer
(static) parseUrl(url) → {object}
Returns an array from a url = [ url, proto, host, port, subdir+params ] If port or subdir are not found, an empty string will be added to the array Proto must be declared or array will be empty
Parameters:Name Type Description url
string
- Source
Returns:- Type:
- object
(static) roundNumber(f) → {integer}
Rounds number to nearest integer
Parameters:Name Type Description f
float
- Source
Returns:- Type:
- integer
(static) secondsToHuman(totalSeconds, addLeadingMinuteZero) → {string}
Parameters:Name Type Description totalSeconds
integer addLeadingMinuteZero
boolean
- Source
Returns:- Type:
- string
(static) setFieldTextValue(field, value) → {void}
Parameters:Name Type Description field
dynamic value
dynamic
- Source
Returns:- Type:
- void
(static) show_dialog(message, optionsopt, defaultSelectionopt) → {integer}
Parameters:Name Type Attributes Default Description message
string options
dynamic <optional>
[] defaultSelection
dynamic <optional>
0
- Source
Returns:- Type:
- integer
(static) shuffleArray(array) → {object}
Takes an array of data, shuffles the order, then returns the array uses the Fisher-Yates shuffling algorithm
Parameters:Name Type Description array
object
- Source
Returns:- Type:
- object
(static) startLoadingSpinner(disableRemoteopt) → {void}
startLoadingSpinner: Start a loading spinner and attach it to the main JFScene. Displays an invisible ProgressDialog node by default to disable keypresses while loading.
Parameters:Name Type Attributes Default Description disableRemote
boolean <optional>
true
- Source
Returns:- Type:
- void
(static) stopLoadingSpinner() → {void}
- Source
Returns:- Type:
- void
(static) ticksToHuman(ticks) → {string}
Parameters:Name Type Description ticks
longinteger
- Source
Returns:- Type:
- string
(static) toBoolean(value) → {dynamic}
convert value to boolean and return value
Parameters:Name Type Description value
dynamic
- Source
Returns:- Type:
- dynamic
(static) toString(input) → {string}
Parameters:Name Type Description input
dynamic
- Source
Returns:- Type:
- string
(static) urlCandidates(input) → {dynamic}
this is the "educated guess" logic for inferServerUrl that generates a list of complete url's as candidates for the tests in inferServerUrl. takes an incomplete url as an arg and returns a list of extrapolated full urls.
Parameters:Name Type Description input
string
- Source
Returns:- Type:
- dynamic
(static) versionChecker(versionToCheck, minVersionAccepted) → {dynamic}
Returns whether or not a version number (e.g. 10.7.7) is greater or equal to some minimum version allowed (e.g. 10.8.0)
Parameters:Name Type Description versionToCheck
string minVersionAccepted
string
- Source
Returns:- Type:
- dynamic