This commit is contained in:
Marcel van der Veldt 2015-03-20 01:09:21 +01:00
commit 6e1727dc78
4 changed files with 83 additions and 45 deletions

View file

@ -50,7 +50,11 @@ class LibrarySync():
#what sync method to perform ?
if syncOption == "Full Sync":
pr = utils.startProfiling()
self.MoviesSync(True)
utils.stopProfiling(pr, "MoviesSync(True)")
self.TvShowsSync(True)
if syncOption == "Incremental Sync":
self.MoviesSync(False)

View file

@ -8,7 +8,9 @@ import xbmcaddon
import xbmcvfs
import json
import os
import cProfile
import pstats
import time
import sqlite3
import inspect
from xml.etree.ElementTree import Element, SubElement, Comment, tostring
@ -24,11 +26,9 @@ addonSettings = xbmcaddon.Addon(id='plugin.video.mb3sync')
language = addonSettings.getLocalizedString
def logMsg(title, msg, level = 1):
logLevel = int(addonSettings.getSetting("logLevel"))
if(logLevel >= level):
if(logLevel == 1):
if(logLevel == 2): # inspect.stack() is expensive
try:
xbmc.log(title + " -> " + inspect.stack()[1][3] + " : " + str(msg))
except UnicodeEncodeError:
@ -195,5 +195,35 @@ def get_params( paramstring ):
param[splitparams[0]]=splitparams[1]+"="+splitparams[2]
return param
def startProfiling():
pr = cProfile.Profile()
pr.enable()
return pr
def stopProfiling(pr, profileName):
pr.disable()
ps = pstats.Stats(pr)
addondir = xbmc.translatePath(xbmcaddon.Addon(id='plugin.video.mb3sync').getAddonInfo('profile'))
fileTimeStamp = time.strftime("%Y-%m-%d %H-%M-%S")
tabFileNamepath = os.path.join(addondir, "profiles")
tabFileName = os.path.join(addondir, "profiles" , profileName + "_profile_(" + fileTimeStamp + ").tab")
if not xbmcvfs.exists(tabFileNamepath):
xbmcvfs.mkdir(tabFileNamepath)
f = open(tabFileName, 'wb')
f.write("NumbCalls\tTotalTime\tCumulativeTime\tFunctionName\tFileName\r\n")
for (key, value) in ps.stats.items():
(filename, count, func_name) = key
(ccalls, ncalls, total_time, cumulative_time, callers) = value
try:
f.write(str(ncalls) + "\t" + "{:10.4f}".format(total_time) + "\t" + "{:10.4f}".format(cumulative_time) + "\t" + func_name + "\t" + filename + "\r\n")
except ValueError:
f.write(str(ncalls) + "\t" + "{0}".format(total_time) + "\t" + "{0}".format(cumulative_time) + "\t" + func_name + "\t" + filename + "\r\n")
f.close()

View file

@ -94,48 +94,48 @@ class WriteKodiDB():
changes = False
#update artwork
changes = self.updateArtWork(KodiItem,"poster", API().getArtwork(MBitem, "poster"),"movie")
changes = self.updateArtWork(KodiItem,"clearlogo", API().getArtwork(MBitem, "Logo"),"movie")
changes = self.updateArtWork(KodiItem,"clearart", API().getArtwork(MBitem, "Art"),"movie")
changes = self.updateArtWork(KodiItem,"banner", API().getArtwork(MBitem, "Banner"),"movie")
changes = self.updateArtWork(KodiItem,"landscape", API().getArtwork(MBitem, "Thumb"),"movie")
changes = self.updateArtWork(KodiItem,"discart", API().getArtwork(MBitem, "Disc"),"movie")
changes = self.updateArtWork(KodiItem,"fanart", API().getArtwork(MBitem, "Backdrop"),"movie")
changes |= self.updateArtWork(KodiItem,"poster", API().getArtwork(MBitem, "poster"),"movie")
changes |= self.updateArtWork(KodiItem,"clearlogo", API().getArtwork(MBitem, "Logo"),"movie")
changes |= self.updateArtWork(KodiItem,"clearart", API().getArtwork(MBitem, "Art"),"movie")
changes |= self.updateArtWork(KodiItem,"banner", API().getArtwork(MBitem, "Banner"),"movie")
changes |= self.updateArtWork(KodiItem,"landscape", API().getArtwork(MBitem, "Thumb"),"movie")
changes |= self.updateArtWork(KodiItem,"discart", API().getArtwork(MBitem, "Disc"),"movie")
changes |= self.updateArtWork(KodiItem,"fanart", API().getArtwork(MBitem, "Backdrop"),"movie")
#update common properties
duration = (int(timeInfo.get('Duration'))*60)
changes = self.updateProperty(KodiItem,"runtime",duration,"movie")
changes = self.updateProperty(KodiItem,"year",MBitem.get("ProductionYear"),"movie")
changes = self.updateProperty(KodiItem,"mpaa",MBitem.get("OfficialRating"),"movie")
changes |= self.updateProperty(KodiItem,"runtime",duration,"movie")
changes |= self.updateProperty(KodiItem,"year",MBitem.get("ProductionYear"),"movie")
changes |= self.updateProperty(KodiItem,"mpaa",MBitem.get("OfficialRating"),"movie")
changes = self.updatePropertyArray(KodiItem,"tag",MBitem.get("Tag"),"movie")
changes |= self.updatePropertyArray(KodiItem,"tag",MBitem.get("Tag"),"movie")
if MBitem.get("CriticRating") != None:
changes = self.updateProperty(KodiItem,"rating",int(MBitem.get("CriticRating"))/10,"movie")
changes |= self.updateProperty(KodiItem,"rating",int(MBitem.get("CriticRating"))/10,"movie")
changes = self.updateProperty(KodiItem,"plotoutline",MBitem.get("ShortOverview"),"movie")
changes = self.updateProperty(KodiItem,"set",MBitem.get("TmdbCollectionName"),"movie")
changes = self.updateProperty(KodiItem,"sorttitle",MBitem.get("SortName"),"movie")
changes |= self.updateProperty(KodiItem,"plotoutline",MBitem.get("ShortOverview"),"movie")
changes |= self.updateProperty(KodiItem,"set",MBitem.get("TmdbCollectionName"),"movie")
changes |= self.updateProperty(KodiItem,"sorttitle",MBitem.get("SortName"),"movie")
if MBitem.get("ProviderIds") != None:
if MBitem.get("ProviderIds").get("Imdb") != None:
changes = self.updateProperty(KodiItem,"imdbnumber",MBitem.get("ProviderIds").get("Imdb"),"movie")
changes |= self.updateProperty(KodiItem,"imdbnumber",MBitem.get("ProviderIds").get("Imdb"),"movie")
# FIXME --> Taglines not returned by MB3 server !?
if MBitem.get("TagLines") != None:
changes = self.updateProperty(KodiItem,"tagline",MBitem.get("TagLines")[0],"movie")
changes |= self.updateProperty(KodiItem,"tagline",MBitem.get("TagLines")[0],"movie")
changes = self.updatePropertyArray(KodiItem,"writer",people.get("Writer"),"movie")
changes = self.updatePropertyArray(KodiItem,"director",people.get("Director"),"movie")
changes = self.updatePropertyArray(KodiItem,"genre",MBitem.get("Genres"),"movie")
changes |= self.updatePropertyArray(KodiItem,"writer",people.get("Writer"),"movie")
changes |= self.updatePropertyArray(KodiItem,"director",people.get("Director"),"movie")
changes |= self.updatePropertyArray(KodiItem,"genre",MBitem.get("Genres"),"movie")
if(studios != None):
for x in range(0, len(studios)):
studios[x] = studios[x].replace("/", "&")
changes = self.updatePropertyArray(KodiItem,"studio",studios,"movie")
changes |= self.updatePropertyArray(KodiItem,"studio",studios,"movie")
# FIXME --> ProductionLocations not returned by MB3 server !?
self.updatePropertyArray(KodiItem,"country",MBitem.get("ProductionLocations"),"movie")
changes |= self.updatePropertyArray(KodiItem,"country",MBitem.get("ProductionLocations"),"movie")
#trailer link
trailerUrl = None
@ -145,10 +145,10 @@ class WriteKodiDB():
if(jsonData != ""):
trailerItem = json.loads(jsonData)
trailerUrl = "plugin://plugin.video.mb3sync/?id=" + trailerItem[0].get("Id") + '&mode=play'
changes = self.updateProperty(KodiItem,"trailer",trailerUrl,"movie")
changes |= self.updateProperty(KodiItem,"trailer",trailerUrl,"movie")
#add actors
self.AddActorsToMedia(KodiItem,MBitem.get("People"),"movie")
changes |= self.AddActorsToMedia(KodiItem,MBitem.get("People"),"movie")
CreateFiles().createSTRM(MBitem)
CreateFiles().createNFO(MBitem)
@ -302,8 +302,9 @@ class WriteKodiDB():
utils.logMsg("MB3 Syncer", "updating artwork..." + str(artworkValue) + " - " + str(curValue))
xbmc.executeJSONRPC(jsoncommand %(id, artWorkName, artworkValue))
changes = True
elif artworkValue != None:
elif artworkValue != None and artworkValue != "":
xbmc.sleep(sleepVal)
utils.logMsg("MB3 Syncer", "updating artwork..." + str(artworkValue) + " - " + str(artWorkName))
xbmc.executeJSONRPC(jsoncommand %(id, artWorkName, artworkValue))
changes = True
@ -391,7 +392,7 @@ class WriteKodiDB():
changes = CreateFiles().createNFO(item)
# create strm file
changes = CreateFiles().createSTRM(item)
changes |= CreateFiles().createSTRM(item)
if changes:
utils.logMsg("MB3 Sync","Added movie to Kodi Library",item["Id"] + " - " + item["Name"])
@ -404,7 +405,7 @@ class WriteKodiDB():
changes = CreateFiles().createNFO(item)
# create strm file
changes = CreateFiles().createSTRM(item)
changes |= CreateFiles().createSTRM(item)
if changes:
utils.logMsg("MB3 Sync","Added episode to Kodi Library",item["Id"] + " - " + item["Name"])
@ -482,7 +483,6 @@ class WriteKodiDB():
if mediatype == "episode":
id = KodiItem["episodeid"]
dbPath = xbmc.translatePath("special://userdata/Database/MyVideos90.db")
connection = sqlite3.connect(dbPath)
cursor = connection.cursor()
@ -492,6 +492,8 @@ class WriteKodiDB():
for cast in KodiItem["cast"]:
currentcast.append(cast["name"])
changes = False
if(people != None):
for person in people:
if(person.get("Type") == "Actor"):
@ -518,6 +520,8 @@ class WriteKodiDB():
if mediatype == "episode":
peoplesql="INSERT OR REPLACE into actorlinkepisode(idActor, idEpisode, strRole, iOrder) values(?, ?, ?, ?)"
cursor.execute(peoplesql, (actorid,id,Role,None))
changes = True
connection.commit()
cursor.close()
return changes

View file

@ -25,7 +25,7 @@ class Service():
def __init__(self, *args ):
self.KodiMonitor = KodiMonitor.Kodi_Monitor()
utils.logMsg("MB3 Sync Service" "starting Monitor",0)
utils.logMsg("MB3 Sync Service", "starting Monitor",0)
pass
@ -115,7 +115,7 @@ class Service():
else:
xbmc.log("Not authenticated yet")
utils.logMsg("MB3 Sync Service" "stopping Service",0)
utils.logMsg("MB3 Sync Service", "stopping Service",0)
#start the service