TF-4314 Fix unread emails disappear blink (#4316)
This commit is contained in:
@@ -83,6 +83,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
session,
|
session,
|
||||||
accountId,
|
accountId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
|
limit: limit,
|
||||||
position: position,
|
position: position,
|
||||||
mailboxId: emailFilter?.mailboxId,
|
mailboxId: emailFilter?.mailboxId,
|
||||||
propertiesCreated: propertiesCreated,
|
propertiesCreated: propertiesCreated,
|
||||||
@@ -187,6 +188,16 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
'Server email count = $serverCount',
|
'Server email count = $serverCount',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (serverCount > 0 ||
|
||||||
|
(serverResponse.notFoundEmailIds?.isNotEmpty ?? false)) {
|
||||||
|
await _updateEmailCache(
|
||||||
|
accountId,
|
||||||
|
session.username,
|
||||||
|
newCreated: serverResponse.emailList,
|
||||||
|
newDestroyed: serverResponse.notFoundEmailIds,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Combine server list + keep existing state
|
// Combine server list + keep existing state
|
||||||
yield EmailsResponse(
|
yield EmailsResponse(
|
||||||
emailList: serverResponse.emailList,
|
emailList: serverResponse.emailList,
|
||||||
@@ -203,6 +214,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
{
|
{
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
UnsignedInt? limit,
|
||||||
int? position,
|
int? position,
|
||||||
MailboxId? mailboxId,
|
MailboxId? mailboxId,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
@@ -212,7 +224,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
final networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
final networkEmailResponse = await mapDataSource[DataSourceType.network]!.getAllEmail(
|
||||||
session,
|
session,
|
||||||
accountId,
|
accountId,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: limit ?? ThreadConstants.defaultLimit,
|
||||||
position: position,
|
position: position,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
filter: filter ?? EmailFilterCondition(inMailbox: mailboxId),
|
filter: filter ?? EmailFilterCondition(inMailbox: mailboxId),
|
||||||
@@ -323,6 +335,7 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
jmap.State currentState,
|
jmap.State currentState,
|
||||||
{
|
{
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
UnsignedInt? limit,
|
||||||
EmailFilter? emailFilter,
|
EmailFilter? emailFilter,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
@@ -343,19 +356,26 @@ class ThreadRepositoryImpl extends ThreadRepository {
|
|||||||
session.username,
|
session.username,
|
||||||
inMailboxId: emailFilter?.mailboxId,
|
inMailboxId: emailFilter?.mailboxId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
filterOption: emailFilter?.filterOption
|
limit: limit,
|
||||||
|
filterOption: emailFilter?.filterOption,
|
||||||
),
|
),
|
||||||
stateDataSource.getState(accountId, session.username, StateType.email)
|
stateDataSource.getState(accountId, session.username, StateType.email)
|
||||||
]).then((List response) {
|
]).then((List response) {
|
||||||
return EmailsResponse(emailList: response.first, state: response.last);
|
return EmailsResponse(emailList: response.first, state: response.last);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final currentLimitEmails =
|
||||||
|
limit?.value ?? ThreadConstants.defaultLimit.value;
|
||||||
|
|
||||||
|
log('ThreadRepositoryImpl::refreshChanges: Current limit emails is $currentLimitEmails');
|
||||||
|
|
||||||
if (!newEmailResponse.hasEmails()
|
if (!newEmailResponse.hasEmails()
|
||||||
|| (newEmailResponse.emailList?.length ?? 0) < ThreadConstants.defaultLimit.value) {
|
|| (newEmailResponse.emailList?.length ?? 0) < currentLimitEmails) {
|
||||||
final networkEmailResponse = await _getFirstPage(
|
final networkEmailResponse = await _getFirstPage(
|
||||||
session,
|
session,
|
||||||
accountId,
|
accountId,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
|
limit: limit,
|
||||||
filter: emailFilter?.filter,
|
filter: emailFilter?.filter,
|
||||||
mailboxId: emailFilter?.mailboxId,
|
mailboxId: emailFilter?.mailboxId,
|
||||||
propertiesCreated: propertiesCreated,
|
propertiesCreated: propertiesCreated,
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ abstract class ThreadRepository {
|
|||||||
jmap.State currentState,
|
jmap.State currentState,
|
||||||
{
|
{
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
UnsignedInt? limit,
|
||||||
EmailFilter? emailFilter,
|
EmailFilter? emailFilter,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.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/mailbox/mailbox.dart';
|
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/email_response.dart';
|
||||||
@@ -23,6 +24,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
|||||||
jmap.State currentState,
|
jmap.State currentState,
|
||||||
{
|
{
|
||||||
Set<Comparator>? sort,
|
Set<Comparator>? sort,
|
||||||
|
UnsignedInt? limit,
|
||||||
Properties? propertiesCreated,
|
Properties? propertiesCreated,
|
||||||
Properties? propertiesUpdated,
|
Properties? propertiesUpdated,
|
||||||
EmailFilter? emailFilter,
|
EmailFilter? emailFilter,
|
||||||
@@ -37,6 +39,7 @@ class RefreshChangesEmailsInMailboxInteractor {
|
|||||||
accountId,
|
accountId,
|
||||||
currentState,
|
currentState,
|
||||||
sort: sort,
|
sort: sort,
|
||||||
|
limit: limit,
|
||||||
propertiesCreated: propertiesCreated,
|
propertiesCreated: propertiesCreated,
|
||||||
propertiesUpdated: propertiesUpdated,
|
propertiesUpdated: propertiesUpdated,
|
||||||
emailFilter: emailFilter)
|
emailFilter: emailFilter)
|
||||||
|
|||||||
@@ -719,6 +719,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
_accountId!,
|
_accountId!,
|
||||||
mailboxDashBoardController.currentEmailState!,
|
mailboxDashBoardController.currentEmailState!,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
||||||
|
limit: limitEmailFetched,
|
||||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
_session!,
|
_session!,
|
||||||
_accountId!,
|
_accountId!,
|
||||||
|
|||||||
@@ -822,6 +822,7 @@ void main() {
|
|||||||
any,
|
any,
|
||||||
any,
|
any,
|
||||||
sort: anyNamed('sort'),
|
sort: anyNamed('sort'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated'),
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
emailFilter: anyNamed('emailFilter'),
|
emailFilter: anyNamed('emailFilter'),
|
||||||
@@ -851,6 +852,7 @@ void main() {
|
|||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
mailboxDashboardController.currentEmailState!,
|
mailboxDashboardController.currentEmailState!,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
||||||
|
limit: threadController.limitEmailFetched,
|
||||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
@@ -986,6 +988,7 @@ void main() {
|
|||||||
any,
|
any,
|
||||||
any,
|
any,
|
||||||
sort: anyNamed('sort'),
|
sort: anyNamed('sort'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated'),
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
emailFilter: anyNamed('emailFilter'),
|
emailFilter: anyNamed('emailFilter'),
|
||||||
@@ -1015,6 +1018,7 @@ void main() {
|
|||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
mailboxDashboardController.currentEmailState!,
|
mailboxDashboardController.currentEmailState!,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
||||||
|
limit: threadController.limitEmailFetched,
|
||||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
@@ -1095,6 +1099,7 @@ void main() {
|
|||||||
any,
|
any,
|
||||||
any,
|
any,
|
||||||
sort: anyNamed('sort'),
|
sort: anyNamed('sort'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated'),
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
emailFilter: anyNamed('emailFilter'),
|
emailFilter: anyNamed('emailFilter'),
|
||||||
@@ -1124,6 +1129,7 @@ void main() {
|
|||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
mailboxDashboardController.currentEmailState!,
|
mailboxDashboardController.currentEmailState!,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
||||||
|
limit: threadController.limitEmailFetched,
|
||||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
|
|||||||
@@ -316,6 +316,7 @@ void main() {
|
|||||||
any,
|
any,
|
||||||
any,
|
any,
|
||||||
sort: anyNamed('sort'),
|
sort: anyNamed('sort'),
|
||||||
|
limit: anyNamed('limit'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated'),
|
propertiesUpdated: anyNamed('propertiesUpdated'),
|
||||||
emailFilter: anyNamed('emailFilter'),
|
emailFilter: anyNamed('emailFilter'),
|
||||||
|
|||||||
Reference in New Issue
Block a user