# -*- coding: utf-8 -*- ################################################################################################# import logging 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 api import artwork import downloadutils import librarysync import read_embyserver as embyserver import embydb_functions as embydb import kodidb_functions as kodidb import musicutils as musicutils from utils import settings, language as lang, kodiSQL ################################################################################################# import loghandler loghandler.config() log = logging.getLogger("EMBY.contextmenu") ################################################################################################# # Kodi contextmenu item to configure the emby settings if __name__ == '__main__': kodiId = xbmc.getInfoLabel('ListItem.DBID').decode('utf-8') itemType = xbmc.getInfoLabel('ListItem.DBTYPE').decode('utf-8') itemId = "" 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.info("ItemType is unknown.") if (not kodiId or kodiId == "-1") and xbmc.getInfoLabel("ListItem.Property(embyid)"): itemId = xbmc.getInfoLabel("ListItem.Property(embyid)") elif kodiId and itemType: embyconn = kodiSQL('emby') embycursor = embyconn.cursor() emby_db = embydb.Embydb_Functions(embycursor) item = emby_db.getItem_byKodiId(kodiId, itemType) embycursor.close() try: itemId = item[0] except TypeError: pass log.info("Found ItemId: %s ItemType: %s" % (itemId, itemType)) if itemId: dialog = xbmcgui.Dialog() emby = embyserver.Read_EmbyServer() item = emby.getItem(itemId) API = api.API(item) userdata = API.getUserData() likes = userdata['Likes'] favourite = userdata['Favorite'] options = [] if favourite: # Remove from emby favourites options.append(lang(30406)) else: # Add to emby favourites options.append(lang(30405)) if itemType == "song": # Set custom song rating options.append(lang(30407)) # Refresh item options.append(lang(30410)) # Delete item options.append(lang(30409)) # Addon settings options.append(lang(30408)) # Display select dialog and process results resp = xbmcgui.Dialog().select(lang(30401), options) if resp > -1: selected = options[resp] if selected == lang(30410): # Refresh item emby.refreshItem(itemId) elif selected == lang(30405): # Add favourite emby.updateUserRating(itemId, favourite=True) elif selected == lang(30406): # Delete favourite emby.updateUserRating(itemId, favourite=False) elif selected == lang(30407): # Update song rating kodiconn = kodiSQL('music') kodicursor = kodiconn.cursor() query = "SELECT rating FROM song WHERE idSong = ?" kodicursor.execute(query, (kodiId,)) try: value = kodicursor.fetchone()[0] current_value = int(round(float(value),0)) except TypeError: pass else: new_value = dialog.numeric(0, lang(30411), str(current_value)) if new_value > -1: new_value = int(new_value) if new_value > 5: new_value = 5 if settings('enableUpdateSongRating') == "true": musicutils.updateRatingToFile(new_value, API.getFilePath()) query = "UPDATE song SET rating = ? WHERE idSong = ?" kodicursor.execute(query, (new_value, kodiId,)) kodiconn.commit() '''if settings('enableExportSongRating') == "true": like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(new_value) emby.updateUserRating(itemId, like, favourite, deletelike)''' finally: kodicursor.close() elif selected == lang(30408): # Open addon settings xbmc.executebuiltin("Addon.OpenSettings(plugin.video.emby)") elif selected == lang(30409): # delete item from the server delete = True if settings('skipContextMenu') != "true": resp = dialog.yesno( heading=lang(29999), line1=lang(33041)) if not resp: log.info("User skipped deletion for: %s." % itemId) delete = False if delete: log.info("Deleting request: %s" % itemId) emby.deleteItem(itemId) xbmc.sleep(500) xbmc.executebuiltin('Container.Refresh')