forked from axiom-team/astrXbian
522 lines
21 KiB
Python
522 lines
21 KiB
Python
# -*- coding: utf-8 -*-
|
|
# https://github.com/Kodi-vStream/venom-xbmc-addons
|
|
# Venom.
|
|
from resources.lib.gui.gui import cGui
|
|
from resources.lib.gui.guiElement import cGuiElement
|
|
from resources.lib.gui.contextElement import cContextElement
|
|
from resources.lib.handler.inputParameterHandler import cInputParameterHandler
|
|
from resources.lib.handler.outputParameterHandler import cOutputParameterHandler
|
|
from resources.lib.player import cPlayer
|
|
from resources.lib.handler.requestHandler import cRequestHandler
|
|
from resources.lib.comaddon import dialog, addon, VSlog
|
|
import xbmc
|
|
|
|
class cHosterGui:
|
|
|
|
SITE_NAME = 'cHosterGui'
|
|
ADDON = addon()
|
|
|
|
# step 1 - bGetRedirectUrl in ein extra optionsObject verpacken
|
|
def showHoster(self, oGui, oHoster, sMediaUrl, sThumbnail, bGetRedirectUrl=False):
|
|
|
|
oInputParameterHandler = cInputParameterHandler()
|
|
|
|
oGuiElement = cGuiElement()
|
|
oGuiElement.setSiteName(self.SITE_NAME)
|
|
# oGuiElement.setFunction('showHosterMenu')
|
|
oGuiElement.setFunction('play')
|
|
oGuiElement.setTitle(oHoster.getDisplayName())
|
|
# oGuiElement.setThumbnail(sThumbnail)
|
|
# if (oInputParameterHandler.exist('sMeta')):
|
|
# sMeta = oInputParameterHandler.getValue('sMeta')
|
|
# oGuiElement.setMeta(int(sMeta))
|
|
|
|
oGuiElement.setFileName(oHoster.getFileName())
|
|
oGuiElement.getInfoLabel()
|
|
if sThumbnail:
|
|
oGuiElement.setThumbnail(sThumbnail)
|
|
|
|
# oGuiElement.setMeta(1)
|
|
oGuiElement.setIcon('host.png')
|
|
|
|
oOutputParameterHandler = cOutputParameterHandler()
|
|
oOutputParameterHandler.addParameter('sMediaUrl', sMediaUrl)
|
|
oOutputParameterHandler.addParameter('sHosterIdentifier', oHoster.getPluginIdentifier())
|
|
oOutputParameterHandler.addParameter('bGetRedirectUrl', bGetRedirectUrl)
|
|
oOutputParameterHandler.addParameter('sFileName', oHoster.getFileName())
|
|
oOutputParameterHandler.addParameter('sTitleWatched', oGuiElement.getTitleWatched())
|
|
oOutputParameterHandler.addParameter('sTitle', oHoster.getDisplayName())
|
|
oOutputParameterHandler.addParameter('sId', 'cHosterGui')
|
|
oOutputParameterHandler.addParameter('siteUrl', sMediaUrl)
|
|
# oOutputParameterHandler.addParameter('sFav', 'play')
|
|
# oOutputParameterHandler.addParameter('sCat', '4')
|
|
|
|
# nouveaux pour la lecture.
|
|
if oInputParameterHandler.exist('sCat'):
|
|
sCat = oInputParameterHandler.getValue('sCat')
|
|
oGuiElement.setCat(sCat)
|
|
oOutputParameterHandler.addParameter('sCat', sCat)
|
|
else:
|
|
oGuiElement.setCat('4')
|
|
|
|
# context playlit menu
|
|
oContext = cContextElement()
|
|
oContext.setFile('cHosterGui')
|
|
oContext.setSiteName(self.SITE_NAME)
|
|
oContext.setFunction('addToPlaylist')
|
|
oContext.setTitle(self.ADDON.VSlang(30201))
|
|
oContext.setOutputParameterHandler(oOutputParameterHandler)
|
|
oGuiElement.addContextItem(oContext)
|
|
|
|
# Download menu
|
|
if oHoster.isDownloadable():
|
|
oContext = cContextElement()
|
|
oContext.setFile('cDownload')
|
|
oContext.setSiteName('cDownload')
|
|
oContext.setFunction('AddtoDownloadList')
|
|
oContext.setTitle(self.ADDON.VSlang(30202))
|
|
oContext.setOutputParameterHandler(oOutputParameterHandler)
|
|
oGuiElement.addContextItem(oContext)
|
|
|
|
if oHoster.isDownloadable():
|
|
# Beta context download and view menu
|
|
oContext = cContextElement()
|
|
oContext.setFile('cDownload')
|
|
oContext.setSiteName('cDownload')
|
|
oContext.setFunction('AddtoDownloadListandview')
|
|
oContext.setTitle(self.ADDON.VSlang(30326))
|
|
oContext.setOutputParameterHandler(oOutputParameterHandler)
|
|
oGuiElement.addContextItem(oContext)
|
|
|
|
# Upload menu uptobox
|
|
if cInputParameterHandler().getValue('site') != 'siteuptobox' and self.ADDON.getSetting('hoster_uptobox_premium') == 'true':
|
|
host = oHoster.getPluginIdentifier()
|
|
accept = ['uptobox', 'uptostream', 'onefichier', 'uploaded', 'uplea']
|
|
for i in accept:
|
|
if host == i:
|
|
oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, 'siteuptobox', 'siteuptobox', 'UptomyAccount', self.ADDON.VSlang(30325))
|
|
|
|
# onefichier
|
|
if cInputParameterHandler().getValue('site') != 'siteonefichier' and self.ADDON.getSetting('hoster_onefichier_premium') == 'true':
|
|
host = oHoster.getPluginIdentifier()
|
|
accept = 'onefichier' # les autres ne fonctionnent pas
|
|
if host == accept:
|
|
oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, 'siteonefichier', 'siteonefichier', 'UptomyAccount', '1fichier')
|
|
|
|
# context FAV menu
|
|
oGui.createContexMenuBookmark(oGuiElement, oOutputParameterHandler)
|
|
|
|
# context Library menu
|
|
oGui.CreateSimpleMenu(oGuiElement, oOutputParameterHandler, 'cLibrary', 'cLibrary', 'setLibrary', self.ADDON.VSlang(30324))
|
|
|
|
# bug
|
|
oGui.addHost(oGuiElement, oOutputParameterHandler)
|
|
|
|
|
|
|
|
|
|
def checkHoster(self, sHosterUrl):
|
|
# securite
|
|
if not sHosterUrl:
|
|
return False
|
|
|
|
# Petit nettoyage
|
|
sHosterUrl = sHosterUrl.split('|')[0]
|
|
sHosterUrl = sHosterUrl.lower()
|
|
|
|
# Recuperation du host
|
|
try:
|
|
sHostName = sHosterUrl.split('/')[2]
|
|
except:
|
|
sHostName = sHosterUrl
|
|
|
|
# L'user a active l'url resolver ?
|
|
if self.ADDON.getSetting('UserUrlResolver') == 'true':
|
|
import urlresolver
|
|
hmf = urlresolver.HostedMediaFile(url=sHosterUrl)
|
|
if hmf.valid_url():
|
|
tmp = self.getHoster('resolver')
|
|
RH = sHosterUrl.split('/')[2]
|
|
RH = RH.replace('www.', '')
|
|
tmp.setRealHost(RH.split('.')[0].upper())
|
|
return tmp
|
|
|
|
# L'user a active alldebrid ?
|
|
|
|
if self.ADDON.getSetting('hoster_alldebrid_premium') == 'true':
|
|
return self.getHoster('alldebrid')
|
|
|
|
|
|
|
|
# Gestion classique
|
|
if ('streamz' in sHostName):
|
|
return self.getHoster('streamz')
|
|
if ('streamax' in sHostName):
|
|
return self.getHoster('streamax')
|
|
if ('gounlimited' in sHostName):
|
|
return self.getHoster('gounlimited')
|
|
if ('xdrive' in sHostName):
|
|
return self.getHoster('xdrive')
|
|
if ('facebook' in sHostName):
|
|
return self.getHoster('facebook')
|
|
if ('mixdrop' in sHostName):
|
|
return self.getHoster('mixdrop')
|
|
if ('mixloads' in sHostName):
|
|
return self.getHoster('mixloads')
|
|
if ('vidoza' in sHostName):
|
|
return self.getHoster('vidoza')
|
|
if ('youtube' in sHostName) or ('youtu.be' in sHostName):
|
|
return self.getHoster('youtube')
|
|
if ('rutube' in sHostName):
|
|
return self.getHoster('rutube')
|
|
if ('vk.com' in sHostName):
|
|
return self.getHoster('vk')
|
|
if ('vkontakte' in sHostName):
|
|
return self.getHoster('vk')
|
|
if ('vkcom' in sHostName):
|
|
return self.getHoster('vk')
|
|
if ('megawatch' in sHostName):
|
|
return self.getHoster('megawatch')
|
|
if ('playvidto' in sHostName):
|
|
return self.getHoster('vidto')
|
|
# vidtodo et clone
|
|
if ('vidtodo' in sHostName) or ('vixtodo' in sHostName):
|
|
return self.getHoster('vidtodo')
|
|
if ('viddoto' in sHostName):
|
|
return self.getHoster('vidtodo')
|
|
if ('vidstodo' in sHostName):
|
|
return self.getHoster('vidtodo')
|
|
|
|
if ('vidzi' in sHostName):
|
|
return self.getHoster('vidzi')
|
|
if ('vcstream' in sHostName):
|
|
return self.getHoster('vidcloud')
|
|
if ('filetrip' in sHostName):
|
|
return self.getHoster('filetrip')
|
|
if ('uptostream' in sHostName):
|
|
return self.getHoster('uptostream')
|
|
if ('dailymotion' in sHostName) or ('dai.ly' in sHostName):
|
|
try:
|
|
if 'stream' in sHosterUrl:
|
|
return self.getHoster('lien_direct')
|
|
except:
|
|
pass
|
|
else:
|
|
return self.getHoster('dailymotion')
|
|
if ('livestream' in sHostName):
|
|
return self.getHoster('lien_direct')
|
|
if ('flashx' in sHostName):
|
|
return self.getHoster('flashx')
|
|
if ('filez' in sHostName):
|
|
return self.getHoster('flashx')
|
|
if ('mystream' in sHostName) or ('mstream' in sHostName):
|
|
return self.getHoster('mystream')
|
|
if ('streamingentiercom/videophp?type=speed' in sHosterUrl):
|
|
return self.getHoster('speedvideo')
|
|
if ('speedvideo' in sHostName):
|
|
return self.getHoster('speedvideo')
|
|
if ('speedvid' in sHostName):
|
|
return self.getHoster('speedvid')
|
|
if ('netu' in sHostName) or ('hqq' in sHostName) or ('waaw' in sHostName) or ('vizplay' in sHostName):
|
|
return self.getHoster('netu')
|
|
if ('upstream' in sHostName):
|
|
return self.getHoster('upstream')
|
|
if ('mail.ru' in sHostName):
|
|
return self.getHoster('mailru')
|
|
if ('onevideo' in sHostName):
|
|
return self.getHoster('onevideo')
|
|
if ('googlevideo' in sHostName):
|
|
return self.getHoster('googlevideo')
|
|
if ('picasaweb' in sHostName):
|
|
return self.getHoster('googlevideo')
|
|
if ('googleusercontent' in sHostName):
|
|
return self.getHoster('googlevideo')
|
|
if ('playreplay' in sHostName):
|
|
return self.getHoster('playreplay')
|
|
if ('ok.ru' in sHostName) or ('odnoklassniki' in sHostName):
|
|
return self.getHoster('ok_ru')
|
|
if ('vimeo' in sHostName):
|
|
return self.getHoster('vimeo')
|
|
if ('prostream' in sHostName):
|
|
return self.getHoster('prostream')
|
|
if ('vidfast' in sHostName):
|
|
return self.getHoster('vidfast')
|
|
if ('thevideo' in sHostName) or ('video.tt' in sHostName) or ('vev.io' in sHostName):
|
|
return self.getHoster('thevideo_me')
|
|
if ('uqload' in sHostName):
|
|
return self.getHoster('uqload')
|
|
if ('letwatch' in sHostName):
|
|
return self.getHoster('letwatch')
|
|
if ('letsupload' in sHostName):
|
|
return self.getHoster('letsupload')
|
|
if ('filepup' in sHostName):
|
|
return self.getHoster('filepup')
|
|
if ('vimple.ru' in sHostName):
|
|
return self.getHoster('vimple')
|
|
if ('wstream' in sHostName):
|
|
return self.getHoster('wstream')
|
|
if ('watchvideo' in sHostName):
|
|
return self.getHoster('watchvideo')
|
|
if ('drive.google.com' in sHostName):
|
|
return self.getHoster('googledrive')
|
|
if ('docs.google.com' in sHostName):
|
|
return self.getHoster('googledrive')
|
|
if ('vidwatch' in sHostName):
|
|
return self.getHoster('vidwatch')
|
|
if ('up2stream' in sHostName):
|
|
return self.getHoster('up2stream')
|
|
if ('vidbm' in sHostName):
|
|
return self.getHoster('vidbm')
|
|
if ('tune' in sHostName):
|
|
return self.getHoster('tune')
|
|
if ('vidup' in sHostName):
|
|
return self.getHoster('vidup')
|
|
if ('vidbull' in sHostName):
|
|
return self.getHoster('vidbull')
|
|
# vidlox et clone
|
|
if ('vidlox' in sHostName):
|
|
return self.getHoster('vidlox')
|
|
if ('videobin' in sHostName):
|
|
return self.getHoster('videobin')
|
|
|
|
if ('stagevu' in sHostName):
|
|
return self.getHoster('stagevu')
|
|
if ('movshare' in sHostName) or ('wholecloud' in sHostName):
|
|
return self.getHoster('wholecloud')
|
|
if ('gorillavid' in sHostName):
|
|
return self.getHoster('gorillavid')
|
|
if ('daclips' in sHostName):
|
|
return self.getHoster('daclips')
|
|
if ('estream' in sHostName) and not ('widestream' in sHostName):
|
|
return self.getHoster('estream')
|
|
if ('hdvid' in sHostName):
|
|
return self.getHoster('hdvid')
|
|
if ('vshare' in sHostName):
|
|
return self.getHoster('vshare')
|
|
if ('giga' in sHostName):
|
|
return self.getHoster('giga')
|
|
if ('vidbom' in sHostName):
|
|
return self.getHoster('vidbom')
|
|
if ('upvid' in sHostName):
|
|
return self.getHoster('upvid')
|
|
if ('cloudvid' in sHostName):
|
|
return self.getHoster('cloudvid')
|
|
if ('clipwatching' in sHostName):
|
|
return self.getHoster('clipwatching')
|
|
if ('megadrive' in sHostName):
|
|
return self.getHoster('megadrive')
|
|
if ('downace' in sHostName):
|
|
return self.getHoster('downace')
|
|
if ('clickopen' in sHostName):
|
|
return self.getHoster('clickopen')
|
|
if ('iframe-secured' in sHostName):
|
|
return self.getHoster('iframe_secured')
|
|
if ('iframe-secure' in sHostName):
|
|
return self.getHoster('iframe_secure')
|
|
if ('goo.gl' in sHostName) or ('bit.ly' in sHostName) or ('streamcrypt' in sHostName) or ('opsktp' in sHosterUrl):
|
|
return self.getHoster('allow_redirects')
|
|
if ('jawcloud' in sHostName):
|
|
return self.getHoster('jawcloud')
|
|
if ('kvid' in sHostName):
|
|
return self.getHoster('kvid')
|
|
if ('soundcloud' in sHostName):
|
|
return self.getHoster('soundcloud')
|
|
if ('mixcloud' in sHostName):
|
|
return self.getHoster('mixcloud')
|
|
if ('ddlfr' in sHostName):
|
|
return self.getHoster('ddlfr')
|
|
if ('pdj' in sHostName):
|
|
return self.getHoster('pdj')
|
|
if ('vidzstore' in sHostName):
|
|
return self.getHoster('vidzstore')
|
|
if ('hd-stream' in sHostName):
|
|
return self.getHoster('hd_stream')
|
|
if ('rapidstream' in sHostName):
|
|
return self.getHoster('rapidstream')
|
|
if ('archive' in sHostName):
|
|
return self.getHoster('archive')
|
|
if ('jetload' in sHostName):
|
|
return self.getHoster('jetload')
|
|
if ('dustreaming' in sHostName):
|
|
return self.getHoster('dustreaming')
|
|
|
|
# frenchvid et clone
|
|
if ('french-vid' in sHostName) or ('yggseries' in sHostName):
|
|
return self.getHoster('frenchvid')
|
|
if ('fembed' in sHostName) or ('fem.tohds' in sHostName):
|
|
return self.getHoster('frenchvid')
|
|
if ('feurl' in sHostName) or ('fsimg' in sHostName):
|
|
return self.getHoster('frenchvid')
|
|
if ('core1player' in sHostName) or ('vfsplayer' in sHostName):
|
|
return self.getHoster('frenchvid')
|
|
if ('gotochus' in sHostName):
|
|
return self.getHoster('frenchvid')
|
|
|
|
if ('viki' in sHostName):
|
|
return self.getHoster('viki')
|
|
if ('flix555' in sHostName):
|
|
return self.getHoster('flix555')
|
|
if ('onlystream' in sHostName):
|
|
return self.getHoster('onlystream')
|
|
if ('pstream' in sHostName):
|
|
return self.getHoster('pstream')
|
|
if ('vudeo' in sHostName):
|
|
return self.getHoster('vudeo')
|
|
if ('sendvid' in sHostName):
|
|
return self.getHoster('sendvid')
|
|
if ('supervideo' in sHostName):
|
|
return self.getHoster('supervideo')
|
|
if ('dood' in sHostName):
|
|
return self.getHoster('dood')
|
|
if ('vidia' in sHostName):
|
|
return self.getHoster('vidia')
|
|
if ('streamtape' in sHostName):
|
|
return self.getHoster('streamtape')
|
|
if ('femax' in sHostName):
|
|
return self.getHoster('femax')
|
|
if ('vidbem' in sHostName):
|
|
return self.getHoster('vidbem')
|
|
if ('sibnet' in sHostName):
|
|
return self.getHoster('sibnet')
|
|
if ('vidplayer' in sHostName):
|
|
return self.getHoster('vidplayer')
|
|
if ('userload' in sHostName):
|
|
return self.getHoster('userload')
|
|
|
|
# Lien telechargeable a convertir en stream
|
|
if ('1fichier' in sHostName):
|
|
return self.getHoster('onefichier')
|
|
if ('uptobox' in sHostName):
|
|
return self.getHoster('uptobox')
|
|
if ('uplea' in sHostName):
|
|
return self.getHoster('uplea')
|
|
if ('uploaded' in sHostName) or ('ul.to' in sHostName):
|
|
if('/file/forbidden' in sHosterUrl):
|
|
return False
|
|
return self.getHoster('uploaded')
|
|
if ('vidload' in sHostName):
|
|
return self.getHoster('vidload')
|
|
if ('kaydo' in sHostName):
|
|
return self.getHoster('lien_direct')
|
|
if ('cloudhost' in sHostName):
|
|
return self.getHoster('cloudhost')
|
|
if ('rapidgator' in sHostName):
|
|
return False
|
|
if ('turbobit' in sHostName):
|
|
return False
|
|
if ('mega.nz' in sHostName) or ('mega.co.nz' in sHostName):
|
|
return False
|
|
if ('hitfile' in sHostName):
|
|
return False
|
|
if ('myfiles.alldebrid.com' in sHostName):
|
|
return self.getHoster('lien_direct')
|
|
if ('dl.free.fr' in sHostName):
|
|
return False
|
|
if ('easyload.io' in sHostName):
|
|
return self.getHoster('easyload')
|
|
|
|
|
|
# Si aucun hebergeur connu on teste les liens directs
|
|
if (sHosterUrl[-4:] in '.mp4.avi.flv.m3u8.webm.mkv'):
|
|
return self.getHoster('lien_direct')
|
|
# Cas special si parametre apres le lien_direct
|
|
if (sHosterUrl.split('?')[0][-4:] in '.mp4.avi.flv.m3u8.webm.mkv'):
|
|
return self.getHoster('lien_direct')
|
|
|
|
return False
|
|
|
|
def getHoster(self, sHosterFileName):
|
|
exec ("from resources.hosters." + sHosterFileName + " import cHoster", globals())
|
|
return cHoster()
|
|
|
|
def play(self):
|
|
oGui = cGui()
|
|
oDialog = dialog()
|
|
|
|
oInputParameterHandler = cInputParameterHandler()
|
|
sHosterIdentifier = oInputParameterHandler.getValue('sHosterIdentifier')
|
|
sMediaUrl = oInputParameterHandler.getValue('sMediaUrl')
|
|
bGetRedirectUrl = oInputParameterHandler.getValue('bGetRedirectUrl')
|
|
sFileName = oInputParameterHandler.getValue('sFileName')
|
|
sTitle = oInputParameterHandler.getValue('title')
|
|
|
|
if not sTitle:
|
|
sTitle = sFileName
|
|
|
|
if bGetRedirectUrl == 'True':
|
|
sMediaUrl = self.__getRedirectUrl(sMediaUrl)
|
|
|
|
VSlog('Hoster - play ' + sMediaUrl)
|
|
|
|
oHoster = self.getHoster(sHosterIdentifier)
|
|
oHoster.setFileName(sFileName)
|
|
|
|
sHosterName = oHoster.getDisplayName()
|
|
oDialog.VSinfo(sHosterName, 'Resolve')
|
|
|
|
try:
|
|
|
|
oHoster.setUrl(sMediaUrl)
|
|
aLink = oHoster.getMediaLink()
|
|
|
|
if aLink[0]:
|
|
oGuiElement = cGuiElement()
|
|
oGuiElement.setSiteName(self.SITE_NAME)
|
|
oGuiElement.setMediaUrl(aLink[1])
|
|
oGuiElement.setTitle(sTitle)
|
|
oGuiElement.getInfoLabel()
|
|
|
|
oPlayer = cPlayer()
|
|
|
|
# sous titres ?
|
|
if len(aLink) > 2:
|
|
oPlayer.AddSubtitles(aLink[2])
|
|
|
|
oPlayer.run(oGuiElement, oHoster.getFileName(), aLink[1])
|
|
return
|
|
else:
|
|
oDialog.VSerror(self.ADDON.VSlang(30020))
|
|
return
|
|
|
|
except:
|
|
oDialog.VSerror(self.ADDON.VSlang(30020))
|
|
return
|
|
|
|
oGui.setEndOfDirectory()
|
|
|
|
def addToPlaylist(self):
|
|
oGui = cGui()
|
|
oInputParameterHandler = cInputParameterHandler()
|
|
sHosterIdentifier = oInputParameterHandler.getValue('sHosterIdentifier')
|
|
sMediaUrl = oInputParameterHandler.getValue('sMediaUrl')
|
|
bGetRedirectUrl = oInputParameterHandler.getValue('bGetRedirectUrl')
|
|
sFileName = oInputParameterHandler.getValue('sFileName')
|
|
|
|
if bGetRedirectUrl == 'True':
|
|
sMediaUrl = self.__getRedirectUrl(sMediaUrl)
|
|
|
|
VSlog('Hoster - playlist ' + sMediaUrl)
|
|
oHoster = self.getHoster(sHosterIdentifier)
|
|
oHoster.setFileName(sFileName)
|
|
|
|
oHoster.setUrl(sMediaUrl)
|
|
aLink = oHoster.getMediaLink()
|
|
|
|
if aLink[0]:
|
|
oGuiElement = cGuiElement()
|
|
oGuiElement.setSiteName(self.SITE_NAME)
|
|
oGuiElement.setMediaUrl(aLink[1])
|
|
oGuiElement.setTitle(oHoster.getFileName())
|
|
|
|
oPlayer = cPlayer()
|
|
oPlayer.addItemToPlaylist(oGuiElement)
|
|
dialog().VSinfo(str(oHoster.getFileName()), 'Playlist')
|
|
return
|
|
|
|
oGui.setEndOfDirectory()
|
|
|
|
def __getRedirectUrl(self, sUrl):
|
|
oRequest = cRequestHandler(sUrl)
|
|
oRequest.request()
|
|
return oRequest.getRealUrl()
|