From d080c49821edf260796a57474882c37089cbdfdf Mon Sep 17 00:00:00 2001 From: SpootDev Date: Mon, 4 Apr 2016 16:21:05 -0500 Subject: [PATCH] cleanup --- contextmenu.py | 315 +++++++++++++++---------------- resources/lib/downloadutils.py | 4 +- resources/lib/entrypoint.py | 6 +- resources/lib/kodimonitor.py | 6 +- resources/lib/player.py | 8 +- resources/lib/read_embyserver.py | 10 +- 6 files changed, 174 insertions(+), 175 deletions(-) diff --git a/contextmenu.py b/contextmenu.py index 3b367ab2..c91da6a1 100644 --- a/contextmenu.py +++ b/contextmenu.py @@ -1,159 +1,158 @@ -# -*- coding: utf-8 -*- - -################################################################################################# - -import os -import sys -import urlparse - -import xbmc -import xbmcaddon -import xbmcgui - -addon_ = xbmcaddon.Addon(id='plugin.video.emby') -addon_path = addon_.getAddonInfo('path').decode('utf-8') -base_resource = xbmc.translatePath(os.path.join(addon_path, 'resources', 'lib')).decode('utf-8') -sys.path.append(base_resource) - -import artwork -import utils -import clientinfo -import downloadutils -import librarysync -import read_embyserver as embyserver -import embydb_functions as embydb -import kodidb_functions as kodidb -import musicutils as musicutils -import api - -def logMsg(msg, lvl=1): - utils.logMsg("%s %s" % ("EMBY", "Contextmenu"), msg, lvl) - - -#Kodi contextmenu item to configure the emby settings -#for now used to set ratings but can later be used to sync individual items etc. -if __name__ == '__main__': - itemid = xbmc.getInfoLabel("ListItem.DBID").decode("utf-8") - itemtype = xbmc.getInfoLabel("ListItem.DBTYPE").decode("utf-8") - - emby = embyserver.Read_EmbyServer() - - embyid = "" - if not itemtype and xbmc.getCondVisibility("Container.Content(albums)"): itemtype = "album" - if not itemtype and xbmc.getCondVisibility("Container.Content(artists)"): itemtype = "artist" - if not itemtype and xbmc.getCondVisibility("Container.Content(songs)"): itemtype = "song" - if not itemtype and xbmc.getCondVisibility("Container.Content(pictures)"): itemtype = "picture" - - if (not itemid or itemid == "-1") and xbmc.getInfoLabel("ListItem.Property(embyid)"): - embyid = xbmc.getInfoLabel("ListItem.Property(embyid)") - else: - embyconn = utils.kodiSQL('emby') - embycursor = embyconn.cursor() - emby_db = embydb.Embydb_Functions(embycursor) - item = emby_db.getItem_byKodiId(itemid, itemtype) - embycursor.close() - if item: embyid = item[0] - - logMsg("Contextmenu opened for embyid: %s - itemtype: %s" %(embyid,itemtype)) - - if embyid: - item = emby.getItem(embyid) - API = api.API(item) - userdata = API.getUserData() - likes = userdata['Likes'] - favourite = userdata['Favorite'] - - options=[] - if likes == True: - #clear like for the item - options.append(utils.language(30402)) - if likes == False or likes == None: - #Like the item - options.append(utils.language(30403)) - if likes == True or likes == None: - #Dislike the item - options.append(utils.language(30404)) - if favourite == False: - #Add to emby favourites - options.append(utils.language(30405)) - if favourite == True: - #Remove from emby favourites - options.append(utils.language(30406)) - if itemtype == "song": - #Set custom song rating - options.append(utils.language(30407)) - - #delete item - options.append(utils.language(30409)) - - #addon settings - options.append(utils.language(30408)) - - #display select dialog and process results - header = utils.language(30401) - ret = xbmcgui.Dialog().select(header, options) - if ret != -1: - if options[ret] == utils.language(30402): - emby.updateUserRating(embyid, deletelike=True) - if options[ret] == utils.language(30403): - emby.updateUserRating(embyid, like=True) - if options[ret] == utils.language(30404): - emby.updateUserRating(embyid, like=False) - if options[ret] == utils.language(30405): - emby.updateUserRating(embyid, favourite=True) - if options[ret] == utils.language(30406): - emby.updateUserRating(embyid, favourite=False) - if options[ret] == utils.language(30407): - kodiconn = utils.kodiSQL('music') - kodicursor = kodiconn.cursor() - query = ' '.join(("SELECT rating", "FROM song", "WHERE idSong = ?" )) - kodicursor.execute(query, (itemid,)) - currentvalue = int(round(float(kodicursor.fetchone()[0]),0)) - newvalue = xbmcgui.Dialog().numeric(0, "Set custom song rating (0-5)", str(currentvalue)) - if newvalue: - newvalue = int(newvalue) - if newvalue > 5: newvalue = "5" - if utils.settings('enableUpdateSongRating') == "true": - musicutils.updateRatingToFile(newvalue, API.getFilePath()) - if utils.settings('enableExportSongRating') == "true": - like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(newvalue) - emby.updateUserRating(embyid, like, favourite, deletelike) - query = ' '.join(( "UPDATE song","SET rating = ?", "WHERE idSong = ?" )) - kodicursor.execute(query, (newvalue,itemid,)) - kodiconn.commit() - - if options[ret] == utils.language(30408): - #Open addon settings - xbmc.executebuiltin("Addon.OpenSettings(plugin.video.emby)") - - if options[ret] == utils.language(30409): - #delete item from the server - delete = True - if utils.settings('skipContextMenu') != "true": - resp = xbmcgui.Dialog().yesno( - heading="Confirm delete", - line1=("Delete file from Emby Server? This will " - "also delete the file(s) from disk!")) - if not resp: - logMsg("User skipped deletion for: %s." % embyid, 1) - delete = False - - if delete: - import downloadutils - doUtils = downloadutils.DownloadUtils() - url = "{server}/emby/Items/%s?format=json" % embyid - logMsg("Deleting request: %s" % embyid, 0) - doUtils.downloadUrl(url, type="DELETE") - - '''if utils.settings('skipContextMenu') != "true": - if xbmcgui.Dialog().yesno( - heading="Confirm delete", - line1=("Delete file on Emby Server? This will " - "also delete the file(s) from disk!")): - import downloadutils - doUtils = downloadutils.DownloadUtils() - url = "{server}/emby/Items/%s?format=json" % embyid - doUtils.downloadUrl(url, type="DELETE")''' - - xbmc.sleep(500) +# -*- coding: utf-8 -*- + +################################################################################################# + +import os +import sys +import urlparse + +import xbmc +import xbmcaddon +import xbmcgui + +addon_ = xbmcaddon.Addon(id='plugin.video.emby') +addon_path = addon_.getAddonInfo('path').decode('utf-8') +base_resource = xbmc.translatePath(os.path.join(addon_path, 'resources', 'lib')).decode('utf-8') +sys.path.append(base_resource) + +import artwork +import utils +import clientinfo +import downloadutils +import librarysync +import read_embyserver as embyserver +import embydb_functions as embydb +import kodidb_functions as kodidb +import musicutils as musicutils +import api + +def logMsg(msg, lvl=1): + utils.logMsg("%s %s" % ("EMBY", "Contextmenu"), msg, lvl) + + +#Kodi contextmenu item to configure the emby settings +#for now used to set ratings but can later be used to sync individual items etc. +if __name__ == '__main__': + itemid = xbmc.getInfoLabel("ListItem.DBID").decode("utf-8") + itemtype = xbmc.getInfoLabel("ListItem.DBTYPE").decode("utf-8") + + emby = embyserver.Read_EmbyServer() + + embyid = "" + if not itemtype and xbmc.getCondVisibility("Container.Content(albums)"): itemtype = "album" + if not itemtype and xbmc.getCondVisibility("Container.Content(artists)"): itemtype = "artist" + if not itemtype and xbmc.getCondVisibility("Container.Content(songs)"): itemtype = "song" + if not itemtype and xbmc.getCondVisibility("Container.Content(pictures)"): itemtype = "picture" + + if (not itemid or itemid == "-1") and xbmc.getInfoLabel("ListItem.Property(embyid)"): + embyid = xbmc.getInfoLabel("ListItem.Property(embyid)") + else: + embyconn = utils.kodiSQL('emby') + embycursor = embyconn.cursor() + emby_db = embydb.Embydb_Functions(embycursor) + item = emby_db.getItem_byKodiId(itemid, itemtype) + embycursor.close() + if item: embyid = item[0] + + logMsg("Contextmenu opened for embyid: %s - itemtype: %s" %(embyid,itemtype)) + + if embyid: + item = emby.getItem(embyid) + API = api.API(item) + userdata = API.getUserData() + likes = userdata['Likes'] + favourite = userdata['Favorite'] + + options=[] + if likes == True: + #clear like for the item + options.append(utils.language(30402)) + if likes == False or likes == None: + #Like the item + options.append(utils.language(30403)) + if likes == True or likes == None: + #Dislike the item + options.append(utils.language(30404)) + if favourite == False: + #Add to emby favourites + options.append(utils.language(30405)) + if favourite == True: + #Remove from emby favourites + options.append(utils.language(30406)) + if itemtype == "song": + #Set custom song rating + options.append(utils.language(30407)) + + #delete item + options.append(utils.language(30409)) + + #addon settings + options.append(utils.language(30408)) + + #display select dialog and process results + header = utils.language(30401) + ret = xbmcgui.Dialog().select(header, options) + if ret != -1: + if options[ret] == utils.language(30402): + emby.updateUserRating(embyid, deletelike=True) + if options[ret] == utils.language(30403): + emby.updateUserRating(embyid, like=True) + if options[ret] == utils.language(30404): + emby.updateUserRating(embyid, like=False) + if options[ret] == utils.language(30405): + emby.updateUserRating(embyid, favourite=True) + if options[ret] == utils.language(30406): + emby.updateUserRating(embyid, favourite=False) + if options[ret] == utils.language(30407): + kodiconn = utils.kodiSQL('music') + kodicursor = kodiconn.cursor() + query = ' '.join(("SELECT rating", "FROM song", "WHERE idSong = ?" )) + kodicursor.execute(query, (itemid,)) + currentvalue = int(round(float(kodicursor.fetchone()[0]),0)) + newvalue = xbmcgui.Dialog().numeric(0, "Set custom song rating (0-5)", str(currentvalue)) + if newvalue: + newvalue = int(newvalue) + if newvalue > 5: newvalue = "5" + if utils.settings('enableUpdateSongRating') == "true": + musicutils.updateRatingToFile(newvalue, API.getFilePath()) + if utils.settings('enableExportSongRating') == "true": + like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(newvalue) + emby.updateUserRating(embyid, like, favourite, deletelike) + query = ' '.join(( "UPDATE song","SET rating = ?", "WHERE idSong = ?" )) + kodicursor.execute(query, (newvalue,itemid,)) + kodiconn.commit() + + if options[ret] == utils.language(30408): + #Open addon settings + xbmc.executebuiltin("Addon.OpenSettings(plugin.video.emby)") + + if options[ret] == utils.language(30409): + #delete item from the server + delete = True + if utils.settings('skipContextMenu') != "true": + resp = xbmcgui.Dialog().yesno( + heading="Confirm delete", + line1=("Delete file from Emby Server? This will " + "also delete the file(s) from disk!")) + if not resp: + logMsg("User skipped deletion for: %s." % embyid, 1) + delete = False + + if delete: + import downloadutils + doUtils = downloadutils.DownloadUtils() + url = "{server}/emby/Items/%s?format=json" % embyid + logMsg("Deleting request: %s" % embyid, 0) + doUtils.downloadUrl(url, action_type="DELETE") + + '''if utils.settings('skipContextMenu') != "true": + if xbmcgui.Dialog().yesno( + heading="Confirm delete", + line1=("Delete file on Emby Server? This will " + "also delete the file(s) from disk!")): + import downloadutils + doUtils = downloadutils.DownloadUtils() + doUtils.downloadUrl("{server}/emby/Items/%s?format=json" % embyid, action_type="DELETE")''' + + xbmc.sleep(500) xbmc.executebuiltin("Container.Update") \ No newline at end of file diff --git a/resources/lib/downloadutils.py b/resources/lib/downloadutils.py index 194a8333..a74ee6f2 100644 --- a/resources/lib/downloadutils.py +++ b/resources/lib/downloadutils.py @@ -97,7 +97,7 @@ class DownloadUtils(): self.logMsg("Capabilities URL: %s" % url, 2) self.logMsg("Postdata: %s" % data, 2) - self.downloadUrl(url, postBody=data, type="POST") + self.downloadUrl(url, postBody=data, action_type="POST") self.logMsg("Posted capabilities to %s" % self.server, 2) # Attempt at getting sessionId @@ -140,7 +140,7 @@ class DownloadUtils(): "{server}/emby/Sessions/%s/Users/%s?format=json" % (sessionId, userId) ) - self.downloadUrl(url, postBody={}, type="POST") + self.downloadUrl(url, postBody={}, action_type="POST") def startSession(self): diff --git a/resources/lib/entrypoint.py b/resources/lib/entrypoint.py index f71ac305..bc81ad0a 100644 --- a/resources/lib/entrypoint.py +++ b/resources/lib/entrypoint.py @@ -166,7 +166,7 @@ def deleteItem(): doUtils = downloadutils.DownloadUtils() url = "{server}/emby/Items/%s?format=json" % embyid utils.logMsg("EMBY delete", "Deleting request: %s" % embyid, 0) - doUtils.downloadUrl(url, type="DELETE") + doUtils.downloadUrl(url, action_type="DELETE") ##### ADD ADDITIONAL USERS ##### def addUser(): @@ -221,7 +221,7 @@ def addUser(): selected = additionalUsername[resp] selected_userId = additionalUserlist[selected] url = "{server}/emby/Sessions/%s/Users/%s" % (sessionId, selected_userId) - doUtils.downloadUrl(url, postBody={}, type="DELETE") + doUtils.downloadUrl(url, postBody={}, action_type="DELETE") dialog.notification( heading="Success!", message="%s removed from viewing session" % selected, @@ -254,7 +254,7 @@ def addUser(): selected = users[resp] selected_userId = userlist[selected] url = "{server}/emby/Sessions/%s/Users/%s" % (sessionId, selected_userId) - doUtils.downloadUrl(url, postBody={}, type="POST") + doUtils.downloadUrl(url, postBody={}, action_type="POST") dialog.notification( heading="Success!", message="%s added to viewing session" % selected, diff --git a/resources/lib/kodimonitor.py b/resources/lib/kodimonitor.py index c4df4945..f2b5ae86 100644 --- a/resources/lib/kodimonitor.py +++ b/resources/lib/kodimonitor.py @@ -154,10 +154,10 @@ class KodiMonitor(xbmc.Monitor): # notify the server url = "{server}/emby/Users/{UserId}/PlayedItems/%s?format=json" % itemid if playcount != 0: - doUtils.downloadUrl(url, type="POST") + doUtils.downloadUrl(url, action_type="POST") self.logMsg("Mark as watched for itemid: %s" % itemid, 1) else: - doUtils.downloadUrl(url, type="DELETE") + doUtils.downloadUrl(url, action_type="DELETE") self.logMsg("Mark as unwatched for itemid: %s" % itemid, 1) finally: embycursor.close() @@ -195,7 +195,7 @@ class KodiMonitor(xbmc.Monitor): url = "{server}/emby/Items/%s?format=json" % itemid self.logMsg("Deleting request: %s" % itemid) - doUtils.downloadUrl(url, type="DELETE") + doUtils.downloadUrl(url, action_type="DELETE") finally: embycursor.close()''' diff --git a/resources/lib/player.py b/resources/lib/player.py index 91ff2ece..69b4e37e 100644 --- a/resources/lib/player.py +++ b/resources/lib/player.py @@ -208,7 +208,7 @@ class Player(xbmc.Player): # Post playback to server self.logMsg("Sending POST play started: %s." % postdata, 2) - self.doUtils(url, postBody=postdata, type="POST") + self.doUtils(url, postBody=postdata, action_type="POST") # Ensure we do have a runtime try: @@ -480,7 +480,7 @@ class Player(xbmc.Player): url = "{server}/emby/Items/%s?format=json" % itemid self.logMsg("Deleting request: %s" % itemid, 1) - self.doUtils(url, type="DELETE") + self.doUtils(url, action_type="DELETE") self.stopPlayback(data) @@ -489,7 +489,7 @@ class Player(xbmc.Player): self.logMsg("Transcoding for %s terminated." % itemid, 1) deviceId = self.clientInfo.getDeviceId() url = "{server}/emby/Videos/ActiveEncodings?DeviceId=%s" % deviceId - self.doUtils(url, type="DELETE") + self.doUtils(url, action_type="DELETE") self.played_info.clear() @@ -508,4 +508,4 @@ class Player(xbmc.Player): 'MediaSourceId': itemId, 'PositionTicks': positionTicks } - self.doUtils(url, postBody=postdata, type="POST") \ No newline at end of file + self.doUtils(url, postBody=postdata, action_type="POST") \ No newline at end of file diff --git a/resources/lib/read_embyserver.py b/resources/lib/read_embyserver.py index 1af01f40..6eeb5fb6 100644 --- a/resources/lib/read_embyserver.py +++ b/resources/lib/read_embyserver.py @@ -522,16 +522,16 @@ class Read_EmbyServer(): # Updates the user rating to Emby if favourite: - self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, type="POST") + self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, action_type="POST") elif favourite == False: - self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, type="DELETE") + self.doUtils("{server}/emby/Users/{UserId}/FavoriteItems/%s?format=json" % itemid, action_type="DELETE") if not deletelike and like: - self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=true&format=json" % itemid, type="POST") + self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=true&format=json" % itemid, action_type="POST") elif not deletelike and like is False: - self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=false&format=json" % itemid, type="POST") + self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?Likes=false&format=json" % itemid, action_type="POST") elif deletelike: - self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?format=json" % itemid, type="DELETE") + self.doUtils("{server}/emby/Users/{UserId}/Items/%s/Rating?format=json" % itemid, action_type="DELETE") self.logMsg("Update user rating to emby for itemid: %s " "| like: %s | favourite: %s | deletelike: %s"