From 91a73128b181e9a576ebaed2f654b1f0b4df0a89 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sun, 3 May 2015 01:46:11 +0200 Subject: [PATCH] changed checksum to use both userdata and etag to detect changes added favotite shows and movies tags --- resources/lib/API.py | 27 +++++----- resources/lib/WriteKodiDB.py | 102 ++++++++++------------------------- 2 files changed, 41 insertions(+), 88 deletions(-) diff --git a/resources/lib/API.py b/resources/lib/API.py index 85f16956..3239f60b 100644 --- a/resources/lib/API.py +++ b/resources/lib/API.py @@ -123,23 +123,22 @@ class API(): } def getChecksum(self, item): - # use the etags or serverside checksum for this if available - # else just add some fields to a string + # use the etags checksum for this if available + # AND the userdata checksum = "" if item.get("Etag") != None: checksum = item.get("Etag") - else: userData = item.get("UserData") - if(userData != None): - checksum += str(userData.get("Played")) - checksum += str(userData.get("IsFavorite")) - if userData.get('UnplayedItemCount') != None: - checksum += str(userData.get("UnplayedItemCount")) - if userData.get('LastPlayedDate') != None: - checksum += str(userData.get("LastPlayedDate")) - if userData.get('PlaybackPositionTicks') != None: - checksum += str(userData.get("PlaybackPositionTicks")) + if(userData != None): + checksum += str(userData.get("Played")) + checksum += str(userData.get("IsFavorite")) + if userData.get('UnplayedItemCount') != None: + checksum += str(userData.get("UnplayedItemCount")) + if userData.get('LastPlayedDate') != None: + checksum += str(userData.get("LastPlayedDate")) + if userData.get('PlaybackPositionTicks') != None: + checksum += str(userData.get("PlaybackPositionTicks")) return checksum @@ -152,9 +151,9 @@ class API(): else: watched="False" if userData.get("IsFavorite") == True: - favorite="True" + favorite=True else: - favorite="False" + favorite=False if(userData.get("Played") == True): playcount="1" else: diff --git a/resources/lib/WriteKodiDB.py b/resources/lib/WriteKodiDB.py index cc65050f..eacfb0d5 100644 --- a/resources/lib/WriteKodiDB.py +++ b/resources/lib/WriteKodiDB.py @@ -194,6 +194,12 @@ class WriteKodiDB(): #add streamdetails self.AddStreamDetailsToMedia(API().getMediaStreams(MBitem), fileid, cursor) + #add to favorites tag --> todo translated label for favorites ? + if userData.get("Favorite"): + self.AddTagToMedia(movieid, "Favorite movies", "movie", cursor) + else: + self.AddTagToMedia(movieid, "Favorite movies", "movie", cursor, True) + #set resume point resume = int(round(float(timeInfo.get("ResumeTime"))))*60 total = int(round(float(timeInfo.get("TotalTime"))))*60 @@ -421,7 +427,7 @@ class WriteKodiDB(): #link the path pathsql="insert into tvshowlinkpath(idShow,idPath) values(?, ?)" cursor.execute(pathsql, (showid,pathid)) - + #add the viewtag self.AddTagToMedia(showid, viewTag, "tvshow", cursor) @@ -443,6 +449,12 @@ class WriteKodiDB(): #update studios self.AddStudiosToMedia(showid, studios, "tvshow", cursor) + + #add to favorites tag --> todo translated label for favorites ? + if userData.get("Favorite"): + self.AddTagToMedia(showid, "Favorite tvshows", "tvshow", cursor) + else: + self.AddTagToMedia(showid, "Favorite tvshows", "tvshow", cursor, True) #update artwork self.addOrUpdateArt(API().getArtwork(MBitem, "Primary"), showid, "tvshow", "thumb", cursor) @@ -457,72 +469,6 @@ class WriteKodiDB(): #update season details self.updateSeasons(MBitem["Id"], showid, connection, cursor) - - def addMusicVideoToKodiLibrary( self, MBitem, connection, cursor ): - - #adds a musicvideo to Kodi by directly inserting it to connectionthe DB while there is no addMusicVideo available on the json API - #TODO: PR at Kodi team for a addMusicVideo endpoint on their API - - addon = xbmcaddon.Addon(id='plugin.video.emby') - port = addon.getSetting('port') - host = addon.getSetting('ipaddress') - server = host + ":" + port - - timeInfo = API().getTimeInfo(MBitem) - userData=API().getUserData(MBitem) - - playurl = PlayUtils().getPlayUrl(server, MBitem["Id"], MBitem) - playurl = utils.convertEncoding(playurl) - - if MBitem.get("DateCreated") != None: - dateadded = MBitem["DateCreated"].replace("T"," ") - dateadded = dateadded.replace(".0000000Z","") - else: - dateadded = None - - path = "plugin://plugin.video.emby/musicvideos/" - filename = "plugin://plugin.video.emby/musicvideos/?mode=play&id=" + MBitem["Id"] - - #create the path - cursor.execute("SELECT idPath as pathid FROM path WHERE strPath = ?",(path,)) - result = cursor.fetchone() - if result != None: - pathid = result[0] - else: - cursor.execute("select coalesce(max(idPath),0) as pathid from path") - pathid = cursor.fetchone()[0] - pathid = pathid + 1 - pathsql = "insert into path(idPath, strPath, strContent, strScraper, noUpdate) values(?, ?, ?, ?, ?)" - cursor.execute(pathsql, (pathid,path,"movies","metadata.local",1)) - - playcount = None - if userData.get("PlayCount") == "1": - playcount = 1 - - #create the file if not exists - cursor.execute("SELECT idFile as fileid FROM files WHERE strFilename = ?",(filename,)) - result = cursor.fetchone() - if result != None: - fileid = result[0] - if result == None: - cursor.execute("select coalesce(max(idFile),0) as fileid from files") - fileid = cursor.fetchone()[0] - fileid = fileid + 1 - pathsql="insert into files(idFile, idPath, strFilename, playCount, lastPlayed, dateAdded) values(?, ?, ?, ?, ?, ?)" - cursor.execute(pathsql, (fileid,pathid,filename,playcount,userData.get("LastPlayedDate"),dateadded)) - - runtime = int(timeInfo.get('Duration'))*60 - plot = utils.convertEncoding(API().getOverview(MBitem)) - title = utils.convertEncoding(MBitem["Name"]) - - #create the musicvideo - cursor.execute("select coalesce(max(idMVideo),0) as musicvideoid from musicvideo") - musicvideoid = cursor.fetchone()[0] - musicvideoid = musicvideoid + 1 - pathsql="insert into musicvideo(idMVideo, idFile, c00, c04, c08, c23) values(?, ?, ?, ?, ?, ?)" - cursor.execute(pathsql, (musicvideoid, fileid, title, runtime, plot, MBitem["Id"])) - - def addOrUpdateEpisodeToKodiLibrary(self, embyId, showid, connection, cursor): # If the episode already exist in the local Kodi DB we'll perform a full item update @@ -939,7 +885,7 @@ class WriteKodiDB(): sql="INSERT OR REPLACE into studiolinkepisode(idstudio, idEpisode) values(?, ?)" cursor.execute(sql, (idstudio,id)) - def AddTagToMedia(self, id, tag, mediatype, cursor): + def AddTagToMedia(self, id, tag, mediatype, cursor, doRemove=False): if tag: @@ -962,9 +908,13 @@ class WriteKodiDB(): cursor.execute(sql, (tag_id,tag)) utils.logMsg("AddTagToMedia", "Adding tag: " + tag) - #assign tag to item - sql="INSERT OR REPLACE into tag_link(tag_id, media_id, media_type) values(?, ?, ?)" - cursor.execute(sql, (tag_id, id, mediatype)) + #assign tag to item + if doRemove: + sql="DELETE FROM tag_link WHERE media_id = ? AND media_type = ? AND tag_id = ?" + cursor.execute(sql, (id, mediatype, tag_id)) + else: + sql="INSERT OR REPLACE into tag_link(tag_id, media_id, media_type) values(?, ?, ?)" + cursor.execute(sql, (tag_id, id, mediatype)) else: idTag = None @@ -980,9 +930,13 @@ class WriteKodiDB(): sql="insert into tag(idTag, strTag) values(?, ?)" cursor.execute(sql, (idTag,tag)) - #assign tag to item - sql="INSERT OR REPLACE into taglinks(idTag, idMedia, media_type) values(?, ?, ?)" - cursor.execute(sql, (idTag, id, mediatype)) + #assign tag to item + if doRemove: + sql="DELETE FROM taglinks WHERE idMedia = ? AND media_type = ? AND idTag = ?" + cursor.execute(sql, (id, mediatype, idTag)) + else: + sql="INSERT OR REPLACE into taglinks(idTag, idMedia, media_type) values(?, ?, ?)" + cursor.execute(sql, (idTag, id, mediatype)) def AddStreamDetailsToMedia(self, streamdetails, fileid, cursor):