279 lines
7.5 KiB
Python
279 lines
7.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# https://github.com/Kodi-vStream/venom-xbmc-addons
|
|
|
|
import xbmcaddon, xbmcgui, xbmc, xbmcvfs
|
|
|
|
"""System d'importation
|
|
|
|
from resources.lib.comaddon import addon, dialog, VSlog, xbmcgui, xbmc
|
|
|
|
"""
|
|
|
|
"""
|
|
from resources.lib.comaddon import addon
|
|
|
|
addons = addon() en haut de page.
|
|
|
|
utiliser une fonction comaddon ou xbmcaddon
|
|
https://codedocs.xyz/xbmc/xbmc/class_x_b_m_c_addon_1_1xbmcaddon_1_1_addon.html
|
|
|
|
addons.VSlang(30305)
|
|
addons.getLocalizedString(30305)
|
|
addons.openSettings()
|
|
|
|
utiliser la fonction avec un autre addon
|
|
|
|
addons2 = addon('plugin.video.youtube')
|
|
addons2.openSettings()
|
|
"""
|
|
|
|
|
|
"""
|
|
Ne pas utiliser :
|
|
class addon(xbmcaddon.Addon):
|
|
|
|
L'utilisation de subclass peut provoquer des fuites de mémoire, signalé par ce message :
|
|
|
|
the python script "\plugin.video.vstream\default.py" has left several classes in memory that we couldn't clean up. The classes include: class XBMCAddon::xbmcaddon::Addon
|
|
|
|
# https://stackoverflow.com/questions/26588266/xbmc-addon-memory-leak
|
|
|
|
"""
|
|
ADDONVS = xbmcaddon.Addon('plugin.video.vstream') # singleton
|
|
|
|
# class addon(xbmcaddon.Addon):
|
|
class addon():
|
|
|
|
|
|
def __init__(self, addonId = None):
|
|
self.addonId = addonId
|
|
|
|
def openSettings(self):
|
|
return xbmcaddon.Addon(self.addonId).openSettings() if self.addonId else ADDONVS.openSettings()
|
|
|
|
def getSetting(self, key):
|
|
return xbmcaddon.Addon(self.addonId).getSetting(key) if self.addonId else ADDONVS.getSetting(key)
|
|
|
|
def setSetting(self, key, value):
|
|
return xbmcaddon.Addon(self.addonId).setSetting(key, value) if self.addonId else ADDONVS.setSetting(key, value)
|
|
|
|
def getAddonInfo(self, info):
|
|
return xbmcaddon.Addon(self.addonId).getAddonInfo(info) if self.addonId else ADDONVS.getAddonInfo(info)
|
|
|
|
def VSlang(self, lang):
|
|
return VSPath(xbmcaddon.Addon(self.addonId).getLocalizedString(lang)) if self.addonId else VSPath(ADDONVS.getLocalizedString(lang))
|
|
#Bug avec accent xbmc.translatePath(xbmcaddon.Addon('plugin.video.vstream').getLocalizedString(lang)).decode('utf-8')
|
|
|
|
"""
|
|
from resources.lib.comaddon import dialog
|
|
|
|
Utilisation :
|
|
dialogs = dialog()
|
|
dialogs.VSinfo('test')
|
|
https://codedocs.xyz/xbmc/xbmc/group__python___dialog.html
|
|
"""
|
|
|
|
DIALOG = xbmcgui.Dialog() # Singleton
|
|
|
|
class dialog():
|
|
# class dialog(xbmcgui.Dialog):
|
|
|
|
def VSok(self, desc, title = 'vStream'):
|
|
return DIALOG.ok(title, desc)
|
|
|
|
def VSyesno(self, desc, title = 'vStream'):
|
|
return DIALOG.yesno(title, desc)
|
|
|
|
def VSselect(self, desc, title = 'vStream'):
|
|
return DIALOG.select(title, desc)
|
|
|
|
def numeric(self, dialogType, heading, defaultt):
|
|
return DIALOG.numeric(dialogType, heading, defaultt)
|
|
|
|
def VSselectqual(self, list_qual, list_url):
|
|
|
|
if len(list_url) == 0:
|
|
return ''
|
|
if len(list_url) == 1:
|
|
return list_url[0]
|
|
|
|
ret = DIALOG.select(addon().VSlang(30448), list_qual)
|
|
if ret > -1:
|
|
return list_url[ret]
|
|
return ''
|
|
|
|
def VSinfo(self, desc, title = 'vStream', iseconds = 0, sound = False):
|
|
if (iseconds == 0):
|
|
iseconds = 1000
|
|
else:
|
|
iseconds = iseconds * 1000
|
|
|
|
if (addon().getSetting('Block_Noti_sound') == 'true'):
|
|
sound = True
|
|
|
|
return DIALOG.notification(str(title), str(desc), xbmcgui.NOTIFICATION_INFO, iseconds, sound)
|
|
|
|
def VSerror(self, e):
|
|
return DIALOG.notification('vStream', 'Erreur: ' + str(e), xbmcgui.NOTIFICATION_ERROR, 2000), VSlog('Erreur: ' + str(e))
|
|
|
|
def VStextView(self, desc, title = "vStream"):
|
|
return DIALOG.textviewer(title, desc)
|
|
|
|
"""
|
|
from resources.lib.comaddon import progress
|
|
|
|
Utilisation :
|
|
progress_ = progress()
|
|
progress_.VScreate(SITE_NAME)
|
|
progress_.VSupdate(progress_, total)
|
|
if progress_.iscanceled():
|
|
break
|
|
progress_.VSclose(progress_)
|
|
|
|
dialog = progress() non recommandé
|
|
progress = progress() non recommandé
|
|
https://codedocs.xyz/xbmc/xbmc/group__python___dialog_progress.html
|
|
"""
|
|
|
|
COUNT = 0
|
|
PROGRESS = None # Singleton
|
|
|
|
class empty():
|
|
|
|
def VSupdate(self, dialog, total, text = '', search = False):
|
|
pass
|
|
|
|
def iscanceled(self):
|
|
pass
|
|
|
|
def VSclose(self, dialog):
|
|
pass
|
|
|
|
class progress(xbmcgui.DialogProgress):
|
|
|
|
def VScreate(self, title = 'vStream', desc = ''):
|
|
|
|
currentWindow = xbmcgui.getCurrentWindowId()
|
|
# if currentWindow == 10000 or currentWindow == 10103: # home, keyboard
|
|
if currentWindow != 10025: # videonav
|
|
return empty()
|
|
|
|
global PROGRESS
|
|
if PROGRESS == None:
|
|
self.create(title, desc)
|
|
PROGRESS = self
|
|
|
|
return PROGRESS
|
|
|
|
def VSupdate(self, dialog, total, text = '', search = False):
|
|
|
|
global PROGRESS
|
|
if not PROGRESS: # Déjà refermé
|
|
return
|
|
|
|
if not search and window(10101).getProperty('search') == 'true':
|
|
return
|
|
|
|
global COUNT
|
|
COUNT += 1
|
|
iPercent = int(float(COUNT * 100) / total)
|
|
dialog.update(iPercent, 'Loading: ' + str(COUNT) + '/' + str(total) + " " + text)
|
|
|
|
def VSclose(self, dialog = ''):
|
|
global PROGRESS
|
|
if not dialog and PROGRESS:
|
|
dialog = PROGRESS
|
|
if not dialog:
|
|
return
|
|
|
|
if window(10101).getProperty('search') == 'true':
|
|
return
|
|
|
|
PROGRESS = None
|
|
dialog.close()
|
|
|
|
|
|
"""
|
|
from resources.lib.comaddon import window
|
|
|
|
window(10101).getProperty('test')
|
|
https://codedocs.xyz/xbmc/xbmc/group__python__xbmcgui__window.html
|
|
"""
|
|
|
|
class window(xbmcgui.Window):
|
|
|
|
def __init__(self, winID):
|
|
pass
|
|
|
|
"""
|
|
from resources.lib.comaddon import listitem
|
|
listitem.setLabel('test')
|
|
https://kodi.wiki/view/InfoLabels
|
|
https://codedocs.xyz/xbmc/xbmc/group__python__xbmcgui__listitem.html#ga0b71166869bda87ad744942888fb5f14
|
|
"""
|
|
|
|
class listitem(xbmcgui.ListItem):
|
|
|
|
#ListItem([label, label2, iconImage, thumbnailImage, path])
|
|
|
|
def __init__(self, label = '', label2 = '', iconImage = '', thumbnailImage = '', path = ''):
|
|
pass
|
|
|
|
"""
|
|
from resources.lib.comaddon import VSlog
|
|
VSlog('testtttttttttttt')
|
|
"""
|
|
|
|
#xbmc des fonctions pas des class
|
|
def VSlog(e, level = xbmc.LOGDEBUG):
|
|
try:
|
|
#rapelle l'ID de l'addon pour être appelé hors addon
|
|
if (ADDONVS.getSetting('debug') == 'true'):
|
|
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
|
|
level = xbmc.LOGINFO
|
|
else:
|
|
level = xbmc.LOGNOTICE
|
|
xbmc.log('\t[PLUGIN] vStream: ' + str(e), level)
|
|
|
|
except:
|
|
pass
|
|
|
|
def VSupdate():
|
|
return xbmc.executebuiltin('Container.Refresh')
|
|
|
|
def VSshow_busy():
|
|
xbmc.executebuiltin('ActivateWindow(busydialog)')
|
|
|
|
def VShide_busy():
|
|
xbmc.executebuiltin('Dialog.Close(busydialog)')
|
|
while xbmc.getCondVisibility('Window.IsActive(busydialog)'):
|
|
xbmc.sleep(100)
|
|
|
|
def isKrypton():
|
|
try:
|
|
version = xbmc.getInfoLabel('system.buildversion')
|
|
if version[0:2] >= '17':
|
|
return True
|
|
else:
|
|
return False
|
|
except:
|
|
return False
|
|
|
|
def isMatrix():
|
|
try:
|
|
version = xbmc.getInfoLabel('system.buildversion')
|
|
if version[0:2] >= '19':
|
|
return True
|
|
else:
|
|
return False
|
|
except:
|
|
return False
|
|
|
|
#Transforme les "special" en chemin normal.
|
|
def VSPath(pathSpecial):
|
|
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
|
|
path = xbmcvfs.translatePath(pathSpecial)
|
|
else:
|
|
path = xbmc.translatePath(pathSpecial)
|
|
return path
|