mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-06-17 05:36:12 +00:00
Integration of UserClient.
This commit is contained in:
parent
6f3e793561
commit
1b20863cf9
4 changed files with 488 additions and 129 deletions
|
@ -7,83 +7,103 @@ import xbmcgui
|
|||
import xbmcaddon
|
||||
|
||||
import json
|
||||
import threading
|
||||
from datetime import datetime
|
||||
from DownloadUtils import DownloadUtils
|
||||
import urllib
|
||||
import sys
|
||||
import socket
|
||||
import threading
|
||||
from datetime import datetime
|
||||
|
||||
from DownloadUtils import DownloadUtils
|
||||
from UserClient import UserClient
|
||||
from ClientInformation import ClientInformation
|
||||
|
||||
|
||||
#define our global download utils
|
||||
logLevel = 1
|
||||
###########################################################################
|
||||
class ConnectionManager():
|
||||
|
||||
clientInfo = ClientInformation()
|
||||
userClient = UserClient()
|
||||
doUtils = DownloadUtils()
|
||||
|
||||
logLevel = 0
|
||||
addon = None
|
||||
WINDOW = xbmcgui.Window(10000)
|
||||
|
||||
def __init__(self):
|
||||
|
||||
clientInfo = self.clientInfo
|
||||
|
||||
self.addonId = clientInfo.getAddonId()
|
||||
self.addonName = clientInfo.getAddonName()
|
||||
self.addon = xbmcaddon.Addon(id=self.addonId)
|
||||
self.__language__ = self.addon.getLocalizedString
|
||||
|
||||
addonSettings = None
|
||||
__addon__ = xbmcaddon.Addon(id='plugin.video.emby')
|
||||
__addondir__ = xbmc.translatePath( __addon__.getAddonInfo('profile') )
|
||||
__language__ = __addon__.getLocalizedString
|
||||
|
||||
def printDebug(self, msg, level = 1):
|
||||
if(logLevel >= level):
|
||||
if(logLevel == 2):
|
||||
def logMsg(self, msg, level=1):
|
||||
|
||||
addonName = self.addonName
|
||||
className = self.__class__.__name__
|
||||
s_logLevel = self.userClient.getLogLevel()
|
||||
|
||||
# Attempt to change logLevel live
|
||||
if (self.logLevel != s_logLevel):
|
||||
self.logLevel = s_logLevel
|
||||
|
||||
if (self.logLevel >= level):
|
||||
try:
|
||||
xbmc.log("%s %s -> %s" % (addonName, className, str(msg)))
|
||||
except UnicodeEncodeError:
|
||||
try:
|
||||
xbmc.log("emby " + str(level) + " -> " + inspect.stack()[1][3] + " : " + str(msg))
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log("emby " + str(level) + " -> " + inspect.stack()[1][3] + " : " + str(msg.encode('utf-8')))
|
||||
else:
|
||||
try:
|
||||
xbmc.log("emby " + str(level) + " -> " + str(msg))
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log("emby " + str(level) + " -> " + str(msg.encode('utf-8')))
|
||||
xbmc.log("%s %s -> %s" % (addonName, className, str(msg.encode('utf-8'))))
|
||||
except:
|
||||
pass
|
||||
|
||||
def checkServer(self):
|
||||
|
||||
WINDOW = xbmcgui.Window( 10000 )
|
||||
WINDOW.setProperty("Server_Checked", "True")
|
||||
self.WINDOW.setProperty("Server_Checked", "True")
|
||||
self.logMsg("Connection Manager Called")
|
||||
|
||||
self.printDebug ("emby Connection Manager Called")
|
||||
self.addonSettings = xbmcaddon.Addon(id='plugin.video.emby')
|
||||
port = self.addonSettings.getSetting('port')
|
||||
host = self.addonSettings.getSetting('ipaddress')
|
||||
|
||||
if(len(host) != 0 and host != "<none>"):
|
||||
self.printDebug ("emby server already set")
|
||||
addon = self.addon
|
||||
server = self.userClient.getServer()
|
||||
|
||||
if (server != ""):
|
||||
self.logMsg("Server already set", 2)
|
||||
return
|
||||
|
||||
serverInfo = self.getServerDetails()
|
||||
prefix,ip,port = serverInfo.split(":")
|
||||
|
||||
if(serverInfo == None):
|
||||
self.printDebug ("emby getServerDetails failed")
|
||||
return
|
||||
|
||||
index = serverInfo.find(":")
|
||||
|
||||
if(index <= 0):
|
||||
self.printDebug ("emby getServerDetails data not correct : " + serverInfo)
|
||||
if (serverInfo == None):
|
||||
self.logMsg("getServerDetails failed", 1)
|
||||
return
|
||||
|
||||
server_address = serverInfo[:index]
|
||||
server_port = serverInfo[index+1:]
|
||||
self.printDebug ("emby detected server info " + server_address + " : " + server_port)
|
||||
setServer = xbmcgui.Dialog().yesno(self.__language__(30167), "Proceed with the following server?", self.__language__(30169) + serverInfo)
|
||||
|
||||
xbmcgui.Dialog().ok(self.__language__(30167), self.__language__(30168), self.__language__(30169) + server_address, self.__language__(30030) + server_port)
|
||||
|
||||
# get a list of users
|
||||
self.printDebug ("Getting user list")
|
||||
jsonData = None
|
||||
downloadUtils = DownloadUtils()
|
||||
if setServer == 1:
|
||||
self.logMsg("Server selected. Saving information.", 1)
|
||||
addon.setSetting("ipaddress", ip.replace("/", ""))
|
||||
addon.setSetting("port", port)
|
||||
# If https is enabled
|
||||
if (prefix == 'https'):
|
||||
addon.setSetting('https', "true")
|
||||
else:
|
||||
self.logMsg("No server selected.", 1)
|
||||
xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId)
|
||||
return
|
||||
|
||||
# Get List of public users
|
||||
self.logMsg("Getting user list", 1)
|
||||
server = ip.replace("/", "") + ":" + port
|
||||
|
||||
try:
|
||||
jsonData = downloadUtils.downloadUrl(server_address + ":" + server_port + "/mediabrowser/Users/Public?format=json")
|
||||
jsonData = self.doUtils.downloadUrl(serverInfo + "/mediabrowser/Users/Public?format=json", authenticate=False)
|
||||
except Exception, msg:
|
||||
error = "Get User unable to connect to " + server_address + ":" + server_port + " : " + str(msg)
|
||||
error = "Get User unable to connect to " + server + " : " + str(msg)
|
||||
xbmc.log (error)
|
||||
return ""
|
||||
|
||||
if(jsonData == False):
|
||||
if (jsonData == False):
|
||||
return
|
||||
|
||||
self.printDebug("jsonData : " + str(jsonData), level=2)
|
||||
self.logMsg("jsonData : " + str(jsonData), level=2)
|
||||
result = json.loads(jsonData)
|
||||
|
||||
names = []
|
||||
|
@ -95,55 +115,48 @@ class ConnectionManager():
|
|||
name = name + " (Secure)"
|
||||
names.append(name)
|
||||
|
||||
self.printDebug ("User List : " + str(names))
|
||||
self.printDebug ("User List : " + str(userList))
|
||||
self.logMsg("User List: " + str(names))
|
||||
self.logMsg("User List: " + str(userList))
|
||||
return_value = xbmcgui.Dialog().select(self.__language__(30200), names)
|
||||
|
||||
if(return_value > -1):
|
||||
selected_user = userList[return_value]
|
||||
self.printDebug("Setting Selected User : " + selected_user)
|
||||
self.addonSettings.setSetting("port", server_port)
|
||||
self.addonSettings.setSetting("ipaddress", server_address)
|
||||
self.addonSettings.setSetting("username", selected_user)
|
||||
downloadUtils.authenticate()
|
||||
self.logMsg("Setting Selected User: %s" % selected_user)
|
||||
self.addon.setSetting("username", selected_user)
|
||||
return
|
||||
else:
|
||||
xbmc.log("No user selected.")
|
||||
xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)')
|
||||
xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId)
|
||||
return
|
||||
|
||||
def getServerDetails(self):
|
||||
|
||||
self.printDebug("Getting Server Details from Network")
|
||||
|
||||
MESSAGE = "who is MediaBrowserServer?"
|
||||
#MULTI_GROUP = ("224.3.29.71", 7359)
|
||||
#MULTI_GROUP = ("127.0.0.1", 7359)
|
||||
self.logMsg("Getting Server Details from Network")
|
||||
|
||||
MULTI_GROUP = ("<broadcast>", 7359)
|
||||
MESSAGE = "who is EmbyServer?"
|
||||
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
||||
sock.settimeout(6.0)
|
||||
|
||||
#ttl = struct.pack('b', 20)
|
||||
#sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl)
|
||||
|
||||
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 20)
|
||||
|
||||
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
|
||||
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_LOOP, 1)
|
||||
sock.setsockopt(socket.IPPROTO_IP, socket.SO_REUSEADDR, 1)
|
||||
|
||||
xbmc.log("MutliGroup : " + str(MULTI_GROUP));
|
||||
xbmc.log("Sending UDP Data : " + MESSAGE);
|
||||
self.logMsg("MutliGroup : %s" % str(MULTI_GROUP));
|
||||
self.logMsg("Sending UDP Data: %s" % MESSAGE);
|
||||
sock.sendto(MESSAGE, MULTI_GROUP)
|
||||
|
||||
try:
|
||||
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
|
||||
xbmc.log("Received Response : " + data)
|
||||
if(data[0:18] == "MediaBrowserServer"):
|
||||
xbmc.log("Found Server : " + data[19:])
|
||||
return data[19:]
|
||||
self.logMsg("Received Response: %s" % data)
|
||||
# Get the address
|
||||
data = json.loads(data)
|
||||
return data['Address']
|
||||
except:
|
||||
xbmc.log("No UDP Response")
|
||||
self.logMsg("No UDP Response")
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
return None
|
Loading…
Add table
Add a link
Reference in a new issue