Skip to content

Commit 9d8d59d

Browse files
committed
#3529 Captions/depictions are not saved to Commons - fix invoking of setlabel
1 parent 55a4d08 commit 9d8d59d

File tree

4 files changed

+39
-49
lines changed

4 files changed

+39
-49
lines changed

app/src/main/java/fr/free/nrw/commons/db/Converters.java

+4-8
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public static String listObjectToString(ArrayList<String> objectList) {
5151

5252
@TypeConverter
5353
public static ArrayList<String> stringToArrayListObject(String objectList) {
54-
return readObjectWithTypeToken(objectList);
54+
return readObjectWithTypeToken(objectList, new TypeToken<ArrayList<String>>() {});
5555
}
5656

5757
@TypeConverter
@@ -81,7 +81,7 @@ public static String listOfMapToString(ArrayList<Map<String,String>> listOfMaps)
8181

8282
@TypeConverter
8383
public static ArrayList<Map<String,String>> stringToListOfMap(String listOfMaps) {
84-
return readObjectWithTypeToken(listOfMaps);
84+
return readObjectWithTypeToken(listOfMaps, new TypeToken<ArrayList<Map<String, String>>>() {});
8585
}
8686

8787
@TypeConverter
@@ -91,7 +91,7 @@ public static String mapToString(Map<String,String> map) {
9191

9292
@TypeConverter
9393
public static Map<String,String> stringToMap(String map) {
94-
return readObjectWithTypeToken(map);
94+
return readObjectWithTypeToken(map, new TypeToken<Map<String, String>>() {});
9595
}
9696

9797
@TypeConverter
@@ -111,7 +111,7 @@ public static String depictionListToString(List<DepictedItem> depictedItems) {
111111

112112
@TypeConverter
113113
public static List<DepictedItem> stringToList(String depictedItems) {
114-
return readObjectWithTypeToken(depictedItems);
114+
return readObjectWithTypeToken(depictedItems, new TypeToken<List<DepictedItem>>() {});
115115
}
116116

117117
private static String writeObjectToString(Object object) {
@@ -122,10 +122,6 @@ private static<T> T readObjectFromString(String objectAsString, Class<T> clazz)
122122
return objectAsString == null ? null : getGson().fromJson(objectAsString, clazz);
123123
}
124124

125-
private static <T> T readObjectWithTypeToken(String objectWithTypeParam) {
126-
return readObjectWithTypeToken(objectWithTypeParam, new TypeToken<T>() {});
127-
}
128-
129125
private static <T> T readObjectWithTypeToken(String objectList, TypeToken<T> typeToken) {
130126
return objectList == null ? null : getGson().fromJson(objectList, typeToken.getType());
131127
}

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package fr.free.nrw.commons.upload
22

33
import org.wikipedia.gallery.ImageInfo
44

5-
private const val RESULT_SUCCESS = "Sucess"
5+
private const val RESULT_SUCCESS = "Success"
66

77
data class UploadResult(
88
val result: String,

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public interface CaptionInterface {
2020
*/
2121
@FormUrlEncoded
2222
@POST(MW_API_PREFIX + "action=wbsetlabel&language=en")
23-
Observable<MwPostResponse> addLabelstoWikidata(@Field("id") String FileEntityId,
23+
Observable<MwPostResponse> addLabelstoWikidata(@Field("id") Long FileEntityId,
2424
@Field("token") String editToken,
2525
@Field("language") String language,
2626
@Field("value") String captionValue);

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

+33-39
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,12 @@
1313
import fr.free.nrw.commons.upload.WikidataItem;
1414
import fr.free.nrw.commons.upload.WikidataPlace;
1515
import fr.free.nrw.commons.upload.mediaDetails.CaptionInterface;
16-
import fr.free.nrw.commons.upload.structure.depictions.DepictedItem;
1716
import fr.free.nrw.commons.utils.ConfigUtils;
1817
import fr.free.nrw.commons.utils.ViewUtil;
1918
import io.reactivex.Observable;
2019
import io.reactivex.ObservableSource;
2120
import io.reactivex.android.schedulers.AndroidSchedulers;
2221
import io.reactivex.schedulers.Schedulers;
23-
import java.util.HashMap;
2422
import java.util.Locale;
2523
import java.util.Map;
2624
import java.util.concurrent.Callable;
@@ -29,6 +27,7 @@
2927
import javax.inject.Singleton;
3028
import org.jetbrains.annotations.NotNull;
3129
import org.wikipedia.csrf.CsrfTokenClient;
30+
import org.wikipedia.dataclient.mwapi.MwPostResponse;
3231
import timber.log.Timber;
3332

3433
/**
@@ -157,12 +156,12 @@ private void showSuccessToast(final String wikiItemName) {
157156
*/
158157
@SuppressLint("CheckResult")
159158
public void createCaptions(final UploadResult uploadResult, final Map<String, String> captions) {
160-
Observable.fromCallable(() -> wikiBaseClient.getFileEntityId(uploadResult))
159+
wikiBaseClient.getFileEntityId(uploadResult)
161160
.subscribeOn(Schedulers.io())
162161
.subscribe(fileEntityId -> {
163162
if (fileEntityId != null) {
164163
for (final Map.Entry<String, String> entry : captions.entrySet()) {
165-
wikidataAddLabels(fileEntityId.toString(), entry.getKey(), entry.getValue());
164+
wikidataAddLabels(fileEntityId, entry.getKey(), entry.getValue());
166165
}
167166
} else {
168167
Timber.d("Error acquiring EntityId for image");
@@ -180,43 +179,38 @@ public void createCaptions(final UploadResult uploadResult, final Map<String, St
180179
*/
181180

182181
@SuppressLint("CheckResult")
183-
private void wikidataAddLabels(final String fileEntityId, final String languageCode, final String captionValue) {
184-
Observable.fromCallable(() -> {
185-
try {
186-
return csrfTokenClient.getTokenBlocking();
187-
} catch (Throwable throwable) {
188-
throwable.printStackTrace();
189-
return null;
190-
}
191-
})
192-
.subscribeOn(Schedulers.io())
193-
.observeOn(AndroidSchedulers.mainThread())
194-
.subscribe(editToken -> {
195-
if (editToken != null) {
196-
Observable.fromCallable(() -> captionInterface.addLabelstoWikidata(fileEntityId, editToken, languageCode, captionValue))
197-
.subscribeOn(Schedulers.io())
198-
.observeOn(AndroidSchedulers.mainThread())
199-
.subscribe(revisionId ->
200-
{
201-
if (revisionId != null) {
202-
Timber.d("Caption successfully set, revision id = %s", revisionId);
203-
} else {
204-
Timber.d("Error occurred while setting Captions, fileEntityId = %s", fileEntityId);
205-
}
182+
private void wikidataAddLabels(final Long fileEntityId, final String languageCode,
183+
final String captionValue) {
184+
185+
csrfToken()
186+
.subscribeOn(Schedulers.io())
187+
.switchMap(editToken -> captionInterface.addLabelstoWikidata(fileEntityId, editToken, languageCode, captionValue))
188+
.subscribe(mwPostResponse -> onAddCaptionResponse(fileEntityId, mwPostResponse),
189+
throwable -> {
190+
Timber.e(throwable, "Error occurred while setting Captions");
191+
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
192+
}
193+
);
194+
}
206195

207-
},
208-
throwable -> {
209-
Timber.e(throwable, "Error occurred while setting Captions");
210-
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
211-
});
212-
}else {
213-
Timber.d("Error acquiring EntityId for image");
214-
}
215-
}, throwable -> {
216-
Timber.e(throwable, "Error occurred while getting EntityID for the File");
217-
ViewUtil.showLongToast(context, context.getString(R.string.wikidata_edit_failure));
218-
});
196+
private void onAddCaptionResponse(Long fileEntityId, MwPostResponse revisionId) {
197+
if (revisionId != null) {
198+
Timber.d("Caption successfully set, revision id = %s", revisionId);
199+
} else {
200+
Timber.d("Error occurred while setting Captions, fileEntityId = %s", fileEntityId);
219201
}
202+
}
203+
204+
private Observable<String> csrfToken() {
205+
return Observable.fromCallable(() -> {
206+
try {
207+
return csrfTokenClient.getTokenBlocking();
208+
} catch (Throwable throwable) {
209+
throwable.printStackTrace();
210+
return null;
211+
}
212+
});
213+
}
220214

221215
public void createImageClaim(@Nullable final WikidataPlace wikidataPlace, final UploadResult imageUpload) {
222216
if (!(directKvStore.getBoolean("Picture_Has_Correct_Location", true))) {

0 commit comments

Comments
 (0)