astrXbian/.install/.kodi/addons/plugin.video.vstream/resources/lib/handler/pluginHandler.py

114 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
import sys
import xbmcvfs
from resources.lib.comaddon import addon, VSlog
class cPluginHandler:
def getPluginHandle(self):
try:
return int(sys.argv[1])
except:
return 0
def getPluginPath(self):
try:
return sys.argv[0]
except:
return ''
def __getFileNamesFromFolder(self, sFolder):
aNameList = []
folder, items = xbmcvfs.listdir(sFolder)
items.sort()
for sItemName in items:
if not sItemName.endswith(".py"):
continue
sFilePath = "/".join([sFolder, sItemName])
# xbox hack
sFilePath = sFilePath.replace('\\', '/')
VSlog("Load Plugin %s" % sItemName)
if (xbmcvfs.exists(sFilePath) == True):
if (sFilePath.lower().endswith('py')):
sItemName = sItemName.replace('.py', '')
aNameList.append(sItemName)
return aNameList
def __importPlugin(self, sName):
try:
exec("from resources.sites import " + sName, globals())
exec("sSiteName = " + sName + ".SITE_NAME", globals())
exec("sSiteDesc = " + sName + ".SITE_DESC", globals())
sPluginSettingsName = 'plugin_' + sName
return sSiteName, sPluginSettingsName, sSiteDesc
except Exception as e:
VSlog("Cannot import plugin " + str(sName))
VSlog("Detail de l\'erreur " + str(e))
return False, False
def getAvailablePlugins(self, force=False):
addons = addon()
sFolder = "special://home/addons/plugin.video.vstream/resources/sites"
sFolder = sFolder.replace('\\', '/')
VSlog("Sites Folder " + sFolder)
aFileNames = self.__getFileNamesFromFolder(sFolder)
aPlugins = []
for sFileName in aFileNames:
# wir versuchen das plugin zu importieren
aPlugin = self.__importPlugin(sFileName)
if (aPlugin[0] != False):
sSiteName = aPlugin[0]
sPluginSettingsName = aPlugin[1]
sSiteDesc = aPlugin[2]
# existieren zu diesem plugin die an/aus settings
bPlugin = addons.getSetting(sPluginSettingsName)
if (bPlugin != ''):
# settings gefunden
if (bPlugin == 'true') or (force == True):
aPlugins.append(self.__createAvailablePluginsItem(sSiteName, sFileName, sSiteDesc))
else:
# settings nicht gefunden, also schalten wir es trotzdem sichtbar
aPlugins.append(self.__createAvailablePluginsItem(sSiteName, sFileName, sSiteDesc))
return aPlugins
def getAllPlugins(self):
sFolder = "special://home/addons/plugin.video.vstream/resources/sites"
sFolder = sFolder.replace('\\', '/')
VSlog("Sites Folder " + sFolder)
aFileNames = self.__getFileNamesFromFolder(sFolder)
aPlugins = []
for sFileName in aFileNames:
# wir versuchen das plugin zu importieren
aPlugin = self.__importPlugin(sFileName)
if (aPlugin[0] != False):
sSiteName = aPlugin[0]
sPluginSettingsName = aPlugin[1]
sSiteDesc = aPlugin[2]
# settings nicht gefunden, also schalten wir es trotzdem sichtbar
aPlugins.append(self.__createAvailablePluginsItem(sSiteName, sFileName, sSiteDesc))
return aPlugins
def __createAvailablePluginsItem(self, sPluginName, sPluginIdentifier, sPluginDesc):
aPluginEntry = []
aPluginEntry.append(sPluginName)
aPluginEntry.append(sPluginIdentifier)
aPluginEntry.append(sPluginDesc)
return aPluginEntry