2016-01-11 15:53:41 +00:00
|
|
|
# -*- 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):
|
2016-02-17 04:13:10 +00:00
|
|
|
utils.logMsg("%s %s" % ("EMBY", "Contextmenu"), msg, lvl)
|
2016-01-11 15:53:41 +00:00
|
|
|
|
|
|
|
|
|
|
|
#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")
|
2016-01-13 00:03:35 +00:00
|
|
|
|
|
|
|
emby = embyserver.Read_EmbyServer()
|
|
|
|
|
|
|
|
embyid = ""
|
2016-01-11 15:53:41 +00:00
|
|
|
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"
|
2016-01-13 00:03:35 +00:00
|
|
|
if not itemtype and xbmc.getCondVisibility("Container.Content(pictures)"): itemtype = "picture"
|
2016-01-11 15:53:41 +00:00
|
|
|
|
2016-01-13 00:03:35 +00:00
|
|
|
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)
|
|
|
|
if item: embyid = item[0]
|
2016-01-11 15:53:41 +00:00
|
|
|
|
2016-01-13 00:03:35 +00:00
|
|
|
logMsg("Contextmenu opened for embyid: %s - itemtype: %s" %(embyid,itemtype))
|
|
|
|
|
|
|
|
if embyid:
|
2016-01-11 15:53:41 +00:00
|
|
|
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))
|
|
|
|
|
2016-01-13 00:26:07 +00:00
|
|
|
#delete item
|
|
|
|
options.append(utils.language(30409))
|
|
|
|
|
2016-01-11 15:53:41 +00:00
|
|
|
#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):
|
|
|
|
API.updateUserRating(embyid, deletelike=True)
|
|
|
|
if options[ret] == utils.language(30403):
|
|
|
|
API.updateUserRating(embyid, like=True)
|
|
|
|
if options[ret] == utils.language(30404):
|
|
|
|
API.updateUserRating(embyid, like=False)
|
|
|
|
if options[ret] == utils.language(30405):
|
|
|
|
API.updateUserRating(embyid, favourite=True)
|
|
|
|
if options[ret] == utils.language(30406):
|
|
|
|
API.updateUserRating(embyid, favourite=False)
|
|
|
|
if options[ret] == utils.language(30407):
|
2016-01-13 00:03:35 +00:00
|
|
|
kodiconn = utils.kodiSQL('music')
|
|
|
|
kodicursor = kodiconn.cursor()
|
2016-01-11 15:53:41 +00:00
|
|
|
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"
|
2016-01-20 19:21:56 +00:00
|
|
|
if utils.settings('enableUpdateSongRating') == "true":
|
|
|
|
musicutils.updateRatingToFile(newvalue, API.getFilePath())
|
|
|
|
if utils.settings('enableExportSongRating') == "true":
|
|
|
|
like, favourite, deletelike = musicutils.getEmbyRatingFromKodiRating(newvalue)
|
|
|
|
API.updateUserRating(embyid, like, favourite, deletelike)
|
2016-01-11 15:53:41 +00:00
|
|
|
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)")
|
2016-01-13 00:26:07 +00:00
|
|
|
|
|
|
|
if options[ret] == utils.language(30409):
|
|
|
|
#delete item from the server
|
2016-02-17 04:13:10 +00:00
|
|
|
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:
|
2016-02-17 04:22:14 +00:00
|
|
|
logMsg("User skipped deletion for: %s." % embyid, 1)
|
2016-02-17 04:13:10 +00:00
|
|
|
delete = False
|
|
|
|
|
|
|
|
if delete:
|
2016-01-13 00:26:07 +00:00
|
|
|
import downloadutils
|
|
|
|
doUtils = downloadutils.DownloadUtils()
|
|
|
|
url = "{server}/emby/Items/%s?format=json" % embyid
|
2016-02-17 04:13:10 +00:00
|
|
|
logMsg("Deleting request: %s" % embyid, 0)
|
2016-01-13 00:26:07 +00:00
|
|
|
doUtils.downloadUrl(url, type="DELETE")
|
2016-02-17 04:13:10 +00:00
|
|
|
|
|
|
|
'''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")'''
|
2016-01-13 00:26:07 +00:00
|
|
|
|
|
|
|
xbmc.sleep(500)
|
|
|
|
xbmc.executebuiltin("Container.Update")
|