diff --git a/jellyfin_kodi/entrypoint/default.py b/jellyfin_kodi/entrypoint/default.py index 153ddd80..a0fce551 100644 --- a/jellyfin_kodi/entrypoint/default.py +++ b/jellyfin_kodi/entrypoint/default.py @@ -508,7 +508,7 @@ def get_fanart(item_id, path, server_id=None): list_li = [] directory = xbmc.translatePath("special://thumbnails/jellyfin/%s/" % item_id) jellyfin_client = Jellyfin(server_id).get_client() - server = jellyfin_client.auth.get_server_info(server_id)['address'] + server = jellyfin_client.auth..get_server_address() if not xbmcvfs.exists(directory): diff --git a/jellyfin_kodi/jellyfin/__init__.py b/jellyfin_kodi/jellyfin/__init__.py index 74178de7..6dd08188 100644 --- a/jellyfin_kodi/jellyfin/__init__.py +++ b/jellyfin_kodi/jellyfin/__init__.py @@ -5,9 +5,11 @@ from __future__ import division, absolute_import, print_function, unicode_litera import logging -from helper import has_attribute, LazyLogger +from helper import has_attribute, LazyLogger, window, api, dialog, translate, settings from .client import JellyfinClient +from client import get_device_id +import connect ################################################################################################# @@ -93,10 +95,73 @@ class Jellyfin(object): return getattr(self.client[self.server_id], name) def construct(self): - self.client[self.server_id] = JellyfinClient() - if self.server_id == 'default': - LOG.info("---[ START JELLYFINCLIENT ]---") - else: - LOG.info("---[ START JELLYFINCLIENT: %s ]---", self.server_id) + try: + connect.Connect().register(self.server_id) + self.register_client() + except Exception as error: + LOG.exception(error) + dialog("ok", "{jellyfin}", translate(33142)) + return + + LOG.info("---[ START JELLYFINCLIENT: %s ]---", self.server_id) + + def register_client(self): + client = self.get_client() + device_id = get_device_id() + self.post_capabilities(client, device_id) + + if self.server_id is None and settings('additionalUsers'): + users = settings('additionalUsers').split(',') + all_users = client.jellyfin.get_users() + + for additional in users: + for user in all_users: + if user['Name'].lower() in additional.lower(): + client.jellyfin.session_add_user(client.config.data['app.session'], user['Id'], True) + + self.additional_users(client, device_id) + + @staticmethod + def additional_users(server, device_id): + ''' Setup additional users images. + ''' + for i in range(10): + window('JellyfinAdditionalUserImage.%s' % i, clear=True) + + try: + session = server.jellyfin.get_device(device_id) + except Exception as error: + LOG.exception(error) + + return + + for index, user in enumerate(session[0]['AdditionalUsers']): + + info = server.jellyfin.get_user(user['UserId']) + image = api.API(info, server.config.data['auth.server']).get_user_artwork(user['UserId']) + window('JellyfinAdditionalUserImage.%s' % index, image) + window('JellyfinAdditionalUserPosition.%s' % user['UserId'], str(index)) + + @staticmethod + def post_capabilities(client, device_id): + LOG.info("--[ post capabilities/%s ]", client.auth.server_id) + + client.jellyfin.post_capabilities({ + 'PlayableMediaTypes': "Audio,Video", + 'SupportsMediaControl': True, + 'SupportedCommands': ( + "MoveUp,MoveDown,MoveLeft,MoveRight,Select," + "Back,ToggleContextMenu,ToggleFullscreen,ToggleOsdMenu," + "GoHome,PageUp,NextLetter,GoToSearch," + "GoToSettings,PageDown,PreviousLetter,TakeScreenshot," + "VolumeUp,VolumeDown,ToggleMute,SendString,DisplayMessage," + "SetAudioStreamIndex,SetSubtitleStreamIndex," + "SetRepeatMode," + "Mute,Unmute,SetVolume," + "Play,Playstate,PlayNext,PlayMediaSource" + ), + }) + session = client.jellyfin.get_device(device_id) + client.config.data['app.session'] = session[0]['Id'] diff --git a/jellyfin_kodi/monitor.py b/jellyfin_kodi/monitor.py index 08756386..45e8fe3f 100644 --- a/jellyfin_kodi/monitor.py +++ b/jellyfin_kodi/monitor.py @@ -26,8 +26,6 @@ LOG = LazyLogger(__name__) class Monitor(xbmc.Monitor): - - servers = [] sleep = False def __init__(self): @@ -95,28 +93,7 @@ class Monitor(xbmc.Monitor): return - try: - if not data.get('ServerId'): - server = Jellyfin() - else: - if method != 'LoadServer' and data['ServerId'] not in self.servers: - - try: - connect.Connect().register(data['ServerId']) - self.server_instance(data['ServerId']) - except Exception as error: - - LOG.exception(error) - dialog("ok", "{jellyfin}", translate(33142)) - - return - - server = Jellyfin(data['ServerId']) - except Exception as error: - LOG.exception(error) - server = Jellyfin() - - server = server.get_client() + server = Jellyfin(data.get('ServerId')).server.get_client() if method == 'Play': @@ -149,7 +126,7 @@ class Monitor(xbmc.Monitor): elif method == 'AddUser': server.jellyfin.session_add_user(server.config.data['app.session'], data['Id'], data['Add']) - self.additional_users(server) + Jellyfin.additional_users(server, self.device_id) elif method == 'Player.OnPlay': on_play(data, server) @@ -157,68 +134,6 @@ class Monitor(xbmc.Monitor): elif method == 'VideoLibrary.OnUpdate': on_update(data, server) - def server_instance(self, server_id=None): - - server = Jellyfin(server_id).get_client() - self.post_capabilities(server) - - if server_id is not None: - self.servers.append(server_id) - elif settings('additionalUsers'): - - users = settings('additionalUsers').split(',') - all_users = server.jellyfin.get_users() - - for additional in users: - for user in all_users: - - if user['Name'].lower() in additional.lower(): - server.jellyfin.session_add_user(server.config.data['app.session'], user['Id'], True) - - self.additional_users(server) - - def post_capabilities(self, server): - LOG.info("--[ post capabilities/%s ]", server.auth.server_id) - - server.jellyfin.post_capabilities({ - 'PlayableMediaTypes': "Audio,Video", - 'SupportsMediaControl': True, - 'SupportedCommands': ( - "MoveUp,MoveDown,MoveLeft,MoveRight,Select," - "Back,ToggleContextMenu,ToggleFullscreen,ToggleOsdMenu," - "GoHome,PageUp,NextLetter,GoToSearch," - "GoToSettings,PageDown,PreviousLetter,TakeScreenshot," - "VolumeUp,VolumeDown,ToggleMute,SendString,DisplayMessage," - "SetAudioStreamIndex,SetSubtitleStreamIndex," - "SetRepeatMode," - "Mute,Unmute,SetVolume," - "Play,Playstate,PlayNext,PlayMediaSource" - ), - }) - session = server.jellyfin.get_device(self.device_id) - server.config.data['app.session'] = session[0]['Id'] - - def additional_users(self, server): - - ''' Setup additional users images. - ''' - for i in range(10): - window('JellyfinAdditionalUserImage.%s' % i, clear=True) - - try: - session = server.jellyfin.get_device(self.device_id) - except Exception as error: - LOG.exception(error) - - return - - for index, user in enumerate(session[0]['AdditionalUsers']): - - info = server.jellyfin.get_user(user['UserId']) - image = api.API(info, server.config.data['auth.server']).get_user_artwork(user['UserId']) - window('JellyfinAdditionalUserImage.%s' % index, image) - window('JellyfinAdditionalUserPosition.%s' % user['UserId'], str(index)) - def playstate(self, data): ''' Jellyfin playstate updates.