This commit is contained in:
Pavel Suha
2025-04-25 16:30:00 +02:00
parent 9d43f8f476
commit ef3ef9f859
34 changed files with 2550 additions and 0 deletions

274
default.py Normal file
View File

@@ -0,0 +1,274 @@
# -*- coding: UTF-8 -*-
#/*
# * Copyright (C) 2012 Libor Zoubek
# *
# *
# * This Program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 2, or (at your option)
# * any later version.
# *
# * This Program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; see the file COPYING. If not, write to
# * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
# * http://www.gnu.org/copyleft/gpl.html
# *
# */
import urllib
#Python 2
try:
# import cookielib
import urllib2
# import sys
# reload(sys) # Reload does the trick!
# sys.setdefaultencoding('UTF8')
#Python 3
except:
#import http.cookiejar
# cookielib = http.cookiejar
# urllib2 = urllib.request
pass
import re,os,traceback,socket
sys.path.append( os.path.join ( os.path.dirname(__file__),'resources','lib') )
import xbmcaddon,xbmc,xbmcgui,xbmcplugin
__scriptid__ = 'plugin.video.online-files'
__scriptname__ = 'Soubory Online'
__addon__ = xbmcaddon.Addon(id=__scriptid__)
__language__ = __addon__.getLocalizedString
__settings__ = __addon__.getSetting
import util,search
import xbmcutil, xbmcvfs
# import bezvadata,
import hellspy,ulozto,fastshare,webshare
import xbmcprovider
from threading import Lock
from provider import ResolveException
def search_cb(what):
def paralel_search(search):
def do_search(p,what):
res = []
try:
result = p.provider.search(what)
for item in result:
item['title'] = '[%s] %s' % (p.provider.name,item['title'])
if item['type'] == 'next':
item['type'] = 'dir'
item['title'] = '[%s] %s >>' % (p.provider.name,__language__(30063))
except:
traceback.print_exc()
try:
lock.acquire()
p.list(result)
finally:
lock.release()
lock = Lock()
util.run_parallel_in_threads(do_search, search)
searches = []
for key in providers.keys():
p = providers[key]
searches.append((p,what))
paralel_search(searches)
return xbmcplugin.endOfDirectory(int(sys.argv[1]))
# def bezvadata_filter(item):
# ext_filter = __settings__('bezvadata_ext-filter').split(',')
# ext_filter = ['.'+f.strip() for f in ext_filter]
# extension = os.path.splitext(item['title'])[1]
# if extension in ext_filter:
# return False
# elif '18+' in item.keys() and __settings__('bezvadata_18+content') != 'true':
# return False
# return True
def ulozto_filter(item):
ext_filter = __settings__('ulozto_ext-filter').split(',')
ext_filter = ['.'+f.strip() for f in ext_filter]
extension = os.path.splitext(item['title'])[1]
if extension in ext_filter:
return False
return True
def webshare_filter(item):
ext_filter = __settings__('webshare_ext-filter').split(',')
ext_filter = ['.'+f.strip() for f in ext_filter]
extension = os.path.splitext(item['title'])[1]
if extension in ext_filter:
return False
return True
class XBMCHellspyContentProvider(xbmcprovider.XBMCLoginRequiredContentProvider):
def render_default(self,item):
params = self.params()
if item['type'] == 'top':
params.update({'list':item['url']})
xbmcutil.add_dir(item['title'],params,xbmcutil.icon('top.png'))
def render_video(self,item):
params = self.params()
params.update({'to-downloads':item['url']})
item['menu'] = {__language__(30056):params}
return xbmcprovider.XBMCLoginRequiredContentProvider.render_video(self,item)
def run_custom(self,params):
if 'to-downloads' in params.keys():
self.provider.to_downloads(params['to-downloads'])
class XBMCUloztoContentProvider(xbmcprovider.XBMCLoginOptionalContentProvider):
def __init__(self,provider,settings,addon):
xbmcprovider.XBMCLoginOptionalContentProvider.__init__(self,provider,settings,addon)
self.check_setting_keys(['vip','search-type'])
search_type = ''
#search_types = {'0':'','1':'media=video&','2':'media=image&','3':'media=music&','4':'media=document&'}
search_types = {'0':'','1':'type=videos&','2':'type=images&','3':'type=audios&','4':'type=documents&','5':'type=archives&'}
if settings['search-type'] in search_types.keys():
search_type = search_types[settings['search-type']]
provider.search_type = search_type
def resolve(self,url):
item = self.provider.video_item()
item.update({'url':url,'vip':True})
if not self.ask_for_account_type():
# user does not want to use VIP at this time
item.update({'vip':False})
else:
if not self.provider.login():
xbmcgui.Dialog().ok(self.provider.name,xbmcutil.__lang__(30011))
return
try:
if __settings__("ulozto_captcha_auto") == "true":
return self.provider.resolve(item,captcha_cb=self.solve_captcha)
else:
return self.provider.resolve(item,captcha_cb=self.ask_for_captcha)
except ResolveException as e:
self._handle_exc(e)
def solve_captcha(self,params):
#snd = os.path.join(unicode(xbmc.translatePath(self.addon.getAddonInfo('profile'))),'sound.wav')
snd = os.path.join(xbmcvfs.translatePath(self.addon.getAddonInfo('profile')),'sound.wav')
# snd = 'sound.wav'
print(self.addon.getAddonInfo('profile'))
util.save_to_file(params['snd'], snd)
sndfile = open(snd, 'rb').read()
url = 'http://m217-io.appspot.com/ulozto'
headers = {'Content-Type': 'audio/wav'}
req = urllib.request.Request(url, sndfile, headers)
response = None
try:
response = urllib.request.urlopen(req, timeout = int(__settings__("ulozto_captcha_timeout")))
data = response.read()
except (urllib.request.HTTPError, socket.timeout):
traceback.print_exc()
data = ''
finally:
response and response.close()
if not data:
return self.ask_for_captcha(params)
return data
class XBMCWebshareContentProvider(xbmcprovider.XBMCLoginOptionalContentProvider):
def resolve(self,url):
item = self.provider.video_item(url=url)
if not self.provider.login():
xbmcgui.Dialog().ok(self.provider.name,xbmcutil.__lang__(30011))
return
try:
return self.provider.resolve(item)
except ResolveException as e:
self._handle_exc(e)
settings = {
'downloads':__settings__('downloads'),
'download-notify':__settings__('download-notify'),
'download-notify-every':__settings__('download-notify-every'),
}
providers = {}
# if __settings__('bezvadata_enabled') == 'true':
# p = bezvadata.BezvadataContentProvider(username='',password='',filter=bezvadata_filter,tmp_dir=xbmc.translatePath(__addon__.getAddonInfo('profile')))
# extra = {
# 'keep-searches':__settings__('bezvadata_keep-searches'),
# 'vip':'0'
# }
# extra.update(settings)
# providers[p.name] = xbmcprovider.XBMCLoginOptionalDelayedContentProvider(p,extra,__addon__)
if __settings__('ulozto_enabled') == 'true':
p = ulozto.UloztoContentProvider(__settings__('ulozto_user'),__settings__('ulozto_pass'),filter=ulozto_filter)
extra = {
'vip':__settings__('ulozto_usevip'),
'keep-searches':__settings__('ulozto_keep-searches'),
'search-type':__settings__('ulozto_search-type')
}
extra.update(settings)
providers[p.name] = XBMCUloztoContentProvider(p,extra,__addon__)
if __settings__('hellspy_enabled') == 'true':
p = hellspy.HellspyContentProvider(__settings__('hellspy_user'),__settings__('hellspy_pass'),site_url=__settings__('hellspy_site_url'))
extra = {
'keep-searches':__settings__('hellspy_keep-searches')
}
extra.update(settings)
providers[p.name] = XBMCHellspyContentProvider(p,extra,__addon__)
if __settings__('fastshare_enabled') == 'true':
p = fastshare.FastshareContentProvider(__settings__('fastshare_user'),__settings__('fastshare_pass'),tmp_dir=xbmcvfs.translatePath(__addon__.getAddonInfo('profile')))
extra = {
'vip':'0',
'keep-searches':__settings__('fastshare_keep-searches')
}
extra.update(settings)
providers[p.name] = xbmcprovider.XBMCLoginOptionalContentProvider(p,extra,__addon__)
if __settings__('webshare_enabled') == 'true':
p = webshare.WebshareContentProvider(__settings__('webshare_user'),__settings__('webshare_pass'),filter=webshare_filter)
extra = {
'vip':'0',
'keep-searches':__settings__('webshare_keep-searches')
}
extra.update(settings)
providers[p.name] = XBMCWebshareContentProvider(p,extra,__addon__)
def icon(provider):
icon_file = os.path.join(__addon__.getAddonInfo('path'),'resources','icons',provider+'.png')
if not os.path.isfile(icon_file):
return 'DefaultFolder.png'
return icon_file
def root():
search.item()
xbmcutil.add_local_dir(xbmcutil.__lang__(30006),settings['downloads'],xbmcutil.icon('download.png'))
for provider in providers.keys():
xbmcutil.add_dir(provider,{'cp':provider},icon(provider))
return xbmcplugin.endOfDirectory(int(sys.argv[1]))
params = util.params()
if params=={}:
xbmcutil.init_usage_reporting( __scriptid__)
root()
elif 'cp' in params.keys():
cp = params['cp']
if cp in providers.keys():
providers[cp].run(params)
else:
search.main(__addon__,'search_history',params,search_cb)