Files
jellycon/resources/lib/server_sessions.py
2022-03-09 22:51:38 +01:00

116 lines
4.1 KiB
Python

from __future__ import division, absolute_import, print_function, unicode_literals
import sys
import xbmcgui
import xbmcplugin
import xbmcaddon
from .jellyfin import api
from .lazylogger import LazyLogger
from .item_functions import get_art
from .utils import load_user_details
log = LazyLogger(__name__)
def show_server_sessions():
log.debug("showServerSessions Called")
handle = int(sys.argv[1])
user_details = load_user_details()
url = "/Users/{}".format(user_details.get('user_id'))
results = api.get(url)
is_admin = results.get("Policy", {}).get("IsAdministrator", False)
if not is_admin:
xbmcplugin.endOfDirectory(handle, cacheToDisc=False)
return
url = "/Sessions"
results = api.get(url)
log.debug("session_info: {0}".format(results))
if results is None:
return
list_items = []
settings = xbmcaddon.Addon()
server = settings.getSetting('server_address')
for session in results:
device_name = session.get("DeviceName", "na")
user_name = session.get("UserName", "na")
client_name = session.get("Client", "na")
client_version = session.get("ApplicationVersion", "na")
play_state = session.get("PlayState", None)
now_playing = session.get("NowPlayingItem", None)
transcoding_info = session.get("TranscodingInfo", None)
session_info = user_name + " - " + client_name
user_session_details = ""
percenatge_played = 0
position_ticks = 0
runtime = 0
play_method = "na"
if play_state is not None:
position_ticks = play_state.get("PositionTicks", 0)
play_method = play_state.get("PlayMethod", "na")
art = {}
if now_playing:
art = get_art(now_playing, server)
runtime = now_playing.get("RunTimeTicks", 0)
if position_ticks > 0 and runtime > 0:
percenatge_played = (position_ticks / float(runtime)) * 100.0
percenatge_played = int(percenatge_played)
session_info += " (" + now_playing.get("Name", "na") + " " + str(percenatge_played) + "%)"
user_session_details += now_playing.get("Name", "na") + " " + str(percenatge_played) + "%" + "\n"
else:
session_info += " (idle)"
user_session_details += "Idle" + "\n"
transcoding_details = ""
if transcoding_info:
if not transcoding_info.get("IsVideoDirect", None):
transcoding_details += "Video:" + transcoding_info.get("VideoCodec", "") + ":" + str(transcoding_info.get("Width", 0)) + "x" + str(transcoding_info.get("Height", 0)) + "\n"
else:
transcoding_details += "Video:direct\n"
if not transcoding_info.get("IsAudioDirect", None):
transcoding_details += "Audio:" + transcoding_info.get("AudioCodec", "") + ":" + str(transcoding_info.get("AudioChannels", 0)) + "\n"
else:
transcoding_details += "Audio:direct\n"
transcoding_details += "Bitrate:" + str(transcoding_info.get("Bitrate", 0)) + "\n"
list_item = xbmcgui.ListItem(label=session_info)
list_item.setArt(art)
user_session_details += device_name + "(" + client_version + ")\n"
user_session_details += client_name + "\n"
user_session_details += play_method + "\n"
user_session_details += transcoding_details + "\n"
info_labels = {}
info_labels["duration"] = str(runtime / 10000000)
info_labels["mediatype"] = "movie"
info_labels["plot"] = user_session_details
list_item.setInfo('video', info_labels)
list_item.setProperty('TotalTime', str(runtime / 10000000))
list_item.setProperty('ResumeTime', str(position_ticks / 10000000))
list_item.setProperty("complete_percentage", str(percenatge_played))
item_tuple = ("", list_item, False)
list_items.append(item_tuple)
xbmcplugin.setContent(handle, "movies")
xbmcplugin.addDirectoryItems(handle, list_items)
xbmcplugin.endOfDirectory(handle, cacheToDisc=False)