Skip to content

Commit 891d9ec

Browse files
maskaravivekashishkumar468
authored andcommitted
With wikidata changes (commons-app#3199)
1 parent 02f5cda commit 891d9ec

15 files changed

+360
-84
lines changed

app/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ android {
222222
buildConfigField "String", "IMAGE_URL_BASE", "\"https://upload.beta.wmflabs.org/wikipedia/commons\""
223223
buildConfigField "String", "HOME_URL", "\"https://commons.wikimedia.beta.wmflabs.org/wiki/\""
224224
buildConfigField "String", "COMMONS_URL", "\"https://commons.wikimedia.beta.wmflabs.org\""
225-
buildConfigField "String", "WIKIDATA_URL", "\"https://wikidata.org\""
225+
buildConfigField "String", "WIKIDATA_URL", "\"https:/www./wikidata.org\""
226226
buildConfigField "String", "MOBILE_HOME_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/wiki/\""
227227
buildConfigField "String", "SIGNUP_LANDING_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Special:CreateAccount&returnto=Main+Page&returntoquery=welcome%3Dyes\""
228228
buildConfigField "String", "SIGNUP_SUCCESS_REDIRECTION_URL", "\"https://commons.m.wikimedia.beta.wmflabs.org/w/index.php?title=Main_Page&welcome=yes\""

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

+24-17
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
package fr.free.nrw.commons;
22

3-
import static org.acra.ReportField.ANDROID_VERSION;
4-
import static org.acra.ReportField.APP_VERSION_CODE;
5-
import static org.acra.ReportField.APP_VERSION_NAME;
6-
import static org.acra.ReportField.PHONE_MODEL;
7-
import static org.acra.ReportField.STACK_TRACE;
8-
import static org.acra.ReportField.USER_COMMENT;
9-
103
import android.annotation.SuppressLint;
114
import android.app.Application;
125
import android.app.NotificationChannel;
@@ -16,12 +9,28 @@
169
import android.os.Build;
1710
import android.os.Process;
1811
import android.util.Log;
12+
1913
import androidx.annotation.NonNull;
14+
2015
import com.facebook.drawee.backends.pipeline.Fresco;
2116
import com.facebook.imagepipeline.core.ImagePipeline;
2217
import com.facebook.imagepipeline.core.ImagePipelineConfig;
2318
import com.squareup.leakcanary.LeakCanary;
2419
import com.squareup.leakcanary.RefWatcher;
20+
21+
import org.acra.ACRA;
22+
import org.acra.annotation.AcraCore;
23+
import org.acra.annotation.AcraDialog;
24+
import org.acra.annotation.AcraMailSender;
25+
import org.acra.data.StringFormat;
26+
import org.wikipedia.AppAdapter;
27+
import org.wikipedia.language.AppLanguageLookUpTable;
28+
29+
import java.io.File;
30+
31+
import javax.inject.Inject;
32+
import javax.inject.Named;
33+
2534
import fr.free.nrw.commons.auth.SessionManager;
2635
import fr.free.nrw.commons.bookmarks.locations.BookmarkLocationsDao;
2736
import fr.free.nrw.commons.bookmarks.pictures.BookmarkPicturesDao;
@@ -40,18 +49,15 @@
4049
import io.reactivex.internal.functions.Functions;
4150
import io.reactivex.plugins.RxJavaPlugins;
4251
import io.reactivex.schedulers.Schedulers;
43-
import java.io.File;
44-
import javax.inject.Inject;
45-
import javax.inject.Named;
46-
import org.acra.ACRA;
47-
import org.acra.annotation.AcraCore;
48-
import org.acra.annotation.AcraDialog;
49-
import org.acra.annotation.AcraMailSender;
50-
import org.acra.data.StringFormat;
51-
import org.wikipedia.AppAdapter;
52-
import org.wikipedia.language.AppLanguageLookUpTable;
5352
import timber.log.Timber;
5453

54+
import static org.acra.ReportField.ANDROID_VERSION;
55+
import static org.acra.ReportField.APP_VERSION_CODE;
56+
import static org.acra.ReportField.APP_VERSION_NAME;
57+
import static org.acra.ReportField.PHONE_MODEL;
58+
import static org.acra.ReportField.STACK_TRACE;
59+
import static org.acra.ReportField.USER_COMMENT;
60+
5561
@AcraCore(
5662
buildConfigClass = BuildConfig.class,
5763
resReportSendSuccessToast = R.string.crash_dialog_ok_toast,
@@ -114,6 +120,7 @@ public AppLanguageLookUpTable getLanguageLookUpTable() {
114120
@Override
115121
public void onCreate() {
116122
super.onCreate();
123+
117124
INSTANCE = this;
118125
ACRA.init(this);
119126

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package fr.free.nrw.commons;
22

3+
import androidx.annotation.NonNull;
4+
35
import org.wikipedia.dataclient.SharedPreferenceCookieManager;
46
import org.wikipedia.dataclient.okhttp.HttpStatusException;
57

68
import java.io.File;
79
import java.io.IOException;
810

9-
import androidx.annotation.NonNull;
1011
import okhttp3.Cache;
1112
import okhttp3.Interceptor;
1213
import okhttp3.OkHttpClient;

app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java

-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import fr.free.nrw.commons.contributions.ContributionsListAdapter.Callback;
3030
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
3131
import fr.free.nrw.commons.kvstore.JsonKvStore;
32-
import fr.free.nrw.commons.wikidata.WikidataClient;
3332

3433
import static android.view.View.GONE;
3534
import static android.view.View.VISIBLE;
@@ -58,8 +57,6 @@ public class ContributionsListFragment extends CommonsDaggerSupportFragment {
5857

5958
@Inject @Named("default_preferences") JsonKvStore kvStore;
6059
@Inject ContributionController controller;
61-
@Inject
62-
WikidataClient wikidataClient;
6360

6461
private Animation fab_close;
6562
private Animation fab_open;

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

+7-18
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import fr.free.nrw.commons.mwapi.UserInterface;
3232
import fr.free.nrw.commons.review.ReviewInterface;
3333
import fr.free.nrw.commons.upload.UploadInterface;
34+
import fr.free.nrw.commons.wikidata.WikidataInterface;
3435
import okhttp3.Cache;
3536
import okhttp3.HttpUrl;
3637
import okhttp3.OkHttpClient;
@@ -51,7 +52,6 @@ public class NetworkingModule {
5152
private static final String NAMED_WIKI_DATA_WIKI_SITE = "wikidata-wikisite";
5253

5354
public static final String NAMED_COMMONS_CSRF = "commons-csrf";
54-
public static final String NAMED_WIKI_DATA_CSRF = "wikidata-csrf";
5555

5656
@Provides
5757
@Singleton
@@ -97,14 +97,6 @@ public CsrfTokenClient provideCommonsCsrfTokenClient(@Named(NAMED_COMMONS_WIKI_S
9797
return new CsrfTokenClient(commonsWikiSite, commonsWikiSite);
9898
}
9999

100-
@Named(NAMED_WIKI_DATA_CSRF)
101-
@Provides
102-
@Singleton
103-
public CsrfTokenClient provideWikidataCsrfTokenClient(@Named(NAMED_COMMONS_WIKI_SITE) WikiSite commonsWikiSite,
104-
@Named(NAMED_WIKI_DATA_WIKI_SITE) WikiSite wikidataWikiSite) {
105-
return new CsrfTokenClient(wikidataWikiSite, commonsWikiSite);
106-
}
107-
108100
@Provides
109101
@Singleton
110102
public LoginClient provideLoginClient() {
@@ -200,15 +192,6 @@ public PageEditClient provideCommonsPageEditClient(@Named(NAMED_COMMONS_CSRF) Cs
200192
return new PageEditClient(csrfTokenClient, pageEditInterface, service);
201193
}
202194

203-
@Named("wikidata-page-edit")
204-
@Provides
205-
@Singleton
206-
public PageEditClient provideWikidataPageEditClient(@Named(NAMED_WIKI_DATA_CSRF) CsrfTokenClient csrfTokenClient,
207-
@Named("wikidata-page-edit-service") PageEditInterface pageEditInterface,
208-
@Named("wikidata-service") Service service) {
209-
return new PageEditClient(csrfTokenClient, pageEditInterface, service);
210-
}
211-
212195
@Provides
213196
@Singleton
214197
public MediaInterface provideMediaInterface(@Named(NAMED_COMMONS_WIKI_SITE) WikiSite commonsWikiSite) {
@@ -226,4 +209,10 @@ public CategoryInterface provideCategoryInterface(@Named(NAMED_COMMONS_WIKI_SITE
226209
public UserInterface provideUserInterface(@Named(NAMED_COMMONS_WIKI_SITE) WikiSite commonsWikiSite) {
227210
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, UserInterface.class);
228211
}
212+
213+
@Provides
214+
@Singleton
215+
public WikidataInterface provideWikidataInterface(@Named(NAMED_WIKI_DATA_WIKI_SITE) WikiSite wikiDataWikiSite) {
216+
return ServiceFactory.get(wikiDataWikiSite, BuildConfig.WIKIDATA_URL, WikidataInterface.class);
217+
}
229218
}

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

+13-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,20 @@
33
import android.annotation.SuppressLint;
44
import android.content.Context;
55
import android.net.Uri;
6+
67
import androidx.annotation.Nullable;
8+
9+
import java.util.ArrayList;
10+
import java.util.Date;
11+
import java.util.Iterator;
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.Objects;
15+
16+
import javax.inject.Inject;
17+
import javax.inject.Named;
18+
import javax.inject.Singleton;
19+
720
import fr.free.nrw.commons.CommonsApplication;
821
import fr.free.nrw.commons.Utils;
922
import fr.free.nrw.commons.auth.SessionManager;
@@ -18,15 +31,6 @@
1831
import io.reactivex.Single;
1932
import io.reactivex.disposables.CompositeDisposable;
2033
import io.reactivex.subjects.BehaviorSubject;
21-
import java.util.ArrayList;
22-
import java.util.Date;
23-
import java.util.Iterator;
24-
import java.util.List;
25-
import java.util.Map;
26-
import java.util.Objects;
27-
import javax.inject.Inject;
28-
import javax.inject.Named;
29-
import javax.inject.Singleton;
3034
import timber.log.Timber;
3135

3236
@Singleton

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

-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@ protected class NotificationUpdateProgressListener{
8787
}
8888

8989
public void onProgress(long transferred, long total) {
90-
Timber.d("Uploaded %d of %d", transferred, total);
9190
if (!notificationTitleChanged) {
9291
curNotification.setContentTitle(notificationProgressTitle);
9392
notificationTitleChanged = true;
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,70 @@
11
package fr.free.nrw.commons.wikidata;
22

3-
import org.wikipedia.csrf.CsrfTokenClient;
4-
import org.wikipedia.dataclient.Service;
3+
import org.jetbrains.annotations.NotNull;
54

65
import javax.inject.Inject;
7-
import javax.inject.Named;
86
import javax.inject.Singleton;
97

8+
import fr.free.nrw.commons.wikidata.model.AddEditTagResponse;
109
import io.reactivex.Observable;
11-
12-
import static fr.free.nrw.commons.di.NetworkingModule.NAMED_WIKI_DATA_CSRF;
10+
import io.reactivex.ObservableSource;
11+
import okhttp3.MediaType;
12+
import okhttp3.RequestBody;
1313

1414
@Singleton
1515
public class WikidataClient {
1616

17-
private final Service service;
18-
private final CsrfTokenClient csrfTokenClient;
17+
18+
private final WikidataInterface wikidataInterface;
1919

2020
@Inject
21-
public WikidataClient(@Named("wikidata-service") Service service,
22-
@Named(NAMED_WIKI_DATA_CSRF) CsrfTokenClient csrfTokenClient) {
23-
this.service = service;
24-
this.csrfTokenClient = csrfTokenClient;
21+
public WikidataClient(WikidataInterface wikidataInterface) {
22+
this.wikidataInterface = wikidataInterface;
23+
}
24+
25+
/**
26+
* Create wikidata claim to add P18 value
27+
* @param entityId wikidata entity ID
28+
* @param value value of the P18 edit
29+
* @return revisionID of the edit
30+
*/
31+
Observable<Long> createClaim(String entityId, String value) {
32+
return getCsrfToken()
33+
.flatMap(csrfToken -> wikidataInterface.postCreateClaim(toRequestBody(entityId),
34+
toRequestBody("value"),
35+
toRequestBody("P18"),
36+
toRequestBody(value),
37+
toRequestBody("en"),
38+
toRequestBody(csrfToken)))
39+
.map(mwPostResponse -> mwPostResponse.getPageinfo().getLastrevid());
40+
}
41+
42+
/**
43+
* Converts string value to RequestBody for multipart request
44+
*/
45+
private RequestBody toRequestBody(String value) {
46+
return RequestBody.create(MediaType.parse("text/plain"), value);
47+
}
48+
49+
/**
50+
* Get csrf token for wikidata edit
51+
*/
52+
@NotNull
53+
private Observable<String> getCsrfToken() {
54+
return wikidataInterface.getCsrfToken().map(mwQueryResponse -> mwQueryResponse.query().csrfToken());
2555
}
2656

27-
public Observable<Long> createClaim(String entityId, String property, String snaktype, String value) {
28-
try {
29-
return service.postCreateClaim(entityId, snaktype, property, value, "en", csrfTokenClient.getTokenBlocking())
30-
.map(mwPostResponse -> {
31-
if (mwPostResponse.getSuccessVal() == 1) {
32-
return 1L;
33-
}
34-
return -1L;
35-
});
36-
} catch (Throwable throwable) {
37-
return Observable.just(-1L);
38-
}
57+
/**
58+
* Add edit tag for a given revision ID. The app currently uses this to tag P18 edits
59+
* @param revisionId revision ID of the page edited
60+
* @param tag to be added
61+
* @param reason to be mentioned
62+
*/
63+
ObservableSource<AddEditTagResponse> addEditTag(Long revisionId, String tag, String reason) {
64+
return getCsrfToken()
65+
.flatMap(csrfToken -> wikidataInterface.addEditTag(String.valueOf(revisionId),
66+
tag,
67+
reason,
68+
csrfToken));
3969
}
4070
}

app/src/main/java/fr/free/nrw/commons/wikidata/WikidataEditService.java

+7-11
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import javax.inject.Singleton;
1111

1212
import fr.free.nrw.commons.R;
13-
import fr.free.nrw.commons.actions.PageEditClient;
1413
import fr.free.nrw.commons.kvstore.JsonKvStore;
1514
import fr.free.nrw.commons.utils.ViewUtil;
1615
import io.reactivex.android.schedulers.AndroidSchedulers;
@@ -32,19 +31,16 @@ public class WikidataEditService {
3231
private final WikidataEditListener wikidataEditListener;
3332
private final JsonKvStore directKvStore;
3433
private final WikidataClient wikidataClient;
35-
private final PageEditClient wikiDataPageEditClient;
3634

3735
@Inject
38-
public WikidataEditService(Context context,
39-
WikidataEditListener wikidataEditListener,
40-
@Named("default_preferences") JsonKvStore directKvStore,
41-
WikidataClient wikidataClient,
42-
@Named("wikidata-page-edit") PageEditClient wikiDataPageEditClient) {
36+
WikidataEditService(Context context,
37+
WikidataEditListener wikidataEditListener,
38+
@Named("default_preferences") JsonKvStore directKvStore,
39+
WikidataClient wikidataClient) {
4340
this.context = context;
4441
this.wikidataEditListener = wikidataEditListener;
4542
this.directKvStore = directKvStore;
4643
this.wikidataClient = wikidataClient;
47-
this.wikiDataPageEditClient = wikiDataPageEditClient;
4844
}
4945

5046
/**
@@ -85,11 +81,11 @@ private void editWikidataProperty(String wikidataEntityId, String fileName) {
8581

8682
String propertyValue = getFileName(fileName);
8783

88-
Timber.d(propertyValue);
89-
wikidataClient.createClaim(wikidataEntityId, "P18", "value", propertyValue)
84+
Timber.d("Entity id is %s and property value is %s", wikidataEntityId, propertyValue);
85+
wikidataClient.createClaim(wikidataEntityId, propertyValue)
9086
.flatMap(revisionId -> {
9187
if (revisionId != -1) {
92-
return wikiDataPageEditClient.addEditTag(revisionId, COMMONS_APP_TAG, COMMONS_APP_EDIT_REASON);
88+
return wikidataClient.addEditTag(revisionId, COMMONS_APP_TAG, COMMONS_APP_EDIT_REASON);
9389
}
9490
throw new RuntimeException("Unable to edit wikidata item");
9591
})

0 commit comments

Comments
 (0)