Integration of UserClient.

This commit is contained in:
angelblue05 2015-04-03 05:13:01 -05:00
parent 6f3e793561
commit 1b20863cf9
4 changed files with 488 additions and 129 deletions

View file

@ -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