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

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