From 994610c516f7720d898d4b74ddd070cae953dbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Tue, 31 Dec 2013 20:46:21 +0100 Subject: [PATCH] TODO done: Use a HashMap when updating app lists --- src/org/fdroid/fdroid/RepoXMLHandler.java | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/org/fdroid/fdroid/RepoXMLHandler.java b/src/org/fdroid/fdroid/RepoXMLHandler.java index a04a0cce8..30a07d87e 100644 --- a/src/org/fdroid/fdroid/RepoXMLHandler.java +++ b/src/org/fdroid/fdroid/RepoXMLHandler.java @@ -34,6 +34,8 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.HashMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -55,7 +57,8 @@ public class RepoXMLHandler extends DefaultHandler { // The repo we're processing. private DB.Repo repo; - private List apps; + private Map apps; + private List appsList; private DB.App curapp = null; private DB.Apk curapk = null; @@ -89,9 +92,11 @@ public class RepoXMLHandler extends DefaultHandler { private int totalAppCount; - public RepoXMLHandler(DB.Repo repo, List apps, ProgressListener listener) { + public RepoXMLHandler(DB.Repo repo, List appsList, ProgressListener listener) { this.repo = repo; - this.apps = apps; + this.apps = new HashMap(); + for (DB.App app : appsList) this.apps.put(app.id, app); + this.appsList = appsList; pubkey = null; name = null; description = null; @@ -118,18 +123,13 @@ public class RepoXMLHandler extends DefaultHandler { // If we already have this application (must be from scanning a // different repo) then just merge in the apks. - // TODO: Scanning the whole app list like this every time is - // going to be stupid if the list gets very big! - boolean merged = false; - for (DB.App app : apps) { - if (app.id.equals(curapp.id)) { - app.apks.addAll(curapp.apks); - merged = true; - break; - } + DB.App app = apps.get(curapp.id); + if (app != null) { + app.apks.addAll(curapp.apks); + } else { + appsList.add(curapp); + apps.put(curapp.id, curapp); } - if (!merged) - apps.add(curapp); curapp = null; @@ -354,7 +354,7 @@ public class RepoXMLHandler extends DefaultHandler { // value for the index that was successfully processed, or it may contain // null if none was available. public static String doUpdate(Context ctx, DB.Repo repo, - List apps, StringBuilder newetag, List keeprepos, + List appsList, StringBuilder newetag, List keeprepos, ProgressListener progressListener) { try { @@ -439,7 +439,7 @@ public class RepoXMLHandler extends DefaultHandler { SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser sp = spf.newSAXParser(); XMLReader xr = sp.getXMLReader(); - RepoXMLHandler handler = new RepoXMLHandler(repo, apps, progressListener); + RepoXMLHandler handler = new RepoXMLHandler(repo, appsList, progressListener); xr.setContentHandler(handler); File tempIndex = new File(ctx.getFilesDir() + "/tempindex.xml");