Dbrant has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/153809

Change subject: Use generator:prefixsearch instead of opensearch.
......................................................................

Use generator:prefixsearch instead of opensearch.

Change-Id: I44863416a57e03f8f2053685af6e70c012c84830
---
D wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
M wikipedia/src/main/java/org/wikipedia/PageTitle.java
M wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
D wikipedia/src/main/java/org/wikipedia/pageimages/PageImageSaveTask.java
D wikipedia/src/main/java/org/wikipedia/pageimages/PageImagesTask.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
7 files changed, 73 insertions(+), 166 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/09/153809/1

diff --git a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java 
b/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
deleted file mode 100644
index 3661e27..0000000
--- a/wikipedia/src/main/java/org/wikipedia/PageQueryTask.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.wikipedia;
-
-import android.text.TextUtils;
-import org.json.JSONObject;
-import org.mediawiki.api.json.Api;
-import org.mediawiki.api.json.ApiResult;
-import org.mediawiki.api.json.RequestBuilder;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public abstract class PageQueryTask<T> extends ApiTask<Map<PageTitle, T>> {
-    private final List<PageTitle> titles;
-    private final Site site;
-
-    public PageQueryTask(int concurrencyLevel, Api api, Site site, 
List<PageTitle> titles) {
-        super(concurrencyLevel, api);
-        this.titles = titles;
-        this.site = site;
-    }
-
-    @Override
-    public RequestBuilder buildRequest(Api api) {
-        RequestBuilder builder = api.action("query").param("titles", 
TextUtils.join("|", titles));
-        buildQueryParams(builder);
-        return builder;
-    }
-
-    @Override
-    public Map<PageTitle, T> processResult(ApiResult result) throws Throwable {
-        Map<PageTitle, T> map = new HashMap<PageTitle, T>();
-        JSONObject data = result.asObject();
-        JSONObject query = data.getJSONObject("query");
-        JSONObject pages = query.getJSONObject("pages");
-
-        // You would think you could use foreach on an Iterator, but you can't.
-        Iterator<String> keys = pages.keys();
-        while (keys.hasNext()) {
-            String key = keys.next();
-            int pageId = Integer.parseInt(key);
-            JSONObject pageData = pages.getJSONObject(key);
-            String titleString = pageData.getString("title");
-            PageTitle pageTitle = new PageTitle(null, titleString, site);
-            T pageResult = processPage(pageId, pageTitle, pageData);
-            map.put(pageTitle, pageResult);
-        }
-
-        return map;
-    }
-
-    public abstract void buildQueryParams(RequestBuilder buildQueryParams);
-
-    public abstract T processPage(int pageId, PageTitle pageTitle, JSONObject 
page) throws Throwable;
-}
diff --git a/wikipedia/src/main/java/org/wikipedia/PageTitle.java 
b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
index 96b9682..13a35d9 100644
--- a/wikipedia/src/main/java/org/wikipedia/PageTitle.java
+++ b/wikipedia/src/main/java/org/wikipedia/PageTitle.java
@@ -24,20 +24,22 @@
     private final String namespace;
     private final String text;
     private final String fragment;
+    private final String thumbUrl;
     private final Site site;
 
-    public PageTitle(final String namespace, final String text, final String 
fragment, final Site site) {
+    public PageTitle(final String namespace, final String text, final String 
fragment, final String thumbUrl, final Site site) {
         this.namespace = namespace;
         this.text = text;
         this.fragment = fragment;
+        this.thumbUrl = thumbUrl;
         this.site = site;
     }
 
     public PageTitle(final String namespace, final String text, final Site 
site) {
-        this(namespace, text, null, site);
+        this(namespace, text, null, null, site);
     }
 
-    public PageTitle(String text, final Site site) {
+    public PageTitle(String text, final Site site, String thumbUrl) {
         // FIXME: Does not handle mainspace articles with a colon in the title 
well at all
         if (TextUtils.isEmpty(text)) {
             // If empty, this refers to the main page.
@@ -66,7 +68,12 @@
             this.text = parts[0];
         }
 
+        this.thumbUrl = thumbUrl;
         this.site = site;
+    }
+
+    public PageTitle(String text, final Site site) {
+        this(text, site, null);
     }
 
     public String getNamespace() {
@@ -83,6 +90,10 @@
 
     public String getFragment() { return fragment; }
 
+    public String getThumbUrl() {
+        return thumbUrl;
+    }
+
     public String getDisplayText() {
         return getPrefixedText().replace("_", " ");
     }
@@ -98,6 +109,7 @@
             json.put("namespace", getNamespace());
             json.put("text", getText());
             json.put("fragment", getFragment());
+            json.put("thumbUrl", getThumbUrl());
             return json;
         } catch (JSONException e) {
             // This will also never happen
@@ -110,6 +122,7 @@
         this.namespace = json.optString("namespace", null);
         this.fragment = json.optString("fragment", null);
         this.text = json.optString("text", null);
+        this.thumbUrl = json.optString("thumbUrl", null);
     }
 
     private String getUriForDomain(String domain) {
@@ -210,6 +223,7 @@
         text = in.readString();
         fragment = in.readString();
         site = in.readParcelable(Site.class.getClassLoader());
+        thumbUrl = in.readString();
     }
 
     @Override
@@ -218,6 +232,7 @@
         parcel.writeString(text);
         parcel.writeString(fragment);
         parcel.writeParcelable(site, flags);
+        parcel.writeString(thumbUrl);
     }
 
     @Override
diff --git a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java 
b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
index 780f9d0..a6f88a0 100644
--- a/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/page/PageViewFragment.java
@@ -18,6 +18,7 @@
 import org.mediawiki.api.json.RequestBuilder;
 import org.wikipedia.NightModeHandler;
 import org.wikipedia.analytics.ConnectionIssueFunnel;
+import org.wikipedia.pageimages.PageImage;
 import org.wikipedia.views.ObservableWebView;
 import org.wikipedia.PageTitle;
 import org.wikipedia.QuickReturnHandler;
@@ -33,7 +34,6 @@
 import org.wikipedia.events.NewWikiPageNavigationEvent;
 import org.wikipedia.events.OverflowMenuUpdateEvent;
 import org.wikipedia.history.HistoryEntry;
-import org.wikipedia.pageimages.PageImageSaveTask;
 import org.wikipedia.savedpages.ImageUrlMap;
 import org.wikipedia.savedpages.LoadSavedPageTask;
 import org.wikipedia.savedpages.LoadSavedPageUrlMapTask;
@@ -558,13 +558,10 @@
             new HistorySaveTask(curEntry).execute();
 
             // Save image for this page title
-            new PageImageSaveTask(app, app.getAPIForSite(title.getSite()), 
title) {
-                @Override
-                public void onCatch(Throwable caught) {
-                    // Don't actually do anything.
-                    // Thumbnails are expendable
-                }
-            }.execute();
+            if (title.getThumbUrl() != null) {
+                PageImage pi = new PageImage(title, title.getThumbUrl());
+                app.getPersister(PageImage.class).upsert(pi);
+            }
         }
 
         @Override
