2014-11-03, 22:23
Hi Guys, Spoiler alert I do have this question posted in the Chrome Launcher Release thread and the Fanart Section but hoping to get a resolution.
I have installed the Chrome Launcher Release addon and had it running fine. I wanted to add Fanart support as well so that each Link has its own Fanart background (similar to Movie mode) I have designated a fanart in each .link file and included a fanart tag through out the default.py script.
Where I seem to be coming unstuck (at the moment) is I haven't defined fanart.
I have tried adding item.setProperty('fanart_image',fanart) in various locations with no luck.
Can anyone give me any advice please. I am in no way knowledgable on python but have been trying to have a go.
So here is my default.py
And here is my latest error from the debug log
Like I said I think I have been bumbling my way through but just can't work out how to define fanart.
Any help is appreciated.
Thanks
Justin
I have installed the Chrome Launcher Release addon and had it running fine. I wanted to add Fanart support as well so that each Link has its own Fanart background (similar to Movie mode) I have designated a fanart in each .link file and included a fanart tag through out the default.py script.
Where I seem to be coming unstuck (at the moment) is I haven't defined fanart.
I have tried adding item.setProperty('fanart_image',fanart) in various locations with no luck.
Can anyone give me any advice please. I am in no way knowledgable on python but have been trying to have a go.
So here is my default.py
Code:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import sys
import re
import os
import subprocess
import xbmcplugin
import xbmcgui
import xbmcaddon
addon = xbmcaddon.Addon()
pluginhandle = int(sys.argv[1])
addonID = addon.getAddonInfo('id')
addonPath = addon.getAddonInfo('path')
translation = addon.getLocalizedString
osWin = xbmc.getCondVisibility('system.platform.windows')
osOsx = xbmc.getCondVisibility('system.platform.osx')
osLinux = xbmc.getCondVisibility('system.platform.linux')
useOwnProfile = addon.getSetting("useOwnProfile") == "true"
useCustomPath = addon.getSetting("useCustomPath") == "true"
customPath = xbmc.translatePath(addon.getSetting("customPath"))
userDataFolder = xbmc.translatePath("special://profile/addon_data/"+addonID)
profileFolder = os.path.join(userDataFolder, 'profile')
siteFolder = os.path.join(userDataFolder, 'sites')
if not os.path.isdir(userDataFolder):
os.mkdir(userDataFolder)
if not os.path.isdir(profileFolder):
os.mkdir(profileFolder)
if not os.path.isdir(siteFolder):
os.mkdir(siteFolder)
#youtubeUrl = "http://www.youtube.com/leanback"
#vimeoUrl = "http://www.vimeo.com/couchmode"
def index():
files = os.listdir(siteFolder)
for file in files:
if file.endswith(".link"):
fh = open(os.path.join(siteFolder, file), 'r')
title = ""
url = ""
thumb = ""
fanart = ""
kiosk = "yes"
stopPlayback = "no"
for line in fh.readlines():
entry = line[:line.find("=")]
content = line[line.find("=")+1:]
if entry == "title":
title = content.strip()
elif entry == "url":
url = content.strip()
elif entry == "thumb":
thumb = content.strip()
elif entry == "fanart":
fanart = content.strip()
elif entry == "kiosk":
kiosk = content.strip()
elif entry == "stopPlayback":
stopPlayback = content.strip()
fh.close()
addSiteDir(title, url, 'showSite', thumb, stopPlayback, kiosk)
# addDir("[ Vimeo Couchmode ]", vimeoUrl, 'showSite', os.path.join(addonPath, "vimeo.png"), "yes", "yes")
# addDir("[ Youtube Leanback ]", youtubeUrl, 'showSite', os.path.join(addonPath, "youtube.png"), "yes", "yes")
addDir("[B]- "+translation(30001)+"[/B]", "", 'addSite', "")
xbmcplugin.endOfDirectory(pluginhandle)
def addSite(site="", title=""):
if site:
filename = getFileName(title)
content = "title="+title+"\nurl="+site+"\nthumb=DefaultFolder.png\nfanart=DefaultFolder.png\nstopPlayback=no\nkiosk=yβes"
fh = open(os.path.join(siteFolder, filename+".link"), 'w')
fh.write(content)
fh.close()
else:
keyboard = xbmc.Keyboard('', translation(30003))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
title = keyboard.getText()
keyboard = xbmc.Keyboard('http://', translation(30004))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
url = keyboard.getText()
keyboard = xbmc.Keyboard('no', translation(30009))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
stopPlayback = keyboard.getText()
keyboard = xbmc.Keyboard('yes', translation(30016))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
kiosk = keyboard.getText()
content = "title="+title+"\nurl="+url+"\nthumb=DefaultFolder.png\nfanart=DefaultFolder.png\nstopPlayback="+stopPlayback+"\nkiosk="+kiosk
fh = open(os.path.join(siteFolder, getFileName(title)+".link"), 'w')
fh.write(content)
fh.close()
xbmc.executebuiltin("Container.Refresh")
def getFileName(title):
return (''.join(c for c in unicode(title, 'utf-8') if c not in '/\\:?"*|<>')).strip()
def getFullPath(path, url, useKiosk, userAgent):
profile = ""
if useOwnProfile:
profile = '--user-data-dir="'+profileFolder+'" '
kiosk = ""
if useKiosk=="yes":
kiosk = '--kiosk '
if userAgent:
userAgent = '--user-agent="'+userAgent+'" '
return '"'+path+'" '+profile+userAgent+'--start-maximized --disable-translate --disable-new-tab-first-run --no-default-browser-check --no-first-run '+kiosk+'"'+url+'"'
def showSite(url, stopPlayback, kiosk, userAgent):
if stopPlayback == "yes":
xbmc.Player().stop()
if osWin:
path = 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe'
path64 = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'
if useCustomPath and os.path.exists(customPath):
fullUrl = getFullPath(customPath, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=False)
elif os.path.exists(path):
fullUrl = getFullPath(path, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=False)
elif os.path.exists(path64):
fullUrl = getFullPath(path64, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=False)
else:
xbmc.executebuiltin('XBMC.Notification(Info:,'+str(translation(30005))+'!,5β000)')
addon.openSettings()
elif osOsx:
path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
if useCustomPath and os.path.exists(customPath):
fullUrl = getFullPath(customPath, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=True)
elif os.path.exists(path):
fullUrl = getFullPath(path, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=True)
else:
xbmc.executebuiltin('XBMC.Notification(Info:,'+str(translation(30005))+'!,5β000)')
addon.openSettings()
elif osLinux:
path = "/usr/bin/google-chrome"
if useCustomPath and os.path.exists(customPath):
fullUrl = getFullPath(customPath, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=True)
elif os.path.exists(path):
fullUrl = getFullPath(path, url, kiosk, userAgent)
subprocess.Popen(fullUrl, shell=True)
else:
xbmc.executebuiltin('XBMC.Notification(Info:,'+str(translation(30005))+'!,5β000)')
addon.openSettings()
def removeSite(title):
os.remove(os.path.join(siteFolder, getFileName(title)+".link"))
xbmc.executebuiltin("Container.Refresh")
def editSite(title):
filenameOld = getFileName(title)
file = os.path.join(siteFolder, filenameOld+".link")
fh = open(file, 'r')
title = ""
url = ""
kiosk = "yes"
thumb = "DefaultFolder.png"
fanart = "DefaultFolder.png"
stopPlayback = "no"
for line in fh.readlines():
entry = line[:line.find("=")]
content = line[line.find("=")+1:]
if entry == "title":
title = content.strip()
elif entry == "url":
url = content.strip()
elif entry == "kiosk":
kiosk = content.strip()
elif entry == "thumb":
thumb = content.strip()
elif entry == "fanart":
fanart = content.strip()
elif entry == "stopPlayback":
stopPlayback = content.strip()
fh.close()
oldTitle = title
keyboard = xbmc.Keyboard(title, translation(30003))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
title = keyboard.getText()
keyboard = xbmc.Keyboard(url, translation(30004))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
url = keyboard.getText()
keyboard = xbmc.Keyboard(stopPlayback, translation(30009))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
stopPlayback = keyboard.getText()
keyboard = xbmc.Keyboard(kiosk, translation(30016))
keyboard.doModal()
if keyboard.isConfirmed() and keyboard.getText():
kiosk = keyboard.getText()
content = "title="+title+"\nurl="+url+"\nthumb="+thumb+"\nfanart="+fanart+"\nstopPlayback="+stopPlayback+"\nkiosk="+kiosk
fh = open(os.path.join(siteFolder, getFileName(title)+".link"), 'w')
fh.write(content)
fh.close()
if title != oldTitle:
os.remove(os.path.join(siteFolder, filenameOld+".link"))
xbmc.executebuiltin("Container.Refresh")
def parameters_string_to_dict(parameters):
paramDict = {}
if parameters:
paramPairs = parameters[1:].split("&")
for paramsPair in paramPairs:
paramSplits = paramsPair.split('=')
if (len(paramSplits)) == 2:
paramDict[paramSplits[0]] = paramSplits[1]
return paramDict
def addDir(name, url, mode, iconimage, stopPlayback="", kiosk=""):
u = sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+urllib.quote_plus(mode)+"&stopPlayback="+urllib.quote_plus(stopPlayback)+"&kiosk="+urllib.quote_plus(kiosk)
ok = True
liz = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage, fanart_image=fanart)
liz.setInfo(type="Video", infoLabels={"Title": name})
ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=True)
return ok
def addSiteDir(name, url, mode, iconimage, stopPlayback, kiosk):
u = sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+urllib.quote_plus(mode)+"&stopPlayback="+urllib.quote_plus(stopPlayback)+"&kiosk="+urllib.quote_plus(kiosk)
ok = True
liz = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
liz.setInfo(type="Video", infoLabels={"Title": name})
liz.addContextMenuItems([(translation(30006), 'RunPlugin(plugin://'+addonID+'/?mode=editSite&url='+urllib.quote_plus(name)+')',), (translation(30002), 'RunPlugin(plugin://'+addonID+'/?mode=removeSite&url='+urllib.quote_plus(name)+')',)])
ok = xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=u, listitem=liz, isFolder=True)
return ok
params = parameters_string_to_dict(sys.argv[2])
mode = urllib.unquote_plus(params.get('mode', ''))
name = urllib.unquote_plus(params.get('name', ''))
url = urllib.unquote_plus(params.get('url', ''))
stopPlayback = urllib.unquote_plus(params.get('stopPlayback', 'no'))
kiosk = urllib.unquote_plus(params.get('kiosk', 'yes'))
userAgent = urllib.unquote_plus(params.get('userAgent', ''))
if mode == 'addSite':
addSite()
elif mode == 'showSite':
showSite(url, stopPlayback, kiosk, userAgent)
elif mode == 'removeSite':
removeSite(url)
elif mode == 'editSite':
editSite(url)
else:
index()
I have added a bunch of references for fanart where I thought necessary
And here is my latest error from the debug log
Code:
21:14:24 T:140486782060288 ERROR: EXCEPTION Thrown (PythonToCppException) : -->Python callback/script returned the following error<--
- NOTE: IGNORING THIS CAN LEAD TO MEMORY LEAKS!
Error Type: <type 'exceptions.NameError'>
Error Contents: global name 'fanart' is not defined
Traceback (most recent call last):
File "/home/xbmc/.xbmc/addons/plugin.program.chrome.launcher/default.py", line 268, in <module>
index()
File "/home/xbmc/.xbmc/addons/plugin.program.chrome.launcher/default.py", line 70, in index
addDir("[B]- "+translation(30001)+"[/B]", "", 'addSite', "")
File "/home/xbmc/.xbmc/addons/plugin.program.chrome.launcher/default.py", line 235, in addDir
liz = xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage, fanart_image=fanart)
NameError: global name 'fanart' is not defined
-->End of Python script error report<--
Any help is appreciated.
Thanks
Justin