Change branding from viv to Jellyfin
|
|
@ -1,5 +1,5 @@
|
|||
# Privacy Policy
|
||||
|
||||
viv does not collect personal information outside of that needed to log in to the specified Jellyfin server. We simply pass this data along to the Jellyfin server. We do not collect, broadcast, nor send this data anywhere but to the Jellyfin server you specify.
|
||||
Jellyfin does not collect personal information outside of that needed to log in to the specified Jellyfin server. We simply pass this data along to the Jellyfin server. We do not collect, broadcast, nor send this data anywhere but to the Jellyfin server you specify.
|
||||
|
||||
Read Jellyfin's Privacy Policy at <https://www.termsfeed.com/privacy-policy/6b05fa49bbfc1bb1aeda960c9e8d2460>
|
||||
|
|
|
|||
17
README.md
|
|
@ -1,15 +1,16 @@
|
|||
<p align="center"><img src="https://raw.githubusercontent.com/1hitsong/viv/master/images/channel-poster_fhd.jpg" style="border: 1px solid #eee; border-radius: 4px" /></p>
|
||||
<p align="center"><img src="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/images/channel-poster_fhd.png" style="border: 1px solid #eee; border-radius: 4px" /></p>
|
||||
|
||||
<h1 align="center">viv</h1>
|
||||
<p align="center">An unofficial <strong>Jellyfin</strong> roku client.</p>
|
||||
<h1 align="center">Jellyfin Roku</h1>
|
||||
<p align="center">An official <strong>Jellyfin</strong> roku client.</p>
|
||||
<p align="center">Navigate your Jellyfin library and watch, listen, and view your media.</p>
|
||||
<p align="center">Cool features include song lyric support, trickplay images, media segment support, downloading subtitles direct from your Roku, and more.</p>
|
||||
<p align="center"><a href="https://channelstore.roku.com/details/80d6198927c29fe1a562d4400a712c63/viv">Roku Channel Store</a></p>
|
||||
<h2 align="center">Part of the <a href="https://jellyfin.org">Jellyfin Project</a></h2>
|
||||
<p align="center"><a href="https://channelstore.roku.com/en-ca/details/4d9e526a7d972d4decf98ea6a84000f7:c617f4902629cc0bd1e1411db1775cf3/jellyfin">Roku Channel Store</a></p>
|
||||
|
||||
<h2>Screenshots</h2>
|
||||
<p align="center">
|
||||
<a href="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/home.jpg" title="Home Screen"><img src="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/home.jpg" style="border: 1px solid #eee;" width="300" alt="Home Screen" /></a>
|
||||
<a href="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/movieDetails.jpg" title="Movie Details"><img src="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/movieDetails.jpg" style="border: 1px solid #eee;" width="300" alt="Movie Details" /></a>
|
||||
<a href="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/musicPlayback.jpg" title="Music Playback"><img src="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/musicPlayback.jpg" style="border: 1px solid #eee;" width="300" alt="Music Playback" /></a>
|
||||
<a href="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/tvLibrary.jpg" title="TV Show Library"><img src="https://raw.githubusercontent.com/1hitsong/viv/master/screenshots/tvLibrary.jpg" style="border: 1px solid #eee;" width="300" alt="TV Show Library" /></a>
|
||||
<a href="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/home.jpg" title="Home Screen"><img src="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/home.jpg" style="border: 1px solid #eee;" width="300" alt="Home Screen" /></a>
|
||||
<a href="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/movieDetails.jpg" title="Movie Details"><img src="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/movieDetails.jpg" style="border: 1px solid #eee;" width="300" alt="Movie Details" /></a>
|
||||
<a href="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/musicPlayback.jpg" title="Music Playback"><img src="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/musicPlayback.jpg" style="border: 1px solid #eee;" width="300" alt="Music Playback" /></a>
|
||||
<a href="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/tvLibrary.jpg" title="TV Show Library"><img src="https://raw.githubusercontent.com/jellyfin/jellyfin-roku/master/screenshots/tvLibrary.jpg" style="border: 1px solid #eee;" width="300" alt="TV Show Library" /></a>
|
||||
</p>
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ sub init()
|
|||
|
||||
if isValid(m.version)
|
||||
m.version.drawingStyles = drawingStyles
|
||||
m.version.text = `viv ${m.global.app.version} - What's New?`
|
||||
m.version.text = `jellyfin ${m.global.app.version} - What's New?`
|
||||
end if
|
||||
|
||||
m.boolSetting = m.top.findNode("boolSetting")
|
||||
|
|
@ -320,7 +320,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
|
|||
if isStringEqual(key, KeyCode.DOWN)
|
||||
if m.settingsMenu.hasFocus()
|
||||
m.version.setfocus(true)
|
||||
m.version.text = `viv ${m.global.app.version} - <b>What's New?</b>`
|
||||
m.version.text = `jellyfin ${m.global.app.version} - <b>What's New?</b>`
|
||||
return true
|
||||
end if
|
||||
end if
|
||||
|
|
@ -328,7 +328,7 @@ function onKeyEvent(key as string, press as boolean) as boolean
|
|||
if m.version.hasFocus()
|
||||
if isStringEqual(key, KeyCode.UP)
|
||||
m.settingsMenu.setfocus(true)
|
||||
m.version.text = `viv ${m.global.app.version} - What's New?`
|
||||
m.version.text = `jellyfin ${m.global.app.version} - What's New?`
|
||||
return true
|
||||
end if
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ repo
|
|||
Repo
|
||||
dev
|
||||
Dev
|
||||
viv
|
||||
assignees
|
||||
HTTPS
|
||||
dropdown
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 42 KiB |
BIN
images/channel-poster_fhd.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 15 KiB |
BIN
images/channel-poster_hd.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 8.9 KiB |
BIN
images/channel-poster_sd.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 88 KiB |
BIN
images/splash-screen_fhd.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 62 KiB |
BIN
images/splash-screen_hd.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 38 KiB |
BIN
images/splash-screen_sd.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
20
manifest
|
|
@ -1,21 +1,21 @@
|
|||
## Channel Details
|
||||
|
||||
title=viv
|
||||
major_version=1
|
||||
minor_version=1
|
||||
build_version=7
|
||||
title=jellyfin
|
||||
major_version=3
|
||||
minor_version=0
|
||||
build_version=0
|
||||
|
||||
### Main Menu Icons / Channel Poster Artwork
|
||||
|
||||
mm_icon_focus_fhd=pkg:/images/channel-poster_fhd_dev.jpg
|
||||
mm_icon_focus_hd=pkg:/images/channel-poster_hd_dev.jpg
|
||||
mm_icon_focus_sd=pkg:/images/channel-poster_sd_dev.jpg
|
||||
mm_icon_focus_fhd=pkg:/images/channel-poster_fhd.png
|
||||
mm_icon_focus_hd=pkg:/images/channel-poster_hd.png
|
||||
mm_icon_focus_sd=pkg:/images/channel-poster_sd.png
|
||||
|
||||
### Splash Screen + Loading Screen Artwork
|
||||
|
||||
splash_screen_fhd=pkg:/images/splash-screen_fhd.jpg
|
||||
splash_screen_hd=pkg:/images/splash-screen_hd.jpg
|
||||
splash_screen_sd=pkg:/images/splash-screen_sd.jpg
|
||||
splash_screen_fhd=pkg:/images/splash-screen_fhd.png
|
||||
splash_screen_hd=pkg:/images/splash-screen_hd.png
|
||||
splash_screen_sd=pkg:/images/splash-screen_sd.png
|
||||
|
||||
splash_min_time=1500
|
||||
|
||||
|
|
|
|||
8
package-lock.json
generated
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"name": "viv",
|
||||
"version": "1.1.7",
|
||||
"name": "jellyfin",
|
||||
"version": "3.0.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "viv",
|
||||
"version": "1.1.7",
|
||||
"name": "jellyfin",
|
||||
"version": "3.0.0",
|
||||
"hasInstallScript": true,
|
||||
"license": "GPL-2.0",
|
||||
"dependencies": {
|
||||
|
|
|
|||
15
package.json
|
|
@ -1,8 +1,8 @@
|
|||
{
|
||||
"name": "viv",
|
||||
"name": "jellyfin",
|
||||
"type": "module",
|
||||
"version": "1.1.7",
|
||||
"description": "Unofficial Roku app for Jellyfin media server",
|
||||
"version": "3.0.0",
|
||||
"description": "Official Roku app for Jellyfin media server",
|
||||
"dependencies": {
|
||||
"@rokucommunity/bslib": "0.1.1",
|
||||
"brighterscript-formatter": "1.7.12"
|
||||
|
|
@ -23,19 +23,18 @@
|
|||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/1hitsong/viv.git"
|
||||
"url": "https://github.com/jellyfin/jellyfin-roku.git"
|
||||
},
|
||||
"keywords": [
|
||||
"jellyfin",
|
||||
"roku",
|
||||
"viv",
|
||||
"music",
|
||||
"movies"
|
||||
],
|
||||
"author": "1hitsong",
|
||||
"author": "Jellyfin",
|
||||
"license": "GPL-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/1hitsong/viv"
|
||||
"url": "https://github.com/jellyfin/jellyfin-roku"
|
||||
},
|
||||
"homepage": "https://github.com/1hitsong/viv"
|
||||
"homepage": "https://github.com/jellyfin/jellyfin-roku"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
"children": [
|
||||
{
|
||||
"title": "Remember Me?",
|
||||
"description": "Remember the currently logged in user and try to log them in again next time you start viv.",
|
||||
"description": "Remember the currently logged in user and try to log them in again next time you start Jellyfin.",
|
||||
"settingName": "global.rememberme",
|
||||
"type": "bool",
|
||||
"default": "true"
|
||||
|
|
@ -149,11 +149,11 @@
|
|||
},
|
||||
{
|
||||
"title": "Media Segment Actions",
|
||||
"description": "Settings relating to how viv should handle media segments.",
|
||||
"description": "Settings relating to how Jellyfin should handle media segments.",
|
||||
"children": [
|
||||
{
|
||||
"title": "Commercial Segments",
|
||||
"description": "What action should viv take for commercial segments? ",
|
||||
"description": "What action should Jellyfin take for commercial segments? ",
|
||||
"settingName": "playback.mediasegments.commercial",
|
||||
"type": "radio",
|
||||
"default": "none",
|
||||
|
|
@ -174,7 +174,7 @@
|
|||
},
|
||||
{
|
||||
"title": "Intro Segments",
|
||||
"description": "What action should viv take for intro segments? ",
|
||||
"description": "What action should Jellyfin take for intro segments? ",
|
||||
"settingName": "playback.mediasegments.intro",
|
||||
"type": "radio",
|
||||
"default": "asktoskip",
|
||||
|
|
@ -195,7 +195,7 @@
|
|||
},
|
||||
{
|
||||
"title": "Outro Segments",
|
||||
"description": "What action should viv take for outro segments? ",
|
||||
"description": "What action should Jellyfin take for outro segments? ",
|
||||
"settingName": "playback.mediasegments.outro",
|
||||
"type": "radio",
|
||||
"default": "asktoskip",
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
},
|
||||
{
|
||||
"title": "Preview Segments",
|
||||
"description": "What action should viv take for preview segments? ",
|
||||
"description": "What action should Jellyfin take for preview segments? ",
|
||||
"settingName": "playback.mediasegments.preview",
|
||||
"type": "radio",
|
||||
"default": "none",
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
},
|
||||
{
|
||||
"title": "Recap Segments",
|
||||
"description": "What action should viv take for recap segments? ",
|
||||
"description": "What action should Jellyfin take for recap segments? ",
|
||||
"settingName": "playback.mediasegments.recap",
|
||||
"type": "radio",
|
||||
"default": "none",
|
||||
|
|
@ -374,7 +374,7 @@
|
|||
},
|
||||
{
|
||||
"title": "Hide Clock",
|
||||
"description": "Hide all clocks in viv. Viv will need to be closed and reopened for changes to take effect.",
|
||||
"description": "Hide all clocks in Jellyfin. Jellyfin will need to be closed and reopened for changes to take effect.",
|
||||
"settingName": "ui.design.hideclock",
|
||||
"type": "bool",
|
||||
"default": "false"
|
||||
|
|
@ -395,21 +395,21 @@
|
|||
},
|
||||
{
|
||||
"title": "Show What's New Popup",
|
||||
"description": "Show What's New popup when viv is updated to a new version.",
|
||||
"description": "Show What's New popup when Jellyfin is updated to a new version.",
|
||||
"settingName": "load.allowwhatsnew",
|
||||
"type": "bool",
|
||||
"default": "true"
|
||||
},
|
||||
{
|
||||
"title": "Use Splashscreen as Home Background",
|
||||
"description": "Use generated splashscreen image as viv's home background. Viv will need to be closed and reopened for change to take effect.",
|
||||
"description": "Use generated splashscreen image as Jellyfin's home background. Jellyfin will need to be closed and reopened for change to take effect.",
|
||||
"settingName": "ui.home.splashBackground",
|
||||
"type": "bool",
|
||||
"default": "false"
|
||||
},
|
||||
{
|
||||
"title": "Use Web Client's Home Section Arrangement",
|
||||
"description": "Make the arrangement of the Roku home view sections match the web client's home screen. Viv will need to be closed and reopened for change to take effect.",
|
||||
"description": "Make the arrangement of the Roku home view sections match the web client's home screen. Jellyfin will need to be closed and reopened for change to take effect.",
|
||||
"settingName": "ui.home.useWebSectionArrangement",
|
||||
"type": "bool",
|
||||
"default": "true"
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ end function
|
|||
' Returns a string containing the "Authorization" header payload
|
||||
function buildAuthHeader() as string
|
||||
QUOTE = Chr(34)
|
||||
auth = "MediaBrowser" + " Client=" + QUOTE + "viv" + QUOTE
|
||||
auth = "MediaBrowser" + " Client=" + QUOTE + "Jellyfin Roku" + QUOTE
|
||||
auth = auth + ", Device=" + QUOTE + m.global.device.name + " (" + m.global.device.model + ")" + QUOTE
|
||||
auth = auth + ", Version=" + QUOTE + m.global.app.version + QUOTE
|
||||
|
||||
|
|
|
|||
|
|
@ -50,19 +50,19 @@ function getRegistrySections() as object
|
|||
return registry.GetSectionList()
|
||||
end function
|
||||
|
||||
' "Viv" registry accessors for the default global settings
|
||||
' "Jellyfin" registry accessors for the default global settings
|
||||
function get_setting(key, defaultValue = invalid)
|
||||
value = registry_read(key, "viv")
|
||||
value = registry_read(key, "Jellyfin")
|
||||
if value = invalid then return defaultValue
|
||||
return value
|
||||
end function
|
||||
|
||||
sub set_setting(key, value)
|
||||
registry_write(key, value, "viv")
|
||||
registry_write(key, value, "Jellyfin")
|
||||
end sub
|
||||
|
||||
sub unset_setting(key)
|
||||
registry_delete(key, "viv")
|
||||
registry_delete(key, "Jellyfin")
|
||||
end sub
|
||||
|
||||
' User registry accessors for the currently active user
|
||||
|
|
@ -105,7 +105,7 @@ function getSavedUsers() as object
|
|||
|
||||
savedUsers = []
|
||||
for each section in registrySections
|
||||
if LCase(section) <> "viv"
|
||||
if LCase(section) <> "jellyfin"
|
||||
savedUsers.push(section)
|
||||
end if
|
||||
end for
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ end function
|
|||
function getDeviceProfile() as object
|
||||
globalDevice = m.global.device
|
||||
return {
|
||||
"Name": "viv",
|
||||
"Name": "Official Roku Client",
|
||||
"Id": globalDevice.id,
|
||||
"Identification": {
|
||||
"FriendlyName": globalDevice.friendlyName,
|
||||
|
|
|
|||
|
|
@ -389,7 +389,7 @@ namespace session
|
|||
' Grab global vars from registry and overwrite defaults
|
||||
sub LoadGlobals()
|
||||
' search main registry block for all keys that start with "global."
|
||||
jfRegistry = RegistryReadAll("viv")
|
||||
jfRegistry = RegistryReadAll("Jellyfin")
|
||||
for each item in jfRegistry
|
||||
if Left(item, 7) = "global."
|
||||
session.user.settings.Save(item, get_setting(item))
|
||||
|
|
|
|||