So after some fiddling I think I am on the right path but I am having a few problems with the script launching.
This is my default.py file
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=yes"
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))+'!,5000)')
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))+'!,5000)')
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))+'!,5000)')
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, as well as reference in the liz = xbmc.guiList items
But I am having trouble with the AddSiteDir functions
This is the error from the debug
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<--
I am slowly getting closer but I need to define fanart.
I believe I need something along the lines of
item.setProperty('fanart_image',fanart)
but I am at a loss as to where to put it.
I know this has been a long post hopefully someone can help.
Cheers
Justin
p.s I know this isn't a skin issue but was hoping someone may be able to help. Cheers