diff --git 
a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImageSaveTask.java 
b/wikipedia/src/main/java/org/wikipedia/pageimages/PageImageSaveTask.java
deleted file mode 100644
index 3f4b1bd..0000000
--- a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImageSaveTask.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.wikipedia.pageimages;
-
-import org.mediawiki.api.json.Api;
-import org.wikipedia.PageTitle;
-import org.wikipedia.WikipediaApp;
-
-import java.util.Arrays;
-import java.util.Map;
-
-public class PageImageSaveTask extends PageImagesTask {
-    private static final int SIZE = 96;
-
-    private final WikipediaApp app;
-
-    public PageImageSaveTask(WikipediaApp app, Api api, PageTitle title) {
-        super(api, title.getSite(), Arrays.asList(new PageTitle[] {title}), 
SIZE);
-        this.app = app;
-    }
-
-    @Override
-    public void onFinish(Map<PageTitle, String> result) {
-        for (Map.Entry<PageTitle, String> item : result.entrySet()) {
-            PageImage pi = new PageImage(item.getKey(), item.getValue());
-            app.getPersister(PageImage.class).upsert(pi);
-        }
-    }
-}
diff --git 
a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagesTask.java 
b/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagesTask.java
deleted file mode 100644
index e8f44e7..0000000
--- a/wikipedia/src/main/java/org/wikipedia/pageimages/PageImagesTask.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.wikipedia.pageimages;
-
-import org.json.JSONObject;
-import org.mediawiki.api.json.Api;
-import org.mediawiki.api.json.RequestBuilder;
-import org.wikipedia.PageQueryTask;
-import org.wikipedia.PageTitle;
-import org.wikipedia.Site;
-
-import java.util.List;
-
-public class PageImagesTask extends PageQueryTask<String> {
-    private final int thumbSize;
-    private final int thumbsCount;
-
-    public PageImagesTask(Api api, Site site, List<PageTitle> titles, int 
thumbSize) {
-        super(LOW_CONCURRENCY, api, site, titles);
-        this.thumbSize = thumbSize;
-        this.thumbsCount = titles.size();
-    }
-
-    @Override
-    public void buildQueryParams(RequestBuilder builder) {
-        builder.param("prop", "pageimages")
-               .param("piprop", "thumbnail")
-               .param("pithumbsize", Integer.toString(thumbSize))
-               .param("pilimit", Integer.toString(thumbsCount));
-    }
-
-    @Override
-    public String processPage(int pageId, PageTitle pageTitle, JSONObject 
pageData) throws Throwable {
-        JSONObject thumbnail = pageData.optJSONObject("thumbnail");
-        if (thumbnail == null) {
-            return null;
-        } else {
-            return thumbnail.getString("source");
-        }
-    }
-}
diff --git 
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java 
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
index f68dbec..827315c 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
@@ -36,16 +36,13 @@
 import org.wikipedia.history.HistoryEntry;
 import org.wikipedia.page.PageActionsHandler;
 import org.wikipedia.page.PopupMenu;
-import org.wikipedia.pageimages.PageImagesTask;
 
 import java.util.List;
