Avoids NRA when too much toots in federated timeline

This commit is contained in:
tom79 2017-09-28 19:34:26 +02:00
parent 7b9776f808
commit 31f1fbff09
8 changed files with 35 additions and 17 deletions

View File

@ -7,8 +7,8 @@ android {
applicationId "fr.gouv.etalab.mastodon"
minSdkVersion 15
targetSdkVersion 25
versionCode 54
versionName "1.4.9-beta-6"
versionCode 55
versionName "1.4.9-beta-7"
}
buildTypes {
release {

View File

@ -16,6 +16,7 @@ package fr.gouv.etalab.mastodon.asynctasks;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
@ -24,6 +25,7 @@ import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.client.API;
import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Notification;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingNotificationsInterface;

View File

@ -1372,8 +1372,16 @@ public class API {
status.setContent(resobj.get("content").toString());
status.setFavourites_count(Integer.valueOf(resobj.get("favourites_count").toString()));
status.setReblogs_count(Integer.valueOf(resobj.get("reblogs_count").toString()));
status.setReblogged(Boolean.valueOf(resobj.get("reblogged").toString()));
status.setFavourited(Boolean.valueOf(resobj.get("favourited").toString()));
try {
status.setReblogged(Boolean.valueOf(resobj.get("reblogged").toString()));
}catch (Exception e){
status.setReblogged(false);
}
try {
status.setFavourited(Boolean.valueOf(resobj.get("favourited").toString()));
}catch (Exception e){
status.setReblogged(false);
}
try {
status.setPinned(Boolean.valueOf(resobj.get("pinned").toString()));
}catch (JSONException e){

View File

@ -19,6 +19,7 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -30,10 +31,8 @@ import java.util.ArrayList;
import java.util.List;
import fr.gouv.etalab.mastodon.activities.MainActivity;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveFeedsAsyncTask;
import fr.gouv.etalab.mastodon.asynctasks.RetrieveMissingNotificationsAsyncTask;
import fr.gouv.etalab.mastodon.client.APIResponse;
import fr.gouv.etalab.mastodon.client.Entities.Status;
import fr.gouv.etalab.mastodon.drawers.NotificationsListAdapter;
import fr.gouv.etalab.mastodon.helper.Helper;
import fr.gouv.etalab.mastodon.interfaces.OnRetrieveMissingNotificationsInterface;
@ -184,14 +183,17 @@ public class DisplayNotificationsFragment extends Fragment implements OnRetrieve
lv_notifications.setAdapter(notificationsListAdapter);
swiped = false;
}
if( notifications != null && notifications.size() > 0) {
for(Notification tmpNotification: notifications){
if( lastReadNotifications != null && Long.parseLong(tmpNotification.getId()) > Long.parseLong(lastReadNotifications))
if( lastReadNotifications != null && Long.parseLong(tmpNotification.getId()) > Long.parseLong(lastReadNotifications)) {
MainActivity.countNewNotifications++;
}
this.notifications.add(tmpNotification);
}
if( firstLoad) {
//Update the id of the last notification retrieved
MainActivity.lastNotificationId = notifications.get(0).getId();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Helper.LAST_NOTIFICATION_MAX_ID + this.userId, notifications.get(0).getId());

View File

@ -19,6 +19,7 @@ import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
import android.support.v4.app.Fragment;
import android.support.v4.content.LocalBroadcastManager;
@ -347,26 +348,26 @@ public class DisplayStatusFragment extends Fragment implements OnRetrieveFeedsIn
}else if(type == RetrieveFeedsAsyncTask.Type.PUBLIC){
if (context == null)
return;
if (status != null) {
if (lv_status.getFirstVisiblePosition() > 3) {
int index = lv_status.getFirstVisiblePosition() + 1;
View v = lv_status.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
status.setReplies(new ArrayList<Status>());
statuses.add(0, status);
statusListAdapter.notifyDataSetChanged();
lv_status.setSelectionFromTop(index, top);
//Avoids the array to be too big...
} else {
if (status != null) {
if (lv_status.getFirstVisiblePosition() < 3) {
if( statuses.size() > 40)
statuses.subList(0, 40).clear();
status.setReplies(new ArrayList<Status>());
status.setNew(false);
statuses.add(0, status);
statusListAdapter.notifyDataSetChanged();
} else {
status.setReplies(new ArrayList<Status>());
statuses.add(0, status);
}
if (textviewNoAction.getVisibility() == View.VISIBLE)
textviewNoAction.setVisibility(View.GONE);
}
}
}

View File

@ -923,6 +923,8 @@ public class Helper {
final NavigationView navigationView = (NavigationView) activity.findViewById(R.id.nav_view);
navigationView.getMenu().clear();
MainActivity.lastNotificationId = null;
MainActivity.lastHomeId = null;
navigationView.inflateMenu(R.menu.activity_main_drawer);
SQLiteDatabase db = Sqlite.getInstance(activity, Sqlite.DB_NAME, null, Sqlite.DB_VERSION).open();
Account account = new AccountDAO(activity,db).getAccountByID(userID);

View File

@ -116,6 +116,8 @@ public class StreamingFederatedTimelineService extends IntentService {
continue;
}
event = event.substring(6);
if( event.matches("^[0-9]{1,}$"))
continue;
try {
JSONObject eventJson = new JSONObject(event);
onRetrieveStreaming(accountStream, eventJson);

View File

@ -39,6 +39,7 @@ import android.support.v7.app.AlertDialog;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.SwitchCompat;
import android.util.Log;
import android.util.Patterns;
import android.view.Gravity;
import android.view.LayoutInflater;