' "Registry" is where Roku stores config ' Read config tree from json config file and return function GetConfigTree() return ParseJSON(ReadAsciiFile("pkg:/settings/settings.json")) end function ' Generic registry accessors function registry_read(key, section = invalid) if section = invalid then return invalid reg = CreateObject("roRegistrySection", section) if reg.exists(key) then return reg.read(key) return invalid end function sub registry_write(key, value, section = invalid) if section = invalid then return reg = CreateObject("roRegistrySection", section) reg.write(key, value) reg.flush() end sub sub registry_delete(key, section = invalid) if section = invalid then return reg = CreateObject("roRegistrySection", section) reg.delete(key) reg.flush() end sub ' "Jellyfin" registry accessors for the default global settings function get_setting(key, default = invalid) value = registry_read(key, "Jellyfin") if value = invalid then return default return value end function sub set_setting(key, value) registry_write(key, value, "Jellyfin") end sub sub unset_setting(key) registry_delete(key, "Jellyfin") end sub ' User registry accessors for the currently active user function get_user_setting(key, default = invalid) if get_setting("active_user") = invalid then return default value = registry_read(key, get_setting("active_user")) if value = invalid ' Check for default in Config Tree configTree = GetConfigTree() configKey = findConfigTreeKey(key, configTree) if configKey <> invalid and configKey.default <> invalid set_user_setting(key, configKey.default) ' Set user setting to default return configKey.default end if return default end if return value end function sub set_user_setting(key, value) if get_setting("active_user") = invalid then return registry_write(key, value, get_setting("active_user")) end sub sub unset_user_setting(key) if get_setting("active_user") = invalid then return registry_delete(key, get_setting("active_user")) end sub ' Recursivly search the config tree for entry with settingname equal to key function findConfigTreeKey(key as string, tree) for each item in tree if item.settingName <> invalid and item.settingName = key then return item if item.children <> invalid and item.children.Count() > 0 result = findConfigTreeKey(key, item.children) if result <> invalid then return result end if end for return invalid end function