mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-07-22 14:28:58 +00:00
initial commit - first version
This commit is contained in:
parent
fdbfc9455b
commit
860bdfbbd8
24 changed files with 3353 additions and 0 deletions
162
resources/lib/Utils.py
Normal file
162
resources/lib/Utils.py
Normal file
|
@ -0,0 +1,162 @@
|
|||
#################################################################################################
|
||||
# utils
|
||||
#################################################################################################
|
||||
|
||||
import xbmc
|
||||
import xbmcgui
|
||||
import xbmcaddon
|
||||
import xbmcvfs
|
||||
import json
|
||||
import os
|
||||
import inspect
|
||||
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
|
||||
from xml.etree import ElementTree
|
||||
from xml.dom import minidom
|
||||
import xml.etree.cElementTree as ET
|
||||
|
||||
from API import API
|
||||
from PlayUtils import PlayUtils
|
||||
from DownloadUtils import DownloadUtils
|
||||
downloadUtils = DownloadUtils()
|
||||
addonSettings = xbmcaddon.Addon(id='plugin.video.mb3sync')
|
||||
language = addonSettings.getLocalizedString
|
||||
|
||||
def logMsg(title, msg, level = 1):
|
||||
|
||||
#todo --> get this from a setting
|
||||
logLevel = 0
|
||||
|
||||
if(logLevel >= level):
|
||||
if(logLevel == 1):
|
||||
try:
|
||||
xbmc.log(title + " -> " + inspect.stack()[1][3] + " : " + str(msg))
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log(title + " -> " + inspect.stack()[1][3] + " : " + str(msg.encode('utf-8')))
|
||||
else:
|
||||
try:
|
||||
xbmc.log(title + " -> " + str(msg))
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log(title + " -> " + str(msg.encode('utf-8')))
|
||||
|
||||
|
||||
def checkKodiSources():
|
||||
print "All sources in Kodi -->"
|
||||
addon = xbmcaddon.Addon(id='plugin.video.mb3sync')
|
||||
addondir = xbmc.translatePath( addon.getAddonInfo('profile') )
|
||||
|
||||
dataPath = os.path.join(addondir,"library")
|
||||
movieLibrary = os.path.join(dataPath,'movies')
|
||||
tvLibrary = os.path.join(dataPath,'tvshows')
|
||||
|
||||
if not xbmcvfs.exists(dataPath):
|
||||
xbmcvfs.mkdir(dataPath)
|
||||
if not xbmcvfs.exists(movieLibrary):
|
||||
xbmcvfs.mkdir(movieLibrary)
|
||||
if not xbmcvfs.exists(tvLibrary):
|
||||
xbmcvfs.mkdir(tvLibrary)
|
||||
|
||||
allKodiSources = list()
|
||||
|
||||
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "Files.GetSources", "params": { "media": "video"}, "id": 1 }')
|
||||
jsonobject = json.loads(json_response.decode('utf-8','replace'))
|
||||
|
||||
if(jsonobject.has_key('result')):
|
||||
result = jsonobject['result']
|
||||
if(result.has_key('sources')):
|
||||
for source in result["sources"]:
|
||||
allKodiSources.append(source["label"])
|
||||
|
||||
allKodiSources = set(allKodiSources)
|
||||
|
||||
rebootRequired = False
|
||||
if not "mediabrowser_movies" in allKodiSources:
|
||||
addKodiSource("mediabrowser_movies",movieLibrary)
|
||||
rebootRequired = True
|
||||
if not "mediabrowser_tvshows" in allKodiSources:
|
||||
addKodiSource("mediabrowser_tvshows",tvLibrary)
|
||||
rebootRequired = True
|
||||
|
||||
if rebootRequired:
|
||||
ret = xbmcgui.Dialog().yesno(heading="MediaBrowser Sync service", line1="A restart of Kodi is needed to apply changes. Do you want to reboot now ?")
|
||||
if ret:
|
||||
xbmc.executebuiltin("RestartApp")
|
||||
|
||||
def addKodiSource(name, path):
|
||||
userDataPath = xbmc.translatePath( "special://profile" )
|
||||
sourcesFile = os.path.join(userDataPath,'sources.xml')
|
||||
|
||||
print "####parsing sources file #####" + sourcesFile
|
||||
|
||||
tree = ET.ElementTree(file=sourcesFile)
|
||||
root = tree.getroot()
|
||||
|
||||
videosources = root.find("video")
|
||||
|
||||
#remove any existing entries
|
||||
allsources = videosources.findall("source")
|
||||
if allsources != None:
|
||||
for source in allsources:
|
||||
if source.find("name").text == name:
|
||||
videosources.remove(source)
|
||||
|
||||
# add new source
|
||||
source = SubElement(videosources,'source')
|
||||
SubElement(source, "name").text = name
|
||||
SubElement(source, "path").text = path
|
||||
|
||||
tree.write(sourcesFile)
|
||||
|
||||
def checkAuthentication():
|
||||
#check authentication
|
||||
if addonSettings.getSetting('username') != "" and addonSettings.getSetting('ipaddress') != "":
|
||||
try:
|
||||
downloadUtils.authenticate()
|
||||
except Exception, e:
|
||||
logMsg("MB3 Syncer authentication failed",e)
|
||||
pass
|
||||
|
||||
def prettifyXml(elem):
|
||||
rough_string = etree.tostring(elem, "utf-8")
|
||||
reparsed = minidom.parseString(rough_string)
|
||||
return reparsed.toprettyxml(indent="\t")
|
||||
|
||||
def doKodiCleanup():
|
||||
#remove old testdata and remove missing files
|
||||
json_response = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"properties" : ["file"], "sort": { "order": "ascending", "method": "label", "ignorearticle": true } }, "id": "libMovies"}')
|
||||
jsonobject = json.loads(json_response.decode('utf-8','replace'))
|
||||
if(jsonobject.has_key('result')):
|
||||
result = jsonobject['result']
|
||||
if(result.has_key('movies')):
|
||||
movies = result['movies']
|
||||
for movie in movies:
|
||||
if (xbmcvfs.exists(movie["file"]) == False) or ("plugin.video.xbmb3c" in movie["file"]):
|
||||
print "deleting --> " + movie["file"]
|
||||
xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.RemoveMovie", "params": { "movieid": %i}, "id": 1 }' %(movie["movieid"]))
|
||||
|
||||
|
||||
def get_params( paramstring ):
|
||||
xbmc.log("Parameter string: " + paramstring)
|
||||
param={}
|
||||
if len(paramstring)>=2:
|
||||
params=paramstring
|
||||
|
||||
if params[0] == "?":
|
||||
cleanedparams=params[1:]
|
||||
else:
|
||||
cleanedparams=params
|
||||
|
||||
if (params[len(params)-1]=='/'):
|
||||
params=params[0:len(params)-2]
|
||||
|
||||
pairsofparams=cleanedparams.split('&')
|
||||
for i in range(len(pairsofparams)):
|
||||
splitparams={}
|
||||
splitparams=pairsofparams[i].split('=')
|
||||
if (len(splitparams))==2:
|
||||
param[splitparams[0]]=splitparams[1]
|
||||
elif (len(splitparams))==3:
|
||||
param[splitparams[0]]=splitparams[1]+"="+splitparams[2]
|
||||
xbmc.log("XBMB3C -> Detected parameters: " + str(param))
|
||||
return param
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue