jellyfin-kodi/jellyfin_kodi/jellyfin/__init__.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

101 lines
2.6 KiB
Python
Raw Permalink Normal View History

2018-09-06 08:36:32 +00:00
# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals
2018-09-06 08:36:32 +00:00
#################################################################################################
2021-10-10 18:38:25 +00:00
from ..helper import has_attribute, LazyLogger
2018-09-06 08:36:32 +00:00
from .client import JellyfinClient
2018-09-06 08:36:32 +00:00
#################################################################################################
2020-04-19 01:05:59 +00:00
LOG = LazyLogger()
2018-09-06 08:36:32 +00:00
#################################################################################################
2019-10-03 02:14:54 +00:00
2018-09-06 08:36:32 +00:00
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
2024-06-10 09:19:47 +00:00
2018-09-06 08:36:32 +00:00
return decorator
class Jellyfin(object):
"""This is your Jellyfinclient, you can create more than one. The server_id is only a temporary thing
to communicate with the JellyfinClient().
2018-09-06 08:36:32 +00:00
2021-10-10 18:38:25 +00:00
from jellyfin_kodi.jellyfin import Jellyfin
2018-09-06 08:36:32 +00:00
Jellyfin('123456').config.data['app']
2019-01-25 13:02:27 +00:00
# Permanent client reference
client = Jellyfin('123456').get_client()
client.config.data['app']
2024-06-10 09:19:47 +00:00
"""
2018-09-06 08:36:32 +00:00
# Borg - multiple instances, shared state
_shared_state = {}
client = {}
server_id = "default"
def __init__(self, server_id=None):
self.__dict__ = self._shared_state
self.server_id = server_id or "default"
2019-01-25 13:02:27 +00:00
def get_client(self):
2020-10-29 10:54:10 +00:00
# type: () -> JellyfinClient
2019-01-25 13:02:27 +00:00
return self.client[self.server_id]
2018-09-06 08:36:32 +00:00
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 JELLYFINCLIENT: %s ]---", self.server_id)
2018-09-06 08:36:32 +00:00
@classmethod
def close_all(cls):
for client in cls.client:
cls.client[client].stop()
cls.client = {}
LOG.info("---[ STOPPED ALL JELLYFINCLIENTS ]---")
2018-09-06 08:36:32 +00:00
@classmethod
def get_active_clients(cls):
return cls.client
@ensure_client()
def __setattr__(self, name, value):
if has_attribute(self, name):
return super(Jellyfin, self).__setattr__(name, value)
2018-09-06 08:36:32 +00:00
setattr(self.client[self.server_id], name, value)
@ensure_client()
def __getattr__(self, name):
return getattr(self.client[self.server_id], name)
2019-10-03 02:14:54 +00:00
2018-09-06 08:36:32 +00:00
def construct(self):
self.client[self.server_id] = JellyfinClient()
2018-09-06 08:36:32 +00:00
if self.server_id == "default":
LOG.info("---[ START JELLYFINCLIENT ]---")
2018-09-06 08:36:32 +00:00
else:
LOG.info("---[ START JELLYFINCLIENT: %s ]---", self.server_id)