From bd5503b4cd0be7c3c8a4bc8fbd25fb8700cbe933 Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Tue, 9 May 2017 09:48:25 +1000 Subject: [PATCH 1/2] Rename method as icons are no longer the only thing stored here. --- app/src/main/java/org/fdroid/fdroid/CleanCacheService.java | 2 +- app/src/main/java/org/fdroid/fdroid/FDroidApp.java | 2 +- app/src/main/java/org/fdroid/fdroid/Utils.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java index c61785248..0ebe62235 100644 --- a/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java +++ b/app/src/main/java/org/fdroid/fdroid/CleanCacheService.java @@ -136,7 +136,7 @@ public class CleanCacheService extends IntentService { * Delete cached icons that have not been accessed in over a year. */ private void deleteOldIcons() { - clearOldFiles(Utils.getIconsCacheDir(this), TimeUnit.DAYS.toMillis(365)); + clearOldFiles(Utils.getImageCacheDir(this), TimeUnit.DAYS.toMillis(365)); } /** diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index b28b637b8..6159a9247 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -274,7 +274,7 @@ public class FDroidApp extends Application { ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()) .imageDownloader(new ImageLoaderForUIL(getApplicationContext())) .diskCache(new LimitedAgeDiskCache( - Utils.getIconsCacheDir(this), + Utils.getImageCacheDir(this), null, new FileNameGenerator() { @Override diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index de2101a22..f3fc30fc4 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -124,9 +124,9 @@ public final class Utils { } /** - * @return the directory where cached icons are stored + * @return the directory where cached icons/feature graphics/screenshots are stored */ - public static File getIconsCacheDir(Context context) { + public static File getImageCacheDir(Context context) { File cacheDir = StorageUtils.getCacheDirectory(context.getApplicationContext(), true); return new File(cacheDir, "icons"); } From 67a29bae8fd660cbed2aedb74c87d5aa5c714b4d Mon Sep 17 00:00:00 2001 From: Peter Serwylo Date: Tue, 9 May 2017 09:49:13 +1000 Subject: [PATCH 2/2] Include an images full URL in the cache path. All feature graphics are called `featureGraphic.png`, and so our cache was presuming all feature graphics were the same image. By including the full path from the server in the cached name, we don't overwrite images any more. --- app/src/main/java/org/fdroid/fdroid/FDroidApp.java | 3 ++- .../main/java/org/fdroid/fdroid/data/SanitizedFile.java | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index 6159a9247..b0d494051 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -54,6 +54,7 @@ import org.fdroid.fdroid.compat.PRNGFixes; import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.InstalledAppProviderService; import org.fdroid.fdroid.data.Repo; +import org.fdroid.fdroid.data.SanitizedFile; import org.fdroid.fdroid.installer.InstallHistoryService; import org.fdroid.fdroid.net.ImageLoaderForUIL; import org.fdroid.fdroid.net.WifiStateChangeService; @@ -282,7 +283,7 @@ public class FDroidApp extends Application { if (TextUtils.isEmpty(imageUri)) { return "null"; } else { - return imageUri.substring(imageUri.lastIndexOf('/') + 1); + return SanitizedFile.sanitizeFileName(Uri.parse(imageUri).getPath().replaceAll("/", "-")); } } }, diff --git a/app/src/main/java/org/fdroid/fdroid/data/SanitizedFile.java b/app/src/main/java/org/fdroid/fdroid/data/SanitizedFile.java index c15acc064..5df4fb933 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/SanitizedFile.java +++ b/app/src/main/java/org/fdroid/fdroid/data/SanitizedFile.java @@ -11,13 +11,20 @@ import java.io.File; @SuppressWarnings("serial") public class SanitizedFile extends File { + /** + * Removes anything that is not an alpha numeric character, or one of "-", ".", or "_". + */ + public static String sanitizeFileName(String name) { + return name.replaceAll("[^A-Za-z0-9-._]", ""); + } + /** * The "name" argument is assumed to be a file name, _not including any path separators_. * If it is a relative path to be appended to "parent", such as "/blah/sneh.txt", then * the forward slashes will be removed and it will be assumed you meant "blahsneh.txt". */ public SanitizedFile(File parent, String name) { - super(parent, name.replaceAll("[^A-Za-z0-9-._]", "")); + super(parent, sanitizeFileName(name)); } /**