diff --git a/resources/lib/LibrarySync.py b/resources/lib/LibrarySync.py index 04d6b3b2..79318d02 100644 --- a/resources/lib/LibrarySync.py +++ b/resources/lib/LibrarySync.py @@ -164,6 +164,14 @@ class LibrarySync(): total = len(allMB3Movies) + 1 count = 1 + # process box sets - TODO cope with movies removed from a set + boxsets = ReadEmbyDB().getBoxSets() + for boxset in boxsets: + boxsetMovies = ReadEmbyDB().getMoviesInBoxSet(boxset["Id"]) + WriteKodiDB().addBoxsetToKodiLibrary(boxset) + for boxsetMovie in boxsetMovies: + WriteKodiDB().updateBoxsetToKodiLibrary(boxsetMovie,boxset) + #process updates allKodiMovies = ReadKodiDB().getKodiMovies(True) for item in allMB3Movies: diff --git a/resources/lib/ReadEmbyDB.py b/resources/lib/ReadEmbyDB.py index 74b65216..134f22d2 100644 --- a/resources/lib/ReadEmbyDB.py +++ b/resources/lib/ReadEmbyDB.py @@ -273,4 +273,46 @@ class ReadEmbyDB(): 'type' : type, 'id' : view.get("Id")}) return collections + + def getBoxSets(self): + result = None + + addon = xbmcaddon.Addon(id='plugin.video.mb3sync') + port = addon.getSetting('port') + host = addon.getSetting('ipaddress') + server = host + ":" + port + + downloadUtils = DownloadUtils() + userid = downloadUtils.getUserId() + + url = server + '/mediabrowser/Users/' + userid + '/Items?SortBy=SortName&IsVirtualUnaired=false&IsMissing=False&Fields=Name,SortName,CumulativeRunTimeTicks&Recursive=true&SortOrder=Ascending&IncludeItemTypes=BoxSet&format=json&ImageTypeLimit=1' + + jsonData = downloadUtils.downloadUrl(url, suppress=True, popup=0) + + if jsonData != None and jsonData != "": + result = json.loads(jsonData) + if(result.has_key('Items')): + result = result['Items'] + return result + + def getMoviesInBoxSet(self,boxsetId): + result = None + + addon = xbmcaddon.Addon(id='plugin.video.mb3sync') + port = addon.getSetting('port') + host = addon.getSetting('ipaddress') + server = host + ":" + port + + downloadUtils = DownloadUtils() + userid = downloadUtils.getUserId() + + url = server + '/mediabrowser/Users/' + userid + '/Items?ParentId=' + boxsetId + '&Fields=ItemCounts&format=json&ImageTypeLimit=1' + + jsonData = downloadUtils.downloadUrl(url, suppress=True, popup=0) + + if jsonData != None and jsonData != "": + result = json.loads(jsonData) + if(result.has_key('Items')): + result = result['Items'] + return result diff --git a/resources/lib/WriteKodiDB.py b/resources/lib/WriteKodiDB.py index a59b8e85..2e1754c5 100644 --- a/resources/lib/WriteKodiDB.py +++ b/resources/lib/WriteKodiDB.py @@ -911,3 +911,61 @@ class WriteKodiDB(): cursor.close() return True + + def addBoxsetToKodiLibrary(self, boxset): + #use sqlite to set add the set + dbPath = xbmc.translatePath("special://userdata/Database/MyVideos%s.db" % utils.DATABASE_VERSION_HELIX) + + connection = sqlite3.connect(dbPath) + cursor = connection.cursor() + + strSet = boxset["Name"] + # check if exists + cursor.execute("SELECT idSet FROM sets WHERE strSet = ?", (strSet,)) + result = cursor.fetchone() + setid = None + if result != None: + setid = result[0] + currentsetartsql = "SELECT type, url FROM art where media_type = ? and media_id = ? and url != ''" + cursor.execute(currentsetartsql, ("set", setid)) + existing_type_map = {} + rows = cursor.fetchall() + for row in rows: + existing_type_map[row[0] ] = row[1] + + artwork = {} + artwork["poster"] = API().getArtwork(boxset, "Primary") + artwork["banner"] = API().getArtwork(boxset, "Banner") + artwork["clearlogo"] = API().getArtwork(boxset, "Logo") + artwork["clearart"] = API().getArtwork(boxset, "Art") + artwork["landscape"] = API().getArtwork(boxset, "Thumb") + artwork["discart"] = API().getArtwork(boxset, "Disc") + artwork["fanart"] = API().getArtwork(boxset, "Backdrop") + + art_types = {'poster','fanart','landscape','clearlogo','clearart','banner','discart'} + for update_type in art_types: + if ( update_type in existing_type_map ): + if ( existing_type_map[update_type] != artwork[update_type] ) and artwork[update_type] != '': + setupdateartsql = "UPDATE art SET url = ? where media_type = ? and media_id = ? and type = ?" + cursor.execute(setupdateartsql,(artwork[update_type],"set",setid,update_type)) + elif artwork[update_type] != '': + setartsql = "INSERT INTO art(media_id, media_type, type, url) VALUES(?,?,?,?)" + cursor.execute(setartsql,(setid,"set",update_type,artwork[update_type])) + + if setid == None: + # insert not exists + setssql="INSERT INTO sets (idSet, strSet) values(?, ?)" + cursor.execute(setssql, (None,strSet)) + #if OK: + result = cursor.fetchone() + if result != None: + setid = result[0] + connection.commit() + cursor.close() + + return True + + def updateBoxsetToKodiLibrary(self, boxsetmovie, boxset): + strSet = boxset["Name"] + kodiMovie = ReadKodiDB().getKodiMovie(boxsetmovie["Id"]) + WriteKodiDB().updateProperty(kodiMovie,"set",strSet,"movie",True) \ No newline at end of file