From 6fc968f7cd2d3e79e3b3df2dfdf3599bd726c2d2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Michael=20P=C3=B6hn?= Date: Wed, 9 Aug 2017 17:14:51 +0200 Subject: [PATCH] choose best apk version vor index v0 --- fdroidserver/common.py | 4 ++-- fdroidserver/index.py | 27 ++++++++++++++++++++++----- fdroidserver/update.py | 2 +- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 5914109c..94789024 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -512,8 +512,8 @@ def publishednameinfo(filename): return result -apk_release_filename = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)\.apk') -apk_release_filename_with_sigfp = re.compile('(?P[a-z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') +apk_release_filename = re.compile('(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)\.apk') +apk_release_filename_with_sigfp = re.compile('(?P[a-zA-Z0-9_\.]+)_(?P[0-9]+)_(?P[0-9a-f]{7})\.apk') def apk_parse_release_filename(apkname): diff --git a/fdroidserver/index.py b/fdroidserver/index.py index c4fb6e6b..4266fa59 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -354,6 +354,8 @@ def make_v0(apps, apks, repodir, repodict, requestsdict): root.appendChild(element) element.setAttribute('packageName', packageName) + fdroid_signed = load_sigkeys(repodir) + for appid, appdict in apps.items(): app = metadata.App(appdict) @@ -362,12 +364,27 @@ def make_v0(apps, apks, repodir, repodict, requestsdict): # Get a list of the apks for this app... apklist = [] - versionCodes = [] + apksbyversion = collections.defaultdict(lambda: []) for apk in apks: - if apk['packageName'] == appid: - if apk['versionCode'] not in versionCodes: - apklist.append(apk) - versionCodes.append(apk['versionCode']) + if apk.get('versionCode') and apk.get('packageName') == appid: + apksbyversion[apk['versionCode']].append(apk) + for versionCode, apksforver in apksbyversion.items(): + fdroidsig = fdroid_signed.get(appid, {}).get('signer') + fdroid_signed_apk = None + name_match_apk = None + for x in apksforver: + if fdroidsig and x.get('signer', None) == fdroidsig: + fdroid_signed_apk = x + if common.apk_release_filename.match(x.get('apkName', '')): + name_match_apk = x + # choose which of the available versions is most + # suiteable for index v0 + if fdroid_signed_apk: + apklist.append(fdroid_signed_apk) + elif name_match_apk: + apklist.append(name_match_apk) + else: + apklist.append(apksforver[0]) if len(apklist) == 0: continue diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 96a48b6a..c5fb4fd3 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -901,7 +901,7 @@ def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): logging.debug("Reading " + name_utf8 + " from cache") usecache = True else: - logging.debug("Ignoring stale cache data for " + name) + logging.debug("Ignoring stale cache data for " + name_utf8) if not usecache: logging.debug(_("Processing {apkfilename}").format(apkfilename=name_utf8)) -- 2.30.2