chiark / gitweb /
Don't accept empty icons; Don't add <icon> xml element if none is present
authorDaniel Martí <mvdan@mvdan.cc>
Sat, 2 Nov 2013 21:14:32 +0000 (22:14 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Sat, 2 Nov 2013 21:14:32 +0000 (22:14 +0100)
fdroidserver/update.py

index 600c159ac4f7def409b3da8de388666da2853369..a8cd1d79622a5423e2508c5d709858bb01fdbad1 100644 (file)
@@ -296,7 +296,7 @@ def scan_apks(apps, apkcache, repodir, knownapks):
     vercode_pat = re.compile(".*versionCode='([0-9]*)'.*")
     vername_pat = re.compile(".*versionName='([^']*)'.*")
     label_pat = re.compile(".*label='(.*?)'(\n| [a-z]*?=).*")
-    icon_pat = re.compile(".*icon='([^']*)'.*")
+    icon_pat = re.compile(".*icon='([^']+?)'.*")
     sdkversion_pat = re.compile(".*'([0-9]*)'.*")
     string_pat = re.compile(".*'([^']*)'.*")
     for apkfile in glob.glob(os.path.join(repodir, '*.apk')):
@@ -344,7 +344,9 @@ def scan_apks(apps, apkcache, repodir, knownapks):
                         sys.exit(1)
                 elif line.startswith("application:"):
                     thisinfo['name'] = re.match(label_pat, line).group(1)
-                    thisinfo['iconsrc'] = re.match(icon_pat, line).group(1)
+                    match = re.match(icon_pat, line)
+                    if match:
+                        thisinfo['iconsrc'] = match.group(1)
                 elif line.startswith("sdkVersion:"):
                     thisinfo['sdkversion'] = re.match(sdkversion_pat, line).group(1)
                 elif line.startswith("native-code:"):
@@ -396,19 +398,20 @@ def scan_apks(apps, apkcache, repodir, knownapks):
             thisinfo['sig'] = output[7:].strip()
 
             # Extract the icon file...
-            apk = zipfile.ZipFile(apkfile, 'r')
-            thisinfo['icon'] = (thisinfo['id'] + '.' +
-                str(thisinfo['versioncode']) + '.png')
-            iconpath = os.path.join(icon_dir, thisinfo['icon'])
-            try:
-                iconfile = open(iconpath, 'wb')
-                iconfile.write(apk.read(thisinfo['iconsrc']))
-                iconfile.close()
-            except:
-                print "WARNING: Error retrieving icon file"
-            apk.close()
+            if 'iconsrc' in thisinfo:
+                apk = zipfile.ZipFile(apkfile, 'r')
+                thisinfo['icon'] = (thisinfo['id'] + '.' +
+                    str(thisinfo['versioncode']) + '.png')
+                iconpath = os.path.join(icon_dir, thisinfo['icon'])
+                try:
+                    iconfile = open(iconpath, 'wb')
+                    iconfile.write(apk.read(thisinfo['iconsrc']))
+                    iconfile.close()
+                except:
+                    print "WARNING: Error retrieving icon file"
+                apk.close()
 
-            resize_icon(iconpath)
+                resize_icon(iconpath)
 
             # Record in known apks, getting the added date at the same time..
             added = knownapks.recordapk(thisinfo['apkname'], thisinfo['id'])
@@ -516,7 +519,8 @@ def make_index(apps, apks, repodir, archive, categories):
             addElement('lastupdated', time.strftime('%Y-%m-%d', app['lastupdated']), doc, apel)
         addElement('name', app['Name'], doc, apel)
         addElement('summary', app['Summary'], doc, apel)
-        addElement('icon', app['icon'], doc, apel)
+        if app['icon'] is not None:
+            addElement('icon', app['icon'], doc, apel)
         def linkres(link):
             for app in apps:
                 if app['id'] == link:
@@ -785,13 +789,13 @@ def main():
         if bestver == 0:
             if app['Name'] is None:
                 app['Name'] = app['id']
-            app['icon'] = ''
+            app['icon'] = None
             if app['Disabled'] is None:
                 print "WARNING: Application " + app['id'] + " has no packages"
         else:
             if app['Name'] is None:
                 app['Name'] = bestapk['name']
-            app['icon'] = bestapk['icon']
+            app['icon'] = bestapk['icon'] if 'icon' in bestapk else None
 
     # Sort the app list by name, then the web site doesn't have to by default.
     # (we had to wait until we'd scanned the apks to do this, because mostly the
@@ -851,7 +855,8 @@ def main():
                 for app in apps:
                     if app['id'] == appid:
                         data += app['Name'] + "\t"
-                        data += app['icon'] + "\t"
+                        if app['icon'] is not None:
+                            data += app['icon'] + "\t"
                         data += app['License'] + "\n"
                         break
             f = open(os.path.join(repodirs[0], 'latestapps.dat'), 'w')