forked from commons-app/apps-android-commons
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
With wikidata changes (commons-app#3199)
- Loading branch information
1 parent
02f5cda
commit 891d9ec
Showing
15 changed files
with
360 additions
and
84 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
3 changes: 2 additions & 1 deletion
3
app/src/main/java/fr/free/nrw/commons/OkHttpConnectionFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 53 additions & 23 deletions
76
app/src/main/java/fr/free/nrw/commons/wikidata/WikidataClient.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,40 +1,70 @@ | ||
package fr.free.nrw.commons.wikidata; | ||
|
||
import org.wikipedia.csrf.CsrfTokenClient; | ||
import org.wikipedia.dataclient.Service; | ||
import org.jetbrains.annotations.NotNull; | ||
|
||
import javax.inject.Inject; | ||
import javax.inject.Named; | ||
import javax.inject.Singleton; | ||
|
||
import fr.free.nrw.commons.wikidata.model.AddEditTagResponse; | ||
import io.reactivex.Observable; | ||
|
||
import static fr.free.nrw.commons.di.NetworkingModule.NAMED_WIKI_DATA_CSRF; | ||
import io.reactivex.ObservableSource; | ||
import okhttp3.MediaType; | ||
import okhttp3.RequestBody; | ||
|
||
@Singleton | ||
public class WikidataClient { | ||
|
||
private final Service service; | ||
private final CsrfTokenClient csrfTokenClient; | ||
|
||
private final WikidataInterface wikidataInterface; | ||
|
||
@Inject | ||
public WikidataClient(@Named("wikidata-service") Service service, | ||
@Named(NAMED_WIKI_DATA_CSRF) CsrfTokenClient csrfTokenClient) { | ||
this.service = service; | ||
this.csrfTokenClient = csrfTokenClient; | ||
public WikidataClient(WikidataInterface wikidataInterface) { | ||
this.wikidataInterface = wikidataInterface; | ||
} | ||
|
||
/** | ||
* Create wikidata claim to add P18 value | ||
* @param entityId wikidata entity ID | ||
* @param value value of the P18 edit | ||
* @return revisionID of the edit | ||
*/ | ||
Observable<Long> createClaim(String entityId, String value) { | ||
return getCsrfToken() | ||
.flatMap(csrfToken -> wikidataInterface.postCreateClaim(toRequestBody(entityId), | ||
toRequestBody("value"), | ||
toRequestBody("P18"), | ||
toRequestBody(value), | ||
toRequestBody("en"), | ||
toRequestBody(csrfToken))) | ||
.map(mwPostResponse -> mwPostResponse.getPageinfo().getLastrevid()); | ||
} | ||
|
||
/** | ||
* Converts string value to RequestBody for multipart request | ||
*/ | ||
private RequestBody toRequestBody(String value) { | ||
return RequestBody.create(MediaType.parse("text/plain"), value); | ||
} | ||
|
||
/** | ||
* Get csrf token for wikidata edit | ||
*/ | ||
@NotNull | ||
private Observable<String> getCsrfToken() { | ||
return wikidataInterface.getCsrfToken().map(mwQueryResponse -> mwQueryResponse.query().csrfToken()); | ||
} | ||
|
||
public Observable<Long> createClaim(String entityId, String property, String snaktype, String value) { | ||
try { | ||
return service.postCreateClaim(entityId, snaktype, property, value, "en", csrfTokenClient.getTokenBlocking()) | ||
.map(mwPostResponse -> { | ||
if (mwPostResponse.getSuccessVal() == 1) { | ||
return 1L; | ||
} | ||
return -1L; | ||
}); | ||
} catch (Throwable throwable) { | ||
return Observable.just(-1L); | ||
} | ||
/** | ||
* Add edit tag for a given revision ID. The app currently uses this to tag P18 edits | ||
* @param revisionId revision ID of the page edited | ||
* @param tag to be added | ||
* @param reason to be mentioned | ||
*/ | ||
ObservableSource<AddEditTagResponse> addEditTag(Long revisionId, String tag, String reason) { | ||
return getCsrfToken() | ||
.flatMap(csrfToken -> wikidataInterface.addEditTag(String.valueOf(revisionId), | ||
tag, | ||
reason, | ||
csrfToken)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.