From 19e38bec8e0c82fd64acab99b33f17c1ed722c1b Mon Sep 17 00:00:00 2001 From: shaun Date: Wed, 15 Apr 2015 12:20:08 +1000 Subject: [PATCH] Fix specials airs before, Remove Special Season 100 Mapping, Update season art Fix specials airs before values, set to -1 to make them only show up in Specials Remove Special Season 100 Mapping option Update season art when changed --- resources/language/English/strings.xml | 1 - resources/lib/ConnectionManager.py | 6 -- resources/lib/ReadEmbyDB.py | 25 +------ resources/lib/Utils.py | 16 ++--- resources/lib/WriteKodiDB.py | 98 +++++++++++++++++++++----- resources/settings.xml | 1 - 6 files changed, 88 insertions(+), 59 deletions(-) diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml index f4d776b5..395d9753 100644 --- a/resources/language/English/strings.xml +++ b/resources/language/English/strings.xml @@ -243,7 +243,6 @@ DB Sync Indication: Play Count Sync Indication: Enable HTTPS - Use Season 100 for TV Show Specials (Requires Reset) Force Transcoding Codecs diff --git a/resources/lib/ConnectionManager.py b/resources/lib/ConnectionManager.py index e55b0624..e06aa315 100644 --- a/resources/lib/ConnectionManager.py +++ b/resources/lib/ConnectionManager.py @@ -128,12 +128,6 @@ class ConnectionManager(): xbmc.log("No user selected.") xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId) return - - #TV Show specual as season 100 - setSpecialAction = xbmcgui.Dialog().yesno("TV Show Specials Handling", "Use season 100 for TV Show Specials?") - if setSpecialAction == 1: - self.logMsg("TV Show Specials will be assigned season 100", 0) - addon.setSetting("useSeason100ForSpecials", "true") # Option to play from http setPlayback = xbmcgui.Dialog().yesno("Playback option", "Play your files using HTTP?") diff --git a/resources/lib/ReadEmbyDB.py b/resources/lib/ReadEmbyDB.py index 8812f042..9581c11b 100644 --- a/resources/lib/ReadEmbyDB.py +++ b/resources/lib/ReadEmbyDB.py @@ -160,29 +160,8 @@ class ReadEmbyDB(): result = json.loads(jsonData) if(result.has_key('Items')): result = result['Items'] - result = self.changeSeasonSpecialToSeason100(result) return result - - def changeSeasonSpecialToSeason100(self, result): - addon = xbmcaddon.Addon(id='plugin.video.emby') - if(addon.getSetting("useSeason100ForSpecials") != "true"): - return result - - for item in result: - if(item != None and item.get("IndexNumber") != None and item.get("IndexNumber") == 0): - item["IndexNumber"] = 100 - return result - - def changeEpisodeSpecialToSeason100(self, result): - addon = xbmcaddon.Addon(id='plugin.video.emby') - if(addon.getSetting("useSeason100ForSpecials") != "true"): - return result - - for item in result: - if(item != None and item.get("ParentIndexNumber") != None and item.get("ParentIndexNumber") == 0): - item["ParentIndexNumber"] = 100 - return result def getEpisodes(self, showId, fullinfo = False): result = None @@ -205,7 +184,6 @@ class ReadEmbyDB(): result = json.loads(jsonData) if(result.has_key('Items')): result = result['Items'] - result = self.changeEpisodeSpecialToSeason100(result) return result @@ -234,7 +212,6 @@ class ReadEmbyDB(): result = json.loads(jsonData) if(result.has_key('Items')): result = result['Items'] - result = self.changeEpisodeSpecialToSeason100(result) return result @@ -363,4 +340,4 @@ class ReadEmbyDB(): result = json.loads(jsonData) if(result.has_key('Items')): result = result['Items'] - return result \ No newline at end of file + return result diff --git a/resources/lib/Utils.py b/resources/lib/Utils.py index c84da723..2d8ee915 100644 --- a/resources/lib/Utils.py +++ b/resources/lib/Utils.py @@ -154,20 +154,17 @@ def removeDirectory(path): def reset(): - WINDOW = xbmcgui.Window( 10000 ) - username = WINDOW.getProperty('currUser') - - user_delete = False - return_value = xbmcgui.Dialog().yesno("Warning", "Are you sure you want to reset your local database?") + return_value = xbmcgui.Dialog().yesno("Warning", "Are you sure you want to reset your local Kodi database?") if return_value == 0: return # Ask if user information should be deleted too. - return_user = xbmcgui.Dialog().yesno("Warning", "Do you wish to erase your saved Emby user information for %s?" % username) + return_user = xbmcgui.Dialog().yesno("Warning", "Reset all Emby Addon settings?") + delete_settings = False if return_user == 1: - user_delete = True + delete_settings = True # first stop any db sync WINDOW = xbmcgui.Window( 10000 ) @@ -175,6 +172,7 @@ def reset(): count = 0 while(WINDOW.getProperty("SyncDatabaseRunning") == "true"): + xbmc.log("Sync Running, will wait : " + str(count)) count += 1 if(count > 10): dialog = xbmcgui.Dialog() @@ -199,11 +197,11 @@ def reset(): # reset the install run flag WINDOW.setProperty("SyncInstallRunDone", "false") - if (user_delete == True): + if (delete_settings == True): addondir = xbmc.translatePath(addonSettings.getAddonInfo('profile')) dataPath = os.path.join(addondir + "settings.xml") xbmcvfs.delete(dataPath) - xbmc.log("Deleted saved user information for: %s" % username) + xbmc.log("Deleting : settings.xml") dialog = xbmcgui.Dialog() dialog.ok('Emby Reset', 'Database reset has completed, Kodi will now restart to apply the changes.') diff --git a/resources/lib/WriteKodiDB.py b/resources/lib/WriteKodiDB.py index ca5e9c68..6449f5f5 100644 --- a/resources/lib/WriteKodiDB.py +++ b/resources/lib/WriteKodiDB.py @@ -377,8 +377,8 @@ class WriteKodiDB(): #set Filename (will update the filename in db if changed) playurl = PlayUtils().getPlayUrl(server, MBitem["Id"], MBitem) - self.setKodiFilename(KodiItem["episodeid"], KodiItem["file"], playurl, "episode", MBitem["Id"], connection, cursor) - + changes |= self.setKodiFilename(KodiItem["episodeid"], KodiItem["file"], playurl, "episode", MBitem["Id"], connection, cursor) + #update common properties if KodiItem["runtime"] == 0: changes |= self.updateProperty(KodiItem,"runtime",(int(timeInfo.get('Duration'))*60),"episode") @@ -399,7 +399,11 @@ class WriteKodiDB(): if MBitem.get("ParentIndexNumber") != None: season = int(MBitem.get("ParentIndexNumber")) + #print "ParentIndexNumber:" + str(season) changes |= self.updateProperty(KodiItem,"season",season,"episode") + # removed for now as setting c15 and c16 to -1 just shows specials in the special folder only + #if(season == 0): + # changes |= self.setSpecialAirsDetails(MBitem, KodiItem, connection, cursor) if MBitem.get("IndexNumber") != None: episode = int(MBitem.get("IndexNumber")) @@ -955,8 +959,8 @@ class WriteKodiDB(): cursor.execute("select coalesce(max(idEpisode),0) as episodeid from episode") episodeid = cursor.fetchone()[0] episodeid = episodeid + 1 - pathsql="INSERT into episode(idEpisode, idFile, c00, c01, c03, c05, c09, c20, c12, c13, c14, idShow) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" - cursor.execute(pathsql, (episodeid, fileid, title, plot, rating, premieredate, runtime, MBitem["Id"], season, episode, title, showid)) + pathsql = "INSERT into episode(idEpisode, idFile, c00, c01, c03, c05, c09, c20, c12, c13, c14, idShow, c15, c16) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + cursor.execute(pathsql, (episodeid, fileid, title, plot, rating, premieredate, runtime, MBitem["Id"], season, episode, title, showid, "-1", "-1")) try: connection.commit() @@ -1090,21 +1094,39 @@ class WriteKodiDB(): seasonid = cursor.fetchone()[0] seasonid = seasonid + 1 cursor.execute("INSERT into seasons(idSeason, idShow, season) values(?, ?, ?)", (seasonid, tvshowid, season["IndexNumber"])) + else: + seasonid = result[0] - # this is for handling specials as season 100, it allows art to be correctly set form the season 0 Emby data - if(season["IndexNumber"] == 100): - season["IndexNumber"] = 0 - - #insert artwork - if API().getArtwork(season, "Thumb") != "": - cursor.execute("INSERT into art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid,"season","landscape",API().getArtwork(season, "Thumb"))) - if API().getArtwork(season, "Primary") != "": - cursor.execute("INSERT into art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid,"season","poster",API().getArtwork(season, "Primary"))) - if API().getArtwork(season, "Banner") != "": - cursor.execute("INSERT into art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid,"season","banner",API().getArtwork(season, "Banner"))) - - connection.commit() - + #update artwork + imageUrl = API().getArtwork(season, "Thumb") + self.updateSeasonArt(imageUrl, seasonid, "landscape", cursor) + + imageUrl = API().getArtwork(season, "Primary") + self.updateSeasonArt(imageUrl, seasonid, "poster", cursor) + + imageUrl = API().getArtwork(season, "Banner") + self.updateSeasonArt(imageUrl, seasonid, "banner", cursor) + + connection.commit() + + def updateSeasonArt(self, imageUrl, seasonid, imageType, cursor): + updateDone = False + if imageUrl != "": + cursor.execute("SELECT url FROM art WHERE media_id = ? AND media_type = ? AND type = ?", (seasonid, "season", imageType)) + result = cursor.fetchone() + if(result == None): + utils.logMsg("SeasonArt", "Adding Art Link for SeasonId: " + str(seasonid) + " (" + imageUrl + ")") + cursor.execute("INSERT INTO art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid, "season", imageType, imageUrl)) + updateDone = True + else: + url = result[0]; + if(url != imageUrl): + utils.logMsg("SeasonArt", "Updating Art Link for SeasonId: " + seasonid + " (" + url + ") -> (" + imageUrl + ")") + cursor.execute("UPDATE art set url = ? WHERE media_id = ? AND media_type = ? AND type = ?", (imageUrl, seasonid, "season", imageType)) + updateDone = True + + return updateDone + def setKodiResumePoint(self, id, resume_seconds, total_seconds, fileType): #use sqlite to set the resume point while json api doesn't support this yet #todo --> submit PR to kodi team to get this added to the jsonrpc api @@ -1131,6 +1153,46 @@ class WriteKodiDB(): cursor.execute(bookmarksql, (bookmarkId,fileid,resume_seconds,total_seconds,None,"DVDPlayer",None,1)) connection.commit() cursor.close() + + ''' + # removed for now as setting c15 and c16 to -1 looks like it just shows specials in the special folder only + def setSpecialAirsDetails(self, MBitem, KodiItem, connection, cursor): + + changes = False + + cursor.execute("SELECT c15, c16 FROM episode WHERE idEpisode = ?",(KodiItem["episodeid"],)) + result = cursor.fetchone() + if(result != None): + + c15 = -1 + c16 = -1 + + if(result[0] != None and result[0] != "" and result[0] != "None"): + c15 = int(result[0]) + if(result[1] != None and result[1] != "" and result[1] != "None"): + c16 = int(result[1]) + + airsBeforeSeasonNumber = MBitem.get("AirsBeforeSeasonNumber") + airsBeforeEpisodeNumber = MBitem.get("AirsBeforeEpisodeNumber") + #AirsAfterSeasonNumber + + if(airsBeforeSeasonNumber == None): + airsBeforeSeasonNumber = 0 + + if(airsBeforeEpisodeNumber == None): + airsBeforeEpisodeNumber = 0 + + if(airsBeforeSeasonNumber != None and airsBeforeEpisodeNumber != None): + if(airsBeforeSeasonNumber != c15 or airsBeforeEpisodeNumber != c16): + utils.logMsg("Emby","Special_Airs_Info Kodi: " + str(c15) + " " + str(c16)) + utils.logMsg("Emby","Special_Airs_Info Emby : " + str(airsBeforeSeasonNumber) + " " + str(airsBeforeEpisodeNumber)) + sql = "UPDATE episode set c15 = ?, c16 = ? WHERE idEpisode = ?" + cursor.execute(sql, (airsBeforeSeasonNumber, airsBeforeEpisodeNumber, KodiItem["episodeid"])) + connection.commit() + changes = True + + return changes + ''' def setKodiFilename(self, id, oldFileName, newFileName, fileType, mbId, connection, cursor): #use sqlite to set the filename in DB -- needed to avoid problems with resumepoints etc diff --git a/resources/settings.xml b/resources/settings.xml index df8664ad..b0857610 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -15,7 +15,6 @@ -