mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-29 13:53:54 +01:00
Use JSON APIs for peer review (#2714)
This commit is contained in:
parent
ce3349385f
commit
7cb1f56165
14 changed files with 203 additions and 138 deletions
|
|
@ -10,7 +10,6 @@ import android.widget.ProgressBar;
|
|||
import com.google.android.material.navigation.NavigationView;
|
||||
import com.viewpagerindicator.CirclePageIndicator;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
|
@ -19,7 +18,6 @@ import androidx.appcompat.widget.Toolbar;
|
|||
import androidx.drawerlayout.widget.DrawerLayout;
|
||||
import butterknife.BindView;
|
||||
import butterknife.ButterKnife;
|
||||
import fr.free.nrw.commons.Media;
|
||||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.auth.AuthenticatedActivity;
|
||||
import fr.free.nrw.commons.mwapi.MediaResult;
|
||||
|
|
@ -28,6 +26,7 @@ import fr.free.nrw.commons.utils.MediaDataExtractorUtil;
|
|||
import fr.free.nrw.commons.utils.ViewUtil;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.CompositeDisposable;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
|
@ -47,6 +46,8 @@ public class ReviewActivity extends AuthenticatedActivity {
|
|||
Button skip_image_button;
|
||||
|
||||
@Inject MediaWikiApi mwApi;
|
||||
@Inject
|
||||
ReviewHelper reviewHelper;
|
||||
|
||||
public ReviewPagerAdapter reviewPagerAdapter;
|
||||
|
||||
|
|
@ -55,6 +56,8 @@ public class ReviewActivity extends AuthenticatedActivity {
|
|||
@BindView(R.id.reviewPagerIndicator)
|
||||
public CirclePageIndicator pagerIndicator;
|
||||
|
||||
private CompositeDisposable compositeDisposable = new CompositeDisposable();
|
||||
|
||||
|
||||
@Override
|
||||
protected void onAuthCookieAcquired(String authCookie) {
|
||||
|
|
@ -93,21 +96,11 @@ public class ReviewActivity extends AuthenticatedActivity {
|
|||
}
|
||||
|
||||
reviewPager.setCurrentItem(0);
|
||||
Observable.fromCallable(() -> {
|
||||
String result = "";
|
||||
try {
|
||||
Media media = mwApi.getRecentRandomImage();
|
||||
if (media != null) {
|
||||
result = media.getFilename();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Timber.e("Error fetching recent random image: " + e.toString());
|
||||
}
|
||||
return result;
|
||||
})
|
||||
compositeDisposable.add(reviewHelper.getRandomMedia()
|
||||
.map(media -> media.getFilename())
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(this::updateImage);
|
||||
.subscribe(this::updateImage));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -117,7 +110,7 @@ public class ReviewActivity extends AuthenticatedActivity {
|
|||
return;
|
||||
}
|
||||
reviewController.onImageRefreshed(fileName); //file name is updated
|
||||
mwApi.firstRevisionOfFile("File:" + fileName)
|
||||
reviewHelper.getFirstRevisionOfFile("File:" + fileName)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(revision -> {
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ import fr.free.nrw.commons.R;
|
|||
import fr.free.nrw.commons.auth.SessionManager;
|
||||
import fr.free.nrw.commons.delete.DeleteTask;
|
||||
import fr.free.nrw.commons.di.ApplicationlessInjection;
|
||||
import fr.free.nrw.commons.media.model.MwQueryPage;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.mwapi.Revision;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
|
|
@ -30,7 +30,7 @@ import timber.log.Timber;
|
|||
public class ReviewController {
|
||||
private String fileName;
|
||||
@Nullable
|
||||
public Revision firstRevision; // TODO: maybe we can expand this class to include fileName
|
||||
public MwQueryPage.Revision firstRevision; // TODO: maybe we can expand this class to include fileName
|
||||
protected static ArrayList<String> categories;
|
||||
public static final int NOTIFICATION_SEND_THANK = 0x102;
|
||||
public static final int NOTIFICATION_CHECK_CATEGORY = 0x101;
|
||||
|
|
@ -197,7 +197,7 @@ public class ReviewController {
|
|||
}
|
||||
publishProgress(1);
|
||||
assert firstRevision != null;
|
||||
mwApi.thank(editToken, firstRevision.revisionId);
|
||||
mwApi.thank(editToken, firstRevision.getRevid());
|
||||
publishProgress(2);
|
||||
} catch (Exception e) {
|
||||
Timber.d(e);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,42 @@
|
|||
package fr.free.nrw.commons.review;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import fr.free.nrw.commons.Media;
|
||||
import fr.free.nrw.commons.media.RecentChangesImageUtils;
|
||||
import fr.free.nrw.commons.media.model.MwQueryPage;
|
||||
import fr.free.nrw.commons.mwapi.MediaWikiApi;
|
||||
import fr.free.nrw.commons.mwapi.OkHttpJsonApiClient;
|
||||
import io.reactivex.Single;
|
||||
|
||||
@Singleton
|
||||
public class ReviewHelper {
|
||||
private static final int MAX_RANDOM_TRIES = 5;
|
||||
|
||||
private final OkHttpJsonApiClient okHttpJsonApiClient;
|
||||
private final MediaWikiApi mediaWikiApi;
|
||||
|
||||
@Inject
|
||||
public ReviewHelper(OkHttpJsonApiClient okHttpJsonApiClient, MediaWikiApi mediaWikiApi) {
|
||||
this.okHttpJsonApiClient = okHttpJsonApiClient;
|
||||
this.mediaWikiApi = mediaWikiApi;
|
||||
}
|
||||
|
||||
public Single<Media> getRandomMedia() {
|
||||
return okHttpJsonApiClient.getRecentFileChanges()
|
||||
.map(RecentChangesImageUtils::findImageInRecentChanges)
|
||||
.map(title -> {
|
||||
boolean pageExists = mediaWikiApi.pageExists("Commons:Deletion_requests/" + title);
|
||||
if (!pageExists) {
|
||||
title = title.replace("File:", "");
|
||||
return new Media(title);
|
||||
}
|
||||
throw new Exception("Page does not exist");
|
||||
}).retry(MAX_RANDOM_TRIES);
|
||||
}
|
||||
|
||||
public Single<MwQueryPage.Revision> getFirstRevisionOfFile(String fileName) {
|
||||
return okHttpJsonApiClient.getFirstRevisionOfFile(fileName);
|
||||
}
|
||||
}
|
||||
|
|
@ -16,7 +16,7 @@ import com.facebook.drawee.view.SimpleDraweeView;
|
|||
import fr.free.nrw.commons.R;
|
||||
import fr.free.nrw.commons.Utils;
|
||||
import fr.free.nrw.commons.di.CommonsDaggerSupportFragment;
|
||||
import fr.free.nrw.commons.mwapi.Revision;
|
||||
import fr.free.nrw.commons.media.model.MwQueryPage;
|
||||
|
||||
public class ReviewImageFragment extends CommonsDaggerSupportFragment {
|
||||
|
||||
|
|
@ -38,10 +38,10 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
|
|||
private Button noButton;
|
||||
|
||||
public ProgressBar progressBar;
|
||||
private Revision revision;
|
||||
private MwQueryPage.Revision revision;
|
||||
|
||||
|
||||
public void update(int position, String fileName, Revision revision) {
|
||||
public void update(int position, String fileName, MwQueryPage.Revision revision) {
|
||||
this.position = position;
|
||||
this.fileName = fileName;
|
||||
this.revision = revision;
|
||||
|
|
@ -118,7 +118,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
|
|||
break;
|
||||
case THANKS:
|
||||
question = getString(R.string.review_thanks);
|
||||
explanation = getString(R.string.review_thanks_explanation, ((ReviewActivity) getActivity()).reviewController.firstRevision.username);
|
||||
explanation = getString(R.string.review_thanks_explanation, ((ReviewActivity) getActivity()).reviewController.firstRevision.getUser());
|
||||
yesButtonText = getString(R.string.review_thanks_yes_button_text);
|
||||
noButtonText = getString(R.string.review_thanks_no_button_text);
|
||||
yesButton.setTextColor(Color.parseColor("#228b22"));
|
||||
|
|
@ -158,7 +158,7 @@ public class ReviewImageFragment extends CommonsDaggerSupportFragment {
|
|||
|
||||
private void fillImageCaption() {
|
||||
if (imageCaption != null && fileName != null && revision != null) {
|
||||
((TextView) imageCaption).setText(fileName + " is uploaded by: " + revision.username);
|
||||
((TextView) imageCaption).setText(fileName + " is uploaded by: " + revision.getUser());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import android.os.Bundle;
|
|||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
import androidx.fragment.app.FragmentStatePagerAdapter;
|
||||
import fr.free.nrw.commons.mwapi.Revision;
|
||||
import fr.free.nrw.commons.media.model.MwQueryPage;
|
||||
|
||||
public class ReviewPagerAdapter extends FragmentStatePagerAdapter {
|
||||
ReviewImageFragment[] reviewImageFragments;
|
||||
|
|
@ -26,7 +26,7 @@ public class ReviewPagerAdapter extends FragmentStatePagerAdapter {
|
|||
return reviewImageFragments.length;
|
||||
}
|
||||
|
||||
public void updateFileInformation(String fileName, Revision revision) {
|
||||
public void updateFileInformation(String fileName, MwQueryPage.Revision revision) {
|
||||
for (int i = 0; i < getCount(); i++) {
|
||||
ReviewImageFragment fragment = reviewImageFragments[i];
|
||||
fragment.update(i, fileName, revision);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue