The branch, gotham has been updated via b3e2a04e7ea5fa48e91ce9fc7d3982bb0c1dcaf2 (commit) from d87f6e8278ee85be93a416a9a61709e30c4b4e97 (commit)
- Log ----------------------------------------------------------------- http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=b3e2a04e7ea5fa48e91ce9fc7d3982bb0c1dcaf2 commit b3e2a04e7ea5fa48e91ce9fc7d3982bb0c1dcaf2 Author: Martijn Kaijser <mcm.kaij...@gmail.com> Date: Wed Aug 20 18:13:19 2014 +0200 [service.subtitles.supersubtitles] 0.0.15 diff --git a/service.subtitles.supersubtitles/addon.xml b/service.subtitles.supersubtitles/addon.xml index 064f20f..1966a69 100644 --- a/service.subtitles.supersubtitles/addon.xml +++ b/service.subtitles.supersubtitles/addon.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="service.subtitles.supersubtitles" name="Super Subtitles" - version="0.0.12" + version="0.0.15" provider-name="fape"> <requires> <import addon="xbmc.python" version="2.14.0"/> diff --git a/service.subtitles.supersubtitles/changelog.txt b/service.subtitles.supersubtitles/changelog.txt index ce8c1cd..ef36688 100644 --- a/service.subtitles.supersubtitles/changelog.txt +++ b/service.subtitles.supersubtitles/changelog.txt @@ -1,3 +1,14 @@ +0.0.15 +- same titled tvshow support +- small fixes + +0.0.14 +- use preferred language for sorting (helix only) + +0.0.13 +- season pack handling +- search and download improvements + 0.0.12 - filename character encoding fix in url - more sophisticated exception handling diff --git a/service.subtitles.supersubtitles/resources/language/English/strings.po b/service.subtitles.supersubtitles/resources/language/English/strings.po index 6d057bf..d295f56 100644 --- a/service.subtitles.supersubtitles/resources/language/English/strings.po +++ b/service.subtitles.supersubtitles/resources/language/English/strings.po @@ -21,3 +21,7 @@ msgstr "" msgctxt "#32502" msgid "Manual search not supported" msgstr "" + +msgctxt "#32503" +msgid "Season pack" +msgstr "" diff --git a/service.subtitles.supersubtitles/service.py b/service.subtitles.supersubtitles/service.py index 5bc7eab..94c329d 100644 --- a/service.subtitles.supersubtitles/service.py +++ b/service.subtitles.supersubtitles/service.py @@ -39,7 +39,7 @@ __temp__ = xbmc.translatePath(os.path.join(__profile__, 'temp')).decode("utf-8") BASE_URL = 'http://www.feliratok.info/index.php' TAGS = [ - 'WEB\-DL', + 'WEB-DL', 'PROPER', 'REPACK' ] @@ -186,36 +186,42 @@ def notification(id): ) -def get_showid(item): - ret = None - qparams = {'action': 'autoname', 'nyelv': '0', 'term': item['tvshow']} - datas = query_data(qparams) - if datas: - if item['year']: - year = str(item['year']) - for data in datas: - if year in data['name']: - ret = data['ID'] - break - else: - ret = datas[0]['ID'] - - if ret and '-100' in ret: - ret = None +def get_showids(item): + ret = [] + pattern = r'^(?P<term>[^\(]*)(\s+\((\w{2,3})\))?$' + match = re.search(pattern, item['tvshow'], re.I) + if match: + term = match.group('term') + qparams = {'action': 'autoname', 'nyelv': '0', 'term': term} + datas = query_data(qparams) + if datas: + if item['year']: + year = str(item['year']) + for data in datas: + if year in data['name']: + ret.append(data['ID']) + break + else: + ret = map(lambda x: x['ID'], datas) + + if '-100' in ret: + ret = [] + + ret.sort(reverse=True) return ret def convert(item): - ret = {'filename': item['fnev'], 'name': item['nev'], 'language_hun': item['language'], 'id': item['felirat'], - 'uploader': item['feltolto'], 'hearing': False, 'language_eng': lang_hun2eng(item['language'])} + ret = {'filename': item['fnev'], 'name': item['nev'].strip(), 'language_hun': item['language'], 'id': item['felirat'], + 'uploader': item['feltolto'].strip(), 'hearing': False, 'language_eng': lang_hun2eng(item['language'])} score = int(item['pontos_talalat'], 2) ret['score'] = score ret['rating'] = str(score * 5 / 7) ret['sync'] = score >= 6 ret['flag'] = xbmc.convertLanguage(ret['language_eng'], xbmc.ISO_639_1) - ret['seasonpack'] = bool(item['evadpakk']) + ret['seasonpack'] = item['evadpakk'] == '1' return ret @@ -239,21 +245,21 @@ def remove_duplications(items): return ret.values() -def search_subtitles(item): - if not item['season'] and not item['episode']: - debuglog("No season or episode info found for %s" % item['tvshow']) - return None +def convert_and_filter(items, episode): + data = filter(lambda x: int(x['ep']) == int(item['episode']) or x['evadpakk'] == '1', items) + data = map(convert, data) + data = filter(lambda x: x['language_eng'] in item['languages'], data) + data = remove_duplications(data) + return data - showid = get_showid(item) - if not showid: - debuglog("No id found for %s" % item['tvshow']) - return None - qparams = {'action': 'xbmc', 'sid': showid, 'ev': item['season'], 'rtol': item['episode']}; +def search_subtitles_for_show(item, showid): + #qparams = {'action': 'xbmc', 'sid': showid, 'ev': item['season'], 'rtol': item['episode']}; + qparams = {'action': 'xbmc', 'sid': showid, 'ev': item['season']} set_param_if_filename_contains(item, qparams, 'relj', TAGS) set_param_if_filename_contains(item, qparams, 'relf', QUALITIES) - set_param_if_filename_contains(item, qparams, 'relr', RELEASERS) + releaser = set_param_if_filename_contains(item, qparams, 'relr', RELEASERS) data = query_data(qparams) @@ -265,15 +271,31 @@ def search_subtitles(item): if type(data) is dict: data = data.values() - searchlist = [] - for st in data: - converted = convert(st) - if converted['language_eng'] in item['languages']: - searchlist.append(converted) + searchlist = convert_and_filter(data, item['episode']) + + searchlist.sort(key=lambda x: (x['score'], x['language_eng'] == item['preferredlanguage'], x['language_eng'], + releaser.lower() in x['filename'].lower() if releaser else x['filename']), + reverse=True) + + return searchlist + + +def search_subtitles(item): + if not item['season'] and not item['episode']: + debuglog("No season or episode info found for %s" % item['tvshow']) + return None - searchlist = remove_duplications(searchlist) + showids = get_showids(item) + if not showids: + debuglog("No ids found for %s" % item['tvshow']) + return None + + searchlist = [] + for showid in showids: + subtitles = search_subtitles_for_show(item, showid) + if subtitles: + searchlist.extend(subtitles) - searchlist.sort(key=lambda k: (k['score'], k['language_eng']), reverse=True) return searchlist @@ -287,6 +309,10 @@ def search(item): index += 1 #label="%s | %s | %s"%(it['name'], it['filename'], it['uploader']) label = "%s [%s]" % (it['filename'], it['uploader']) + + if it['seasonpack']: + label += (' (%s)' % (__language__(32503))) + listitem = xbmcgui.ListItem(label=it['language_eng'], label2=label, iconImage=it['rating'], @@ -314,11 +340,18 @@ def extract(archive): basename = os.path.basename(archive).replace('.', '_') extracted = os.path.join(__temp__, basename) xbmc.executebuiltin(('XBMC.Extract("%s","%s")' % (archive, extracted)).encode('utf-8'), True) - return extracted + + if xbmcvfs.exists(extracted): + return extracted + else: + errorlog('Error while extracting %s' % archive) + return None + def download_file(item): - localfile = os.path.join(__temp__, item['filename'].decode("utf-8")) + filename = urllib.unquote_plus(item['filename'].decode("utf-8")).replace(' ', '_') + localfile = os.path.join(__temp__, filename) qparams = {'action': 'letolt', 'felirat': item['id']} response = send_request(qparams) @@ -346,19 +379,34 @@ def is_match(item, filename): return False +def recursive_search(path): + (dirs, files) = xbmcvfs.listdir(path) + + if files: + for file in files: + file = os.path.join(path, file.decode('utf-8')) + filename = os.path.basename(file) + if is_match(item, filename): + return file + + if dirs: + for dir in dirs: + file = recursive_search(os.path.join(path, dir.decode('utf-8'))) + if file: + return file + + return None + def download(item): debuglog(item) subtitle = None downloaded = download_file(item) if is_archive(downloaded): + debuglog('Downloaded file is an archive') extracted = extract(downloaded) - for file in xbmcvfs.listdir(extracted)[1]: - file = os.path.join(extracted, file.decode('utf-8')) - filename = os.path.basename(file) - if is_match(item, filename): - subtitle = file - break + if extracted: + subtitle = recursive_search(extracted) else: subtitle = downloaded @@ -448,10 +496,9 @@ params = get_params() debuglog(params) if params['action'] == 'search': - debuglog("action 'search' called") item = {'temp': False, 'rar': False, 'stack': False, 'year': xbmc.getInfoLabel("VideoPlayer.Year"), 'title': normalize_string(xbmc.getInfoLabel("VideoPlayer.OriginalTitle")), - 'languages': []} + 'languages': [], 'preferredlanguage': params.get('preferredlanguage')} for lang in urllib.unquote(params['languages']).decode('utf-8').split(","): item['languages'].append(lang) ----------------------------------------------------------------------- Summary of changes: service.subtitles.supersubtitles/addon.xml | 2 +- service.subtitles.supersubtitles/changelog.txt | 11 ++ .../resources/language/English/strings.po | 4 + service.subtitles.supersubtitles/service.py | 141 +++++++++++++------- 4 files changed, 110 insertions(+), 48 deletions(-) hooks/post-receive -- Scripts ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Xbmc-addons mailing list Xbmc-addons@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/xbmc-addons