searcher update
parent
e480cb4919
commit
99ba4d258a
|
@ -34,6 +34,7 @@ import sys
|
|||
import xbmcgui
|
||||
import xbmc
|
||||
import Localization
|
||||
from functions import log, debug
|
||||
|
||||
|
||||
class SearcherABC:
|
||||
|
@ -43,6 +44,9 @@ class SearcherABC:
|
|||
sourceWeight = 1
|
||||
cookieJar = None
|
||||
timeout_multi=int(sys.modules["__main__"].__settings__.getSetting("timeout"))
|
||||
__plugin__='Empty v 0 0 0'
|
||||
log=log
|
||||
debug=debug
|
||||
|
||||
socket.setdefaulttimeout(10+(10*int(timeout_multi)))
|
||||
|
||||
|
@ -96,9 +100,9 @@ class SearcherABC:
|
|||
if os.path.exists(cookie):
|
||||
try:
|
||||
self.cookieJar.clear('.'+domain)
|
||||
print '[SearcherABC] '+self.__class__.__name__+': Cookie Deleted!'
|
||||
self.log('[SearcherABC] '+self.__plugin__+': Cookie Deleted!')
|
||||
except:
|
||||
print '[SearcherABC] '+self.__class__.__name__+': Cookie clear failed!'
|
||||
self.log('[SearcherABC] '+self.__plugin__+': Cookie clear failed!')
|
||||
|
||||
def makeRequest(self, url, data={}, headers={}):
|
||||
self.load_cookie()
|
||||
|
@ -112,13 +116,13 @@ class SearcherABC:
|
|||
response = opener.open(url, encodedData)
|
||||
except urllib2.HTTPError as e:
|
||||
if e.code == 404:
|
||||
print self.__class__.__name__+' [makeRequest]: Not Found! HTTP Error, e.code=' + str(e.code)
|
||||
self.log(self.__plugin__+' [makeRequest]: Not Found! HTTP Error, e.code=' + str(e.code))
|
||||
return
|
||||
elif e.code in [503]:
|
||||
print self.__class__.__name__+' [makeRequest]: Denied, HTTP Error, e.code=' + str(e.code)
|
||||
self.log(self.__plugin__+' [makeRequest]: Denied, HTTP Error, e.code=' + str(e.code))
|
||||
return
|
||||
else:
|
||||
print self.__class__.__name__+' [makeRequest]: HTTP Error, e.code=' + str(e.code)
|
||||
self.log(self.__plugin__+' [makeRequest]: HTTP Error, e.code=' + str(e.code))
|
||||
return
|
||||
#self.cookieJar.extract_cookies(response, urllib2)
|
||||
if response.info().get('Content-Encoding') == 'gzip':
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.torrenter" name="Torrenter" version="2.3.2" provider-name="vadim.skorba, DiMartino">
|
||||
<addon id="plugin.video.torrenter" name="Torrenter" version="2.3.3" provider-name="vadim.skorba, DiMartino">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.1.0"/>
|
||||
<import addon="script.module.libtorrent"/>
|
||||
|
|
|
@ -32,7 +32,7 @@ __version__ = __settings__.getAddonInfo('version')
|
|||
__plugin__ = __settings__.getAddonInfo('name') + " v." + __version__
|
||||
__root__ = __settings__.getAddonInfo('path')
|
||||
|
||||
#print 'SYS ARGV: ' + str(sys.argv)
|
||||
print 'SYS ARGV: ' + str(sys.argv)
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
params = getParameters(sys.argv[1])
|
||||
|
|
113
functions.py
113
functions.py
|
@ -102,12 +102,18 @@ def md5(string):
|
|||
return hasher.hexdigest()
|
||||
|
||||
|
||||
def Debug(msg, force=False):
|
||||
if (1 == 1 or debug == 'true' or force):
|
||||
try:
|
||||
print "[Torrenter v2] " + msg
|
||||
except UnicodeEncodeError:
|
||||
print "[Torrenter v2] " + msg.encode("utf-8", "ignore")
|
||||
def log(msg):
|
||||
try:
|
||||
xbmc.log("### [%s]: %s" % (__plugin__,msg,), level=xbmc.LOGNOTICE )
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log("### [%s]: %s" % (__plugin__,msg.encode("utf-8", "ignore"),), level=xbmc.LOGNOTICE )
|
||||
|
||||
|
||||
def debug(msg):
|
||||
try:
|
||||
xbmc.log("### [%s]: %s" % (__plugin__,msg,), level=xbmc.LOGDEBUG )
|
||||
except UnicodeEncodeError:
|
||||
xbmc.log("### [%s]: %s" % (__plugin__,msg.encode("utf-8", "ignore"),), level=xbmc.LOGDEBUG )
|
||||
|
||||
|
||||
def showMessage(heading, message, times=10000, forced=False):
|
||||
|
@ -210,22 +216,22 @@ def get_url(cookie, url):
|
|||
try:
|
||||
conn = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({}), headers))
|
||||
array = conn.read()
|
||||
# Debug('[get_url]: arr"'+str(array)+'"')
|
||||
# debug('[get_url]: arr"'+str(array)+'"')
|
||||
if array == '':
|
||||
# Debug('[get_url][2]: arr=""')
|
||||
# debug('[get_url][2]: arr=""')
|
||||
array = True
|
||||
return array
|
||||
except urllib2.HTTPError as e:
|
||||
# Debug('[get_url]: HTTPError, e.code='+str(e.code))
|
||||
# debug('[get_url]: HTTPError, e.code='+str(e.code))
|
||||
if e.code == 401:
|
||||
Debug('[get_url]: Denied! Wrong login or api is broken!')
|
||||
debug('[get_url]: Denied! Wrong login or api is broken!')
|
||||
return
|
||||
elif e.code in [503]:
|
||||
Debug('[get_url]: Denied, HTTP Error, e.code=' + str(e.code))
|
||||
debug('[get_url]: Denied, HTTP Error, e.code=' + str(e.code))
|
||||
return
|
||||
else:
|
||||
showMessage('HTTP Error', str(e.code))
|
||||
Debug('[get_url]: HTTP Error, e.code=' + str(e.code))
|
||||
debug('[get_url]: HTTP Error, e.code=' + str(e.code))
|
||||
xbmc.sleep(2000)
|
||||
return
|
||||
except:
|
||||
|
@ -317,7 +323,7 @@ def cutFileNames(l):
|
|||
text2 = cutStr(text[1][0:len(text[1]) - 1 - len(text[1].split('.')[-1])])
|
||||
sep_file = " "
|
||||
result = list(d.compare(text1.split(sep_file), text2.split(sep_file)))
|
||||
Debug('[cutFileNames] ' + unicode(result))
|
||||
debug('[cutFileNames] ' + unicode(result))
|
||||
|
||||
start = ''
|
||||
end = ''
|
||||
|
@ -334,8 +340,8 @@ def cutFileNames(l):
|
|||
|
||||
newl = l
|
||||
l = []
|
||||
Debug('[cutFileNames] [start] ' + start)
|
||||
Debug('[cutFileNames] [end] ' + end)
|
||||
debug('[cutFileNames] [start] ' + start)
|
||||
debug('[cutFileNames] [end] ' + end)
|
||||
for fl in newl:
|
||||
if cutStr(fl[0:len(start)]) == cutStr(start): fl = fl[len(start):]
|
||||
if cutStr(fl[len(fl) - len(end):]) == cutStr(end): fl = fl[0:len(fl) - len(end)]
|
||||
|
@ -345,7 +351,7 @@ def cutFileNames(l):
|
|||
except:
|
||||
pass
|
||||
l.append(fl)
|
||||
Debug('[cutFileNames] [sorted l] ' + unicode(sorted(l, key=lambda x: x)), True)
|
||||
debug('[cutFileNames] [sorted l] ' + unicode(sorted(l, key=lambda x: x)))
|
||||
return l
|
||||
|
||||
|
||||
|
@ -363,7 +369,7 @@ def sortext(filelist):
|
|||
result[ext] = 1
|
||||
lol = result.iteritems()
|
||||
lol = sorted(lol, key=lambda x: x[1])
|
||||
Debug('[sortext]: lol:' + str(lol))
|
||||
debug('[sortext]: lol:' + str(lol))
|
||||
popext = lol[-1][0]
|
||||
result, i = [], 0
|
||||
for name in filelist:
|
||||
|
@ -371,7 +377,7 @@ def sortext(filelist):
|
|||
result.append(name)
|
||||
i = i + 1
|
||||
result = sweetpair(result)
|
||||
Debug('[sortext]: result:' + str(result))
|
||||
debug('[sortext]: result:' + str(result))
|
||||
return result
|
||||
|
||||
|
||||
|
@ -433,13 +439,13 @@ def sweetpair(l):
|
|||
if ratio[id1] <= ratio[i] and i != id2 or id2 == id1 and ratio[id1] == ratio[i]:
|
||||
id2 = id1
|
||||
id1 = i
|
||||
# Debug('1 - %d %d' % (id1, id2))
|
||||
# debug('1 - %d %d' % (id1, id2))
|
||||
elif (ratio[id2] <= ratio[i] or id1 == id2) and i != id1:
|
||||
id2 = i
|
||||
# Debug('2 - %d %d' % (id1, id2))
|
||||
# debug('2 - %d %d' % (id1, id2))
|
||||
|
||||
Debug('[sweetpair]: id1 ' + l[id1] + ':' + str(ratio[id1]))
|
||||
Debug('[sweetpair]: id2 ' + l[id2] + ':' + str(ratio[id2]))
|
||||
debug('[sweetpair]: id1 ' + l[id1] + ':' + str(ratio[id1]))
|
||||
debug('[sweetpair]: id2 ' + l[id2] + ':' + str(ratio[id2]))
|
||||
|
||||
return [l[id1], l[id2]]
|
||||
|
||||
|
@ -451,7 +457,7 @@ def FileNamesPrepare(filename):
|
|||
try:
|
||||
if int(filename):
|
||||
my_episode = int(filename)
|
||||
Debug('[FileNamesPrepare] ' + str([my_season, my_episode, filename]))
|
||||
debug('[FileNamesPrepare] ' + str([my_season, my_episode, filename]))
|
||||
return [my_season, my_episode, filename]
|
||||
except:
|
||||
pass
|
||||
|
@ -477,7 +483,7 @@ def FileNamesPrepare(filename):
|
|||
break
|
||||
if my_season and my_season > 100: my_season = None
|
||||
if my_episode and my_episode > 365: my_episode = None
|
||||
Debug('[FileNamesPrepare] ' + str([my_season, my_episode, filename]))
|
||||
debug('[FileNamesPrepare] ' + str([my_season, my_episode, filename]))
|
||||
return [my_season, my_episode, filename]
|
||||
|
||||
|
||||
|
@ -493,7 +499,7 @@ def filename2match(filename, no_date=False):
|
|||
results['showtitle'] = results['showtitle'].replace('.', ' ').replace('_', ' ').strip().replace(
|
||||
'The Daily Show', 'The Daily Show With Jon Stewart')
|
||||
results['season'], results['episode'] = int(results['season']), int(results['episode'])
|
||||
# Debug('[filename2match] '+str(results))
|
||||
# debug('[filename2match] '+str(results))
|
||||
return results
|
||||
if no_date: return
|
||||
urls = ['(.+)(\d{4})\.(\d{2,4})\.(\d{2,4})', '(.+)(\d{4}) (\d{2}) (\d{2})'] # same in service
|
||||
|
@ -503,7 +509,7 @@ def filename2match(filename, no_date=False):
|
|||
results['showtitle'] = match[0][0].replace('.', ' ').strip().replace('The Daily Show',
|
||||
'The Daily Show With Jon Stewart')
|
||||
results['date'] = '%s.%s.%s' % (match[0][3], match[0][2], match[0][1])
|
||||
Debug('[filename2match] ' + str(results))
|
||||
debug('[filename2match] ' + str(results))
|
||||
return results
|
||||
|
||||
|
||||
|
@ -549,7 +555,7 @@ def view_style(func):
|
|||
num_skin = 1
|
||||
|
||||
style = styles.get(func)
|
||||
# Debug('[view_style]: lock '+str(style))
|
||||
# debug('[view_style]: lock '+str(style))
|
||||
lockView(style, num_skin)
|
||||
|
||||
|
||||
|
@ -626,7 +632,7 @@ def smbtopath(path):
|
|||
path = x[1]
|
||||
else:
|
||||
path = path.replace('smb://', '')
|
||||
Debug('[smbtopath]:' + '\\\\' + path.replace('/', '\\'))
|
||||
debug('[smbtopath]:' + '\\\\' + path.replace('/', '\\'))
|
||||
return '\\\\' + path.replace('/', '\\')
|
||||
|
||||
|
||||
|
@ -696,10 +702,10 @@ class RateShow():
|
|||
try:
|
||||
self.watched_jdata = json.loads(watched_data.get())
|
||||
except:
|
||||
Debug('[RateShow] no watched_jdata1')
|
||||
debug('[RateShow] no watched_jdata1')
|
||||
return
|
||||
if not self.watched_jdata:
|
||||
Debug('[RateShow] no watched_jdata2')
|
||||
debug('[RateShow] no watched_jdata2')
|
||||
return
|
||||
|
||||
def seasonrates(self):
|
||||
|
@ -716,10 +722,10 @@ class RateShow():
|
|||
ratedict[i].append(self.watched_jdata[j]['rating'])
|
||||
else:
|
||||
ratedict[i] = [self.watched_jdata[j]['rating']]
|
||||
# Debug('[ratedict]:'+str(ratedict))
|
||||
# debug('[ratedict]:'+str(ratedict))
|
||||
for i in ratedict:
|
||||
ratedict[i] = (round(float(sum(ratedict[i])) / len(ratedict[i]), 2), len(ratedict[i]))
|
||||
Debug('[ratedict]:' + str(ratedict))
|
||||
debug('[ratedict]:' + str(ratedict))
|
||||
else:
|
||||
ratedict = {}
|
||||
return ratedict
|
||||
|
@ -736,7 +742,7 @@ class RateShow():
|
|||
ratings.append(self.watched_jdata[id]['rating'])
|
||||
if id in self.list[str(seasonNumber)]:
|
||||
seasonratings.append(self.watched_jdata[id]['rating'])
|
||||
# Debug('ratings:'+str(ratings)+'; seasonratings:'+str(seasonratings))
|
||||
# debug('ratings:'+str(ratings)+'; seasonratings:'+str(seasonratings))
|
||||
if len(ratings) > 0:
|
||||
rating = round(float(sum(ratings)) / len(ratings), 2)
|
||||
else:
|
||||
|
@ -759,7 +765,7 @@ class RateShow():
|
|||
listSE[str(jdata['episodes'][id]['seasonNumber'])] = [id]
|
||||
if jdata['episodes'][id]['seasonNumber'] > seasonNumber:
|
||||
seasonNumber = jdata['episodes'][id]['seasonNumber']
|
||||
# Debug('[listSE] '+str(listSE)+str(seasonNumber))
|
||||
# debug('[listSE] '+str(listSE)+str(seasonNumber))
|
||||
return listSE, seasonNumber
|
||||
|
||||
|
||||
|
@ -767,11 +773,11 @@ def isRemoteTorr():
|
|||
localhost = ['127.0.0.1', '0.0.0.0', 'localhost']
|
||||
if __settings__.getSetting("torrent") == '0':
|
||||
if __settings__.getSetting("torrent_utorrent_host") not in localhost:
|
||||
Debug('[isRemoteTorr]: uTorrent is Remote!')
|
||||
debug('[isRemoteTorr]: uTorrent is Remote!')
|
||||
return True
|
||||
elif __settings__.getSetting("torrent") == '1':
|
||||
if __settings__.getSetting("torrent_transmission_host") not in localhost:
|
||||
Debug('[isRemoteTorr]: Transmission is Remote!')
|
||||
debug('[isRemoteTorr]: Transmission is Remote!')
|
||||
return True
|
||||
|
||||
|
||||
|
@ -782,14 +788,14 @@ def changeDBTitle(showId):
|
|||
{'jsonrpc': '2.0', 'method': 'VideoLibrary.GetTVShows', 'params': {'properties': ['title']}, 'id': 0})
|
||||
|
||||
if not shows:
|
||||
Debug('[changeDBTitle]: XBMC JSON Result was empty.')
|
||||
debug('[changeDBTitle]: XBMC JSON Result was empty.')
|
||||
return
|
||||
|
||||
if 'tvshows' in shows:
|
||||
shows = shows['tvshows']
|
||||
Debug("[changeDBTitle]: XBMC JSON Result: '%s'" % str(shows))
|
||||
debug("[changeDBTitle]: XBMC JSON Result: '%s'" % str(shows))
|
||||
else:
|
||||
Debug("[changeDBTitle]: Key 'tvshows' not found")
|
||||
debug("[changeDBTitle]: Key 'tvshows' not found")
|
||||
return
|
||||
|
||||
if len(shows) > 0:
|
||||
|
@ -812,7 +818,7 @@ def changeDBTitle(showId):
|
|||
if result in [newtitle, 'OK']:
|
||||
showMessage(__language__(30208), __language__(30536) % (newtitle), forced=True)
|
||||
else:
|
||||
Debug("[changeDBTitle]: XBMC JSON Result: '%s'" % str(result))
|
||||
debug("[changeDBTitle]: XBMC JSON Result: '%s'" % str(result))
|
||||
return
|
||||
|
||||
|
||||
|
@ -832,11 +838,11 @@ class TimeOut():
|
|||
gone_online = 0
|
||||
if not manual:
|
||||
if gone_online and gone_online + self.online >= int(round(time.time())):
|
||||
Debug('[TimeOut]: too soon to go back offline! %d s' % (
|
||||
debug('[TimeOut]: too soon to go back offline! %d s' % (
|
||||
(gone_online + self.online * 4) - int(round(time.time()))))
|
||||
return
|
||||
if self.timeout() == self.online:
|
||||
Debug('[TimeOut]: Gone offline! %d s' % ((gone_online + self.online * 4) - int(round(time.time()))))
|
||||
debug('[TimeOut]: Gone offline! %d s' % ((gone_online + self.online * 4) - int(round(time.time()))))
|
||||
showMessage(__language__(30520), __language__(30545) % (self.offline))
|
||||
if self.get: self.scan.delete()
|
||||
self.scan.add()
|
||||
|
@ -844,7 +850,7 @@ class TimeOut():
|
|||
def go_online(self):
|
||||
if self.get:
|
||||
self.scan.delete()
|
||||
Debug('[TimeOut]: Gone online!')
|
||||
debug('[TimeOut]: Gone online!')
|
||||
showMessage(__language__(30521), __language__(30545) % (self.online))
|
||||
if self.gone_online.get():
|
||||
self.gone_online.delete()
|
||||
|
@ -855,7 +861,7 @@ class TimeOut():
|
|||
to = self.offline
|
||||
else:
|
||||
to = self.online
|
||||
# Debug('[TimeOut]: '+str(to))
|
||||
# debug('[TimeOut]: '+str(to))
|
||||
return to
|
||||
|
||||
|
||||
|
@ -1154,7 +1160,6 @@ class Searchers():
|
|||
xbmc.executebuiltin('XBMC.ActivateWindow(Addonbrowser,addons://search/%s)' % ('Torrenter Searcher %s' % searcher))
|
||||
|
||||
|
||||
|
||||
def search(url, searchersList, isApi=None):
|
||||
from threading import Thread
|
||||
try:
|
||||
|
@ -1319,7 +1324,7 @@ class WatchedDB:
|
|||
|
||||
def _get(self, id):
|
||||
self._connect()
|
||||
Debug('[WatchedDB][_get]: Checking ' + id)
|
||||
debug('[WatchedDB][_get]: Checking ' + id)
|
||||
id = id.replace("'", "<&>").decode('utf-8', 'ignore')
|
||||
self.where = " where id='%s'" % (id)
|
||||
try:
|
||||
|
@ -1371,7 +1376,7 @@ class WatchedDB:
|
|||
elif db_rating != None and rating == db_rating:
|
||||
showMessage(__language__(30520), __language__(30527) % (str(rating)))
|
||||
|
||||
Debug('[WatchedDB][check]: rating: %s DB: %s, ok1: %s, ok3: %s' % (
|
||||
debug('[WatchedDB][check]: rating: %s DB: %s, ok1: %s, ok3: %s' % (
|
||||
str(rating), str(db_rating), str(ok1), str(ok3)))
|
||||
|
||||
if ok1:
|
||||
|
@ -1383,7 +1388,7 @@ class WatchedDB:
|
|||
return True
|
||||
|
||||
def onaccess(self):
|
||||
# Debug('[WatchedDB][onaccess]: Start')
|
||||
# debug('[WatchedDB][onaccess]: Start')
|
||||
TimeOut().go_online()
|
||||
self._connect()
|
||||
try:
|
||||
|
@ -1397,7 +1402,7 @@ class WatchedDB:
|
|||
i = 0
|
||||
|
||||
if res > 0:
|
||||
# Debug('[WatchedDB][onaccess]: Found %s' % (str(res)))
|
||||
# debug('[WatchedDB][onaccess]: Found %s' % (str(res)))
|
||||
silentofflinesend = getSettingAsBool('silentofflinesend')
|
||||
if not silentofflinesend:
|
||||
ok2 = self.dialog.yesno(__language__(30521), __language__(30528) % (str(res)), __language__(30529))
|
||||
|
@ -1424,7 +1429,7 @@ class WatchedDB:
|
|||
__settings__.setSetting("duo_last_id", '')
|
||||
self._connect()
|
||||
id = id.replace("'", "<&>").decode('utf-8', 'ignore')
|
||||
Debug('[WatchedDB][_add]: Adding %s with rate %d' % (id, rating))
|
||||
debug('[WatchedDB][_add]: Adding %s with rate %d' % (id, rating))
|
||||
self.cur.execute('insert into watched(addtime, rating, id) values(?,?,?)', (int(time.time()), int(rating), id))
|
||||
self.db.commit()
|
||||
self._close()
|
||||
|
@ -1524,7 +1529,7 @@ def isSubtitle(filename, filename2):
|
|||
filename_if = filename[:len(filename) - len(filename.split('.')[-1]) - 1]
|
||||
filename_if = filename_if.split('/')[-1].split('\\')[-1]
|
||||
filename_if2 = filename2.split('/')[-1].split('\\')[-1][:len(filename_if)]
|
||||
# Debug('Compare ' + filename_if.lower() + ' and ' + filename_if2.lower() + ' and ' + filename2.lower().split('.')[-1])
|
||||
# debug('Compare ' + filename_if.lower() + ' and ' + filename_if2.lower() + ' and ' + filename2.lower().split('.')[-1])
|
||||
ext = ['ass', 'mpsub', 'rum', 'sbt', 'sbv', 'srt', 'ssa', 'sub', 'sup', 'w32']
|
||||
if filename2.lower().split('.')[-1] in ext and \
|
||||
filename_if.lower() == filename_if2.lower():
|
||||
|
@ -1613,7 +1618,7 @@ class DownloadDB:
|
|||
self.cur = self.db.cursor()
|
||||
else:
|
||||
self._close()
|
||||
Debug('[DownloadDB]: DELETE ' + str(self.filename))
|
||||
debug('[DownloadDB]: DELETE ' + str(self.filename))
|
||||
xbmcvfs.delete(self.filename)
|
||||
self._connect()
|
||||
self.cur.execute(sql)
|
||||
|
@ -1739,7 +1744,7 @@ def unquote(string, ret=None):
|
|||
|
||||
|
||||
def itemScrap(item, kwarg):
|
||||
# Debug('[itemTVDB]:meta '+str(kwarg))
|
||||
# debug('[itemTVDB]:meta '+str(kwarg))
|
||||
if 'title' in kwarg and kwarg['title']:
|
||||
item.setLabel(kwarg['title'])
|
||||
|
||||
|
@ -1777,7 +1782,7 @@ def get_ids_video(contentList):
|
|||
pass
|
||||
if len(ids_video) > 1:
|
||||
break
|
||||
# print Debug('[get_ids_video]:'+str(ids_video))
|
||||
# print debug('[get_ids_video]:'+str(ids_video))
|
||||
return ids_video
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue