Skip to content

Commit 6f9d69e

Browse files
maskaravivekneslihanturan
authored andcommitted
Use data client for peer review calls (#2937)
* Use data client for peer review calls * With java docs * Optimise API calls and fix tests
1 parent 51e2feb commit 6f9d69e

File tree

7 files changed

+205
-168
lines changed

7 files changed

+205
-168
lines changed

app/src/main/java/fr/free/nrw/commons/di/CommonsApplicationModule.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@
33
import android.app.Activity;
44
import android.content.ContentProviderClient;
55
import android.content.Context;
6-
import androidx.collection.LruCache;
76
import android.view.inputmethod.InputMethodManager;
87

98
import com.google.gson.Gson;
109

10+
import org.wikipedia.dataclient.WikiSite;
11+
1112
import java.util.ArrayList;
1213
import java.util.HashMap;
1314
import java.util.List;
@@ -16,6 +17,7 @@
1617
import javax.inject.Named;
1718
import javax.inject.Singleton;
1819

20+
import androidx.collection.LruCache;
1921
import dagger.Module;
2022
import dagger.Provides;
2123
import fr.free.nrw.commons.BuildConfig;
@@ -24,7 +26,6 @@
2426
import fr.free.nrw.commons.auth.SessionManager;
2527
import fr.free.nrw.commons.data.DBOpenHelper;
2628
import fr.free.nrw.commons.kvstore.JsonKvStore;
27-
import fr.free.nrw.commons.kvstore.JsonKvStore;
2829
import fr.free.nrw.commons.location.LocationServiceManager;
2930
import fr.free.nrw.commons.settings.Prefs;
3031
import fr.free.nrw.commons.upload.UploadController;

app/src/main/java/fr/free/nrw/commons/di/NetworkingModule.java

+15
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
import com.google.gson.Gson;
66

7+
import org.wikipedia.dataclient.ServiceFactory;
8+
import org.wikipedia.dataclient.WikiSite;
79
import org.wikipedia.json.GsonUtil;
810

911
import java.io.File;
@@ -20,6 +22,7 @@
2022
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
2123
import fr.free.nrw.commons.mwapi.MediaWikiApi;
2224
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
25+
import fr.free.nrw.commons.review.ReviewInterface;
2326
import okhttp3.Cache;
2427
import okhttp3.HttpUrl;
2528
import okhttp3.OkHttpClient;
@@ -108,4 +111,16 @@ public Gson provideGson() {
108111
return GsonUtil.getDefaultGson();
109112
}
110113

114+
@Provides
115+
@Singleton
116+
@Named("commons-wikisite")
117+
public WikiSite provideCommonsWikiSite() {
118+
return new WikiSite(BuildConfig.COMMONS_URL);
119+
}
120+
121+
@Provides
122+
@Singleton
123+
public ReviewInterface provideReviewInterface(@Named("commons-wikisite") WikiSite commonsWikiSite) {
124+
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, ReviewInterface.class);
125+
}
111126
}

app/src/main/java/fr/free/nrw/commons/mwapi/OkHttpJsonApiClient.java

+18-91
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,28 @@
11
package fr.free.nrw.commons.mwapi;
22

33
import android.text.TextUtils;
4+
45
import androidx.annotation.NonNull;
56
import androidx.annotation.Nullable;
7+
68
import com.google.gson.Gson;
79
import com.google.gson.reflect.TypeToken;
10+
11+
import org.apache.commons.lang3.StringUtils;
12+
import org.wikipedia.dataclient.mwapi.MwQueryPage;
13+
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
14+
15+
import java.io.IOException;
16+
import java.lang.reflect.Type;
17+
import java.util.ArrayList;
18+
import java.util.Date;
19+
import java.util.List;
20+
import java.util.Locale;
21+
import java.util.Map;
22+
23+
import javax.inject.Inject;
24+
import javax.inject.Singleton;
25+
826
import fr.free.nrw.commons.Media;
927
import fr.free.nrw.commons.achievements.FeaturedImages;
1028
import fr.free.nrw.commons.achievements.FeedbackResponse;
@@ -20,25 +38,10 @@
2038
import fr.free.nrw.commons.wikidata.model.GetWikidataEditCountResponse;
2139
import io.reactivex.Observable;
2240
import io.reactivex.Single;
23-
import java.io.IOException;
24-
import java.lang.reflect.Type;
25-
import java.util.ArrayList;
26-
import java.util.Date;
27-
import java.util.List;
28-
import java.util.Locale;
29-
import java.util.Map;
30-
import java.util.Random;
31-
import javax.inject.Inject;
32-
import javax.inject.Singleton;
3341
import okhttp3.HttpUrl;
3442
import okhttp3.OkHttpClient;
3543
import okhttp3.Request;
3644
import okhttp3.Response;
37-
import org.apache.commons.lang3.StringUtils;
38-
import org.wikipedia.dataclient.mwapi.MwQueryPage;
39-
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
40-
import org.wikipedia.dataclient.mwapi.RecentChange;
41-
import org.wikipedia.util.DateUtil;
4245
import timber.log.Timber;
4346

4447
/**
@@ -418,80 +421,4 @@ private void putContinueValues(String keyword, Map<String, String> values) {
418421
private Map<String, String> getContinueValues(String keyword) {
419422
return defaultKvStore.getJson("query_continue_" + keyword, mapType);
420423
}
421-
422-
/**
423-
* Returns recent changes on commons
424-
*
425-
* @return list of recent changes made
426-
*/
427-
@Nullable
428-
public Single<List<RecentChange>> getRecentFileChanges() {
429-
final int RANDOM_SECONDS = 60 * 60 * 24 * 30;
430-
final String FILE_NAMESPACE = "6";
431-
Random r = new Random();
432-
Date now = new Date();
433-
Date startDate = new Date(now.getTime() - r.nextInt(RANDOM_SECONDS) * 1000L);
434-
435-
String rcStart = DateUtil.iso8601DateFormat(startDate);
436-
HttpUrl.Builder urlBuilder = HttpUrl
437-
.parse(commonsBaseUrl)
438-
.newBuilder()
439-
.addQueryParameter("action", "query")
440-
.addQueryParameter("format", "json")
441-
.addQueryParameter("formatversion", "2")
442-
.addQueryParameter("list", "recentchanges")
443-
.addQueryParameter("rcstart", rcStart)
444-
.addQueryParameter("rcnamespace", FILE_NAMESPACE)
445-
.addQueryParameter("rcprop", "title|ids")
446-
.addQueryParameter("rctype", "new|log")
447-
.addQueryParameter("rctoponly", "1");
448-
449-
Request request = new Request.Builder()
450-
.url(urlBuilder.build())
451-
.build();
452-
453-
return Single.fromCallable(() -> {
454-
Response response = okHttpClient.newCall(request).execute();
455-
if (response.body() != null && response.isSuccessful()) {
456-
String json = response.body().string();
457-
MwQueryResponse mwQueryPage = gson.fromJson(json, MwQueryResponse.class);
458-
return mwQueryPage.query().getRecentChanges();
459-
}
460-
return new ArrayList<>();
461-
});
462-
}
463-
464-
/**
465-
* Returns the first revision of the file
466-
*
467-
* @return Revision object
468-
*/
469-
@Nullable
470-
public Single<MwQueryPage.Revision> getFirstRevisionOfFile(String filename) {
471-
HttpUrl.Builder urlBuilder = HttpUrl
472-
.parse(commonsBaseUrl)
473-
.newBuilder()
474-
.addQueryParameter("action", "query")
475-
.addQueryParameter("format", "json")
476-
.addQueryParameter("formatversion", "2")
477-
.addQueryParameter("prop", "revisions")
478-
.addQueryParameter("rvprop", "timestamp|ids|user")
479-
.addQueryParameter("titles", filename)
480-
.addQueryParameter("rvdir", "newer")
481-
.addQueryParameter("rvlimit", "1");
482-
483-
Request request = new Request.Builder()
484-
.url(urlBuilder.build())
485-
.build();
486-
487-
return Single.fromCallable(() -> {
488-
Response response = okHttpClient.newCall(request).execute();
489-
if (response.body() != null && response.isSuccessful()) {
490-
String json = response.body().string();
491-
MwQueryResponse mwQueryPage = gson.fromJson(json, MwQueryResponse.class);
492-
return mwQueryPage.query().firstPage().revisions().get(0);
493-
}
494-
return null;
495-
});
496-
}
497424
}

app/src/main/java/fr/free/nrw/commons/review/ReviewActivity.java

+14-5
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@
1212
import android.widget.Button;
1313
import android.widget.ProgressBar;
1414
import android.widget.TextView;
15+
1516
import androidx.appcompat.widget.Toolbar;
1617
import androidx.drawerlayout.widget.DrawerLayout;
17-
import butterknife.BindView;
18-
import butterknife.ButterKnife;
18+
1919
import com.facebook.drawee.view.SimpleDraweeView;
2020
import com.google.android.material.navigation.NavigationView;
2121
import com.viewpagerindicator.CirclePageIndicator;
22+
23+
import java.util.ArrayList;
24+
25+
import javax.inject.Inject;
26+
27+
import butterknife.BindView;
28+
import butterknife.ButterKnife;
2229
import fr.free.nrw.commons.Media;
2330
import fr.free.nrw.commons.R;
2431
import fr.free.nrw.commons.auth.AuthenticatedActivity;
@@ -29,8 +36,6 @@
2936
import io.reactivex.android.schedulers.AndroidSchedulers;
3037
import io.reactivex.disposables.CompositeDisposable;
3138
import io.reactivex.schedulers.Schedulers;
32-
import java.util.ArrayList;
33-
import javax.inject.Inject;
3439

3540
public class ReviewActivity extends AuthenticatedActivity {
3641

@@ -139,7 +144,11 @@ public boolean runRandomizer() {
139144
compositeDisposable.add(reviewHelper.getRandomMedia()
140145
.subscribeOn(Schedulers.io())
141146
.observeOn(AndroidSchedulers.mainThread())
142-
.subscribe(this::updateImage));
147+
.subscribe(media -> {
148+
if (media != null) {
149+
updateImage(media);
150+
}
151+
}));
143152
return true;
144153
}
145154

0 commit comments

Comments
 (0)