jenkins-bot has submitted this change and it was merged.
Change subject: Use generator:prefixsearch instead of opensearch.
......................................................................
Use generator:prefixsearch instead of opensearch.
Change-Id: I44863416a57e03f8f2053685af6e70c012c84830
---
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
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesFragment.java
M wikipedia/src/main/java/org/wikipedia/search/SearchArticlesTask.java
5 files changed, 83 insertions(+), 82 deletions(-)
Approvals:
Yuvipanda: Looks good to me, approved
jenkins-bot: Verified
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 dfcafd5..5a8b40f 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;
@@ -489,25 +489,30 @@
}
/**
- * Saving a history item needs to be in its own task, since the operation
may
- * actually block for several seconds, and should not be on the main
thread.
+ * Save the history entry and page image URL (if available) for the
specified page.
*/
- private class HistorySaveTask extends SaneAsyncTask<Void> {
+ private class PersistPageItemsTask extends SaneAsyncTask<Void> {
private final HistoryEntry entry;
- public HistorySaveTask(HistoryEntry entry) {
+ private final PageTitle title;
+ public PersistPageItemsTask(HistoryEntry entry, PageTitle title) {
super(SINGLE_THREAD);
this.entry = entry;
+ this.title = title;
}
@Override
public Void performTask() throws Throwable {
app.getPersister(HistoryEntry.class).persist(entry);
+ if (title.getThumbUrl() != null) {
+ PageImage pi = new PageImage(title, title.getThumbUrl());
+ app.getPersister(PageImage.class).upsert(pi);
+ }
return null;
}
@Override
public void onCatch(Throwable caught) {
- Log.d("HistorySaveTask", "Caught " + caught.getMessage());
+ Log.d("PersistPageItemsTask", "Caught " + caught.getMessage());
}
}
@@ -559,17 +564,8 @@
// Update our history entry, in case the Title was changed (i.e.
normalized)
curEntry = new HistoryEntry(title, curEntry.getTimestamp(),
curEntry.getSource());
- // Add history entry now
- 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();
+ // Save history entry and page image url
+ new PersistPageItemsTask(curEntry, title).execute();
}
@Override
@@ -683,8 +679,8 @@
return;
}
- // Add history entry now
- new HistorySaveTask(curEntry).execute();
+ // Save history entry and page image url
+ new PersistPageItemsTask(curEntry, title).execute();
page = result;
editHandler.setPage(page);
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/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: merged
Gerrit-Change-Id: I44863416a57e03f8f2053685af6e70c012c84830
Gerrit-PatchSet: 3
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Dbrant <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits