mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2024-12-27 11:16:11 +00:00
118 lines
3 KiB
Python
118 lines
3 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
#################################################################################################
|
||
|
|
||
|
import logging
|
||
|
|
||
|
from client import EmbyClient
|
||
|
from helpers import has_attribute
|
||
|
|
||
|
#################################################################################################
|
||
|
|
||
|
class NullHandler(logging.Handler):
|
||
|
def emit(self, record):
|
||
|
print(self.format(record))
|
||
|
|
||
|
loghandler = NullHandler
|
||
|
LOG = logging.getLogger('Emby')
|
||
|
|
||
|
#################################################################################################
|
||
|
|
||
|
def config(level=logging.INFO):
|
||
|
|
||
|
logger = logging.getLogger('Emby')
|
||
|
logger.addHandler(Emby.loghandler())
|
||
|
logger.setLevel(level)
|
||
|
|
||
|
def ensure_client():
|
||
|
|
||
|
def decorator(func):
|
||
|
def wrapper(self, *args, **kwargs):
|
||
|
|
||
|
if self.client.get(self.server_id) is None:
|
||
|
self.construct()
|
||
|
|
||
|
return func(self, *args, **kwargs)
|
||
|
|
||
|
return wrapper
|
||
|
return decorator
|
||
|
|
||
|
|
||
|
class Emby(object):
|
||
|
|
||
|
''' This is your Embyclient, you can create more than one. The server_id is only a temporary thing.
|
||
|
from emby import Emby
|
||
|
|
||
|
default_client = Emby()['config/app']
|
||
|
another_client = Emby('123456')['config/app']
|
||
|
'''
|
||
|
|
||
|
# Borg - multiple instances, shared state
|
||
|
_shared_state = {}
|
||
|
client = {}
|
||
|
server_id = "default"
|
||
|
loghandler = loghandler
|
||
|
|
||
|
def __init__(self, server_id=None):
|
||
|
self.__dict__ = self._shared_state
|
||
|
self.server_id = server_id or "default"
|
||
|
|
||
|
@classmethod
|
||
|
def set_loghandler(cls, func=loghandler, level=logging.INFO):
|
||
|
|
||
|
for handler in logging.getLogger('Emby').handlers:
|
||
|
if isinstance(handler, cls.loghandler):
|
||
|
logging.getLogger('Emby').removeHandler(handler)
|
||
|
|
||
|
cls.loghandler = func
|
||
|
config(level)
|
||
|
|
||
|
def close(self):
|
||
|
|
||
|
if self.server_id not in self.client:
|
||
|
return
|
||
|
|
||
|
self.client[self.server_id].stop()
|
||
|
self.client.pop(self.server_id, None)
|
||
|
|
||
|
LOG.info("---[ STOPPED EMBYCLIENT: %s ]---", self.server_id)
|
||
|
|
||
|
@classmethod
|
||
|
def close_all(cls):
|
||
|
|
||
|
for client in cls.client:
|
||
|
cls.client[client].stop()
|
||
|
|
||
|
cls.client = {}
|
||
|
LOG.info("---[ STOPPED ALL EMBYCLIENTS ]---")
|
||
|
|
||
|
@classmethod
|
||
|
def get_active_clients(cls):
|
||
|
return cls.client
|
||
|
|
||
|
@ensure_client()
|
||
|
def __setattr__(self, name, value):
|
||
|
|
||
|
if has_attribute(self, name):
|
||
|
return super(Emby, self).__setattr__(name, value)
|
||
|
|
||
|
setattr(self.client[self.server_id], name, value)
|
||
|
|
||
|
@ensure_client()
|
||
|
def __getattr__(self, name):
|
||
|
return getattr(self.client[self.server_id], name)
|
||
|
|
||
|
@ensure_client()
|
||
|
def __getitem__(self, key):
|
||
|
return self.client[self.server_id][key]
|
||
|
|
||
|
def construct(self):
|
||
|
|
||
|
self.client[self.server_id] = EmbyClient()
|
||
|
|
||
|
if self.server_id == 'default':
|
||
|
LOG.info("---[ START EMBYCLIENT ]---")
|
||
|
else:
|
||
|
LOG.info("---[ START EMBYCLIENT: %s ]---", self.server_id)
|
||
|
|
||
|
config()
|