8000 Use data client for peer review calls by maskaravivek · Pull Request #2937 · commons-app/apps-android-commons · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@
import android.app.Activity;
import android.content.ContentProviderClient;
import android.content.Context;
import androidx.collection.LruCache;
import android.view.inputmethod.InputMethodManager;

import com.google.gson.Gson;

import org.wikipedia.dataclient.WikiSite;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
Expand All @@ -16,6 +17,7 @@
import javax.inject.Named;
import javax.inject.Singleton;

import androidx.collection.LruCache;
import dagger.Module;
import dagger.Provides;
import fr.free.nrw.commons.BuildConfig;
Expand All @@ -24,7 +26,6 @@
import fr.free.nrw.commons.auth.SessionManager;
import fr.free.nrw.commons.data.DBOpenHelper;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.kvstore.JsonKvStore;
import fr.free.nrw.commons.location.LocationServiceManager;
import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.UploadController;
Expand Down
15 changes: 15 additions & 0 deletions app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import com.google.gson.Gson;

import org.wikipedia.dataclient.ServiceFactory;
import org.wikipedia.dataclient.WikiSite;
import org.wikipedia.json.GsonUtil;

import java.io.File;
Expand All @@ -20,6 +22,7 @@
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
import fr.free.nrw.commons.mwapi.MediaWikiApi;
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
import fr.free.nrw.commons.review.ReviewInterface;
import okhttp3.Cache;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
Expand Down Expand Up @@ -108,4 +111,16 @@ public Gson provideGson() {
return GsonUtil.getDefaultGson();
}

@Provides
@Singleton
@Named("commons-wikisite")
public WikiSite provideCommonsWikiSite() {
return new WikiSite(BuildConfig.COMMONS_URL);
}

@Provides
@Singleton
public ReviewInterface provideReviewInterface(@Named("commons-wikisite") WikiSite commonsWikiSite) {
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, ReviewInterface.class);
}
}
109 changes: 18 additions & 91 deletions app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
package fr.free.nrw.commons.mwapi;

import android.text.TextUtils;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import org.apache.commons.lang3.StringUtils;
import org.wikipedia.dataclient.mwapi.MwQueryPage;
import org.wikipedia.dataclient.mwapi.MwQueryResponse;

import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.inject.Inject;
import javax.inject.Singleton;

import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.achievements.FeaturedImages;
import fr.free.nrw.commons.achievements.FeedbackResponse;
Expand All @@ -20,25 +38,10 @@
import fr.free.nrw.commons.wikidata.model.GetWikidataEditCountResponse;
import io.reactivex.Observable;
import io.reactivex.Single;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Random;
import javax.inject.Inject;
import javax.inject.Singleton;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.commons.lang3.StringUtils;
import org.wikipedia.dataclient.mwapi.MwQueryPage;
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
import org.wikipedia.dataclient.mwapi.RecentChange;
import org.wikipedia.util.DateUtil;
import timber.log.Timber;

/**
Expand Down Expand Up @@ -418,80 +421,4 @@ private void putContinueValues(String keyword, Map<String, String> values) {
private Map<String, String> getContinueValues(String keyword) {
return defaultKvStore.getJson("query_continue_" + keyword, mapType);
}

/**
* Returns recent changes on commons
*
* @return list of recent changes made
*/
@Nullable
public Single<List<RecentChange>> getRecentFileChanges() {
final int RANDOM_SECONDS = 60 * 60 * 24 * 30;
final String FILE_NAMESPACE = "6";
Random r = new Random();
Date now = new Date();
Date startDate = new Date(now.getTime() - r.nextInt(RANDOM_SECONDS) * 1000L);

String rcStart = DateUtil.iso8601DateFormat(startDate);
HttpUrl.Builder urlBuilder = HttpUrl
.parse(commonsBaseUrl)
.newBuilder()
.addQueryParameter("action", "query")
.addQueryParameter("format", "json")
.addQueryParameter("formatversion", "2")
.addQueryParameter("list", "recentchanges")
.addQueryParameter("rcstart", rcStart)
.addQueryParameter("rcnamespace", FILE_NAMESPACE)
.addQueryParameter("rcprop", "title|ids")
.addQueryParameter("rctype", "new|log")
.addQueryParameter("rctoponly", "1");

Request request = new Request.Builder()
.url(urlBuilder.build())
.build();

return Single.fromCallable(() -> {
Response response = okHttpClient.newCall(request).execute();
if (response.body() != null && response.isSuccessful()) {
String json = response.body().string();
MwQueryResponse mwQueryPage = gson.fromJson(json, MwQueryResponse.class);
return mwQueryPage.query().getRecentChanges();
}
return new ArrayList<>();
});
}

/**
* Returns the first revision of the file
*
* @return Revision object
*/
@Nullable
public Single<MwQueryPage.Revision> getFirstRevisionOfFile(String filename) {
HttpUrl.Builder urlBuilder = HttpUrl
.parse(commonsBaseUrl)
.newBuilder()
.addQueryParameter("action", "query")
.addQueryParameter("format", "json")
.addQueryParameter("formatversion", "2")
.addQueryParameter("prop", "revisions")
.addQueryParameter("rvprop", "timestamp|ids|user")
.addQueryParameter("titles", filename)
.addQueryParameter("rvdir", "newer")
.addQueryParameter("rvlimit", "1");

Request request = new Request.Builder()
.url(urlBuilder.build())
.build();

return Single.fromCallable(() -> {
Response response = okHttpClient.newCall(request).execute();
if (response.body() != null && response.isSuccessful()) {
String json = response.body().string();
MwQueryResponse mwQueryPage = gson.fromJson(json, MwQueryResponse.class);
return mwQueryPage.query().firstPage().revisions().get(0);
}
return null;
});
}
}
19 changes: 14 additions & 5 deletions app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,20 @@
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;
import butterknife.BindView;
import butterknife.ButterKnife;

import com.facebook.drawee.view.SimpleDraweeView;
import com.google.android.material.navigation.NavigationView;
import com.viewpagerindicator.CirclePageIndicator;

import java.util.ArrayList;

import javax.inject.Inject;

import butterknife.BindView;
import butterknife.ButterKnife;
import fr.free.nrw.commons.Media;
import fr.free.nrw.commons.R;
import fr.free.nrw.commons.auth.AuthenticatedActivity;
Expand All @@ -29,8 +36,6 @@
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.schedulers.Schedulers;
import java.util.ArrayList;
import javax.inject.Inject;

public class ReviewActivity extends AuthenticatedActivity {

Expand Down Expand Up @@ -139,7 +144,11 @@ public boolean runRandomizer() {
compositeDisposable.add(reviewHelper.getRandomMedia()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::updateImage));
.subscribe(media -> {
if (media != null) {
updateImage(media);
}
}));
return true;
}

Expand Down
Loading