test
This commit is contained in:
274
default.py
Normal file
274
default.py
Normal 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)
|
||||
Reference in New Issue
Block a user