295 lines
11 KiB
Python
295 lines
11 KiB
Python
# -*- coding: utf-8 -*-
|
|
# https://github.com/Kodi-vStream/venom-xbmc-addons
|
|
# Venom.
|
|
|
|
# sLibrary = xbmc.translatePath('special://home/addons/plugin.video.vstream').decode('utf-8')
|
|
# sys.path.append (sLibrary)
|
|
|
|
from resources.lib.comaddon import addon, progress, dialog, window, VSlog, xbmc, xbmcgui
|
|
from resources.lib.handler.requestHandler import cRequestHandler
|
|
import urllib
|
|
import xbmcvfs
|
|
import datetime, time
|
|
|
|
try:
|
|
import json
|
|
except:
|
|
import simplejson as json
|
|
|
|
SITE_IDENTIFIER = 'about'
|
|
SITE_NAME = 'About'
|
|
|
|
|
|
class cAbout:
|
|
|
|
# retourne True si les 2 fichiers sont present mais pas avec les memes tailles
|
|
def checksize(self, filepath, size):
|
|
try:
|
|
# f=open(xbmc.translatePath(filepath))
|
|
# Content = file.read()
|
|
# file.close()
|
|
# len(Content)
|
|
|
|
f = xbmcvfs.File(filepath)
|
|
s = f.size()
|
|
f.close()
|
|
|
|
if s == size:
|
|
# ok fichier existe et meme taille
|
|
return False
|
|
# fichier existe mais pas la meme taille
|
|
return True
|
|
except:
|
|
# fichier n'existe pas
|
|
return False
|
|
|
|
#au cas ou ....
|
|
return False
|
|
|
|
def getUpdate(self):
|
|
addons = addon()
|
|
service_time = addons.getSetting('service_time')
|
|
service_version = addons.getSetting('service_version')
|
|
# service_version = ''
|
|
|
|
# Si pas d'heure indique = premiere install
|
|
if not service_time:
|
|
# On memorise la date d'aujourdhui
|
|
addons.setSetting('service_time', str(datetime.datetime.now()))
|
|
# Mais on force la maj avec une date a la con
|
|
service_time = '2000-09-23 10:59:50.877000'
|
|
|
|
if not service_version:
|
|
# version de l'addon
|
|
addons.setSetting('service_version', str(addons.getAddonInfo('version')))
|
|
service_version = addons.getAddonInfo('version')
|
|
|
|
# si addon = 0.7.0 et service_version 0.6.35 pas de mise ajour.
|
|
if addons.getAddonInfo('version') > service_version:
|
|
addons.setSetting('service_version', str(addons.getAddonInfo('version')))
|
|
service_version = addons.getAddonInfo('version')
|
|
|
|
if service_time:
|
|
# delay mise a jour
|
|
time_sleep = datetime.timedelta(hours = 72)
|
|
time_now = datetime.datetime.now()
|
|
if len(service_time) > 19:
|
|
time_service = self.__strptime(service_time, '%Y-%m-%d %H:%M:%S.%f')
|
|
else:
|
|
time_service = self.__strptime(service_time, '%Y-%m-%d %H:%M:%S')
|
|
# pour test
|
|
# if (time_sleep):
|
|
if time_now - time_service > time_sleep:
|
|
# verifier la nouvelle version
|
|
|
|
sUrl = 'https://api.github.com/repos/Kodi-vStream/venom-xbmc-addons/releases/latest'
|
|
oRequestHandler = cRequestHandler(sUrl)
|
|
sHtmlContent = oRequestHandler.request()
|
|
result = json.loads(sHtmlContent)
|
|
|
|
# pour test
|
|
# if (result['tag_name']):
|
|
if result['tag_name'] > service_version:
|
|
addons.setSetting('service_futur', str(result['tag_name']))
|
|
addons.setSetting('home_update', str('true'))
|
|
addons.setSetting('service_time', str(datetime.datetime.now()))
|
|
dialog().VSinfo(addons.VSlang(30418))
|
|
else:
|
|
addons.setSetting('service_time', str(datetime.datetime.now()))
|
|
addons.setSetting('home_update', str('false'))
|
|
VSlog(addons.VSlang(30048) + str(time_sleep + time_service))
|
|
return
|
|
|
|
# bug python
|
|
def __strptime(self, date, format):
|
|
try:
|
|
date = datetime.datetime.strptime(date, format)
|
|
except TypeError:
|
|
date = datetime.datetime(*(time.strptime(date, format)[0:6]))
|
|
return date
|
|
|
|
def getRootPath(self, folder):
|
|
|
|
path = 'special://home/addons'
|
|
path = "/".join([path, folder])
|
|
return path
|
|
|
|
def resultGit(self):
|
|
try:
|
|
import json
|
|
except:
|
|
import simplejson as json
|
|
|
|
try:
|
|
sUrl = 'https://raw.githubusercontent.com/Kodi-vStream/venom-xbmc-addons/master/sites.json'
|
|
oRequestHandler = cRequestHandler(sUrl)
|
|
sHtmlContent = oRequestHandler.request()
|
|
result = json.loads(sHtmlContent)
|
|
|
|
sUrl = 'https://raw.githubusercontent.com/Kodi-vStream/venom-xbmc-addons/master/hosts.json'
|
|
oRequestHandler = cRequestHandler(sUrl)
|
|
sHtmlContent = oRequestHandler.request()
|
|
result += json.loads(sHtmlContent)
|
|
# filtre trash & _init
|
|
result = filter(lambda x: x['name'] != "trash", result)
|
|
result = filter(lambda x: x['name'] != "__init__.py", result)
|
|
except:
|
|
return False
|
|
return result
|
|
|
|
def checkdownload(self):
|
|
|
|
addons = addon()
|
|
dialogs = dialog()
|
|
if dialogs.VSyesno(addons.VSlang(30456)):
|
|
|
|
service_futur = addons.getSetting('service_futur')
|
|
service_version = addons.getSetting('service_version')
|
|
if not service_futur:
|
|
return self.getUpdate()
|
|
if not service_version:
|
|
return self.getUpdate()
|
|
|
|
# result = self.resultGit()
|
|
sUrl = 'https://api.github.com/repos/Kodi-vStream/venom-xbmc-addons/compare/%s...%s' % (service_version, service_futur)
|
|
# pour test
|
|
# sUrl = 'https://api.github.com/repos/Kodi-vStream/venom-xbmc-addons/compare/0.6.3...0.6.31'
|
|
|
|
oRequestHandler = cRequestHandler(sUrl)
|
|
sHtmlContent = oRequestHandler.request()
|
|
result = json.loads(sHtmlContent)
|
|
|
|
progress_ = progress()
|
|
progress_.VScreate(addons.VSlang(30015))
|
|
|
|
# site = ''
|
|
sdown = 0
|
|
add = 0
|
|
dell = 0
|
|
schange = 0
|
|
listitems = []
|
|
|
|
if result:
|
|
|
|
# boucle download fichier
|
|
total = len(result['files'])
|
|
for i in result['files']:
|
|
|
|
if 'plugin.video.vstream' in i['filename']:
|
|
progress_.VSupdate(progress_, total)
|
|
|
|
rootpath = self.getRootPath(i['filename'])
|
|
|
|
try:
|
|
self.__download(i['raw_url'], rootpath)
|
|
# site += 'Add: [B]%s[/B] | Del: [B]%s[/B] | [COLOR green]%s[/COLOR][CR]' % (i['additions'], i['deletions'], i['filename'].encode('utf-8'))
|
|
add += i['additions']
|
|
dell += i['deletions']
|
|
sdown = sdown + 1
|
|
schange += i['changes']
|
|
except:
|
|
# site += "[COLOR red]" + i['filename'].encode("utf-8") + "[/COLOR][CR]"
|
|
sdown = sdown + 1
|
|
pass
|
|
|
|
progress_.VSclose(progress_)
|
|
|
|
# données fichiers
|
|
sContent = 'Ajouter (%s) | Supprimer (%s) | Changement (%s) [CR]Fichiers mise à jour %s / %s' % (add, dell, schange, sdown, total)
|
|
listitem = xbmcgui.ListItem(label = 'vStream', label2 = sContent)
|
|
icon = 'special://home/addons/plugin.video.vstream/resources/art/update.png'
|
|
listitem.setArt({'icon': icon, 'thumb': icon})
|
|
listitems.append(listitem)
|
|
|
|
# boucle commit
|
|
for i in result['commits']:
|
|
try:
|
|
# text += '[B]%s[/B]: %s[CR]' % (i['commit']['author']['name'], i['commit']['message'].encode('utf-8'))
|
|
icon = i['author']['avatar_url']
|
|
login = i['author']['login']
|
|
desc = i['commit']['message'].encode('utf-8')
|
|
listitem = xbmcgui.ListItem(label = login, label2 = desc)
|
|
listitem.setArt({'icon': icon, 'thumb': icon})
|
|
except:
|
|
# text += '[B]%s[/B]: nop[CR]' % (i['commit']['author']['name'])
|
|
listitem = xbmcgui.ListItem(label = 'None', label2 = 'none')
|
|
pass
|
|
listitems.append(listitem)
|
|
|
|
# sContent = 'Changement (%s) | Fichiers mise à jour %s / %s [CR]' % (schange, sdown, total)
|
|
# sContent += '%s' % (text.encode('utf-8'))
|
|
# sContent += '%s' % (site)
|
|
|
|
addons.setSetting('service_time', str(datetime.datetime.now()))
|
|
addons.setSetting('service_version', str(service_futur))
|
|
addons.setSetting('home_update', str('false'))
|
|
|
|
# fin = dialog().VSok(sContent)
|
|
# fin = self.TextBoxes(sContent)
|
|
fin = self.Box(listitems)
|
|
return
|
|
|
|
def __download(self, WebUrl, RootUrl):
|
|
inf = urllib.urlopen(WebUrl)
|
|
f = xbmcvfs.File(RootUrl, 'w')
|
|
# save it
|
|
line = inf.read()
|
|
f.write(line)
|
|
|
|
inf.close()
|
|
f.close()
|
|
|
|
return
|
|
|
|
def TextBoxes(self, anounce):
|
|
addons = addon()
|
|
# activate the text viewer window
|
|
xbmc.executebuiltin('ActivateWindow(%d)' % (10147))
|
|
# get window
|
|
win = window(10147)
|
|
# win.show()
|
|
# give window time to initialize
|
|
xbmc.sleep(100)
|
|
# set heading
|
|
win.getControl(1).setLabel(addons.VSlang(30013))
|
|
win.getControl(5).setText(anounce)
|
|
while xbmc.getCondVisibility('Window.IsActive(10147)'):
|
|
xbmc.sleep(100)
|
|
ret = dialog().VSok(addons.VSlang(30014))
|
|
return
|
|
|
|
def Box(self, listitems):
|
|
addons = addon()
|
|
|
|
class XMLDialog(xbmcgui.WindowXMLDialog):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
xbmcgui.WindowXMLDialog.__init__(self)
|
|
pass
|
|
|
|
def onInit(self):
|
|
|
|
self.container = self.getControl(6)
|
|
self.button = self.getControl(5)
|
|
self.getControl(3).setVisible(False)
|
|
self.getControl(1).setLabel(addons.VSlang(30015))
|
|
self.button.setLabel('OK')
|
|
self.container.addItems(listitems)
|
|
self.setFocus(self.container)
|
|
|
|
def onClick(self, controlId):
|
|
self.close()
|
|
return
|
|
|
|
def onFocus(self, controlId):
|
|
self.controlId = controlId
|
|
|
|
def _close_dialog(self):
|
|
self.close()
|
|
|
|
path = 'special://home/addons/plugin.video.vstream'
|
|
wd = XMLDialog('DialogSelect.xml', path, 'Default')
|
|
wd.doModal()
|
|
del wd
|
|
return
|