jellyfin-kodi/resources/lib/initialsetup.py

150 lines
5.2 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
#################################################################################################
import logging
import xbmc
import xbmcgui
import clientinfo
import connectmanager
import connect.connectionmanager as connectionmanager
import userclient
from utils import settings, language as lang, passwordsXML
#################################################################################################
log = logging.getLogger("EMBY."+__name__)
STATE = connectionmanager.ConnectionState
#################################################################################################
class InitialSetup(object):
def __init__(self):
self.addon_id = clientinfo.ClientInfo().get_addon_id()
self.user_client = userclient.UserClient()
self.connectmanager = connectmanager.ConnectManager()
def setup(self):
# Check server, user, direct paths, music, direct stream if not direct path.
2016-06-19 21:24:34 +00:00
dialog = xbmcgui.Dialog()
log.debug("Initial setup called")
if self._server_verification() and settings('userId'):
# Setup is already completed
return
if not self._user_identification():
# User failed to identify
return
##### ADDITIONAL PROMPTS #####
direct_paths = dialog.yesno(heading=lang(30511),
line1=lang(33035),
nolabel=lang(33036),
yeslabel=lang(33037))
if direct_paths:
log.info("User opted to use direct paths")
settings('useDirectPaths', value="1")
# ask for credentials
credentials = dialog.yesno(heading=lang(30517), line1=lang(33038))
if credentials:
log.info("Presenting network credentials dialog")
passwordsXML()
music_disabled = dialog.yesno(heading=lang(29999), line1=lang(33039))
if music_disabled:
log.info("User opted to disable Emby music library")
settings('enableMusic', value="false")
else:
# Only prompt if the user didn't select direct paths for videos
if not direct_paths:
music_access = dialog.yesno(heading=lang(29999), line1=lang(33040))
if music_access:
log.info("User opted to direct stream music")
settings('streamMusic', value="true")
def _server_verification(self):
###$ Begin migration $###
if settings('server') == "":
current_server = self.user_client.get_server()
if current_server is not None:
server = self.connectmanager.get_server(current_server)
2016-09-09 06:33:56 +00:00
log.info("Detected: %s", server)
2016-09-09 06:58:19 +00:00
server_id = server['Servers'][0]['Id']
settings('serverId', value=server_id)
log.info("server migration completed")
2016-10-08 00:11:15 +00:00
self.user_client.get_userid()
self.user_client.get_token()
###$ End migration $###
2016-09-05 00:14:25 +00:00
if settings('server'):
current_state = self.connectmanager.get_state()
2016-09-19 07:57:54 +00:00
if current_state['State'] == STATE['ConnectSignIn']:
# Failed to identify server
return True
2016-09-09 23:12:30 +00:00
2016-09-19 07:57:54 +00:00
for server in current_state['Servers']:
2016-09-05 00:14:25 +00:00
if server['Id'] == settings('serverId'):
2016-09-09 23:12:30 +00:00
# Update token
server['UserId'] = settings('userId') or None
server['AccessToken'] = settings('token') or None
self.connectmanager.update_token(current_state['Servers'], server)
2016-09-05 00:14:25 +00:00
server_address = self.connectmanager.get_address(server)
self._set_server(server_address, server)
2016-09-09 06:58:19 +00:00
log.info("Found server!")
return True
return False
def _user_identification(self):
try:
server = self.connectmanager.select_servers()
log.info("Server: %s", server)
server_address = self.connectmanager.get_address(server)
2016-09-05 00:14:25 +00:00
self._set_server(server_address, server)
if not server.get('AccessToken') and not server.get('UserId'):
user = self.connectmanager.login(server)
log.info("User authenticated: %s", user)
settings('username', value=user['User']['Name'])
self._set_user(user['User']['Id'], user['AccessToken'])
else: # Logged with Emby Connect
user = self.connectmanager.get_state()
settings('connectUsername', value=user['ConnectUser']['Name'])
self._set_user(server['UserId'], server['AccessToken'])
return True
except RuntimeError as error:
log.exception(error)
xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addon_id)
return False
@classmethod
2016-09-05 00:14:25 +00:00
def _set_server(cls, server_address, server):
2016-09-05 00:14:25 +00:00
settings('serverName', value=server['Name'])
settings('serverId', value=server['Id'])
settings('server', value=server_address)
@classmethod
def _set_user(cls, user_id, token):
settings('userId', value=user_id)
settings('token', value=token)