Last fix with pagination and remote calls

This commit is contained in:
Thomas 2022-10-03 11:31:27 +02:00
parent eca5cecd93
commit 900a91f13f
2 changed files with 35 additions and 4 deletions

View file

@ -23,6 +23,7 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData; import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.MutableLiveData;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -154,6 +155,17 @@ public class NotificationsVM extends AndroidViewModel {
notifications = statusCacheDAO.getNotifications(timelineParams.excludeType, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId); notifications = statusCacheDAO.getNotifications(timelineParams.excludeType, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId);
if (notifications != null) { if (notifications != null) {
if (notifications.notifications != null && notifications.notifications.size() > 0) { if (notifications.notifications != null && notifications.notifications.size() > 0) {
if (notificationList != null) {
List<Notification> notPresentNotifications = new ArrayList<>();
for (Notification notification : notifications.notifications) {
if (!notificationList.contains(notification)) {
notification.cached = true;
notPresentNotifications.add(notification);
}
}
//Only not already present statuses are added
notifications.notifications = notPresentNotifications;
}
TimelineHelper.filterNotification(getApplication().getApplicationContext(), notifications.notifications, true); TimelineHelper.filterNotification(getApplication().getApplicationContext(), notifications.notifications, true);
addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams); addFetchMoreNotifications(notifications.notifications, notificationList, timelineParams);
notifications.pagination = new Pagination(); notifications.pagination = new Pagination();

View file

@ -386,7 +386,6 @@ public class TimelinesVM extends AndroidViewModel {
} }
public LiveData<Statuses> getTimeline(List<Status> timelineStatuses, TimelineParams timelineParams) { public LiveData<Statuses> getTimeline(List<Status> timelineStatuses, TimelineParams timelineParams) {
statusesMutableLiveData = new MutableLiveData<>(); statusesMutableLiveData = new MutableLiveData<>();
MastodonTimelinesService mastodonTimelinesService = init(timelineParams.instance); MastodonTimelinesService mastodonTimelinesService = init(timelineParams.instance);
new Thread(() -> { new Thread(() -> {
@ -418,6 +417,7 @@ public class TimelinesVM extends AndroidViewModel {
statuses.statuses = TimelineHelper.filterStatus(getApplication().getApplicationContext(), statusList, timelineParams.type); statuses.statuses = TimelineHelper.filterStatus(getApplication().getApplicationContext(), statusList, timelineParams.type);
statuses.pagination = MastodonHelper.getPagination(timelineResponse.headers()); statuses.pagination = MastodonHelper.getPagination(timelineResponse.headers());
if (statusList != null && statusList.size() > 0) { if (statusList != null && statusList.size() > 0) {
addFetchMore(statusList, timelineStatuses, timelineParams); addFetchMore(statusList, timelineStatuses, timelineParams);
for (Status status : statuses.statuses) { for (Status status : statuses.statuses) {
StatusCache statusCacheDAO = new StatusCache(getApplication().getApplicationContext()); StatusCache statusCacheDAO = new StatusCache(getApplication().getApplicationContext());
@ -456,7 +456,18 @@ public class TimelinesVM extends AndroidViewModel {
Statuses statuses = null; Statuses statuses = null;
try { try {
statuses = statusCacheDAO.geStatuses(timelineParams.slug, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId); statuses = statusCacheDAO.geStatuses(timelineParams.slug, timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId);
if (statuses != null) { if (statuses != null && statuses.statuses != null && statuses.statuses.size() > 0) {
if (timelineStatuses != null) {
List<Status> notPresentStatuses = new ArrayList<>();
for (Status status : statuses.statuses) {
if (!timelineStatuses.contains(status)) {
status.cached = true;
notPresentStatuses.add(status);
}
}
//Only not already present statuses are added
statuses.statuses = notPresentStatuses;
}
TimelineHelper.filterStatus(getApplication().getApplicationContext(), statuses.statuses, timelineParams.type, true); TimelineHelper.filterStatus(getApplication().getApplicationContext(), statuses.statuses, timelineParams.type, true);
if (statuses.statuses != null && statuses.statuses.size() > 0) { if (statuses.statuses != null && statuses.statuses.size() > 0) {
addFetchMore(statuses.statuses, timelineStatuses, timelineParams); addFetchMore(statuses.statuses, timelineStatuses, timelineParams);
@ -564,8 +575,16 @@ public class TimelinesVM extends AndroidViewModel {
conversations = statusCacheDAO.getConversations(timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId); conversations = statusCacheDAO.getConversations(timelineParams.instance, timelineParams.userId, timelineParams.maxId, timelineParams.minId, timelineParams.sinceId);
if (conversations != null) { if (conversations != null) {
if (conversations.conversations != null && conversations.conversations.size() > 0) { if (conversations.conversations != null && conversations.conversations.size() > 0) {
if (timelineConversations != null) {
List<Conversation> notPresentConversations = new ArrayList<>();
for (Conversation conversation : conversations.conversations) { for (Conversation conversation : conversations.conversations) {
if (!timelineConversations.contains(conversation)) {
conversation.cached = true; conversation.cached = true;
timelineConversations.add(conversation);
}
}
//Only not already present statuses are added
conversations.conversations = notPresentConversations;
} }
addFetchMoreConversation(conversations.conversations, timelineConversations, timelineParams); addFetchMoreConversation(conversations.conversations, timelineConversations, timelineParams);
conversations.pagination = new Pagination(); conversations.pagination = new Pagination();