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
This commit is contained in:
parent
3ac1835800
commit
19e38bec8e
6 changed files with 88 additions and 59 deletions
|
@ -243,7 +243,6 @@
|
||||||
<string id="30241">DB Sync Indication:</string>
|
<string id="30241">DB Sync Indication:</string>
|
||||||
<string id="30242">Play Count Sync Indication:</string>
|
<string id="30242">Play Count Sync Indication:</string>
|
||||||
<string id="30243">Enable HTTPS</string>
|
<string id="30243">Enable HTTPS</string>
|
||||||
<string id="30244">Use Season 100 for TV Show Specials (Requires Reset)</string>
|
|
||||||
<string id="30245">Force Transcoding Codecs</string>
|
<string id="30245">Force Transcoding Codecs</string>
|
||||||
|
|
||||||
<!-- Default views -->
|
<!-- Default views -->
|
||||||
|
|
|
@ -129,12 +129,6 @@ class ConnectionManager():
|
||||||
xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId)
|
xbmc.executebuiltin('Addon.OpenSettings(%s)' % self.addonId)
|
||||||
return
|
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
|
# Option to play from http
|
||||||
setPlayback = xbmcgui.Dialog().yesno("Playback option", "Play your files using HTTP?")
|
setPlayback = xbmcgui.Dialog().yesno("Playback option", "Play your files using HTTP?")
|
||||||
if setPlayback == 1:
|
if setPlayback == 1:
|
||||||
|
|
|
@ -160,30 +160,9 @@ class ReadEmbyDB():
|
||||||
result = json.loads(jsonData)
|
result = json.loads(jsonData)
|
||||||
if(result.has_key('Items')):
|
if(result.has_key('Items')):
|
||||||
result = result['Items']
|
result = result['Items']
|
||||||
result = self.changeSeasonSpecialToSeason100(result)
|
|
||||||
|
|
||||||
return 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):
|
def getEpisodes(self, showId, fullinfo = False):
|
||||||
result = None
|
result = None
|
||||||
|
|
||||||
|
@ -205,7 +184,6 @@ class ReadEmbyDB():
|
||||||
result = json.loads(jsonData)
|
result = json.loads(jsonData)
|
||||||
if(result.has_key('Items')):
|
if(result.has_key('Items')):
|
||||||
result = result['Items']
|
result = result['Items']
|
||||||
result = self.changeEpisodeSpecialToSeason100(result)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -234,7 +212,6 @@ class ReadEmbyDB():
|
||||||
result = json.loads(jsonData)
|
result = json.loads(jsonData)
|
||||||
if(result.has_key('Items')):
|
if(result.has_key('Items')):
|
||||||
result = result['Items']
|
result = result['Items']
|
||||||
result = self.changeEpisodeSpecialToSeason100(result)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
@ -154,20 +154,17 @@ def removeDirectory(path):
|
||||||
|
|
||||||
def reset():
|
def reset():
|
||||||
|
|
||||||
WINDOW = xbmcgui.Window( 10000 )
|
return_value = xbmcgui.Dialog().yesno("Warning", "Are you sure you want to reset your local Kodi database?")
|
||||||
username = WINDOW.getProperty('currUser')
|
|
||||||
|
|
||||||
user_delete = False
|
|
||||||
return_value = xbmcgui.Dialog().yesno("Warning", "Are you sure you want to reset your local database?")
|
|
||||||
|
|
||||||
if return_value == 0:
|
if return_value == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Ask if user information should be deleted too.
|
# 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:
|
if return_user == 1:
|
||||||
user_delete = True
|
delete_settings = True
|
||||||
|
|
||||||
# first stop any db sync
|
# first stop any db sync
|
||||||
WINDOW = xbmcgui.Window( 10000 )
|
WINDOW = xbmcgui.Window( 10000 )
|
||||||
|
@ -175,6 +172,7 @@ def reset():
|
||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
while(WINDOW.getProperty("SyncDatabaseRunning") == "true"):
|
while(WINDOW.getProperty("SyncDatabaseRunning") == "true"):
|
||||||
|
xbmc.log("Sync Running, will wait : " + str(count))
|
||||||
count += 1
|
count += 1
|
||||||
if(count > 10):
|
if(count > 10):
|
||||||
dialog = xbmcgui.Dialog()
|
dialog = xbmcgui.Dialog()
|
||||||
|
@ -199,11 +197,11 @@ def reset():
|
||||||
# reset the install run flag
|
# reset the install run flag
|
||||||
WINDOW.setProperty("SyncInstallRunDone", "false")
|
WINDOW.setProperty("SyncInstallRunDone", "false")
|
||||||
|
|
||||||
if (user_delete == True):
|
if (delete_settings == True):
|
||||||
addondir = xbmc.translatePath(addonSettings.getAddonInfo('profile'))
|
addondir = xbmc.translatePath(addonSettings.getAddonInfo('profile'))
|
||||||
dataPath = os.path.join(addondir + "settings.xml")
|
dataPath = os.path.join(addondir + "settings.xml")
|
||||||
xbmcvfs.delete(dataPath)
|
xbmcvfs.delete(dataPath)
|
||||||
xbmc.log("Deleted saved user information for: %s" % username)
|
xbmc.log("Deleting : settings.xml")
|
||||||
|
|
||||||
dialog = xbmcgui.Dialog()
|
dialog = xbmcgui.Dialog()
|
||||||
dialog.ok('Emby Reset', 'Database reset has completed, Kodi will now restart to apply the changes.')
|
dialog.ok('Emby Reset', 'Database reset has completed, Kodi will now restart to apply the changes.')
|
||||||
|
|
|
@ -377,7 +377,7 @@ class WriteKodiDB():
|
||||||
|
|
||||||
#set Filename (will update the filename in db if changed)
|
#set Filename (will update the filename in db if changed)
|
||||||
playurl = PlayUtils().getPlayUrl(server, MBitem["Id"], MBitem)
|
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
|
#update common properties
|
||||||
if KodiItem["runtime"] == 0:
|
if KodiItem["runtime"] == 0:
|
||||||
|
@ -399,7 +399,11 @@ class WriteKodiDB():
|
||||||
|
|
||||||
if MBitem.get("ParentIndexNumber") != None:
|
if MBitem.get("ParentIndexNumber") != None:
|
||||||
season = int(MBitem.get("ParentIndexNumber"))
|
season = int(MBitem.get("ParentIndexNumber"))
|
||||||
|
#print "ParentIndexNumber:" + str(season)
|
||||||
changes |= self.updateProperty(KodiItem,"season",season,"episode")
|
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:
|
if MBitem.get("IndexNumber") != None:
|
||||||
episode = int(MBitem.get("IndexNumber"))
|
episode = int(MBitem.get("IndexNumber"))
|
||||||
|
@ -955,8 +959,8 @@ class WriteKodiDB():
|
||||||
cursor.execute("select coalesce(max(idEpisode),0) as episodeid from episode")
|
cursor.execute("select coalesce(max(idEpisode),0) as episodeid from episode")
|
||||||
episodeid = cursor.fetchone()[0]
|
episodeid = cursor.fetchone()[0]
|
||||||
episodeid = episodeid + 1
|
episodeid = episodeid + 1
|
||||||
pathsql="INSERT into episode(idEpisode, idFile, c00, c01, c03, c05, c09, c20, c12, c13, c14, idShow) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
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))
|
cursor.execute(pathsql, (episodeid, fileid, title, plot, rating, premieredate, runtime, MBitem["Id"], season, episode, title, showid, "-1", "-1"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
connection.commit()
|
connection.commit()
|
||||||
|
@ -1090,21 +1094,39 @@ class WriteKodiDB():
|
||||||
seasonid = cursor.fetchone()[0]
|
seasonid = cursor.fetchone()[0]
|
||||||
seasonid = seasonid + 1
|
seasonid = seasonid + 1
|
||||||
cursor.execute("INSERT into seasons(idSeason, idShow, season) values(?, ?, ?)", (seasonid, tvshowid, season["IndexNumber"]))
|
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
|
#update artwork
|
||||||
if(season["IndexNumber"] == 100):
|
imageUrl = API().getArtwork(season, "Thumb")
|
||||||
season["IndexNumber"] = 0
|
self.updateSeasonArt(imageUrl, seasonid, "landscape", cursor)
|
||||||
|
|
||||||
#insert artwork
|
imageUrl = API().getArtwork(season, "Primary")
|
||||||
if API().getArtwork(season, "Thumb") != "":
|
self.updateSeasonArt(imageUrl, seasonid, "poster", cursor)
|
||||||
cursor.execute("INSERT into art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid,"season","landscape",API().getArtwork(season, "Thumb")))
|
|
||||||
if API().getArtwork(season, "Primary") != "":
|
imageUrl = API().getArtwork(season, "Banner")
|
||||||
cursor.execute("INSERT into art(media_id, media_type, type, url) values(?, ?, ?, ?)", (seasonid,"season","poster",API().getArtwork(season, "Primary")))
|
self.updateSeasonArt(imageUrl, seasonid, "banner", cursor)
|
||||||
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()
|
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):
|
def setKodiResumePoint(self, id, resume_seconds, total_seconds, fileType):
|
||||||
#use sqlite to set the resume point while json api doesn't support this yet
|
#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
|
#todo --> submit PR to kodi team to get this added to the jsonrpc api
|
||||||
|
@ -1132,6 +1154,46 @@ class WriteKodiDB():
|
||||||
connection.commit()
|
connection.commit()
|
||||||
cursor.close()
|
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):
|
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
|
#use sqlite to set the filename in DB -- needed to avoid problems with resumepoints etc
|
||||||
#return True if any action is performed, False if no action is performed
|
#return True if any action is performed, False if no action is performed
|
||||||
|
|
|
@ -15,7 +15,6 @@
|
||||||
<category label="Sync Options">
|
<category label="Sync Options">
|
||||||
<!-- <setting id="syncMovieBoxSets" type="bool" label="30238" default="true" visible="true" enable="true" /> -->
|
<!-- <setting id="syncMovieBoxSets" type="bool" label="30238" default="true" visible="true" enable="true" /> -->
|
||||||
<setting id="enablePlayCountSync" type="bool" label="30240" default="true" visible="true" enable="true" />
|
<setting id="enablePlayCountSync" type="bool" label="30240" default="true" visible="true" enable="true" />
|
||||||
<setting id="useSeason100ForSpecials" type="bool" label="30244" default="false" visible="true" enable="true" />
|
|
||||||
<setting id="dbSyncIndication" type="labelenum" label="30241" values="None|Notify OnChange|Notify OnFinish|BG Progress|Dialog Progress" default="None" />
|
<setting id="dbSyncIndication" type="labelenum" label="30241" values="None|Notify OnChange|Notify OnFinish|BG Progress|Dialog Progress" default="None" />
|
||||||
<setting id="playCountSyncIndication" type="labelenum" label="30242" values="None|Notify OnChange|Notify OnFinish|BG Progress|Dialog Progress" default="None" />
|
<setting id="playCountSyncIndication" type="labelenum" label="30242" values="None|Notify OnChange|Notify OnFinish|BG Progress|Dialog Progress" default="None" />
|
||||||
</category>
|
</category>
|
||||||
|
|
Loading…
Reference in a new issue