diff --git a/contextmenu.py b/contextmenu.py
index fa21c38a..a983ab59 100644
--- a/contextmenu.py
+++ b/contextmenu.py
@@ -19,95 +19,100 @@ sys.path.append(_base_resource)
#################################################################################################
+import api
import artwork
-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
-from utils import Logging, settings language as lang, kodiSQL
+from utils import Logging, settings, language as lang, kodiSQL
+log = Logging('ContextMenu').log
#################################################################################################
-log = Logging('ContextMenu').log
-
-
-#Kodi contextmenu item to configure the emby settings
-#for now used to set ratings but can later be used to sync individual items etc.
+# Kodi contextmenu item to configure the emby settings
if __name__ == '__main__':
- itemid = xbmc.getInfoLabel("ListItem.DBID").decode("utf-8")
- itemtype = xbmc.getInfoLabel("ListItem.DBTYPE").decode("utf-8")
+
+ kodiId = xbmc.getInfoLabel('ListItem.DBID').decode('utf-8')
+ itemType = xbmc.getInfoLabel('ListItem.DBTYPE').decode('utf-8')
+ itemId = ""
- emby = embyserver.Read_EmbyServer()
+ if not itemType:
+
+ if xbmc.getCondVisibility("Container.Content(albums)"):
+ itemType = "album"
+ elif xbmc.getCondVisibility("Container.Content(artists)"):
+ itemType = "artist"
+ elif xbmc.getCondVisibility("Container.Content(songs)"):
+ itemType = "song"
+ elif xbmc.getCondVisibility("Container.Content(pictures)"):
+ itemType = "picture"
+ else:
+ log("Itemtype is unknown.")
+
+ if (not kodiId or kodiId == "-1") and xbmc.getInfoLabel("ListItem.Property(embyid)"):
+ itemId = xbmc.getInfoLabel("ListItem.Property(embyid)")
- 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:
+ elif kodiId and itemType:
embyconn = kodiSQL('emby')
embycursor = embyconn.cursor()
emby_db = embydb.Embydb_Functions(embycursor)
- item = emby_db.getItem_byKodiId(itemid, itemtype)
+ item = emby_db.getItem_byKodiId(kodiId, itemType)
embycursor.close()
- if item: embyid = item[0]
-
- log("Contextmenu opened for embyid: %s - itemtype: %s" %(embyid,itemtype))
+ try:
+ itemId = item[0]
+ except TypeError:
+ pass
- if embyid:
- item = emby.getItem(embyid)
+
+ log("Found ItemId: %s/Itemtype: %s" % (itemId, itemType), 1)
+ if itemId:
+
+ emby = embyserver.Read_EmbyServer()
+ item = emby.getItem(itemId)
API = api.API(item)
userdata = API.getUserData()
likes = userdata['Likes']
favourite = userdata['Favorite']
- options=[]
- if likes == True:
- #clear like for the item
- options.append(lang(30402))
- if likes == False or likes == None:
- #Like the item
- options.append(lang(30403))
- if likes == True or likes == None:
- #Dislike the item
- options.append(lang(30404))
- if favourite == False:
- #Add to emby favourites
- options.append(lang(30405))
- if favourite == True:
- #Remove from emby favourites
+ options = []
+
+ if favourite:
+ # Remove from emby favourites
options.append(lang(30406))
- if itemtype == "song":
- #Set custom song rating
+ else:
+ # Add to emby favourites
+ options.append(lang(30405))
+
+ if itemType == "song":
+ # Set custom song rating
options.append(lang(30407))
- #delete item
+ # Refresh item
+ options.append(lang(30410))
+ # Delete item
options.append(lang(30409))
-
- #addon settings
+ # Addon settings
options.append(lang(30408))
- #display select dialog and process results
- header = lang(30401)
- ret = xbmcgui.Dialog().select(header, options)
+ # Display select dialog and process results
+
+ ret = xbmcgui.Dialog().select(lang(30401), options)
if ret != -1:
+ if options[ret] == lang(30410):
+ emby.refreshItem(itemId)
if options[ret] == lang(30402):
- emby.updateUserRating(embyid, deletelike=True)
+ emby.updateUserRating(itemId, deletelike=True)
if options[ret] == lang(30403):
- emby.updateUserRating(embyid, like=True)
+ emby.updateUserRating(itemId, like=True)
if options[ret] == lang(30404):
- emby.updateUserRating(embyid, like=False)
+ emby.updateUserRating(itemId, like=False)
if options[ret] == lang(30405):
- emby.updateUserRating(embyid, favourite=True)
+ emby.updateUserRating(itemId, favourite=True)
if options[ret] == lang(30406):
- emby.updateUserRating(embyid, favourite=False)
+ emby.updateUserRating(itemId, favourite=False)
if options[ret] == lang(30407):
kodiconn = kodiSQL('music')
kodicursor = kodiconn.cursor()
@@ -122,7 +127,7 @@ if __name__ == '__main__':
musicutils.updateRatingToFile(newvalue, API.getFilePath())
if settings('enableExportSongRating') == "true":
like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(newvalue)
- emby.updateUserRating(embyid, like, favourite, deletelike)
+ emby.updateUserRating(itemId, like, favourite, deletelike)
query = ' '.join(( "UPDATE song","SET rating = ?", "WHERE idSong = ?" ))
kodicursor.execute(query, (newvalue,itemid,))
kodiconn.commit()
@@ -140,13 +145,13 @@ if __name__ == '__main__':
line1=("Delete file from Emby Server? This will "
"also delete the file(s) from disk!"))
if not resp:
- log("User skipped deletion for: %s." % embyid, 1)
+ log("User skipped deletion for: %s." % itemId, 1)
delete = False
if delete:
import downloadutils
doUtils = downloadutils.DownloadUtils()
- url = "{server}/emby/Items/%s?format=json" % embyid
+ url = "{server}/emby/Items/%s?format=json" % itemId
log("Deleting request: %s" % embyid, 0)
doUtils.downloadUrl(url, action_type="DELETE")
@@ -160,4 +165,4 @@ if __name__ == '__main__':
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
+ xbmc.executebuiltin('Container.Update')
\ No newline at end of file
diff --git a/resources/language/English/strings.xml b/resources/language/English/strings.xml
index 1d3d1b92..1655957a 100644
--- a/resources/language/English/strings.xml
+++ b/resources/language/English/strings.xml
@@ -266,6 +266,7 @@
Set custom song rating
Emby addon settings
Delete item from the server
+ Refresh this item
Primary Server Address
diff --git a/resources/lib/read_embyserver.py b/resources/lib/read_embyserver.py
index cc0c4b4a..bc51b5ca 100644
--- a/resources/lib/read_embyserver.py
+++ b/resources/lib/read_embyserver.py
@@ -564,4 +564,18 @@ class Read_EmbyServer():
log("Update user rating to emby for itemid: %s "
"| like: %s | favourite: %s | deletelike: %s"
- % (itemid, like, favourite, deletelike), 1)
\ No newline at end of file
+ % (itemid, like, favourite, deletelike), 1)
+
+ def refreshItem(self, itemid):
+
+ url = "{server}/emby/Items/%s/Refresh?format=json" % itemid
+ params = {
+
+ 'Recursive': True,
+ 'ImageRefreshMode': "FullRefresh",
+ 'MetadataRefreshMode': "FullRefresh",
+ 'ReplaceAllImages': False,
+ 'ReplaceAllMetadata': True
+
+ }
+ self.doUtils(url, postBody=params, action_type="POST")
\ No newline at end of file