[BUG] Fix duplicate load more emails

This commit is contained in:
dab246
2021-10-27 13:53:52 +07:00
committed by Dat H. Pham
parent ce941c4852
commit 32b8e714a3
6 changed files with 53 additions and 7 deletions
@@ -230,6 +230,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
Set<Comparator>? sort,
Filter? filter,
Properties? properties,
EmailId? lastEmailId,
}
) async* {
final emailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
@@ -240,7 +241,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
properties: properties);
final newEmailList = emailResponse.emailList != null && emailResponse.emailList!.isNotEmpty
? emailResponse.emailList!.sublist(1)
? emailResponse.emailList!.where((email) => email.id != lastEmailId).toList()
: <Email>[];
if (newEmailList.isNotEmpty) {
@@ -39,6 +39,7 @@ abstract class ThreadRepository {
Set<Comparator>? sort,
Filter? filter,
Properties? properties,
EmailId? lastEmailId,
}
);
@@ -5,6 +5,7 @@ import 'package:jmap_dart_client/jmap/core/filter/filter.dart';
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart';
import 'package:model/model.dart';
@@ -21,7 +22,8 @@ class LoadMoreEmailsInMailboxInteractor {
UnsignedInt? limit,
Set<Comparator>? sort,
Filter? filter,
Properties? properties
Properties? properties,
EmailId? lastEmailId,
}
) async* {
try {
@@ -33,7 +35,8 @@ class LoadMoreEmailsInMailboxInteractor {
limit: limit,
sort: sort,
filter: filter,
properties: properties)
properties: properties,
lastEmailId: lastEmailId)
.map(_toGetEmailState);
} catch (e) {
yield Left(LoadMoreEmailsFailure(e));
@@ -264,6 +264,7 @@ class ThreadController extends BaseController {
inMailbox: mailboxDashBoardController.selectedMailbox.value?.id,
before: emailList.last.receivedAt),
properties: ThreadConstants.propertiesDefault,
lastEmailId: emailList.last.id
));
}
}
@@ -10,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/properties/properties.dart' as _i9;
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
import 'package:jmap_dart_client/jmap/core/state.dart' as _i10;
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i13;
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
import 'package:mockito/mockito.dart' as _i1;
import 'package:model/email/email_filter.dart' as _i8;
@@ -75,7 +76,8 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
{_i6.UnsignedInt? limit,
Set<_i7.Comparator>? sort,
_i12.Filter? filter,
_i9.Properties? properties}) =>
_i9.Properties? properties,
_i13.EmailId? lastEmailId}) =>
(super.noSuchMethod(
Invocation.method(#loadMoreEmails, [
accountId
@@ -83,8 +85,26 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
#limit: limit,
#sort: sort,
#filter: filter,
#properties: properties
#properties: properties,
#lastEmailId: lastEmailId
}),
returnValue: Stream<_i4.EmailsResponse>.empty())
as _i3.Stream<_i4.EmailsResponse>);
@override
_i3.Future<List<_i13.Email>> searchEmails(_i5.AccountId? accountId,
{_i6.UnsignedInt? limit,
Set<_i7.Comparator>? sort,
_i12.Filter? filter,
_i9.Properties? properties}) =>
(super.noSuchMethod(
Invocation.method(#searchEmails, [
accountId
], {
#limit: limit,
#sort: sort,
#filter: filter,
#properties: properties
}),
returnValue: Future<List<_i13.Email>>.value(<_i13.Email>[]))
as _i3.Future<List<_i13.Email>>);
}
@@ -10,6 +10,7 @@ import 'package:jmap_dart_client/jmap/core/properties/properties.dart' as _i9;
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart' as _i7;
import 'package:jmap_dart_client/jmap/core/state.dart' as _i10;
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart' as _i6;
import 'package:jmap_dart_client/jmap/mail/email/email.dart' as _i13;
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart' as _i11;
import 'package:mockito/mockito.dart' as _i1;
import 'package:model/email/email_filter.dart' as _i8;
@@ -75,7 +76,8 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
{_i6.UnsignedInt? limit,
Set<_i7.Comparator>? sort,
_i12.Filter? filter,
_i9.Properties? properties}) =>
_i9.Properties? properties,
_i13.EmailId? lastEmailId}) =>
(super.noSuchMethod(
Invocation.method(#loadMoreEmails, [
accountId
@@ -83,8 +85,26 @@ class MockThreadRepository extends _i1.Mock implements _i2.ThreadRepository {
#limit: limit,
#sort: sort,
#filter: filter,
#properties: properties
#properties: properties,
#lastEmailId: lastEmailId
}),
returnValue: Stream<_i4.EmailsResponse>.empty())
as _i3.Stream<_i4.EmailsResponse>);
@override
_i3.Future<List<_i13.Email>> searchEmails(_i5.AccountId? accountId,
{_i6.UnsignedInt? limit,
Set<_i7.Comparator>? sort,
_i12.Filter? filter,
_i9.Properties? properties}) =>
(super.noSuchMethod(
Invocation.method(#searchEmails, [
accountId
], {
#limit: limit,
#sort: sort,
#filter: filter,
#properties: properties
}),
returnValue: Future<List<_i13.Email>>.value(<_i13.Email>[]))
as _i3.Future<List<_i13.Email>>);
}