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

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