Skip to content

Commit 2d7eac8

Browse files
committed
With media client APIs migrated to retrofit
1 parent 8e35787 commit 2d7eac8

File tree

14 files changed

+107
-80
lines changed

14 files changed

+107
-80
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ dependencies {
3131
implementation 'com.jakewharton.rxbinding2:rxbinding-design:2.1.1'
3232
implementation 'com.facebook.fresco:fresco:1.13.0'
3333
implementation 'com.drewnoakes:metadata-extractor:2.11.0'
34-
implementation 'com.dmitrybrant:wikimedia-android-data-client:0.0.18'
3534
implementation 'org.apache.commons:commons-lang3:3.8.1'
35+
implementation 'com.dmitrybrant:wikimedia-android-data-client:0.0.20'
3636

3737
// UI
3838
implementation 'fr.avianey.com.viewpagerindicator:library:2.4.1.1@aar'

app/src/main/java/fr/free/nrw/commons/MediaDataExtractor.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package fr.free.nrw.commons;
22

3+
import androidx.core.text.HtmlCompat;
4+
35
import javax.inject.Inject;
46
import javax.inject.Singleton;
57

6-
import androidx.core.text.HtmlCompat;
8+
import fr.free.nrw.commons.media.MediaClient;
79
import fr.free.nrw.commons.mwapi.MediaWikiApi;
810
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
911
import io.reactivex.Single;
@@ -19,12 +21,15 @@
1921
public class MediaDataExtractor {
2022
private final MediaWikiApi mediaWikiApi;
2123
private final OkHttpJsonApiClient okHttpJsonApiClient;
24+
private final MediaClient mediaClient;
2225

2326
@Inject
2427
public MediaDataExtractor(MediaWikiApi mwApi,
25-
OkHttpJsonApiClient okHttpJsonApiClient) {
28+
OkHttpJsonApiClient okHttpJsonApiClient,
29+
MediaClient mediaClient) {
2630
this.okHttpJsonApiClient = okHttpJsonApiClient;
2731
this.mediaWikiApi = mwApi;
32+
this.mediaClient = mediaClient;
2833
}
2934

3035
/**
@@ -35,7 +40,7 @@ public MediaDataExtractor(MediaWikiApi mwApi,
3540
*/
3641
public Single<Media> fetchMediaDetails(String filename) {
3742
Single<Media> mediaSingle = getMediaFromFileName(filename);
38-
Single<Boolean> pageExistsSingle = mediaWikiApi.pageExists("Commons:Deletion_requests/" + filename);
43+
Single<Boolean> pageExistsSingle = mediaClient.doesPageExist("Commons:Deletion_requests/" + filename);
3944
Single<String> discussionSingle = getDiscussion(filename);
4045
return Single.zip(mediaSingle, pageExistsSingle, discussionSingle, (media, deletionStatus, discussion) -> {
4146
media.setDiscussion(discussion);

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import dagger.Provides;
2020
import fr.free.nrw.commons.BuildConfig;
2121
import fr.free.nrw.commons.kvstore.JsonKvStore;
22+
import fr.free.nrw.commons.media.MediaInterface;
2223
import fr.free.nrw.commons.mwapi.ApacheHttpClientMediaWikiApi;
2324
import fr.free.nrw.commons.mwapi.MediaWikiApi;
2425
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
@@ -123,4 +124,10 @@ public WikiSite provideCommonsWikiSite() {
123124
public ReviewInterface provideReviewInterface(@Named("commons-wikisite") WikiSite commonsWikiSite) {
124125
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, ReviewInterface.class);
125126
}
127+
128+
@Provides
129+
@Singleton
130+
public MediaInterface provideMediaInterface(@Named("commons-wikisite") WikiSite commonsWikiSite) {
131+
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, MediaInterface.class);
132+
}
126133
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package fr.free.nrw.commons.media;
2+
3+
4+
import javax.inject.Inject;
5+
import javax.inject.Singleton;
6+
7+
import io.reactivex.Single;
8+
9+
@Singleton
10+
public class MediaClient {
11+
12+
private final MediaInterface mediaInterface;
13+
14+
@Inject
15+
public MediaClient(MediaInterface mediaInterface) {
16+
this.mediaInterface = mediaInterface;
17+
}
18+
19+
public Single<Boolean> doesPageExist(String title) {
20+
return mediaInterface.doesPageExist(title)
21+
.map(mwQueryResponse -> mwQueryResponse.query().firstPage() != null)
22+
.singleOrError();
23+
}
24+
25+
public Single<Boolean> doesFileExist(String fileSha) {
26+
return mediaInterface.doesFileExist(fileSha)
27+
.map(mwQueryResponse -> mwQueryResponse.query().firstPage().allImages().size() > 0)
28+
.singleOrError();
29+
}
30+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fr.free.nrw.commons.media;
2+
3+
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
4+
5+
import io.reactivex.Observable;
6+
import retrofit2.http.GET;
7+
import retrofit2.http.Query;
8+
9+
public interface MediaInterface {
10+
@GET("w/api.php?action=query")
11+
Observable<MwQueryResponse> doesPageExist(@Query("titles") String title);
12+
13+
@GET("w/api.php?action=query&list=allimages")
14+
Observable<MwQueryResponse> doesFileExist(@Query("aisha1") String aisha1);
15+
}

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

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
import android.net.Uri;
55
import android.text.TextUtils;
66

7+
import androidx.annotation.NonNull;
8+
import androidx.annotation.Nullable;
9+
710
import com.google.gson.Gson;
811

912
import org.apache.commons.lang3.StringUtils;
@@ -32,8 +35,6 @@
3235
import java.util.Locale;
3336
import java.util.concurrent.Callable;
3437

35-
import androidx.annotation.NonNull;
36-
import androidx.annotation.Nullable;
3738
import fr.free.nrw.commons.BuildConfig;
3839
import fr.free.nrw.commons.CommonsApplication;
3940
import fr.free.nrw.commons.R;
@@ -224,23 +225,6 @@ public String getCentralAuthToken() throws IOException {
224225
return centralAuthToken;
225226
}
226227

227-
@Override
228-
public boolean fileExistsWithName(String fileName) throws IOException {
229-
return api.action("query")
230-
.param("prop", "imageinfo")
231-
.param("titles", "File:" + fileName)
232-
.get()
233-
.getNodes("/api/query/pages/page/imageinfo").size() > 0;
234-
}
235-
236-
@Override
237-
public Single<Boolean> pageExists(String pageName) {
238-
return Single.fromCallable(() -> Double.parseDouble(api.action("query")
239-
.param("titles", pageName)
240-
.get()
241-
.getString("/api/query/pages/page/@_idx")) != -1);
242-
}
243-
244228
@Override
245229
public boolean thank(String editToken, long revision) throws IOException {
246230
CustomApiResult res = api.action("thank")
@@ -749,16 +733,6 @@ private QueryContinue getQueryContinueValues(String keyword) {
749733
return gson.fromJson(queryContinueString, QueryContinue.class);
750734
}
751735

752-
@Override
753-
public boolean existingFile(String fileSha1) throws IOException {
754-
return api.action("query")
755-
.param("format", "xml")
756-
.param("list", "allimages")
757-
.param("aisha1", fileSha1)
758-
.get()
759-
.getNodes("/api/query/allimages/img").size() > 0;
760-
}
761-
762736
@Override
763737
@NonNull
764738
public Single<UploadStash> uploadFile(

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ public interface MediaWikiApi {
3030

3131
String getCentralAuthToken() throws IOException;
3232

33-
boolean fileExistsWithName(String fileName) throws IOException;
34-
35-
Single<Boolean> pageExists(String pageName);
36-
3733
List<String> getSubCategoryList(String categoryName);
3834

3935
List<String> getParentCategoryList(String categoryName);
@@ -87,8 +83,6 @@ Single<UploadResult> uploadFileFinalize(String filename, String filekey,
8783
@Nullable
8884
String revisionsByFilename(String filename) throws IOException;
8985

90-
boolean existingFile(String fileSha1) throws IOException;
91-
9286
@NonNull
9387
LogEventResult logEvents(String user, String lastModified, String queryContinue, int limit) throws IOException;
9488

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import javax.inject.Singleton;
1414

1515
import fr.free.nrw.commons.Media;
16+
import fr.free.nrw.commons.media.MediaClient;
1617
import fr.free.nrw.commons.mwapi.MediaWikiApi;
1718
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
1819
import io.reactivex.Observable;
@@ -25,14 +26,16 @@ public class ReviewHelper {
2526

2627
private final OkHttpJsonApiClient okHttpJsonApiClient;
2728
private final MediaWikiApi mediaWikiApi;
29+
private final MediaClient mediaClient;
2830
private final ReviewInterface reviewInterface;
2931

3032
@Inject
3133
public ReviewHelper(OkHttpJsonApiClient okHttpJsonApiClient,
3234
MediaWikiApi mediaWikiApi,
33-
ReviewInterface reviewInterface) {
35+
MediaClient mediaClient, ReviewInterface reviewInterface) {
3436
this.okHttpJsonApiClient = okHttpJsonApiClient;
3537
this.mediaWikiApi = mediaWikiApi;
38+
this.mediaClient = mediaClient;
3639
this.reviewInterface = reviewInterface;
3740
}
3841

@@ -85,7 +88,7 @@ public Single<Media> getRandomMedia() {
8588
*/
8689
private Single<Media> getRandomMediaFromRecentChange(RecentChange recentChange) {
8790
return Single.just(recentChange)
88-
.flatMap(change -> mediaWikiApi.pageExists("Commons:Deletion_requests/" + change.getTitle()))
91+
.flatMap(change -> mediaClient.doesPageExist("Commons:Deletion_requests/" + change.getTitle()))
8992
.flatMap(isDeleted -> {
9093
if (isDeleted) {
9194
return Single.just(new Media(""));

app/src/main/java/fr/free/nrw/commons/upload/ImageProcessingService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import javax.inject.Inject;
1111
import javax.inject.Singleton;
1212

13+
import fr.free.nrw.commons.media.MediaClient;
1314
import fr.free.nrw.commons.mwapi.MediaWikiApi;
1415
import fr.free.nrw.commons.nearby.Place;
1516
import fr.free.nrw.commons.utils.ImageUtils;
@@ -34,18 +35,20 @@ public class ImageProcessingService {
3435
private final MediaWikiApi mwApi;
3536
private final ReadFBMD readFBMD;
3637
private final EXIFReader EXIFReader;
38+
private final MediaClient mediaClient;
3739
private final Context context;
3840

3941
@Inject
4042
public ImageProcessingService(FileUtilsWrapper fileUtilsWrapper,
4143
ImageUtilsWrapper imageUtilsWrapper,
4244
MediaWikiApi mwApi, ReadFBMD readFBMD, EXIFReader EXIFReader,
43-
Context context) {
45+
MediaClient mediaClient, Context context) {
4446
this.fileUtilsWrapper = fileUtilsWrapper;
4547
this.imageUtilsWrapper = imageUtilsWrapper;
4648
this.mwApi = mwApi;
4749
this.readFBMD = readFBMD;
4850
this.EXIFReader = EXIFReader;
51+
this.mediaClient = mediaClient;
4952
this.context = context;
5053
}
5154

@@ -128,7 +131,7 @@ private Single<Integer> validateItemTitle(UploadModel.UploadItem uploadItem) {
128131
return Single.just(EMPTY_TITLE);
129132
}
130133

131-
return Single.fromCallable(() -> mwApi.fileExistsWithName(uploadItem.getFileName()))
134+
return mediaClient.doesPageExist(uploadItem.getFileName())
132135
.map(doesFileExist -> {
133136
Timber.d("Result for valid title is %s", doesFileExist);
134137
return doesFileExist ? FILE_NAME_EXISTS : IMAGE_OK;
@@ -146,7 +149,7 @@ private Single<Integer> checkDuplicateImage(String filePath) {
146149
return Single.fromCallable(() ->
147150
fileUtilsWrapper.getFileInputStream(filePath))
148151
.map(fileUtilsWrapper::getSHA1)
149-
.map(mwApi::existingFile)
152+
.flatMap(mediaClient::doesFileExist)
150153
.map(b -> {
151154
Timber.d("Result for duplicate image %s", b);
152155
return b ? ImageUtils.IMAGE_DUPLICATE : ImageUtils.IMAGE_OK;

app/src/main/java/fr/free/nrw/commons/upload/UploadService.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
import android.graphics.BitmapFactory;
99
import android.net.Uri;
1010
import android.os.Bundle;
11+
import android.widget.Toast;
12+
1113
import androidx.core.app.NotificationCompat;
1214
import androidx.core.app.NotificationManagerCompat;
13-
import android.widget.Toast;
1415

1516
import java.io.File;
1617
import java.io.FileInputStream;
@@ -33,6 +34,7 @@
3334
import fr.free.nrw.commons.contributions.ContributionDao;
3435
import fr.free.nrw.commons.contributions.ContributionsContentProvider;
3536
import fr.free.nrw.commons.contributions.MainActivity;
37+
import fr.free.nrw.commons.media.MediaClient;
3638
import fr.free.nrw.commons.mwapi.MediaWikiApi;
3739
import fr.free.nrw.commons.wikidata.WikidataEditService;
3840
import io.reactivex.Single;
@@ -54,6 +56,8 @@ public class UploadService extends HandlerService<Contribution> {
5456
@Inject WikidataEditService wikidataEditService;
5557
@Inject SessionManager sessionManager;
5658
@Inject ContributionDao contributionDao;
59+
@Inject
60+
MediaClient mediaClient;
5761

5862
private NotificationManagerCompat notificationManager;
5963
private NotificationCompat.Builder curNotification;
@@ -337,7 +341,7 @@ private String findUniqueFilename(String fileName) throws IOException {
337341
sequenceFileName = regexMatcher.replaceAll("$1 " + sequenceNumber + "$2");
338342
}
339343
}
340-
if (!mwApi.fileExistsWithName(sequenceFileName)
344+
if (!mediaClient.doesPageExist(sequenceFileName).blockingGet()
341345
&& !unfinishedUploads.contains(sequenceFileName)) {
342346
break;
343347
}

0 commit comments

Comments
 (0)