132 lines
4.3 KiB
Python
132 lines
4.3 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 = "{} - {}".format(user_name, client_name)
|
|
user_session_details = ""
|
|
|
|
percentage_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:
|
|
percentage_played = (position_ticks / float(runtime)) * 100.0
|
|
percentage_played = int(percentage_played)
|
|
|
|
session_info += " {} {}%".format(
|
|
now_playing.get("Name", "na"), percentage_played
|
|
)
|
|
user_session_details += "{} {}%\n".format(
|
|
now_playing.get("Name", "na"), percentage_played
|
|
)
|
|
|
|
else:
|
|
session_info += " (idle)"
|
|
user_session_details += "Idle\n"
|
|
|
|
transcoding_details = ""
|
|
if transcoding_info:
|
|
if not transcoding_info.get("IsVideoDirect", None):
|
|
transcoding_details += "Video:{}:{}x{}\n".format(
|
|
transcoding_info.get("VideoCodec", ""),
|
|
transcoding_info.get("Width", 0),
|
|
transcoding_info.get("Height", 0)
|
|
)
|
|
else:
|
|
transcoding_details += "Video:direct\n"
|
|
|
|
if not transcoding_info.get("IsAudioDirect", None):
|
|
transcoding_details += "Audio:{}:{}\n".format(
|
|
transcoding_info.get("AudioCodec", ""),
|
|
transcoding_info.get("AudioChannels", 0)
|
|
)
|
|
else:
|
|
transcoding_details += "Audio:direct\n"
|
|
|
|
transcoding_details += "Bitrate:{}\n".format(
|
|
transcoding_info.get("Bitrate", 0)
|
|
)
|
|
|
|
list_item = xbmcgui.ListItem(label=session_info)
|
|
list_item.setArt(art)
|
|
|
|
user_session_details += "{}({})\n".format(device_name, client_version)
|
|
user_session_details += "{}\n".format(client_name)
|
|
user_session_details += "{}\n".format(play_method)
|
|
user_session_details += "{}\n".format(transcoding_details)
|
|
|
|
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(percentage_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)
|