jellyfin-kodi/jellyfin_kodi/client.py

122 lines
3.5 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals
#################################################################################################
import os
import xbmc
import xbmcaddon
import xbmcvfs
from .helper import translate, window, settings, addon_id, dialog, LazyLogger
from .helper.utils import create_id, translate_path
##################################################################################################
LOG = LazyLogger(__name__)
##################################################################################################
def get_addon_name():
"""Used for logging."""
return xbmcaddon.Addon(addon_id()).getAddonInfo("name").upper()
def get_version():
return xbmcaddon.Addon(addon_id()).getAddonInfo("version")
def get_platform():
if xbmc.getCondVisibility("system.platform.osx"):
return "OSX"
elif xbmc.getCondVisibility("System.HasAddon(service.coreelec.settings)"):
return "CoreElec"
elif xbmc.getCondVisibility("System.HasAddon(service.libreelec.settings)"):
return "LibreElec"
elif xbmc.getCondVisibility("System.HasAddon(service.osmc.settings)"):
return "OSMC"
elif xbmc.getCondVisibility("system.platform.atv2"):
return "ATV2"
elif xbmc.getCondVisibility("system.platform.ios"):
return "iOS"
elif xbmc.getCondVisibility("system.platform.windows"):
return "Windows"
elif xbmc.getCondVisibility("system.platform.android"):
return "Linux/Android"
elif xbmc.getCondVisibility("system.platform.linux.raspberrypi"):
return "Linux/RPi"
elif xbmc.getCondVisibility("system.platform.linux"):
return "Linux"
else:
return "Unknown"
def get_device_name():
"""Detect the device name. If deviceNameOpt, then
use the device name in the add-on settings.
Otherwise, fallback to the Kodi device name.
"""
if not settings("deviceNameOpt.bool"):
device_name = xbmc.getInfoLabel("System.FriendlyName")
else:
device_name = settings("deviceName")
device_name = device_name.replace('"', "_")
device_name = device_name.replace("/", "_")
return device_name
def get_device_id(reset=False):
"""Return the device_id if already loaded.
It will load from jellyfin_guid file. If it's a fresh
setup, it will generate a new GUID to uniquely
identify the setup for all users.
window prop: jellyfin_deviceId
"""
client_id = window("jellyfin_deviceId")
if client_id:
return client_id
directory = translate_path("special://profile/addon_data/plugin.video.jellyfin/")
if not xbmcvfs.exists(directory):
xbmcvfs.mkdir(directory)
jellyfin_guid = os.path.join(directory, "jellyfin_guid")
file_guid = xbmcvfs.File(jellyfin_guid)
client_id = file_guid.read()
if not client_id or reset:
LOG.debug("Generating a new GUID.")
client_id = str(create_id())
file_guid = xbmcvfs.File(jellyfin_guid, "w")
file_guid.write(client_id)
file_guid.close()
LOG.debug("DeviceId loaded: %s", client_id)
window("jellyfin_deviceId", value=client_id)
return client_id
def reset_device_id():
window("jellyfin_deviceId", clear=True)
get_device_id(True)
dialog("ok", "{jellyfin}", translate(33033))
xbmc.executebuiltin("RestartApp")
def get_info():
return {
"DeviceName": get_device_name(),
"Version": get_version(),
"DeviceId": get_device_id(),
}