removed iteminfo dialog stuff because that is never going to work with this addon

fix for wrong entries in episodes widgets/submenus
This commit is contained in:
Marcel van der Veldt 2015-05-08 19:05:10 +02:00
parent 105d863979
commit 684d8604ca
9 changed files with 19 additions and 1214 deletions

View file

@ -27,21 +27,9 @@ except:
mode = None mode = None
##### Play items via plugin://plugin.video.emby/ ##### ##### Play items via plugin://plugin.video.emby/ #####
if mode == "play": if mode == "play" or mode == "playnow":
addonSettings = xbmcaddon.Addon(id='plugin.video.emby')
selectAction = addonSettings.getSetting('selectAction')
##### info only working from widgets currently #####
if selectAction == "1" and xbmc.getCondVisibility("Window.IsActive(home)"):
entrypoint.showInfo(id)
else:
entrypoint.doPlayback(id)
elif mode == "playnow":
entrypoint.doPlayback(id) entrypoint.doPlayback(id)
elif mode == "person":
entrypoint.showPersonInfo(id,name)
##### DO DATABASE RESET ##### ##### DO DATABASE RESET #####
elif mode == "reset": elif mode == "reset":
utils.reset() utils.reset()

View file

@ -28,29 +28,6 @@ def doPlayback(id):
item = PlaybackUtils().PLAY(result, setup="default") item = PlaybackUtils().PLAY(result, setup="default")
##### Show the item info window #####
def showInfo(id):
xbmcplugin.endOfDirectory(int(sys.argv[1]), cacheToDisc=False)
addonSettings = xbmcaddon.Addon(id='plugin.video.emby')
infoPage = ItemInfo("ItemInfo.xml", addonSettings.getAddonInfo('path'), "default", "720p")
infoPage.setId(id)
infoPage.doModal()
del infoPage
def showPersonInfo(id,basename):
xbmcplugin.endOfDirectory(int(sys.argv[1]), cacheToDisc=False)
addonSettings = xbmcaddon.Addon(id='plugin.video.emby')
infoPage = PersonInfo("PersonInfo.xml", addonSettings.getAddonInfo('path'), "default", "720p")
infoPage.setPersonName(basename)
infoPage.doModal()
if(infoPage.showMovies == True):
xbmc.log("RUNNING_PLUGIN: " + infoPage.pluginCastLink)
xbmc.executebuiltin(infoPage.pluginCastLink)
del infoPage
#### DO RESET AUTH ##### #### DO RESET AUTH #####
def resetAuth(): def resetAuth():
# User tried login and failed too many times # User tried login and failed too many times

View file

