Show the upload count for contributions by the user

This commit is contained in:
maskara 2017-05-21 11:56:40 +02:00
parent a6ea218149
commit 82c0d24f37
8 changed files with 306 additions and 13 deletions

View file

@ -11,6 +11,7 @@ import android.database.DataSetObserver;
import android.os.Bundle;
import android.os.IBinder;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
@ -22,8 +23,11 @@ import android.view.View;
import android.widget.Adapter;
import android.widget.AdapterView;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.Locale;
import butterknife.ButterKnife;
import fr.free.nrw.commons.CommonsApplication;
@ -35,6 +39,7 @@ import fr.free.nrw.commons.hamburger.HamburgerMenuContainer;
import fr.free.nrw.commons.media.MediaDetailPagerFragment;
import fr.free.nrw.commons.settings.Prefs;
import fr.free.nrw.commons.upload.UploadService;
import fr.free.nrw.commons.utils.ExecutorUtils;
import timber.log.Timber;
public class ContributionsActivity
@ -234,18 +239,7 @@ public class ContributionsActivity
((CursorAdapter)contributionsList.getAdapter()).swapCursor(cursor);
}
if (cursor.getCount() == 0
&& Locale.getDefault().getISO3Language().equals(Locale.ENGLISH.getISO3Language())) {
//cursor count is zero and language is english -
// we need to set the message for 0 case explicitly.
getSupportActionBar().setSubtitle(getResources()
.getString(R.string.contributions_subtitle_zero));
} else {
getSupportActionBar().setSubtitle(getResources()
.getQuantityString(R.plurals.contributions_subtitle,
cursor.getCount(),
cursor.getCount()));
}
setUploadCount();
contributionsList.clearSyncMessage();
notifyAndMigrateDataSetObservers();
@ -275,6 +269,27 @@ public class ContributionsActivity
return contributionsList.getAdapter().getCount();
}
private void setUploadCount() {
UploadCountClient uploadCountClient = new UploadCountClient();
CommonsApplication application = CommonsApplication.getInstance();
ListenableFuture<Integer> future = uploadCountClient
.getUploadCount(application.getCurrentAccount().name);
Futures.addCallback(future, new FutureCallback<Integer>() {
@Override
public void onSuccess(Integer uploadCount) {
getSupportActionBar().setSubtitle(getResources()
.getQuantityString(R.plurals.contributions_subtitle,
uploadCount,
uploadCount));
}
@Override
public void onFailure(@NonNull Throwable t) {
Timber.e(t, "Fetching upload count failed");
}
}, ExecutorUtils.uiExecutor());
}
@Override
public void notifyDatasetChanged() {
// Do nothing for now

View file

@ -0,0 +1,56 @@
package fr.free.nrw.commons.contributions;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.SettableFuture;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Locale;
import fr.free.nrw.commons.CommonsApplication;
import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler;
import fr.free.nrw.commons.concurrency.ThreadPoolExecutorService;
import timber.log.Timber;
public class UploadCountClient {
private ThreadPoolExecutorService threadPoolExecutor;
public UploadCountClient() {
threadPoolExecutor = new ThreadPoolExecutorService.Builder("bg-pool")
.setPoolSize(Runtime.getRuntime().availableProcessors())
.setExceptionHandler(new BackgroundPoolExceptionHandler())
.build();
}
private static final String UPLOAD_COUNT_URL_TEMPLATE =
"https://tools.wmflabs.org/urbanecmbot/uploadsbyuser/uploadsbyuser.py?user=%s";
public ListenableFuture<Integer> getUploadCount(final String userName) {
final SettableFuture<Integer> future = SettableFuture.create();
threadPoolExecutor.schedule(new Runnable() {
@Override
public void run() {
URL url;
try {
url = new URL(String.format(Locale.ENGLISH, UPLOAD_COUNT_URL_TEMPLATE, userName));
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(urlConnection.getInputStream()));
String uploadCount = bufferedReader.readLine();
bufferedReader.close();
future.set(Integer.parseInt(uploadCount));
} finally {
urlConnection.disconnect();
}
} catch (Exception e) {
Timber.e("Error getting upload count Error", e);
future.setException(e);
}
}
});
return future;
}
}