diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/APICalls.java b/commons/src/main/java/fr/free/nrw/commons/upload/APICalls.java new file mode 100644 index 000000000..f977f96a7 --- /dev/null +++ b/commons/src/main/java/fr/free/nrw/commons/upload/APICalls.java @@ -0,0 +1,192 @@ +package fr.free.nrw.commons.upload; + +import android.content.Context; +import android.util.Log; + +import com.android.volley.Cache; +import com.android.volley.NetworkResponse; +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.HttpHeaderParser; +import com.android.volley.toolbox.JsonRequest; +import com.android.volley.toolbox.Volley; + +import com.google.gson.Gson; + + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.Collection; + +public class APICalls { + + //private static final String ENDPOINT = "https://commons.wikimedia.org/w/api.php?action=query&prop=categories|coordinates|pageprops&format=json&clshow=!hidden&coprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&codistancefrompoint=40.7127%7C-74.0059&generator=geosearch&redirects=&ggscoord=40.7127%7C-74.0059&ggsradius=10&ggslimit=5&ggsnamespace=6&ggsprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&ggsprimary=all&formatversion=2"; + private static final String ENDPOINT = "https://commons.wikimedia.org/w/api.php?action=query&prop=categories|coordinates|pageprops&format=json&clshow=!hidden&coprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&codistancefrompoint=38.11386944444445%7C13.356263888888888&generator=geosearch&redirects=&ggscoord=38.11386944444445%7C13.356263888888888&ggsradius=100&ggslimit=10&ggsnamespace=6&ggsprop=type%7Cname%7Cdim%7Ccountry%7Cregion%7Cglobe&ggsprimary=all&formatversion=2"; + private static RequestQueue REQUEST_QUEUE; + private static final Gson GSON = new Gson(); + private Context context; + + public APICalls(Context context) { + this.context = context; + } + public void request() { + JsonRequest request = new QueryRequest(ENDPOINT, + new LogResponseListener(), new LogResponseErrorListener()); + getQueue().add(request); + } + + private RequestQueue getQueue() { + return getQueue(context); + } + + private static RequestQueue getQueue(Context context) { + if (REQUEST_QUEUE == null) { + REQUEST_QUEUE = Volley.newRequestQueue(context.getApplicationContext()); + } + return REQUEST_QUEUE; + } + + private static class LogResponseListener implements Response.Listener { + private static final String TAG = LogResponseListener.class.getName(); + + @Override + public void onResponse(T response) { + Log.d(TAG, response.toString()); + } + } + + private static class LogResponseErrorListener implements Response.ErrorListener { + private static final String TAG = LogResponseErrorListener.class.getName(); + + @Override + public void onErrorResponse(VolleyError error) { + Log.e(TAG, error.toString()); + } + } + + private static class QueryRequest extends JsonRequest { + private static final String TAG = QueryRequest.class.getName(); + + public QueryRequest(String url, + Response.Listener listener, + Response.ErrorListener errorListener) { + super(Request.Method.GET, url, null, listener, errorListener); + } + + @Override + protected Response parseNetworkResponse(NetworkResponse response) { + String json = parseString(response); + //Log.d(TAG, "json=" + json); + QueryResponse queryResponse = GSON.fromJson(json, QueryResponse.class); + return Response.success(queryResponse, cacheEntry(response)); + } + + + private Cache.Entry cacheEntry(NetworkResponse response) { + return HttpHeaderParser.parseCacheHeaders(response); + } + + + private String parseString(NetworkResponse response) { + try { + return new String(response.data, HttpHeaderParser.parseCharset(response.headers)); + } catch (UnsupportedEncodingException e) { + return new String(response.data); + } + } + } + + private static class QueryResponse { + private Query query; + + @Override + public String toString() { + return "query=" + query.toString(); + } + } + + private static class Query { + private Page [] pages; + + @Override + public String toString() { + StringBuilder builder = new StringBuilder("pages="); + for (Page page : pages) { + builder.append(page.toString()); + builder.append("\n"); + //page.extractCategories(); + } + builder.replace(builder.length() - 1, builder.length(), ""); + + return builder.toString(); + } + } + + private static class Page { + private int pageid; + private int ns; + private String title; + //private ArrayList categories; + //private Category category; + + /* + public boolean categoryExists() { + if (categories != null) { + return true; + } + else { + return false; + } + } + + public void extractCategories() { + if (categoryExists()==true) { + Log.d("Cat", "categories exist"); + for (Object categoryobj : categories) { + Log.d("Cat", categoryobj.getClass().getName()); + } + } + else { + Log.d("Cat", "categories don't exist"); + } + }*/ + + + @Override + public String toString() { + + //if (categoryExists()==true) { + return "pageid=" + pageid + " ns=" + ns + " title=" + title + " categories=";// + category.toString(); + //} + //else { + // return "pageid=" + pageid + " ns=" + ns + " title=" + title; + // } + } + + } +/* + private class Category { + private Category [] categories; + private int ns; + private String title; + + public Category(Object categoryobj) { + //TODO + } + + public String toString() { + StringBuilder builder = new StringBuilder("categories="); + for (Category category: categories) { + builder.append(category.toString()); + builder.append("\n"); + } + builder.replace(builder.length() - 1, builder.length(), ""); + return builder.toString(); + } + + + }*/ +} + diff --git a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 281c0a261..d1744176d 100644 --- a/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/commons/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -184,7 +184,14 @@ public class ShareActivity String coords = imageObj.getCoords(); Log.d("Image", "Coords of image: " + coords); - Log.d("Image", "URL: " + UrlBuilder.buildUrl(coords)); + //build URL for MediaWiki API calls + String apiUrl = UrlBuilder.buildUrl(coords); + Log.d("Image", "URL: " + apiUrl); + + + //TODO: Call request() method of APICalls + APICalls apiCall = new APICalls(this); + apiCall.request(); ImageLoader.getInstance().displayImage(mediaUriString, backgroundImageView); @@ -237,8 +244,7 @@ public class ShareActivity .appendQueryParameter("ggsprimary", "all") .appendQueryParameter("formatversion", "2"); - String url = builder.build().toString(); - return url; + return builder.build().toString(); } }