@ -1,527 +0,0 @@
import sys
import xbmc
import xbmcgui
import xbmcaddon
import json as json
import urllib
from DownloadUtils import DownloadUtils
from API import API
_MODE_BASICPLAY=12
_MODE_CAST_LIST=14
_MODE_PERSON_DETAILS=15
CP_ADD_URL = 'plugin://plugin.video.couchpotato_manager/movies/add?title='
CP_ADD_VIA_IMDB = 'plugin://plugin.video.couchpotato_manager/movies/add?imdb_id='
class ItemInfo(xbmcgui.WindowXMLDialog):
id = ""
playUrl = ""
trailerUrl = ""
couchPotatoUrl = ""
userid = ""
server = ""
downloadUtils = DownloadUtils()
item= []
isTrailer = False
def __init__(self, *args, **kwargs):
xbmcgui.WindowXMLDialog.__init__(self, *args, **kwargs)
xbmc.log("WINDOW INITIALISED")
def onInit(self):
self.action_exitkeys_id = [10, 13]
url = "{server}/mediabrowser/Users/{UserId}/Items/" + self.id + "?Fields=SeriesGenres,AirTime&format=json"
item = self.downloadUtils.downloadUrl(url)
self.item = item
id = item.get("Id")
WINDOW = xbmcgui.Window( 10025 )
WINDOW.setProperty('ItemGUID', id)
name = item.get("Name")
image = API().getArtwork(item, "poster")
fanArt = API().getArtwork(item, "BackdropNoIndicators")
self.getControl(3001).setImage(fanArt)
discart = API().getArtwork(item ,"Disc")
logo = API().getArtwork(item ,"Logo")
# calculate the percentage complete
userData = item.get("UserData")
cappedPercentage = 0
if(userData != None):
playBackTicks = float(userData.get("PlaybackPositionTicks"))
if(playBackTicks != None and playBackTicks > 0):
runTimeTicks = float(item.get("RunTimeTicks", "0"))
if(runTimeTicks > 0):
percentage = int((playBackTicks / runTimeTicks) * 100.0)
cappedPercentage = percentage - (percentage % 10)
if(cappedPercentage == 0):
cappedPercentage = 10
if(cappedPercentage == 100):
cappedPercentage = 90
try:
watchedButton = self.getControl(3192)
except:
watchedButton = None
if(watchedButton != None):
if userData.get("Played") == True:
watchedButton.setSelected(True)
else:
watchedButton.setSelected(False)
try:
dislikeButton = self.getControl(3193)
except:
dislikeButton = None
if(dislikeButton != None):
if userData.get("Likes") != None and userData.get("Likes") == False:
dislikeButton.setSelected(True)
else:
dislikeButton.setSelected(False)
try:
likeButton = self.getControl(3194)
except:
likeButton = None
if(likeButton != None):
if userData.get("Likes") != None and userData.get("Likes") == True:
likeButton.setSelected(True)
else:
likeButton.setSelected(False)
try:
favouriteButton = self.getControl(3195)
except:
favouriteButton = None
if(favouriteButton != None):
if userData.get("IsFavorite") == True:
favouriteButton.setSelected(True)
else:
favouriteButton.setSelected(False)
episodeInfo = ""
type = item.get("Type")
WINDOW.setProperty('ItemType', type)
if(type == "Episode" or type == "Season"):
WINDOW.setProperty('ItemGUID', item.get("SeriesId"))
name = item.get("SeriesName") + ": " + name
season = str(item.get("ParentIndexNumber")).zfill(2)
episodeNum = str(item.get("IndexNumber")).zfill(2)
episodeInfo = "S" + season + "xE" + episodeNum
elif type == "Movie":
if item.get("Taglines") != None and item.get("Taglines") != [] and item.get("Taglines")[0] != None:
episodeInfo = item.get("Taglines")[0]
elif type == "ChannelVideoItem":
if item.get("ExtraType") != None:
if item.get('ExtraType') == "Trailer":
self.isTrailer = True
self.playUrl = "plugin://plugin.video.emby/?id=%s&mode=playnow" % id
try:
trailerButton = self.getControl(3102)
if(trailerButton != None):
if not self.isTrailer and item.get("LocalTrailerCount") != None and item.get("LocalTrailerCount") > 0:
itemTrailerUrl = "{server}/mediabrowser/Users/{UserId}/Items/" + id + "/LocalTrailers?format=json"
jsonData = self.downloadUtils.downloadUrl(itemTrailerUrl)
if(jsonData != ""):
trailerItem = jsonData
self.trailerUrl = "plugin://plugin.video.emby/trailer/?id=%s&mode=playnow" % trailerItem[0][u'Id']
else:
trailerButton.setEnabled(False)
except:
pass
try:
couchPotatoButton = self.getControl(3103)
if(couchPotatoButton != None):
if self.isTrailer and item.get("ProviderIds") != None and item.get("ProviderIds").get("Imdb") != None:
self.couchPotatoUrl = CP_ADD_VIA_IMDB + item.get("ProviderIds").get("Imdb")
elif self.isTrailer:
self.couchPotatoUrl = CP_ADD_URL + name
elif not self.isTrailer:
couchPotatoButton.setEnabled(False)
except:
pass
# all the media stream info
mediaList = self.getControl(3220)
mediaStreams = item.get("MediaStreams")
if(mediaStreams != None):
for mediaStream in mediaStreams:
if(mediaStream.get("Type") == "Video"):
videocodec = mediaStream.get("Codec")
if(videocodec == "mpeg2video"):
videocodec = "mpeg2"
height = str(mediaStream.get("Height"))
width = str(mediaStream.get("Width"))
aspectratio = mediaStream.get("AspectRatio")
fr = mediaStream.get("RealFrameRate")
videoInfo = width + "x" + height + " " + videocodec + " " + str(round(fr, 2))
listItem = xbmcgui.ListItem("Video:", videoInfo)
mediaList.addItem(listItem)
if(mediaStream.get("Type") == "Audio"):
audiocodec = mediaStream.get("Codec")
channels = mediaStream.get("Channels")
lang = mediaStream.get("Language")
audioInfo = audiocodec + " " + str(channels)
if(lang != None and len(lang) > 0 and lang != "und"):
audioInfo = audioInfo + " " + lang
listItem = xbmcgui.ListItem("Audio:", audioInfo)
mediaList.addItem(listItem)
if(mediaStream.get("Type") == "Subtitle"):
lang = mediaStream.get("Language")
codec = mediaStream.get("Codec")
subInfo = codec
if(lang != None and len(lang) > 0 and lang != "und"):
subInfo = subInfo + " " + lang
listItem = xbmcgui.ListItem("Sub:", subInfo)
mediaList.addItem(listItem)
#for x in range(0, 10):
# listItem = xbmcgui.ListItem("Test:", "Test 02 " + str(x))
# mediaList.addItem(listItem)
# add overview
overview = item.get("Overview")
self.getControl(3223).setText(overview)
# add people
peopleList = self.getControl(3230)
people = item.get("People")
director=''
writer=''
for person in people:
displayName = person.get("Name")
if person.get("Role") != None and person.get("Role") != '':
role = "as " + person.get("Role")
else:
role = ''
id = person.get("Id")
tag = person.get("PrimaryImageTag")
baseName = person.get("Name")
baseName = baseName.replace(" ", "+")
baseName = baseName.replace("&", "_")
baseName = baseName.replace("?", "_")
baseName = baseName.replace("=", "_")
actionUrl = "plugin://plugin.video.emby?mode=person&name=" + baseName
if(tag != None and len(tag) > 0):
thumbPath = self.downloadUtils.imageUrl(id, "Primary", 0, 400, 400)
listItem = xbmcgui.ListItem(label=displayName, label2=role, iconImage=thumbPath, thumbnailImage=thumbPath)
else:
listItem = xbmcgui.ListItem(label=displayName, label2=role)
listItem.setProperty("ActionUrl", actionUrl)
peopleList.addItem(listItem)
if(person.get("Type") == "Director") and director =='':
director = displayName
if(tag != None and len(tag) > 0):
thumbPath = self.downloadUtils.imageUrl(id, "Primary", 0, 580, 860)
directorlistItem = xbmcgui.ListItem("Director:", label2=displayName, iconImage=thumbPath, thumbnailImage=thumbPath)
else:
directorlistItem = xbmcgui.ListItem("Director:", label2=displayName)
directorlistItem.setProperty("ActionUrl", actionUrl)
if(person.get("Type") == "Writing") and writer == '':
writer = person.get("Name")
if(tag != None and len(tag) > 0):
thumbPath = self.downloadUtils.imageUrl(id, "Primary", 0, 580, 860)
writerlistItem = xbmcgui.ListItem("Writer:", label2=displayName, iconImage=thumbPath, thumbnailImage=thumbPath)
else:
writerlistItem = xbmcgui.ListItem("Writer:", label2=displayName)
writerlistItem.setProperty("ActionUrl", actionUrl)
if(person.get("Type") == "Writer") and writer == '':
writer = person.get("Name")
if(tag != None and len(tag) > 0):
thumbPath = self.downloadUtils.imageUrl(id, "Primary", 0, 580, 860)
writerlistItem = xbmcgui.ListItem("Writer:", label2=displayName, iconImage=thumbPath, thumbnailImage=thumbPath)
else:
writerlistItem = xbmcgui.ListItem("Writer:", label2=displayName)
writerlistItem.setProperty("ActionUrl", actionUrl)
# add general info
infoList = self.getControl(3226)
listItem = xbmcgui.ListItem("Year:", str(item.get("ProductionYear")))
infoList.addItem(listItem)
listItem = xbmcgui.ListItem("Rating:", str(item.get("CommunityRating")))
infoList.addItem(listItem)
listItem = xbmcgui.ListItem("MPAA:", str(item.get("OfficialRating")))
infoList.addItem(listItem)
duration = str(int(item.get("RunTimeTicks", "0"))/(10000000*60))
listItem = xbmcgui.ListItem("RunTime:", str(duration) + " Minutes")
infoList.addItem(listItem)
genre = ""
genres = item.get("Genres")
if genres != None and genres != []:
for genre_string in genres:
if genre == "": #Just take the first genre
genre = genre_string
else:
genre = genre + " / " + genre_string
elif item.get("SeriesGenres") != None and item.get("SeriesGenres") != '':
genres = item.get("SeriesGenres")
if genres != None and genres != []:
for genre_string in genres:
if genre == "": #Just take the first genre
genre = genre_string
else:
genre = genre + " / " + genre_string
genrelistItem = xbmcgui.ListItem("Genre:", genre)
genrelistItem2 = xbmcgui.ListItem("Genre:", genre)
infoList.addItem(genrelistItem)
path = item.get('Path')
pathlistItem = xbmcgui.ListItem("Path:", path)
pathlistItem2 = xbmcgui.ListItem("Path:", path)
infoList.addItem(pathlistItem)
if item.get("CriticRating") != None:
listItem = xbmcgui.ListItem("CriticRating:", str(item.get("CriticRating")))
infoList.addItem(listItem)
# Process Studio
studio = ""
if item.get("SeriesStudio") != None and item.get("SeriesStudio") != '':
studio = item.get("SeriesStudio")
if studio == "":
studios = item.get("Studios")
if(studios != None):
for studio_string in studios:
if studio=="": #Just take the first one
temp=studio_string.get("Name")
studio=temp.encode('utf-8')
if studio != "":
listItem = xbmcgui.ListItem("Studio:", studio)
infoList.addItem(listItem)
if item.get("Metascore") != None:
listItem = xbmcgui.ListItem("Metascore:", str(item.get("Metascore")))
infoList.addItem(listItem)
playCount = 0
if(userData != None and userData.get("Played") == True):
playCount = 1
listItem = xbmcgui.ListItem("PlayedCount:", str(playCount))
infoList.addItem(listItem)
if item.get("ProviderIds") != None and item.get("ProviderIds").get("Imdb") != None and type == "Movie":
listItem = xbmcgui.ListItem("ID:", item.get("ProviderIds").get("Imdb"))
infoList.addItem(listItem)
elif item.get("ProviderIds") != None and item.get("ProviderIds").get("Tvdb") != None and type == "Series":
listItem = xbmcgui.ListItem("ID:", item.get("ProviderIds").get("Tvdb"))
infoList.addItem(listItem)
elif (type == "Episode" or type == "Season"):
url = "{server}/mediabrowser/Users/{UserId}/Items/" + item.get("SeriesId") + "?Fields=SeriesGenres,AirTime&format=json"
seriesitem = self.downloadUtils.downloadUrl(url)
if seriesitem.get("ProviderIds") != None and seriesitem.get("ProviderIds").get("Tvdb") != None:
listItem = xbmcgui.ListItem("ID:", seriesitem.get("ProviderIds").get("Tvdb"))
infoList.addItem(listItem)
# alternate list
try:
alternateList = self.getControl(3291)
if alternateList != None:
if directorlistItem != None:
alternateList.addItem(directorlistItem)
if writerlistItem != None:
alternateList.addItem(writerlistItem)
alternateList.addItem(genrelistItem2)
if item.get("ProductionLocations") !=None and item.get("ProductionLocations") != []:
listItem = xbmcgui.ListItem("Country:", item.get("ProductionLocations")[0])
alternateList.addItem(listItem)
elif item.get("AirTime") !=None:
listItem = xbmcgui.ListItem("Air Time:", item.get("AirTime"))
alternateList.addItem(listItem)
if(item.get("PremiereDate") != None):
premieredatelist = (item.get("PremiereDate")).split("T")
premieredate = premieredatelist[0]
listItem = xbmcgui.ListItem("Premiered Date:", premieredate)
alternateList.addItem(listItem)
alternateList.addItem(pathlistItem2)
except:
pass
self.getControl(3000).setLabel(name)
self.getControl(3003).setLabel(episodeInfo)
try:
discartImageControl = self.getControl(3091)
artImageControl = self.getControl(3092)
thumbImageControl = self.getControl(3093)
logoImageControl = self.getControl(3094)
if discartImageControl != None and artImageControl != None and thumbImageControl != None and logoImageControl != None:
if logo != "":
self.getControl(3094).setImage(logo)
else:
self.getControl(3000).setVisible(True)
if discart != '':
self.getControl(3091).setImage(discart)
self.getControl(3092).setVisible(False)
self.getControl(3093).setVisible(False)
else:
self.getControl(3091).setVisible(False)
art = API().getArtwork(item,"Art")
if (artImageControl != None):
if art != '':
self.getControl(3092).setImage(art)
self.getControl(3093).setVisible(False)
else:
self.getControl(3092).setVisible(False)
if (type == "Episode"):
thumb = API().getArtwork(item,"Thumb3")
else:
thumb = API().getArtwork(item,"Thumb")
if (thumbImageControl != None):
if thumb != '':
self.getControl(3093).setImage(thumb)
else:
self.getControl(3093).setVisible(False)
except:
pass
if(type == "Episode"):
# null_pointer - I have removed this in favor of letting the user chose from the setting and using the "poster" type in the above image url create
#image = API().getArtwork(seriesitem, "Primary")
seriesimage = API().getArtwork(item, "SeriesPrimary")
try:
self.getControl(3099).setImage(seriesimage)
self.getControl(3009).setImage(image)
except:
pass
if(cappedPercentage != None):
self.getControl(3010).setImage("Progress\progress_" + str(cappedPercentage) + ".png")
else:
self.getControl(3011).setImage(image)
if(cappedPercentage != None):
self.getControl(3012).setImage("Progress\progress_" + str(cappedPercentage) + ".png")
# disable play button
if(type == "Season" or type == "Series"):
self.setFocusId(3226)
self.getControl(3002).setEnabled(False)
def setId(self, id):
self.id = id
def onFocus(self, controlId):
pass
def doAction(self):
pass
def closeDialog(self):
self.close()
def onClick(self, controlID):
if(controlID == 3002):
# close all dialogs when playing an item
xbmc.executebuiltin("Dialog.Close(all,true)")
xbmc.executebuiltin("RunPlugin(" + self.playUrl + ")")
self.close()
elif(controlID == 3102):
# close all dialogs when playing an item
xbmc.executebuiltin("Dialog.Close(all,true)")
xbmc.executebuiltin("RunPlugin(" + self.trailerUrl + ")")
self.close()
elif(controlID == 3103):
# close all dialogs when playing an item
xbmc.executebuiltin("Dialog.Close(all,true)")
xbmc.executebuiltin("RunPlugin(" + self.couchPotatoUrl + ")")
elif(controlID == 3230):
peopleList = self.getControl(3230)
item = peopleList.getSelectedItem()
action = item.getProperty("ActionUrl")
xbmc.log(action)
xbmc.executebuiltin("RunPlugin(" + action + ")")
elif(controlID == 3291):
list = self.getControl(3291)
item = list.getSelectedItem()
action = item.getProperty("ActionUrl")
xbmc.log(action)
xbmc.executebuiltin("RunPlugin(" + action + ")")
elif(controlID == 3192):
url = '{server}/mediabrowser/Users/{UserId}/PlayedItems/' + self.id
button = self.getControl(3192)
watched = button.isSelected()
if watched == True:
self.postUrl(url)
else:
self.deleteUrl(url)
self.onInit()
elif(controlID == 3193):
url = '{server}/mediabrowser/Users/{UserId}/Items/' + self.id + '/Rating'
dislikebutton = self.getControl(3193)
dislike = dislikebutton.isSelected()
if dislike == True:
url = url + '?likes=false'
self.postUrl(url)
else:
self.deleteUrl(url)
self.onInit()
elif(controlID == 3194):
url = '{server}/mediabrowser/Users/{UserId}/Items/' + self.id + '/Rating'
likebutton = self.getControl(3194)
like = likebutton.isSelected()
if like == True:
url = url + '?likes=true'
self.postUrl(url)
else:
self.deleteUrl(url)
self.onInit()
elif(controlID == 3195):
url = '{server}/mediabrowser/Users/{UserId}/FavoriteItems/' + self.id
button = self.getControl(3195)
favourite = button.isSelected()
if favourite == True:
self.postUrl(url)
else:
self.deleteUrl(url)
self.onInit()
elif(controlID == 3006):
url = "{server}/mediabrowser/Users/{UserId}/PlayingItems/" + self.id + "/Progress?PositionTicks=0"
self.postUrl(url)
self.onInit()
pass
def postUrl (self,url):
self.downloadUtils.downloadUrl(url, postBody="", type="POST")
def deleteUrl (self,url):
self.downloadUtils.downloadUrl(url, type="DELETE")

View file

@ -44,7 +44,7 @@ class VideoNodes():
etree.ElementTree(root).write(nodefile) etree.ElementTree(root).write(nodefile)
#create tag node - all items #create tag node - all items
nodefile = os.path.join(libraryPath, tagname + "_all.xml") nodefile_root = os.path.join(libraryPath, tagname + "_all.xml")
root = etree.Element("node", {"order":"1", "type":"filter"}) root = etree.Element("node", {"order":"1", "type":"filter"})
etree.SubElement(root, "label").text = tagname etree.SubElement(root, "label").text = tagname
etree.SubElement(root, "match").text = "all" etree.SubElement(root, "match").text = "all"
@ -59,9 +59,9 @@ class VideoNodes():
WINDOW.setProperty("Emby.nodes.%s.type" %str(windowPropId),type) WINDOW.setProperty("Emby.nodes.%s.type" %str(windowPropId),type)
etree.SubElement(Rule, "value").text = tagname etree.SubElement(Rule, "value").text = tagname
try: try:
etree.ElementTree(root).write(nodefile, xml_declaration=True) etree.ElementTree(root).write(nodefile_root, xml_declaration=True)
except: except:
etree.ElementTree(root).write(nodefile) etree.ElementTree(root).write(nodefile_root)
#create tag node - recent items #create tag node - recent items
nodefile = os.path.join(libraryPath, tagname + "_recent.xml") nodefile = os.path.join(libraryPath, tagname + "_recent.xml")
@ -154,9 +154,8 @@ class VideoNodes():
etree.SubElement(root, "label").text = label etree.SubElement(root, "label").text = label
etree.SubElement(root, "match").text = "all" etree.SubElement(root, "match").text = "all"
etree.SubElement(root, "content").text = "episodes" etree.SubElement(root, "content").text = "episodes"
etree.SubElement(root, "path").text = nodefile_root
etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png" etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png"
Rule = etree.SubElement(root, "rule", {"field":"tag","operator":"is"})
etree.SubElement(Rule, "value").text = tagname
etree.SubElement(root, "order", {"direction":"descending"}).text = "dateadded" etree.SubElement(root, "order", {"direction":"descending"}).text = "dateadded"
#set limit to 25 --> currently hardcoded --> TODO: add a setting for this ? #set limit to 25 --> currently hardcoded --> TODO: add a setting for this ?
etree.SubElement(root, "limit").text = "25" etree.SubElement(root, "limit").text = "25"
@ -180,8 +179,7 @@ class VideoNodes():
etree.SubElement(root, "match").text = "all" etree.SubElement(root, "match").text = "all"
etree.SubElement(root, "content").text = "episodes" etree.SubElement(root, "content").text = "episodes"
etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png" etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png"
Rule = etree.SubElement(root, "rule", {"field":"tag","operator":"is"}) etree.SubElement(root, "path").text = nodefile_root
etree.SubElement(Rule, "value").text = tagname
#set limit to 25 --> currently hardcoded --> TODO: add a setting for this ? #set limit to 25 --> currently hardcoded --> TODO: add a setting for this ?
etree.SubElement(root, "limit").text = "25" etree.SubElement(root, "limit").text = "25"
Rule2 = etree.SubElement(root, "rule", {"field":"inprogress","operator":"true"}) Rule2 = etree.SubElement(root, "rule", {"field":"inprogress","operator":"true"})
@ -200,8 +198,7 @@ class VideoNodes():
label = language(30179) label = language(30179)
etree.SubElement(root, "label").text = label etree.SubElement(root, "label").text = label
etree.SubElement(root, "content").text = "episodes" etree.SubElement(root, "content").text = "episodes"
path = "plugin://plugin.video.emby/?id=%s&mode=nextup&limit=25" %tagname etree.SubElement(root, "path").text = nodefile_root
etree.SubElement(root, "path").text = path
etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png" etree.SubElement(root, "icon").text = "special://home/addons/plugin.video.emby/icon.png"
WINDOW.setProperty("Emby.nodes.%s.nextepisodes.title" %str(windowPropId),label) WINDOW.setProperty("Emby.nodes.%s.nextepisodes.title" %str(windowPropId),label)
path = "library://video/Emby - %s/%s_nextup_episodes.xml"%(tagname,tagname) path = "library://video/Emby - %s/%s_nextup_episodes.xml"%(tagname,tagname)

View file

@ -249,7 +249,7 @@ class WriteKodiMusicDB():
#link album to artist #link album to artist
artistid = None artistid = None
album_artists = None album_artists = []
if MBitem.get("AlbumArtists"): if MBitem.get("AlbumArtists"):
album_artists = MBitem.get("AlbumArtists") album_artists = MBitem.get("AlbumArtists")
elif MBitem.get("ArtistItems"): elif MBitem.get("ArtistItems"):
@ -366,19 +366,9 @@ class WriteKodiMusicDB():
filename = playurl.rsplit("/",1)[-1] filename = playurl.rsplit("/",1)[-1]
path = playurl.replace(filename,"") path = playurl.replace(filename,"")
else: else:
#for transcoding we need to create a fake strm file because I couldn't figure out how to set a http or plugin path in the music DB #for transcoding we just use the server's streaming path because I couldn't figure out how to set a http or plugin path in the music DB
playurl = "plugin://plugin.video.emby/music/?id=%s&mode=play" %MBitem["Id"] path = server + "/Audio/%s/" %MBitem["Id"]
dataPath = os.path.join(addondir,"musicfiles" + os.sep) filename = "stream.mp3"
#create fake strm file
if not xbmcvfs.exists(dataPath):
xbmcvfs.mkdir(dataPath)
filename = MBitem["Id"] + ".strm"
path = dataPath
strmFile = os.path.join(dataPath,filename)
text_file = open(strmFile, "w")
text_file.writelines(playurl)
text_file.close()
#get the path #get the path
cursor.execute("SELECT idPath as pathid FROM path WHERE strPath = ?",(path,)) cursor.execute("SELECT idPath as pathid FROM path WHERE strPath = ?",(path,))

View file

@ -106,7 +106,7 @@ class WriteKodiVideoDB():
jsonData = downloadUtils.downloadUrl(itemTrailerUrl) jsonData = downloadUtils.downloadUrl(itemTrailerUrl)
if(jsonData != ""): if(jsonData != ""):
trailerItem = jsonData trailerItem = jsonData
trailerUrl = "plugin://plugin.video.emby/trailer/?id=%s&mode=playnow" % trailerItem[0][u'Id'] trailerUrl = "plugin://plugin.video.emby/trailer/?id=%s&mode=play" % trailerItem[0][u'Id']
if MBitem.get("DateCreated") != None: if MBitem.get("DateCreated") != None:
dateadded = MBitem["DateCreated"].split('.')[0].replace('T', " ") dateadded = MBitem["DateCreated"].split('.')[0].replace('T', " ")

View file

@ -17,27 +17,27 @@
</category> </category>
<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="dbSyncIndication" type="bool" label="30241" default="false" visible="true" enable="true" /> <setting id="dbSyncIndication" type="bool" label="Show sync progress on screen" default="false" visible="true" enable="true" />
<setting id="enableMusicSync" type="bool" label="Enable Music Library Sync (experimental!)" default="false" visible="true" enable="true" /> <setting id="enableMusicSync" type="bool" label="Enable Music Library Sync (experimental!)" default="false" visible="true" enable="true" />
</category> </category>
<category label="Playback"> <!-- Extra Sync options --> <category label="Playback"> <!-- Extra Sync options -->
<setting id="smbusername" type="text" label="30007" default="" visible="true" enable="true" /> <setting id="smbusername" type="text" label="30007" default="" visible="true" enable="true" />
<setting id="smbpassword" type="text" label="30008" default="" option="hidden" visible="true" enable="true" /> <setting id="smbpassword" type="text" label="30008" default="" option="hidden" visible="true" enable="true" />
<setting type="sep"/> <setting type="sep"/>
<setting id="autoPlaySeason" type="bool" label="30246" default="false" visible="true" enable="true" />
<setting id="autoPlaySeasonTime" type="number" label="30247" default="20" visible="eq(-1,true)" enable="true" />
<setting type="sep" /> <setting type="sep" />
<setting id="selectAction" type="enum" label="30248" values="Play|Info" default="0" />
<setting type="sep" /> <setting type="sep" />
<setting id="playFromStream" type="bool" label="30002" visible="true" enable="true" default="false" /> <setting id="playFromStream" type="bool" label="30002" visible="true" enable="true" default="false" />
<setting id="videoBitRate" type="enum" label="30160" values="664 Kbps SD|996 Kbps HD|1.3 Mbps HD|2.0 Mbps HD|3.2 Mbps HD|4.7 Mbps HD|6.2 Mbps HD|7.7 Mbps HD|9.2 Mbps HD|10.7 Mbps HD|12.2 Mbps HD|13.7 Mbps HD|15.2 Mbps HD|16.7 Mbps HD|18.2 Mbps HD|20.0 Mbps HD|40.0 Mbps HD|100.0 Mbps HD [default]|1000.0 Mbps HD" visible="eq(-1,true)" default="17" /> <setting id="videoBitRate" type="enum" label="30160" values="664 Kbps SD|996 Kbps HD|1.3 Mbps HD|2.0 Mbps HD|3.2 Mbps HD|4.7 Mbps HD|6.2 Mbps HD|7.7 Mbps HD|9.2 Mbps HD|10.7 Mbps HD|12.2 Mbps HD|13.7 Mbps HD|15.2 Mbps HD|16.7 Mbps HD|18.2 Mbps HD|20.0 Mbps HD|40.0 Mbps HD|100.0 Mbps HD [default]|1000.0 Mbps HD" visible="eq(-1,true)" default="17" />
<setting id="forceTranscodingCodecs" type="text" label="30245" visible="eq(-2,true)" /> <setting id="forceTranscodingCodecs" type="text" label="30245" visible="eq(-2,true)" />
</category> </category>
<category label="Artwork"> <category label="Extras">
<setting id="disableCoverArt" type="bool" label="30157" default="false" visible="true" enable="true" /> <setting id="disableCoverArt" type="bool" label="30157" default="false" visible="true" enable="true" />
<setting id="showSpecialInfoDialog" type="bool" label="Show special Emby infodialog on play" default="false" visible="false" />
<setting id="autoPlaySeason" type="bool" label="30246" default="false" visible="true" enable="true" />
<setting id="autoPlaySeasonTime" type="number" label="30247" default="20" visible="eq(-1,true)" enable="true" />
</category> </category>
<category label="30022"> <category label="30022">
<setting id="logLevel" type="enum" label="30004" values="None|Info|Debug" default="1" /> <setting id="logLevel" type="enum" label="30004" values="None|Info|Debug" default="0" />
<setting label="30239" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=reset)" /> <setting label="30239" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=reset)" />
</category> </category>
</settings> </settings>

View file

@ -1,415 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<window id="3300" type="dialog">
<defaultcontrol always="true">3002</defaultcontrol>
<zorder>2</zorder>
<coordinates>
<system>1</system>
<left>120</left>
<top>50</top>
</coordinates>
<include>dialogeffect</include>
<controls>
<control type="image">
<left>0</left>
<top>0</top>
<width>1040</width>
<height>600</height>
<texture border="40">DialogBack.png</texture>
</control>
<control type="image" id="3001">
<left>20</left>
<top>20</top>
<width>1000</width>
<height>560</height>
<colordiffuse>FF444444</colordiffuse>
</control>
<control type="label" id="3000">
<left>30</left>
<top>25</top>
<width>950</width>
<height>20</height>
<align>left</align>
<label>-</label>
<font>font24_title</font>
<textcolor>FFFFFFFFFF</textcolor>
</control>
<control type="label" id="3003">
<left>30</left>
<top>55</top>
<width>300</width>
<height>20</height>
<align>left</align>
<label>-</label>
<font>font18_title</font>
<textcolor>FFFFFFFFFF</textcolor>
</control>
<!-- episode image 16x9 -->
<control type="image" id="3009">
<left>40</left>
<top>130</top>
<width>250</width>
<height>140</height>
<aspectratio>stretch</aspectratio>
</control>
<control type="image" id="3010">
<left>40</left>
<top>265</top>
<width>250</width>
<height>5</height>
<texture background="true">-</texture>
<colordiffuse>AAFFFFFF</colordiffuse>
<aspectratio>stretch</aspectratio>
</control>
<!-- poster image -->
<control type="image" id="3011">
<left>60</left>
<top>100</top>
<width>175</width>
<height>250</height>
<aspectratio>stretch</aspectratio>
</control>
<control type="image" id="3012">
<left>60</left>
<top>345</top>
<width>175</width>
<height>5</height>
<texture background="true">-</texture>
<colordiffuse>AAFFFFFF</colordiffuse>
<aspectratio>stretch</aspectratio>
</control>
<control type="list" id="3220">
<left>30</left>
<top>380</top>
<width>240</width>
<height>120</height>
<onleft>3002</onleft>
<onright>3221</onright>
<onup>3235</onup>
<ondown>3002</ondown>
<pagecontrol>3221</pagecontrol>
<scrolltime>200</scrolltime>
<itemlayout height="20">
<control type="label">
<left>60</left>
<top>0</top>
<width>60</width>
<height>20</height>
<font>font10</font>
<align>right</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>65</left>
<top>0</top>
<width>180</width>
<height>20</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</itemlayout>
<focusedlayout height="20">
<control type="image">
<left>0</left>
<top>0</top>
<width>240</width>
<height>20</height>
<visible>Control.HasFocus(3220)</visible>
<texture>MenuItemFO.png</texture>
<include>VisibleFadeEffect</include>
</control>
<control type="label">
<left>60</left>
<top>0</top>
<width>60</width>
<height>20</height>
<font>font10</font>
<align>right</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>65</left>
<top>0</top>
<width>180</width>
<height>20</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</focusedlayout>
</control>
<control type="scrollbar" id="3221">
<left>270</left>
<top>380</top>
<width>20</width>
<height>120</height>
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
<texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
<texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onleft>3220</onleft>
<onright>3226</onright>
<showonepage>false</showonepage>
<orientation>vertical</orientation>
</control>
<control type="list" id="3226">
<left>310</left>
<top>380</top>
<width>415</width>
<height>120</height>
<onleft>3221</onleft>
<onright>3235</onright>
<onup>3235</onup>
<ondown>3002</ondown>
<pagecontrol>-</pagecontrol>
<scrolltime>200</scrolltime>
<itemlayout height="20">
<control type="label">
<left>70</left>
<top>0</top>
<width>70</width>
<height>20</height>
<font>font10</font>
<align>right</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>75</left>
<top>0</top>
<width>340</width>
<height>20</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</itemlayout>
<focusedlayout height="20">
<control type="image">
<left>0</left>
<top>0</top>
<width>400</width>
<height>20</height>
<visible>Control.HasFocus(3226)</visible>
<texture>MenuItemFO.png</texture>
<include>VisibleFadeEffect</include>
</control>
<control type="label">
<left>70</left>
<top>0</top>
<width>70</width>
<height>20</height>
<font>font10</font>
<align>right</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>75</left>
<top>0</top>
<width>340</width>
<height>20</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</focusedlayout>
</control>
<!--
<control type="scrollbar" id="3227">
<left>270</left>
<top>380</top>
<width>20</width>
<height>120</height>
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
<texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
<texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onleft>3220</onleft>
<onright>3235</onright>
<showonepage>false</showonepage>
<orientation>vertical</orientation>
</control>
-->
<control type="textbox" id="3223">
<left>320</left>
<top>100</top>
<width>400</width>
<height>250</height>
<font>font12</font>
<!--<align>justify</align>-->
<textcolor>white</textcolor>
<pagecontrol>3235</pagecontrol>
<visible>true</visible>
</control>
<control type="scrollbar" id="3235">
<left>720</left>
<top>100</top>
<width>20</width>
<height>250</height>
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
<texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
<texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onleft>3226</onleft>
<onup>-</onup>
<onright>3230</onright>
<showonepage>false</showonepage>
<orientation>vertical</orientation>
</control>
<control type="list" id="3230">
<left>760</left>
<top>100</top>
<width>245calc</width>
<height>450</height>
<onleft>3235</onleft>
<onright>3231</onright>
<onup>-</onup>
<ondown>-</ondown>
<pagecontrol>3231</pagecontrol>
<scrolltime>200</scrolltime>
<itemlayout height="60">
<control type="image">
<left>0</left>
<top>0</top>
<width>60</width>
<height>60</height>
<texture fallback="DefaultArtist.png">$INFO[Listitem.Icon]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="label">
<left>65</left>
<top>0</top>
<width>160</width>
<height>30</height>
<font>font12</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>65</left>
<top>30</top>
<width>160</width>
<height>30</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</itemlayout>
<focusedlayout height="60">
<control type="image">
<left>0</left>
<top>0</top>
<width>60</width>
<height>60</height>
<texture fallback="DefaultArtist.png">$INFO[Listitem.Icon]</texture>
<aspectratio>scale</aspectratio>
</control>
<control type="image">
<left>60</left>
<top>0</top>
<width>160</width>
<height>30</height>
<visible>Control.HasFocus(3230)</visible>
<texture>MenuItemFO.png</texture>
<include>VisibleFadeEffect</include>
</control>
<control type="label">
<left>65</left>
<top>0</top>
<width>160</width>
<height>30</height>
<font>font12</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>blue</textcolor>
<selectedcolor>selected</selectedcolor>
<info>ListItem.Label</info>
</control>
<control type="label">
<left>65</left>
<top>30</top>
<width>160</width>
<height>30</height>
<font>font10</font>
<align>left</align>
<aligny>center</aligny>
<textcolor>white</textcolor>
<selectedcolor>white</selectedcolor>
<info>ListItem.Label2</info>
</control>
</focusedlayout>
</control>
<control type="scrollbar" id="3231">
<left>985</left>
<top>100</top>
<width>20</width>
<height>450</height>
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
<texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
<texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onleft>3230</onleft>
<onright>-</onright>
<showonepage>false</showonepage>
<orientation>vertical</orientation>
</control>
<control type="button" id="3002">
<left>30</left>
<top>520</top>
<width>150</width>
<height>40</height>
<align>center</align>
<label>Play</label>
<font>font13</font>
<onleft>-</onleft>
<onright>3220</onright>
<onup>3220</onup>
</control>
</controls>
</window>

View file

@ -1,205 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<window>
<defaultcontrol always="true">3010</defaultcontrol>
<zorder>2</zorder>
<coordinates>
<system>1</system>
<left>120</left>
<top>50</top>
</coordinates>
<include>dialogeffect</include>
<controls>
<control type="image">
<left>0</left>
<top>0</top>
<width>1040</width>
<height>600</height>
<texture border="40">DialogBack.png</texture>
</control>
<control type="image">
<left>20</left>
<top>20</top>
<width>1000</width>
<height>560</height>
<texture>$INFO[Skin.CurrentTheme,special://skin/backgrounds/,.jpg]</texture>
<visible>![Skin.HasSetting(UseCustomBackground) + !IsEmpty(Skin.String(CustomBackgroundPath))]</visible>
<include>VisibleFadeEffect</include>
<colordiffuse>FF444444</colordiffuse>
</control>
<control type="image">
<description>Dialog Header image</description>
<left>40</left>
<top>16</top>
<width>960</width>
<height>40</height>
<texture>dialogheader.png</texture>
</control>
<control type="label" id="1">
<description>header label</description>
<left>40</left>
<top>20</top>
<width>960</width>
<height>30</height>
<font>font13_title</font>
<label>Person Info</label>
<align>center</align>
<aligny>center</aligny>
<textcolor>selected</textcolor>
<shadowcolor>black</shadowcolor>
</control>
<!--
<control type="button" id="8">
<description>Close Window button</description>
<left>960</left>
<top>15</top>
<width>64</width>
<height>32</height>
<label>-</label>
<font>-</font>
<onclick>PreviousMenu</onclick>
<texturefocus>DialogCloseButton-focus.png</texturefocus>
<texturenofocus>DialogCloseButton.png</texturenofocus>
<onleft>-</onleft>
<onright>-</onright>
<onup>-</onup>
<ondown>3005</ondown>
</control>
-->
<control type="label" id="3000">
<description>person name</description>
<left>30</left>
<top>65</top>
<width>550</width>
<height>100</height>
<align>left</align>
<label>-</label>
<font>font13</font>
<textcolor>white</textcolor>
</control>
<control type="image" id="3009">
<left>30</left>
<top>120</top>
<width>250</width>
<height>250</height>
<aspectratio>keep</aspectratio>
</control>
<control type="textbox" id="3001">
<description>text</description>
<left>300</left>
<top>100</top>
<width>630</width>
<height>280</height>
<align>left</align>
<label>-</label>
<font>font12</font>
<pagecontrol>3005</pagecontrol>
</control>
<control type="scrollbar" id="3005">
<left>940</left>
<top>100</top>
<width>20</width>
<height>280</height>
<texturesliderbackground border="0,14,0,14">ScrollBarV.png</texturesliderbackground>
<texturesliderbar border="2,16,2,16">ScrollBarV_bar.png</texturesliderbar>
<texturesliderbarfocus border="2,16,2,16">ScrollBarV_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onup>8</onup>
<onleft>3001</onleft>
<onright>-</onright>
<ondown>3010</ondown>
<showonepage>false</showonepage>
<orientation>vertical</orientation>
</control>
<control type="list" id="3010">
<left>40</left>
<top>390</top>
<width>940</width>
<height>170</height>
<onleft>-</onleft>
<onright>-</onright>
<onup>3005</onup>
<ondown>3011</ondown>
<pagecontrol>3011</pagecontrol>
<scrolltime>200</scrolltime>
<orientation>horizontal</orientation>
<itemlayout width="120">
<control type="image">
<left>0</left>
<top>0</top>
<width>100</width>
<height>150</height>
<texture>$INFO[Listitem.Icon]</texture>
<bordertexture border="5">button-nofocus.png</bordertexture>
<bordersize>5</bordersize>
</control>
<control type="label">
<left>0</left>
<top>150</top>
<width>100</width>
<height>20</height>
<align>left</align>
<font>font10</font>
<textcolor>FFFFFFFFFF</textcolor>
<label>$INFO[Listitem.Label2]</label>
</control>
</itemlayout>
<focusedlayout width="120">
<control type="image">
<left>0</left>
<top>0</top>
<width>100</width>
<height>150</height>
<texture>$INFO[Listitem.Icon]</texture>
<bordertexture border="5">button-nofocus.png</bordertexture>
<bordersize>5</bordersize>
</control>
<control type="image">
<left>0</left>
<top>0</top>
<width>100</width>
<height>150</height>
<texture>$INFO[Listitem.Icon]</texture>
<bordertexture border="5">button-focus.png</bordertexture>
<bordersize>5</bordersize>
<visible>Control.HasFocus(3010)</visible>
</control>
<control type="label">
<left>0</left>
<top>150</top>
<width>100</width>
<height>20</height>
<align>left</align>
<font>font10</font>
<textcolor>FFFFFFFFFF</textcolor>
<label>$INFO[Listitem.Label2]</label>
</control>
</focusedlayout>
</control>
<control type="scrollbar" id="3011">
<left>40</left>
<top>560</top>
<width>940</width>
<height>20</height>
<texturesliderbackground border="14,0,14,0">ScrollBarH.png</texturesliderbackground>
<texturesliderbar border="16,2,16,2">ScrollBarH_bar.png</texturesliderbar>
<texturesliderbarfocus border="16,2,16,2">ScrollBarH_bar_focus.png</texturesliderbarfocus>
<textureslidernib>ScrollBarNib.png</textureslidernib>
<textureslidernibfocus>ScrollBarNib.png</textureslidernibfocus>
<onup>3010</onup>
<showonepage>false</showonepage>
<orientation>horizontal</orientation>
</control>
</controls>
</window>