Skip to content

Commit 13dac58

Browse files
committed
#3529 Captions/depictions are not saved to Commons - remove captions interface
1 parent 977c156 commit 13dac58

File tree

6 files changed

+66
-93
lines changed

6 files changed

+66
-93
lines changed

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

-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import fr.free.nrw.commons.upload.UploadInterface;
1919
import fr.free.nrw.commons.upload.WikiBaseInterface;
2020
import fr.free.nrw.commons.upload.depicts.DepictsInterface;
21-
import fr.free.nrw.commons.upload.mediaDetails.CaptionInterface;
2221
import fr.free.nrw.commons.wikidata.WikidataInterface;
2322
import java.io.File;
2423
import java.util.concurrent.TimeUnit;
@@ -163,12 +162,6 @@ public ReviewInterface provideReviewInterface(@Named(NAMED_COMMONS_WIKI_SITE) Wi
163162
return ServiceFactory.get(commonsWikiSite, BuildConfig.COMMONS_URL, ReviewInterface.class);
164163
}
165164

166-
@Provides
167-
@Singleton
168-
public CaptionInterface provideCaptionInterface(@Named(NAMED_WIKI_DATA_WIKI_SITE) WikiSite wikidataWikiSite) {
169-
return ServiceFactory.get(wikidataWikiSite, BuildConfig.WIKIDATA_URL, CaptionInterface.class);
170-
}
171-
172165
@Provides
173166
@Singleton
174167
public DepictsInterface provideDepictsInterface(@Named(NAMED_WIKI_DATA_WIKI_SITE) WikiSite wikidataWikiSite) {

app/src/main/java/fr/free/nrw/commons/upload/UploadMediaDetail.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ data class UploadMediaDetail constructor(
4646
*/
4747
@JvmStatic
4848
fun formatCaptions(uploadMediaDetails: List<UploadMediaDetail>) =
49-
uploadMediaDetails.associate { it.languageCode to it.captionText }
49+
uploadMediaDetails.associate { it.languageCode to it.captionText }.filter { it.value.isNotBlank() }
5050

5151
/**
5252
* Formats the list of descriptions into the format Commons requires for uploads.

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

+18-6
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
package fr.free.nrw.commons.upload;
22

3-
import androidx.annotation.NonNull;
3+
import static org.wikipedia.dataclient.Service.MW_API_PREFIX;
44

5+
import androidx.annotation.NonNull;
6+
import io.reactivex.Observable;
57
import org.wikipedia.dataclient.mwapi.MwPostResponse;
68
import org.wikipedia.dataclient.mwapi.MwQueryResponse;
7-
8-
import io.reactivex.Observable;
99
import retrofit2.http.Field;
1010
import retrofit2.http.FormUrlEncoded;
1111
import retrofit2.http.GET;
1212
import retrofit2.http.Headers;
1313
import retrofit2.http.POST;
1414
import retrofit2.http.Query;
1515

16-
import static org.wikipedia.dataclient.Service.MW_API_PREFIX;
17-
1816
/**
1917
* Retrofit calls for managing responses network calls of entity ids required for uploading depictions
2018
*/
@@ -31,4 +29,18 @@ Observable<MwPostResponse> postEditEntity(@NonNull @Field("id") String fileEntit
3129
@GET(MW_API_PREFIX + "action=query&prop=info")
3230
Observable<MwQueryResponse> getFileEntityId(@Query("titles") String fileName);
3331

34-
}
32+
/**
33+
* Upload Captions for the image when upload is successful
34+
*
35+
* @param FileEntityId enityId for the uploaded file
36+
* @param editToken editToken for the file
37+
* @param captionValue value of the caption to be uploaded
38+
*/
39+
@FormUrlEncoded
40+
@POST(MW_API_PREFIX + "action=wbsetlabel&language=en")
41+
Observable<MwPostResponse> addLabelstoWikidata(@Field("id") String FileEntityId,
42+
@Field("token") String editToken,
43+
@Field("language") String language,
44+
@Field("value") String captionValue);
45+
46+
}

app/src/main/java/fr/free/nrw/commons/upload/mediaDetails/CaptionInterface.java

-27
This file was deleted.

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

+41-23
Original file line numberDiff line numberDiff line change
@@ -9,34 +9,52 @@
99
import javax.inject.Named;
1010
import javax.inject.Singleton;
1111
import org.wikipedia.csrf.CsrfTokenClient;
12+
import org.wikipedia.dataclient.mwapi.MwPostResponse;
13+
import timber.log.Timber;
1214

1315
/**
1416
* Wikibase Client for calling WikiBase APIs
1517
*/
1618
@Singleton
1719
public class WikiBaseClient {
1820

19-
private final WikiBaseInterface wikiBaseInterface;
20-
private final CsrfTokenClient csrfTokenClient;
21-
22-
@Inject
23-
public WikiBaseClient(WikiBaseInterface wikiBaseInterface,
24-
@Named(NAMED_COMMONS_CSRF) CsrfTokenClient csrfTokenClient) {
25-
this.wikiBaseInterface = wikiBaseInterface;
26-
this.csrfTokenClient = csrfTokenClient;
27-
}
28-
29-
public Observable<Boolean> postEditEntity(String fileEntityId, String data) {
30-
try {
31-
return wikiBaseInterface.postEditEntity(fileEntityId, csrfTokenClient.getTokenBlocking(), data)
32-
.map(response -> (response.getSuccessVal() == 1));
33-
} catch (Throwable throwable) {
34-
return Observable.just(false);
35-
}
36-
}
37-
38-
public Observable<Long> getFileEntityId(UploadResult uploadResult) {
39-
return wikiBaseInterface.getFileEntityId(uploadResult.createCanonicalFileName())
40-
.map(response -> (long) (response.query().pages().get(0).pageId()));
41-
}
21+
private final WikiBaseInterface wikiBaseInterface;
22+
private final CsrfTokenClient csrfTokenClient;
23+
24+
@Inject
25+
public WikiBaseClient(WikiBaseInterface wikiBaseInterface,
26+
@Named(NAMED_COMMONS_CSRF) CsrfTokenClient csrfTokenClient) {
27+
this.wikiBaseInterface = wikiBaseInterface;
28+
this.csrfTokenClient = csrfTokenClient;
29+
}
30+
31+
public Observable<Boolean> postEditEntity(String fileEntityId, String data) {
32+
return csrfToken()
33+
.switchMap(editToken -> wikiBaseInterface.postEditEntity(fileEntityId, editToken, data)
34+
.map(response -> (response.getSuccessVal() == 1)));
35+
}
36+
37+
public Observable<Long> getFileEntityId(UploadResult uploadResult) {
38+
return wikiBaseInterface.getFileEntityId(uploadResult.createCanonicalFileName())
39+
.map(response -> (long) (response.query().pages().get(0).pageId()));
40+
}
41+
42+
public Observable<MwPostResponse> addLabelstoWikidata(Long fileEntityId,
43+
String languageCode, String captionValue) {
44+
return csrfToken()
45+
.switchMap(editToken -> wikiBaseInterface
46+
.addLabelstoWikidata(fileEntityId.toString(), editToken, languageCode, captionValue));
47+
48+
}
49+
50+
private Observable<String> csrfToken() {
51+
return Observable.fromCallable(() -> {
52+
try {
53+
return csrfTokenClient.getTokenBlocking();
54+
} catch (Throwable throwable) {
55+
Timber.e(throwable);
56+
return "";
57+
}
58+
});
59+
}
4260
}

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

+6-29
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package fr.free.nrw.commons.wikidata;
22

33
import static fr.free.nrw.commons.depictions.Media.DepictedImagesFragment.PAGE_ID_PREFIX;
4-
import static fr.free.nrw.commons.di.NetworkingModule.NAMED_COMMONS_CSRF;
54

65
import android.annotation.SuppressLint;
76
import android.content.Context;
@@ -13,7 +12,6 @@
1312
import fr.free.nrw.commons.upload.UploadResult;
1413
import fr.free.nrw.commons.upload.WikidataItem;
1514
import fr.free.nrw.commons.upload.WikidataPlace;
16-
import fr.free.nrw.commons.upload.mediaDetails.CaptionInterface;
1715
import fr.free.nrw.commons.utils.ConfigUtils;
1816
import fr.free.nrw.commons.utils.ViewUtil;
1917
import io.reactivex.Observable;
@@ -27,7 +25,6 @@
2725
import javax.inject.Named;
2826
import javax.inject.Singleton;
2927
import org.jetbrains.annotations.NotNull;
30-
import org.wikipedia.csrf.CsrfTokenClient;
3128
import org.wikipedia.dataclient.mwapi.MwPostResponse;
3229
import timber.log.Timber;
3330

@@ -45,26 +42,20 @@ public class WikidataEditService {
4542
private final Context context;
4643
private final WikidataEditListener wikidataEditListener;
4744
private final JsonKvStore directKvStore;
48-
private final CaptionInterface captionInterface;
49-
private final WikiBaseClient wikiBaseClient;
45+
private final WikiBaseClient wikiBaseClient;
5046
private final WikidataClient wikidataClient;
51-
private final CsrfTokenClient csrfTokenClient;
5247

53-
@Inject
48+
@Inject
5449
public WikidataEditService(final Context context,
5550
final WikidataEditListener wikidataEditListener,
5651
@Named("default_preferences") final JsonKvStore directKvStore,
5752
final WikiBaseClient wikiBaseClient,
58-
final CaptionInterface captionInterface,
59-
final WikidataClient wikidataClient,
60-
@Named(NAMED_COMMONS_CSRF) final CsrfTokenClient csrfTokenClient) {
53+
final WikidataClient wikidataClient) {
6154
this.context = context;
6255
this.wikidataEditListener = wikidataEditListener;
6356
this.directKvStore = directKvStore;
64-
this.captionInterface = captionInterface;
6557
this.wikiBaseClient = wikiBaseClient;
6658
this.wikidataClient = wikidataClient;
67-
this.csrfTokenClient = csrfTokenClient;
6859
}
6960

7061
/**
@@ -162,7 +153,7 @@ public void createCaptions(final UploadResult uploadResult, final Map<String, St
162153
.subscribe(fileEntityId -> {
163154
if (fileEntityId != null) {
164155
for (final Map.Entry<String, String> entry : captions.entrySet()) {
165-
wikidataAddLabels(fileEntityId, entry.getKey(), entry.getValue());
156+
addCaption(fileEntityId, entry.getKey(), entry.getValue());
166157
}
167158
} else {
168159
Timber.d("Error acquiring EntityId for image");
@@ -180,12 +171,9 @@ public void createCaptions(final UploadResult uploadResult, final Map<String, St
180171
*/
181172

182173
@SuppressLint("CheckResult")
183-
private void wikidataAddLabels(final Long fileEntityId, final String languageCode,
174+
private void addCaption(final Long fileEntityId, final String languageCode,
184175
final String captionValue) {
185-
186-
csrfToken()
187-
.subscribeOn(Schedulers.io())
188-
.switchMap(editToken -> captionInterface.addLabelstoWikidata(fileEntityId, editToken, languageCode, captionValue))
176+
wikiBaseClient.addLabelstoWikidata(fileEntityId, languageCode, captionValue)
189177
.subscribe(mwPostResponse -> onAddCaptionResponse(fileEntityId, mwPostResponse),
190178
throwable -> {
191179
Timber.e(throwable, "Error occurred while setting Captions");
@@ -202,17 +190,6 @@ private void onAddCaptionResponse(Long fileEntityId, MwPostResponse revisionId)
202190
}
203191
}
204192

205-
private Observable<String> csrfToken() {
206-
return Observable.fromCallable(() -> {
207-
try {
208-
return csrfTokenClient.getTokenBlocking();
209-
} catch (Throwable throwable) {
210-
throwable.printStackTrace();
211-
return null;
212-
}
213-
});
214-
}
215-
216193
public void createImageClaim(@Nullable final WikidataPlace wikidataPlace, final UploadResult imageUpload) {
217194
if (!(directKvStore.getBoolean("Picture_Has_Correct_Location", true))) {
218195
Timber.d("Image location and nearby place location mismatched, so Wikidata item won't be edited");

0 commit comments

Comments
 (0)