Skip to content

Commit 8b9c23e

Browse files
committed
With delete helper migrated to data client
1 parent fc4a9a6 commit 8b9c23e

File tree

7 files changed

+93
-88
lines changed

7 files changed

+93
-88
lines changed

app/src/main/java/fr/free/nrw/commons/actions/PageEditClient.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,27 @@ public PageEditClient(@Named("commons-csrf") CsrfTokenClient csrfTokenClient,
2121
this.pageEditInterface = pageEditInterface;
2222
}
2323

24+
public Observable<Boolean> edit(String pageTitle, String text, String summary) {
25+
try {
26+
return pageEditInterface.postEdit(pageTitle, csrfTokenClient.getTokenBlocking(), text, summary)
27+
.map(editResponse -> editResponse.edit().editSucceeded());
28+
} catch (Throwable throwable) {
29+
return Observable.just(false);
30+
}
31+
}
32+
2433
public Observable<Boolean> appendEdit(String pageTitle, String appendText, String summary) {
2534
try {
26-
return pageEditInterface.appendEdit(pageTitle, csrfTokenClient.getTokenBlocking(), appendText, summary)
35+
return pageEditInterface.postAppendEdit(pageTitle, csrfTokenClient.getTokenBlocking(), appendText, summary)
36+
.map(editResponse -> editResponse.edit().editSucceeded());
37+
} catch (Throwable throwable) {
38+
return Observable.just(false);
39+
}
40+
}
41+
42+
public Observable<Boolean> prependEdit(String pageTitle, String prependText, String summary) {
43+
try {
44+
return pageEditInterface.postPrependEdit(pageTitle, csrfTokenClient.getTokenBlocking(), prependText, summary)
2745
.map(editResponse -> editResponse.edit().editSucceeded());
2846
} catch (Throwable throwable) {
2947
return Observable.just(false);
Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,43 @@
11
package fr.free.nrw.commons.actions;
22

3+
import androidx.annotation.NonNull;
4+
35
import org.wikipedia.edit.Edit;
46

57
import io.reactivex.Observable;
6-
import retrofit2.http.GET;
7-
import retrofit2.http.Query;
8+
import retrofit2.http.Field;
9+
import retrofit2.http.FormUrlEncoded;
10+
import retrofit2.http.Headers;
11+
import retrofit2.http.POST;
12+
13+
import static org.wikipedia.dataclient.Service.MW_API_PREFIX;
814

915
public interface PageEditInterface {
1016

11-
@GET("w/api.php?action=edit")
12-
Observable<Edit> appendEdit(@Query("title") String title,
13-
@Query("token") String token,
14-
@Query("appendtext") String appendText,
15-
@Query("summary") String summary);
17+
@FormUrlEncoded
18+
@Headers("Cache-Control: no-cache")
19+
@POST(MW_API_PREFIX + "action=edit&nocreate=")
20+
@NonNull
21+
Observable<Edit> postAppendEdit(@NonNull @Field("title") String title,
22+
@NonNull @Field("summary") String summary,
23+
@NonNull @Field("appendtext") String text,
24+
@NonNull @Field("token") String token);
25+
26+
@FormUrlEncoded
27+
@Headers("Cache-Control: no-cache")
28+
@POST(MW_API_PREFIX + "action=edit&nocreate=")
29+
@NonNull
30+
Observable<Edit> postPrependEdit(@NonNull @Field("title") String title,
31+
@NonNull @Field("summary") String summary,
32+
@NonNull @Field("prependtext") String text,
33+
@NonNull @Field("token") String token);
34+
35+
@FormUrlEncoded
36+
@Headers("Cache-Control: no-cache")
37+
@POST(MW_API_PREFIX + "action=edit&nocreate=")
38+
@NonNull
39+
Observable<Edit> postEdit(@NonNull @Field("title") String title,
40+
@NonNull @Field("summary") String summary,
41+
@NonNull @Field("text") String text,
42+
@NonNull @Field("token") String token);
1643
}

app/src/main/java/fr/free/nrw/commons/actions/ThankInterface.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import retrofit2.http.GET;
77
import retrofit2.http.Query;
88

9+
import static org.wikipedia.dataclient.Service.MW_API_PREFIX;
10+
911
public interface ThankInterface {
10-
@GET("w/api.php?action=thank")
12+
@GET(MW_API_PREFIX + "action=thank")
1113
Observable<MwQueryResponse> thank(@Query("rev") long revisionId, @Query("token") String token, @Query("source") String source);
1214
}

app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@ protected void onResume() {
212212
&& sessionManager.isUserLoggedIn()
213213
&& sessionManager.getCachedAuthCookie() != null) {
214214
applicationKvStore.putBoolean("login_skipped", false);
215-
sessionManager.revalidateAuthToken();
216215
startMainActivity();
217216
}
218217

app/src/main/java/fr/free/nrw/commons/auth/SessionManager.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
import android.os.Bundle;
99
import android.text.TextUtils;
1010

11+
import androidx.annotation.NonNull;
12+
import androidx.annotation.Nullable;
13+
1114
import org.wikipedia.login.LoginResult;
1215
import org.wikipedia.util.log.L;
1316

14-
import androidx.annotation.Nullable;
15-
1617
import javax.inject.Inject;
1718
import javax.inject.Named;
1819
import javax.inject.Singleton;
1920

20-
import androidx.annotation.NonNull;
2121
import fr.free.nrw.commons.BuildConfig;
2222
import fr.free.nrw.commons.kvstore.JsonKvStore;
2323
import fr.free.nrw.commons.mwapi.MediaWikiApi;
@@ -137,25 +137,6 @@ private AccountManager accountManager() {
137137
return AccountManager.get(context);
138138
}
139139

140-
public Boolean revalidateAuthToken() {
141-
AccountManager accountManager = AccountManager.get(context);
142-
Account curAccount = getCurrentAccount();
143-
144-
if (curAccount == null) {
145-
return false; // This should never happen
146-
}
147-
148-
accountManager.invalidateAuthToken(BuildConfig.ACCOUNT_TYPE, null);
149-
String authCookie = getAuthCookie();
150-
151-
if (authCookie == null) {
152-
return false;
153-
}
154-
155-
mediaWikiApi.setAuthCookie(authCookie);
156-
return true;
157-
}
158-
159140
public String getAuthCookie() {
160141
if (!isUserLoggedIn()) {
161142
Timber.e("User is not logged in");

app/src/main/java/fr/free/nrw/commons/delete/DeleteHelper.java

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
import android.content.Intent;
55
import android.net.Uri;
66

7+
import androidx.appcompat.app.AlertDialog;
8+
9+
import org.wikipedia.AppAdapter;
10+
711
import java.text.SimpleDateFormat;
812
import java.util.ArrayList;
913
import java.util.Calendar;
@@ -12,18 +16,15 @@
1216
import javax.inject.Inject;
1317
import javax.inject.Singleton;
1418

15-
import androidx.appcompat.app.AlertDialog;
1619
import fr.free.nrw.commons.BuildConfig;
1720
import fr.free.nrw.commons.Media;
18-
import fr.free.nrw.commons.auth.SessionManager;
19-
import fr.free.nrw.commons.mwapi.MediaWikiApi;
21+
import fr.free.nrw.commons.actions.PageEditClient;
2022
import fr.free.nrw.commons.notification.NotificationHelper;
2123
import fr.free.nrw.commons.review.ReviewActivity;
22-
import fr.free.nrw.commons.utils.ViewUtil;
2324
import fr.free.nrw.commons.review.ReviewController;
2425
import fr.free.nrw.commons.utils.ViewUtilWrapper;
26+
import io.reactivex.Observable;
2527
import io.reactivex.Single;
26-
import timber.log.Timber;
2728

2829
import static fr.free.nrw.commons.notification.NotificationHelper.NOTIFICATION_DELETE;
2930

@@ -32,19 +33,16 @@
3233
*/
3334
@Singleton
3435
public class DeleteHelper {
35-
private final MediaWikiApi mwApi;
36-
private final SessionManager sessionManager;
3736
private final NotificationHelper notificationHelper;
37+
private final PageEditClient pageEditClient;
3838
private final ViewUtilWrapper viewUtil;
3939

4040
@Inject
41-
public DeleteHelper(MediaWikiApi mwApi,
42-
SessionManager sessionManager,
43-
NotificationHelper notificationHelper,
41+
public DeleteHelper(NotificationHelper notificationHelper,
42+
PageEditClient pageEditClient,
4443
ViewUtilWrapper viewUtil) {
45-
this.mwApi = mwApi;
46-
this.sessionManager = sessionManager;
4744
this.notificationHelper = notificationHelper;
45+
this.pageEditClient = pageEditClient;
4846
this.viewUtil = viewUtil;
4947
}
5048

@@ -58,9 +56,9 @@ public DeleteHelper(MediaWikiApi mwApi,
5856
public Single<Boolean> makeDeletion(Context context, Media media, String reason) {
5957
viewUtil.showShortToast(context, "Trying to nominate " + media.getDisplayTitle() + " for deletion");
6058

61-
return Single.fromCallable(() -> delete(media, reason))
62-
.flatMap(result -> Single.fromCallable(() ->
63-
showDeletionNotification(context, media, result)));
59+
return delete(media, reason)
60+
.flatMapSingle(result -> Single.just(showDeletionNotification(context, media, result)))
61+
.firstOrError();
6462
}
6563

6664
/**
@@ -69,14 +67,8 @@ public Single<Boolean> makeDeletion(Context context, Media media, String reason)
6967
* @param reason
7068
* @return
7169
*/
72-
private boolean delete(Media media, String reason) {
73-
String editToken;
74-
String authCookie;
70+
private Observable<Boolean> delete(Media media, String reason) {
7571
String summary = "Nominating " + media.getFilename() + " for deletion.";
76-
77-
authCookie = sessionManager.getAuthCookie();
78-
mwApi.setAuthCookie(authCookie);
79-
8072
Calendar calendar = Calendar.getInstance();
8173
String fileDeleteString = "{{delete|reason=" + reason +
8274
"|subpage=" + media.getFilename() +
@@ -97,25 +89,23 @@ private boolean delete(Media media, String reason) {
9789
String userPageString = "\n{{subst:idw|" + media.getFilename() +
9890
"}} ~~~~";
9991

100-
try {
101-
editToken = mwApi.getEditToken();
102-
if (editToken.equals("+\\")) {
103-
return false;
104-
}
105-
106-
mwApi.prependEdit(editToken, fileDeleteString + "\n",
107-
media.getFilename(), summary);
108-
mwApi.edit(editToken, subpageString + "\n",
109-
"Commons:Deletion_requests/" + media.getFilename(), summary);
110-
mwApi.appendEdit(editToken, logPageString + "\n",
111-
"Commons:Deletion_requests/" + date, summary);
112-
mwApi.appendEdit(editToken, userPageString + "\n",
113-
"User_Talk:" + sessionManager.getCurrentAccount().name, summary);
114-
} catch (Exception e) {
115-
Timber.e(e);
116-
return false;
117-
}
118-
return true;
92+
return pageEditClient.prependEdit(media.getFilename(), fileDeleteString + "\n", summary)
93+
.flatMap(result -> {
94+
if (result) {
95+
return pageEditClient.edit("Commons:Deletion_requests/" + media.getFilename(), subpageString + "\n", summary);
96+
}
97+
throw new RuntimeException("Failed to nominate for deletion");
98+
}).flatMap(result -> {
99+
if (result) {
100+
return pageEditClient.appendEdit("Commons:Deletion_requests/" + date, logPageString + "\n", summary);
101+
}
102+
throw new RuntimeException("Failed to nominate for deletion");
103+
}).flatMap(result -> {
104+
if (result) {
105+
return pageEditClient.appendEdit("User_Talk:" + AppAdapter.get().getUserName(), userPageString + "\n", summary);
106+
}
107+
throw new RuntimeException("Failed to nominate for deletion");
108+
});
119109
}
120110

121111
private boolean showDeletionNotification(Context context, Media media, boolean result) {

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

Lines changed: 3 additions & 15 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;
@@ -229,20 +230,7 @@ private void uploadContribution(Contribution contribution) {
229230
contribution
230231
);
231232

232-
Single.fromCallable(() -> {
233-
if (!mwApi.validateLogin()) {
234-
// Need to revalidate!
235-
if (sessionManager.revalidateAuthToken()) {
236-
Timber.d("Successfully revalidated token!");
237-
} else {
238-
Timber.d("Unable to revalidate :(");
239-
stopForeground(true);
240-
sessionManager.forceLogin(UploadService.this);
241-
throw new RuntimeException(getString(R.string.authentication_failed));
242-
}
243-
}
244-
return "Temp_" + contribution.hashCode() + filename;
245-
}).flatMap(stashFilename -> mwApi.uploadFile(
233+
Single.fromCallable(() -> "Temp_" + contribution.hashCode() + filename).flatMap(stashFilename -> mwApi.uploadFile(
246234
stashFilename, fileInputStream, contribution.getDataLength(),
247235
localUri, contribution.getContentProviderUri(), notificationUpdater))
248236
.subscribeOn(Schedulers.io())

0 commit comments

Comments
 (0)