Brion VIBBER has uploaded a new change for review.
https://gerrit.wikimedia.org/r/95722
Change subject: Work in progress: PageQueryTask & PageImagesTask
......................................................................
Work in progress: PageQueryTask & PageImagesTask
Change-Id: I4b1432cab6762fb052b2c5e2c10c1a91226b9085
---
A wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
A wikipedia/src/main/java/org/wikimedia/wikipedia/PageQueryTask.java
2 files changed, 105 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia
refs/changes/22/95722/1
diff --git
a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
new file mode 100644
index 0000000..80ce02b
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageImagesTask.java
@@ -0,0 +1,35 @@
+package org.wikimedia.wikipedia;
+
+import android.content.Context;
+import org.json.JSONObject;
+import org.mediawiki.api.json.RequestBuilder;
+
+import java.net.URL;
+import java.util.List;
+
+public class PageImagesTask extends PageQueryTask<URL> {
+ private int thumbSize;
+
+ public PageImagesTask(Context context, Site site, List<PageTitle> titles,
int thumbSize) {
+ super(context, site, titles);
+ this.thumbSize = thumbSize;
+ }
+
+ @Override
+ public void buildQueryParams(RequestBuilder builder) {
+ builder.param("titles", joinTitles())
+ .param("prop", "pageimages")
+ .param("piprop", "thumbnail")
+ .param("pithumbsize", Integer.toString(thumbSize));
+ }
+
+ @Override
+ public URL processPage(int pageId, PageTitle pageTitle, JSONObject
pageData) throws Throwable {
+ JSONObject thumbnail = pageData.optJSONObject("thumbnail");
+ if (thumbnail == null) {
+ return null;
+ } else {
+ return new URL(pageData.getString("source"));
+ }
+ }
+}
diff --git a/wikipedia/src/main/java/org/wikimedia/wikipedia/PageQueryTask.java
b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageQueryTask.java
new file mode 100644
index 0000000..f82fbc4
--- /dev/null
+++ b/wikipedia/src/main/java/org/wikimedia/wikipedia/PageQueryTask.java
@@ -0,0 +1,70 @@
+package org.wikimedia.wikipedia;
+
+import android.content.Context;
+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 List<PageTitle> titles;
+
+ public PageQueryTask(Context context, Site site, List<PageTitle> titles) {
+ super(context, site);
+ this.titles = titles;
+ }
+
+ @Override
+ public ApiResult buildRequest(Api api) {
+ RequestBuilder builder = api.action("query").param("titles",
joinTitles());
+ buildQueryParams(builder);
+ return builder.get();
+ }
+
+ public String joinTitles() {
+ StringBuilder str = new StringBuilder();
+ boolean first = true;
+ for (PageTitle title : titles) {
+ str.append(title.getPrefixedText());
+ if (first) {
+ first = false;
+ } else {
+ str.append('|');
+ }
+ }
+ return str.toString();
+ }
+
+ @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");
+
+ // You would think you could use foreach on an Iterator, but you can't.
+ Iterator<String> keys = query.keys();
+ for (String key = keys.next(); keys.hasNext(); key = keys.next()) {
+ int pageId = Integer.parseInt(key);
+ JSONObject pageData = data.getJSONObject(key);
+ PageTitle pageTitle = processPageTitle(pageData);
+ T pageResult = processPage(pageId, pageTitle, pageData);
+ map.put(pageTitle, pageResult);
+ }
+
+ return map;
+ }
+
+ public PageTitle processPageTitle(JSONObject pageData) throws Throwable {
+ String title = pageData.getString("title");
+ return new PageTitle(null, title, getSite());
+ }
+
+ abstract public void buildQueryParams(RequestBuilder buildQueryParams);
+
+ abstract public T processPage(int pageId, PageTitle pageTitle, JSONObject
page) throws Throwable;
+}
--
To view, visit https://gerrit.wikimedia.org/r/95722
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b1432cab6762fb052b2c5e2c10c1a91226b9085
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Brion VIBBER <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits