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

450 lines
18 KiB
Python

# -*- coding: utf-8 -*-
# vStream https://github.com/Kodi-vStream/venom-xbmc-addons
# vstream = xbmcaddon.Addon('plugin.video.vstream')
# sLibrary = VSPath(vstream.getAddonInfo("path")).decode("utf-8")
# sys.path.append (sLibrary)
from resources.lib.handler.requestHandler import cRequestHandler
from resources.lib.comaddon import addon, dialog, VSlog, window, VSPath, xbmc
from resources.lib.util import urlEncode
try: # Python 2
import urllib2
except ImportError: # Python 3
import urllib.request as urllib2
import xbmcvfs
import sys
import xbmc
import xbmcgui
try:
from sqlite3 import dbapi2 as sqlite
VSlog('SQLITE 3 as DB engine')
except:
from pysqlite2 import dbapi2 as sqlite
VSlog('SQLITE 2 as DB engine')
try:
import json
except:
import simplejson as json
SITE_IDENTIFIER = 'runscript'
SITE_NAME = 'runscript'
class cClear:
DIALOG = dialog()
ADDON = addon()
def __init__(self):
self.main(sys.argv[1])
def main(self, env):
if (env == 'urlresolver'):
addon('script.module.urlresolver').openSettings()
return
elif (env == 'metahandler'):
addon('script.module.metahandler').openSettings()
return
elif (env == 'changelog_old'):
try:
sUrl = 'https://raw.githubusercontent.com/Kodi-vStream/venom-xbmc-addons/master/plugin.video.vstream/changelog.txt'
oRequest = urllib2.Request(sUrl)
oResponse = urllib2.urlopen(oRequest)
# En python 3 on doit décoder la reponse
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
sContent = oResponse.read().decode('utf-8')
else:
sContent = oResponse.read()
self.TextBoxes('vStream Changelog', sContent)
except:
self.DIALOG.VSerror("%s, %s" % (self.ADDON.VSlang(30205), sUrl))
return
elif (env == 'changelog'):
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('ChangeLog')
self.button.setLabel('OK')
sUrl = 'https://api.github.com/repos/Kodi-vStream/venom-xbmc-addons/commits'
oRequest = urllib2.Request(sUrl)
oResponse = urllib2.urlopen(oRequest)
# En python 3 on doit décoder la reponse
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
sContent = oResponse.read().decode('utf-8')
else:
sContent = oResponse.read()
result = json.loads(sContent)
listitems = []
for item in result:
# autor
icon = item['author']['avatar_url']
login = item['author']['login']
# message
try:
desc = item['commit']['message'].encode("utf-8")
except:
desc = 'None'
listitem = xbmcgui.ListItem(label=login, label2=desc)
listitem.setArt({'icon': icon, 'thumb': icon})
listitems.append(listitem)
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
elif (env == 'soutient'):
try:
sUrl = 'https://raw.githubusercontent.com/Kodi-vStream/venom-xbmc-addons/master/plugin.video.vstream/soutient.txt'
oRequest = urllib2.Request(sUrl)
oResponse = urllib2.urlopen(oRequest)
# En python 3 on doit décoder la reponse
if xbmc.getInfoLabel('system.buildversion')[0:2] >= '19':
sContent = oResponse.read().decode('utf-8')
else:
sContent = oResponse.read()
self.TextBoxes('vStream Soutient', sContent)
except:
self.DIALOG.VSerror("%s, %s" % (self.ADDON.VSlang(30205), sUrl))
return
elif (env == 'addon'): # Vider le cache des métadonnées
if self.DIALOG.VSyesno(self.ADDON.VSlang(30456)):
cached_Cache = "special://home/userdata/addon_data/plugin.video.vstream/video_cache.db"
# important seul xbmcvfs peux lire le special
try:
cached_Cache = VSPath(cached_Cache).decode("utf-8")
except AttributeError:
cached_Cache = VSPath(cached_Cache)
try:
db = sqlite.connect(cached_Cache)
dbcur = db.cursor()
dbcur.execute('DELETE FROM movie')
dbcur.execute('DELETE FROM tvshow')
dbcur.execute('DELETE FROM season')
dbcur.execute('DELETE FROM episode')
db.commit()
dbcur.close()
db.close()
self.DIALOG.VSinfo(self.ADDON.VSlang(30090))
except:
self.DIALOG.VSerror(self.ADDON.VSlang(30091))
return
elif (env == 'clean'):
liste = ['Historiques', 'Lecture en cours', 'Marqués vues', 'Marque-Pages', 'Téléchargements']
ret = self.DIALOG.VSselect(liste, self.ADDON.VSlang(30110))
cached_DB = "special://home/userdata/addon_data/plugin.video.vstream/vstream.db"
# important seul xbmcvfs peux lire le special
try:
cached_DB = VSPath(cached_DB).decode("utf-8")
except AttributeError:
cached_DB = VSPath(cached_DB)
sql_drop = ""
if ret > -1:
if ret == 0:
sql_drop = 'DELETE FROM history'
elif ret == 1:
sql_drop = 'DELETE FROM resume'
elif ret == 2:
sql_drop = 'DELETE FROM watched'
elif ret == 3:
sql_drop = 'DELETE FROM favorite'
elif ret == 4:
sql_drop = 'DELETE FROM download'
try:
db = sqlite.connect(cached_DB)
dbcur = db.cursor()
dbcur.execute(sql_drop)
db.commit()
dbcur.close()
db.close()
self.DIALOG.VSok(self.ADDON.VSlang(30090))
except:
self.DIALOG.VSerror(self.ADDON.VSlang(30091))
return
elif (env == 'xbmc'):
if self.DIALOG.VSyesno(self.ADDON.VSlang(30456)):
path = "special://temp/"
try:
xbmcvfs.rmdir(path, True)
self.DIALOG.VSok(self.ADDON.VSlang(30092))
except:
self.DIALOG.VSerror(self.ADDON.VSlang(30093))
return
elif (env == 'fi'):
if self.DIALOG.VSyesno(self.ADDON.VSlang(30456)):
path = "special://temp/archive_cache/"
try:
xbmcvfs.rmdir(path, True)
self.DIALOG.VSok(self.ADDON.VSlang(30095))
except:
self.DIALOG.VSerror(self.ADDON.VSlang(30096))
return
elif (env == 'uplog'):
if self.DIALOG.VSyesno(self.ADDON.VSlang(30456)):
path = "special://logpath/kodi.log"
UA = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'
headers = {'User-Agent': UA}
if xbmcvfs.exists(path):
post_data = {}
cUrl = 'http://slexy.org/index.php/submit'
logop = xbmcvfs.File(path, 'rb')
result = logop.read()
logop.close()
oRequestHandler = cRequestHandler(cUrl)
oRequestHandler.setRequestType(1)
oRequestHandler.addHeaderEntry('User-Agent', UA)
oRequestHandler.addParameters('raw_paste',result)
oRequestHandler.addParameters('author', "kodi.log")
oRequestHandler.addParameters('language', "text")
oRequestHandler.addParameters('permissions',1) # private
oRequestHandler.addParameters('expire', 259200) # 3j
oRequestHandler.addParameters('submit', 'Submit+Paste')
sHtmlContent = oRequestHandler.request()
code = oRequestHandler.getRealUrl().replace('http://slexy.org/view/', '')
self.ADDON.setSetting('service_log', code)
self.DIALOG.VSok(self.ADDON.VSlang(30097) + ' ' + code)
return
elif (env == 'search'):
from resources.lib.handler.pluginHandler import cPluginHandler
valid = '[COLOR green][x][/COLOR]'
class XMLDialog(xbmcgui.WindowXMLDialog):
ADDON = addon()
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(self.ADDON.VSlang(30094))
self.button.setLabel('OK')
listitems = []
oPluginHandler = cPluginHandler()
aPlugins = oPluginHandler.getAllPlugins()
for aPlugin in aPlugins:
# teste si deja dans le dsip
sPluginSettingsName = 'plugin_' + aPlugin[1]
bPlugin = self.ADDON.getSetting(sPluginSettingsName)
icon = "special://home/addons/plugin.video.vstream/resources/art/sites/%s.png" % aPlugin[1]
stitle = aPlugin[0].replace('[COLOR violet]', '').replace('[COLOR orange]', '')\
.replace('[/COLOR]', '').replace('[COLOR dodgerblue]', '')\
.replace('[COLOR coral]', '')
if (bPlugin == 'true'):
stitle = ('%s %s') % (stitle, valid)
listitem = xbmcgui.ListItem(label=stitle, label2=aPlugin[2])
listitem.setArt({'icon': icon, 'thumb': icon})
listitem.setProperty('Addon.Summary', aPlugin[2])
listitem.setProperty('sitename', aPlugin[1])
if (bPlugin == 'true'):
listitem.select(True)
listitems.append(listitem)
self.container.addItems(listitems)
self.setFocus(self.container)
def onClick(self, controlId):
if controlId == 5:
self.close()
return
elif controlId == 99:
window = xbmcgui.Window(xbmcgui.getCurrentWindowId())
del window
self.close()
return
elif controlId == 7:
window = xbmcgui.Window(xbmcgui.getCurrentWindowId())
del window
self.close()
return
elif controlId == 6:
item = self.container.getSelectedItem()
if item.isSelected() == True:
label = item.getLabel().replace(valid, '')
item.setLabel(label)
item.select(False)
sPluginSettingsName = ('plugin_%s') % (item.getProperty('sitename'))
self.ADDON.setSetting(sPluginSettingsName, str('false'))
else:
label = ('%s %s') % (item.getLabel(), valid)
item.setLabel(label)
item.select(True)
sPluginSettingsName = ('plugin_%s') % (item.getProperty('sitename'))
self.ADDON.setSetting(sPluginSettingsName, str('true'))
return
def onFocus(self, controlId):
self.controlId = controlId
def _close_dialog(self):
self.close()
# def onAction(self, action):
# if action.getId() in (9, 10, 92, 216, 247, 257, 275, 61467, 61448):
# self.close()
path = "special://home/addons/plugin.video.vstream"
wd = XMLDialog('DialogSelect.xml', path, "Default")
wd.doModal()
del wd
return
elif (env == 'thumb'):
if self.DIALOG.VSyesno(self.ADDON.VSlang(30098)):
text = False
path = "special://userdata/Thumbnails/"
path_DB = "special://userdata/Database"
try:
xbmcvfs.rmdir(path, True)
text = 'Clear Thumbnail Folder, Successful[CR]'
except:
text = 'Clear Thumbnail Folder, Error[CR]'
folder, items = xbmcvfs.listdir(path_DB)
items.sort()
for sItemName in items:
if "extures" in sItemName:
cached_Cache = "/".join([path_DB, sItemName])
try:
xbmcvfs.delete(cached_Cache)
text += 'Clear Thumbnail DB, Successful[CR]'
except:
text += 'Clear Thumbnail DB, Error[CR]'
if text:
text = "%s (Important relancer Kodi)" % text
self.DIALOG.VSok(text)
return
elif (env == 'sauv'):
select = self.DIALOG.VSselect(['Import', 'Export'])
DB = "special://home/userdata/addon_data/plugin.video.vstream/vstream.db"
if select >= 0:
new = self.DIALOG.browse(3, 'vStream', "files")
if new:
try:
if select == 0:
xbmcvfs.delete(DB)
# copy(source, destination)--copy file to destination, returns true/false.
xbmcvfs.copy(new + 'vstream.db', DB)
elif select == 1:
# copy(source, destination)--copy file to destination, returns true/false.
xbmcvfs.copy(DB, new + 'vstream.db')
self.DIALOG.VSinfo(self.ADDON.VSlang(30099))
except:
self.DIALOG.VSerror(self.ADDON.VSlang(30100))
return
else:
return
return
# def ClearDir(self, dir, clearNested=False):
# try:
# dir = dir.decode("utf8")
# except:
# pass
# for the_file in os.listdir(dir):
# file_path = os.path.join(dir, the_file).encode('utf-8')
# if clearNested and os.path.isdir(file_path):
# self.ClearDir(file_path, clearNested)
# try: os.rmdir(file_path)
# except Exception as e:
# print(str(e))
# else:
# try:os.unlink(file_path)
# except Exception as e:
# print str(e)
# def ClearDir2(self, dir, clearNested=False):
# try:
# dir = dir.decode("utf8")
# except:
# pass
# try:os.unlink(dir)
# except Exception as e:
# print(str(e))
def TextBoxes(self, heading, anounce):
# 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(heading)
win.getControl(5).setText(anounce)
return
cClear()