client.py - remove "auth" & connection_manager.py - remove __shortcuts__ & __getitem__

This commit is contained in:
TrueTechy 2019-09-07 17:11:56 +01:00
commit 66622f0195
15 changed files with 78 additions and 80 deletions

View file

@ -152,7 +152,9 @@ class Connect(object):
settings('username', self.user['Name']) settings('username', self.user['Name'])
if 'PrimaryImageTag' in self.user: if 'PrimaryImageTag' in self.user:
window('JellyfinUserImage', api.API(self.user, client['auth/server-address']).get_user_artwork(self.user['Id'])) server_data = client.auth.get_server_info(client.auth.server_id)
server_address = client.auth.get_server_address(server_data, server_data['LastConnectionMode'])
window('JellyfinUserImage', api.API(self.user, server_address).get_user_artwork(self.user['Id']))
def select_servers(self, state=None): def select_servers(self, state=None):
@ -213,8 +215,9 @@ class Connect(object):
def login(self): def login(self):
users = self.connect_manager['public-users'] users = self.connect_manager.get_public_users()
server = self.connect_manager['server-address'] server_data = self.connect_manager.get_server_info(self.connect_manager.server_id)
server = self.connect_manager.get_server_address(server_data, server_data['LastConnectionMode'])
if not users: if not users:
try: try:
@ -236,7 +239,7 @@ class Connect(object):
return self.login_manual(username) return self.login_manual(username)
except RuntimeError: pass except RuntimeError: pass
else: else:
return self.connect_manager['login'](server, username) return self.connect_manager.login(server, username)
elif dialog.is_manual_login(): elif dialog.is_manual_login():
try: try:

View file

@ -118,9 +118,10 @@ class LoginManual(xbmcgui.WindowXMLDialog):
def _login(self, username, password): def _login(self, username, password):
mode = self.connect_manager['server-mode'] mode = self.connect_manager.get_server_info(self.connect_manager.server_id)['LastConnectionMode']
server = self.connect_manager['server-address'] server_data = self.connect_manager.get_server_info(self.connect_manager.server_id)
result = self.connect_manager['login'](server, username, password) server = self.connect_manager.get_server_address(server_data, server_data['LastConnectionMode'])
result = self.connect_manager.login(server, username, password)
if not result: if not result:
self._error(ERROR['Invalid'], _('invalid_auth')) self._error(ERROR['Invalid'], _('invalid_auth'))

View file

@ -116,7 +116,7 @@ class ServerConnect(xbmcgui.WindowXMLDialog):
self.message_box.setVisibleCondition('true') self.message_box.setVisibleCondition('true')
self.busy.setVisibleCondition('true') self.busy.setVisibleCondition('true')
result = self.connect_manager['connect-to-server'](server) result = self.connect_manager.connect_to_server(server)
if result['State'] == CONNECTION_STATE['Unavailable']: if result['State'] == CONNECTION_STATE['Unavailable']:
self.busy.setVisibleCondition('false') self.busy.setVisibleCondition('false')

View file

@ -118,7 +118,7 @@ class ServerManual(xbmcgui.WindowXMLDialog):
server_address = "%s:%s" % (server, port) if port else server server_address = "%s:%s" % (server, port) if port else server
self._message("%s %s..." % (_(30610), server_address)) self._message("%s %s..." % (_(30610), server_address))
result = self.connect_manager['manual-server'](server_address) result = self.connect_manager.connect_to_address(server_address)
if result['State'] == CONNECTION_STATE['Unavailable']: if result['State'] == CONNECTION_STATE['Unavailable']:
self._message(_(30609)) self._message(_(30609))

View file

@ -55,7 +55,7 @@ class JellyfinClient(object):
LOG.info("User is authenticated.") LOG.info("User is authenticated.")
self.logged_in = True self.logged_in = True
self.callback("ServerOnline", {'Id': self['auth/server-id']}) self.callback("ServerOnline", {'Id': self.auth.server_id})
state['Credentials'] = self.get_credentials() state['Credentials'] = self.get_credentials()
@ -91,7 +91,4 @@ class JellyfinClient(object):
elif key.startswith('callback'): elif key.startswith('callback'):
return self.callback_ws if 'ws' in key else self.callback return self.callback_ws if 'ws' in key else self.callback
elif key.startswith('auth'):
return self.auth.__shortcuts__(key.replace('auth/', "", 1))
return return

View file

@ -57,48 +57,6 @@ class ConnectionManager(object):
self.http = HTTP(client) self.http = HTTP(client)
def __shortcuts__(self, key):
LOG.debug("__shortcuts__(%r)", key)
if key == "clear":
return self.clear_data
elif key == "servers":
return self.get_available_servers()
elif key in ("reconnect", "refresh"):
return self.connect
elif key == "login":
return self.login
elif key == "server":
return self.get_server_info(self.server_id)
elif key == "server-id":
return self.server_id
elif key == "server-version":
return self.server_version
elif key == "user-id":
return self.jellyfin_user_id()
elif key == "public-users":
return self.get_public_users()
elif key == "token":
return self.jellyfin_token()
elif key == "manual-server":
return self.connect_to_address
elif key == "connect-to-server":
return self.connect_to_server
elif key == "server-address":
server = self.get_server_info(self.server_id)
return get_server_address(server, server['LastConnectionMode'])
elif key == "revoke-token":
return self.revoke_token()
elif key == "server-mode":
server = self.get_server_info(self.server_id)
return server['LastConnectionMode']
return
def __getitem__(self, key):
LOG.debug("__getitem__(%r)", key)
return self.__shortcuts__(key)
def clear_data(self): def clear_data(self):
LOG.info("connection manager clearing data") LOG.info("connection manager clearing data")
@ -219,6 +177,14 @@ class ConnectionManager(object):
LOG.info("beginning connection tests") LOG.info("beginning connection tests")
return self._test_next_connection_mode(tests, 0, server, options) return self._test_next_connection_mode(tests, 0, server, options)
def get_server_address(self, server, mode): #TODO: De-duplicated (Duplicated from above when getting rid of shortcuts)
modes = {
CONNECTION_MODE['Local']: server.get('LocalAddress'),
CONNECTION_MODE['Manual']: server.get('ManualAddress')
}
return modes.get(mode) or server.get('ManualAddress', server.get('LocalAddress'))
def connect(self, options={}): def connect(self, options={}):
LOG.info("Begin connect") LOG.info("Begin connect")

View file

@ -127,7 +127,7 @@ class HTTP(object):
raise HTTPException("AccessRestricted", error) raise HTTPException("AccessRestricted", error)
else: else:
self.client['callback']("Unauthorized", {'ServerId': self.config.data['auth.server-id']}) self.client['callback']("Unauthorized", {'ServerId': self.config.data['auth.server-id']})
self.client['auth/revoke-token'] self.client.auth.revoke_token()
raise HTTPException("Unauthorized", error) raise HTTPException("Unauthorized", error)

View file

@ -89,7 +89,7 @@ class WSClient(threading.Thread):
return return
if not self.client.config.data['app.default']: if not self.client.config.data['app.default']:
data['ServerId'] = self.client['auth/server-id'] data['ServerId'] = self.client.auth.server_id
self.client['callback_ws'](message['MessageType'], data) self.client['callback_ws'](message['MessageType'], data)

View file

@ -145,7 +145,8 @@ class Monitor(xbmc.Monitor):
elif method == 'GetServerAddress': elif method == 'GetServerAddress':
server_address = server['auth/server-address'] server_data = server.auth.get_server_info(server.auth.server_id)
server_address = server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
self.void_responder(data, server_address) self.void_responder(data, server_address)
elif method == 'GetPlaybackInfo': elif method == 'GetPlaybackInfo':
@ -160,7 +161,7 @@ class Monitor(xbmc.Monitor):
elif method == 'GetToken': elif method == 'GetToken':
token = server['auth/token'] token = server.auth.jellyfin_token()
self.void_responder(data, token) self.void_responder(data, token)
elif method == 'GetSession': elif method == 'GetSession':
@ -297,7 +298,7 @@ class Monitor(xbmc.Monitor):
self.additional_users(server) self.additional_users(server)
def post_capabilities(self, server): def post_capabilities(self, server):
LOG.info("--[ post capabilities/%s ]", server['auth/server-id']) LOG.info("--[ post capabilities/%s ]", server.auth.server_id)
server.jellyfin.post_capabilities({ server.jellyfin.post_capabilities({
'PlayableMediaTypes': "Audio,Video", 'PlayableMediaTypes': "Audio,Video",

View file

@ -54,7 +54,9 @@ class Movies(KodiDb):
''' If item does not exist, entry will be added. ''' If item does not exist, entry will be added.
If item exists, entry will be updated. If item exists, entry will be updated.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Movie') obj = self.objects.map(item, 'Movie')
update = True update = True
@ -213,7 +215,9 @@ class Movies(KodiDb):
Process movies inside boxset. Process movies inside boxset.
Process removals from boxset. Process removals from boxset.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Boxset') obj = self.objects.map(item, 'Boxset')
obj['Overview'] = API.get_overview(obj['Overview']) obj['Overview'] = API.get_overview(obj['Overview'])
@ -291,7 +295,9 @@ class Movies(KodiDb):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks ''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
Poster with progress bar Poster with progress bar
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'MovieUserData') obj = self.objects.map(item, 'MovieUserData')
try: try:

View file

@ -56,7 +56,9 @@ class Music(KodiDb):
''' If item does not exist, entry will be added. ''' If item does not exist, entry will be added.
If item exists, entry will be updated. If item exists, entry will be updated.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Artist') obj = self.objects.map(item, 'Artist')
update = True update = True
@ -125,7 +127,9 @@ class Music(KodiDb):
''' Update object to kodi. ''' Update object to kodi.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Album') obj = self.objects.map(item, 'Album')
update = True update = True
@ -234,7 +238,9 @@ class Music(KodiDb):
''' Update object to kodi. ''' Update object to kodi.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Song') obj = self.objects.map(item, 'Song')
update = True update = True
@ -352,7 +358,9 @@ class Music(KodiDb):
obj['Path'] = obj['Path'].replace(obj['Filename'], "") obj['Path'] = obj['Path'].replace(obj['Filename'], "")
else: else:
obj['Path'] = "%s/emby/Audio/%s/" % (self.server['auth/server-address'], obj['Id']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
obj['Path'] = "%s/emby/Audio/%s/" % (server_address, obj['Id'])
obj['Filename'] = "stream.%s?static=true" % obj['Container'] obj['Filename'] = "stream.%s?static=true" % obj['Container']
def song_artist_discography(self, obj): def song_artist_discography(self, obj):
@ -429,7 +437,9 @@ class Music(KodiDb):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks ''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
Poster with progress bar Poster with progress bar
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'SongUserData') obj = self.objects.map(item, 'SongUserData')
try: try:

View file

@ -55,7 +55,9 @@ class MusicVideos(KodiDb):
If we don't get the track number from Jellyfin, see if we can infer it If we don't get the track number from Jellyfin, see if we can infer it
from the sortname attribute. from the sortname attribute.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'MusicVideo') obj = self.objects.map(item, 'MusicVideo')
update = True update = True
@ -192,7 +194,9 @@ class MusicVideos(KodiDb):
''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks ''' This updates: Favorite, LastPlayedDate, Playcount, PlaybackPositionTicks
Poster with progress bar Poster with progress bar
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'MusicVideoUserData') obj = self.objects.map(item, 'MusicVideoUserData')
try: try:

View file

@ -63,7 +63,9 @@ class TVShows(KodiDb):
Process seasons. Process seasons.
Apply series pooling. Apply series pooling.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Series') obj = self.objects.map(item, 'Series')
update = True update = True
@ -230,7 +232,9 @@ class TVShows(KodiDb):
If the show is empty, try to remove it. If the show is empty, try to remove it.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Season') obj = self.objects.map(item, 'Season')
obj['ShowId'] = show_id obj['ShowId'] = show_id
@ -265,7 +269,9 @@ class TVShows(KodiDb):
Create additional entry for widgets. Create additional entry for widgets.
This is only required for plugin/episode. This is only required for plugin/episode.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'Episode') obj = self.objects.map(item, 'Episode')
update = True update = True
@ -459,7 +465,9 @@ class TVShows(KodiDb):
Make sure there's no other bookmarks created by widget. Make sure there's no other bookmarks created by widget.
Create additional entry for widgets. This is only required for plugin/episode. Create additional entry for widgets. This is only required for plugin/episode.
''' '''
API = api.API(item, self.server['auth/server-address']) server_data = self.server.auth.get_server_info(self.server.auth.server_id)
server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(item, server_address)
obj = self.objects.map(item, 'EpisodeUserData') obj = self.objects.map(item, 'EpisodeUserData')
try: try:

View file

@ -252,8 +252,9 @@ class Player(xbmc.Player):
return return
break break
server_data = item['Server'].auth.get_server_info(item['Server'].auth.server_id)
API = api.API(next_item, item['Server']['auth/server-address']) server_address = item['Server'].auth.get_server_address(server_data, server_data['LastConnectionMode'])
API = api.API(next_item, server_address)
data = objects.map(next_item, "UpNext") data = objects.map(next_item, "UpNext")
artwork = API.get_all_artwork(objects.map(next_item, 'ArtworkParent'), True) artwork = API.get_all_artwork(objects.map(next_item, 'ArtworkParent'), True)
data['art'] = { data['art'] = {

View file

@ -863,8 +863,9 @@ class Views(object):
for library in self.media_folders: for library in self.media_folders:
if library['Id'] == view_id and 'Primary' in library.get('ImageTags', {}): if library['Id'] == view_id and 'Primary' in library.get('ImageTags', {}):
server_data = self.server.auth.get_server_info(self.server.auth.server_id)
artwork = api.API(None, self.server['auth/server-address']).get_artwork(view_id, 'Primary') server_address = self.server.auth.get_server_address(server_data, server_data['LastConnectionMode'])
artwork = api.API(None, server_address).get_artwork(view_id, 'Primary')
window('%s.artwork' % prop, artwork) window('%s.artwork' % prop, artwork)
break break