-import java.util.Map;
 
 public class SearchArticlesFragment extends Fragment {
     private static final int DELAY_MILLIS = 300;
     private static final int MAX_CACHE_SIZE_SEARCH_RESULTS = 4;
     private static final int MAX_CACHE_SIZE_IMAGES = 48;
-    private static final float THUMB_SIZE_DP = 48f;
     private static final int LEFT_MARGIN_BASE_DP = 10;
     private static final float INITIAL_OFFSET_WINDOW = 0.5f;
     private static final int MESSAGE_SEARCH = 1;
@@ -101,35 +98,20 @@
      */
     private void displayResults(List<PageTitle> results) {
         adapter.setResults(results);
-        
((BaseAdapter)searchResultsList.getAdapter()).notifyDataSetInvalidated();
         if (results.size() == 0) {
             searchNoResults.setVisibility(View.VISIBLE);
         } else {
             searchResultsList.setVisibility(View.VISIBLE);
-            PageImagesTask imagesTask = new PageImagesTask(
-                    app.getAPIForSite(app.getPrimarySite()),
-                    app.getPrimarySite(),
-                    results,
-                    (int)(THUMB_SIZE_DP * 
WikipediaApp.getInstance().getScreenDensity())) {
-                @Override
-                public void onFinish(Map<PageTitle, String> result) {
-                    for (Map.Entry<PageTitle, String> entry : 
result.entrySet()) {
-                        if (entry.getValue() == null) {
-                            continue;
-                        }
-                        pageImagesCache.put(entry.getKey().getPrefixedText(), 
entry.getValue());
-                    }
-                    
((BaseAdapter)searchResultsList.getAdapter()).notifyDataSetInvalidated();
-                }
 
-                @Override
-                public void onCatch(Throwable caught) {
-                    // Don't actually do anything.
-                    // Thumbnails are expendable
+            //cache page thumbnails!
+            for (PageTitle title : results) {
+                if (title.getThumbUrl() == null) {
+                    continue;
                 }
-            };
-            imagesTask.execute();
+                pageImagesCache.put(title.getPrefixedText(), 
title.getThumbUrl());
+            }
         }
+        
((BaseAdapter)searchResultsList.getAdapter()).notifyDataSetInvalidated();
     }
 
     @Override
diff --git 
a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java 
b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
index 1c6d649..3c36fb9 100644
--- a/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
+++ b/wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
@@ -1,8 +1,10 @@
 package org.wikipedia.search;
 
 import android.content.Context;
-import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 import org.mediawiki.api.json.Api;
+import org.mediawiki.api.json.ApiException;
 import org.mediawiki.api.json.ApiResult;
 import org.mediawiki.api.json.RequestBuilder;
 import org.wikipedia.ApiTask;
@@ -11,8 +13,7 @@
 import org.wikipedia.Utils;
 import org.wikipedia.WikipediaApp;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 public class SearchArticlesTask extends ApiTask<List<PageTitle>> {
     private final String prefix;
@@ -29,17 +30,51 @@
 
     @Override
     public RequestBuilder buildRequest(Api api) {
-        return api.action("opensearch").param("search", prefix).param("limit", 
"12");
+        return api.action("query")
+                .param("generator", "prefixsearch")
+                .param("gpssearch", prefix)
+                .param("gpsnamespace", "0")
+                .param("gpslimit", "12")
+                .param("prop", "pageimages")
+                .param("piprop", "thumbnail")
+                .param("pithumbsize", "48")
+                .param("pilimit", "12");
     }
 
     @Override
     public List<PageTitle> processResult(final ApiResult result) throws 
Throwable {
-        JSONArray searchResults = result.asArray().optJSONArray(1);
-
         ArrayList<PageTitle> pageTitles = new ArrayList<PageTitle>();
-        for (int i = 0; i < searchResults.length(); i++) {
-            pageTitles.add(new PageTitle(searchResults.optString(i), site));
+        JSONObject data = null;
+        try {
+            data = result.asObject();
+        } catch (ApiException e) {
+            if (e.getCause() instanceof JSONException) {
+                // the only reason for a JSONException is if the response is 
an empty array.
+                return pageTitles;
+            } else {
+                throw new RuntimeException(e);
+            }
         }
+        JSONObject query = data.optJSONObject("query");
+        JSONObject pages = query.getJSONObject("pages");
+
+        Iterator<String> keys = pages.keys();
+        while (keys.hasNext()) {
+            String key = keys.next();
+            JSONObject page = pages.getJSONObject(key);
+            String thumbUrl = null;
+            if (page.has("thumbnail")) {
+                thumbUrl = page.getJSONObject("thumbnail").getString("source");
+            }
+            pageTitles.add(new PageTitle(page.getString("title"), site, 
thumbUrl));
+        }
+
+        Collections.sort(pageTitles, new Comparator<PageTitle>(){
+            @Override
+            public int compare(PageTitle pageTitle, PageTitle pageTitle2) {
+                return 
pageTitle.getDisplayText().compareTo(pageTitle2.getDisplayText());
+            }
+        });
 
         if (WikipediaApp.isWikipediaZeroDevmodeOn()) {
             Utils.processHeadersForZero(app, result);

-- 
To view, visit https://gerrit.wikimedia.org/r/153809
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I44863416a57e03f8f2053685af6e70c012c84830
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to