chiark / gitweb /
Finish TODO; Fill missing icon densities the best we can
authorDaniel Martí <mvdan@mvdan.cc>
Tue, 7 Jan 2014 11:20:24 +0000 (12:20 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Thu, 9 Jan 2014 15:23:48 +0000 (16:23 +0100)
fdroidserver/update.py

index 2c359507474adc2f241f4c7df92c1bcc36fd4a15..b274dab39b0238dd023b3bc150f04230199b9ad8 100644 (file)
@@ -451,8 +451,9 @@ def scan_apks(apps, apkcache, repodir, knownapks):
                     thisinfo['versioncode'])
 
             # Extract the icon file...
+            densities = get_densities()
             empty_densities = []
-            for density in get_densities():
+            for density in densities:
                 label = icon_dens_label(density)
                 if density not in thisinfo['icons_src']:
                     empty_densities.append(density)
@@ -478,7 +479,46 @@ def scan_apks(apps, apkcache, repodir, knownapks):
 
                 resize_icon(icondest, density)
 
-            # TODO: Handle empty_densities
+            last_density = None
+            # First try resizing down to not lose quality
+            for density in densities:
+                if density not in empty_densities:
+                    last_density = density
+                    continue
+                if last_density is None:
+                    continue
+                if options.verbose:
+                    print "Density %s not available, resizing down from %s" % (
+                            density, last_density)
+
+                last_iconpath = os.path.join(
+                        get_icon_dir(repodir, last_density), iconfilename)
+                iconpath = os.path.join(
+                        get_icon_dir(repodir, density), iconfilename)
+                im = Image.open(last_iconpath)
+                size = launcher_size(density)
+
+                im.thumbnail((size, size), Image.ANTIALIAS)
+                im.save(iconpath, "PNG")
+                empty_densities.remove(density)
+
+            last_density = None
+            # Then just copy from the highest resolution available
+            for density in reversed(densities):
+                if density not in empty_densities:
+                    last_density = density
+                    continue
+                if last_density is None:
+                    continue
+                if options.verbose:
+                    print "Density %s not available, copying from lower density %s" % (
+                            density, last_density)
+
+                shutil.copyfile(
+                        os.path.join(get_icon_dir(repodir, last_density), iconfilename),
+                        os.path.join(get_icon_dir(repodir, density), iconfilename))
+
+                empty_densities.remove(density)
 
             # Copy from icons-mdpi to icons since mdpi is the baseline density
             shutil.copyfile(