Use JMAP rfc8621 section-2 totalEmails, unreadEmails and isSubscribed

This commit is contained in:
the-djmaze 2022-06-01 22:50:35 +02:00
parent c5718057aa
commit 118505f91e
15 changed files with 68 additions and 72 deletions

View file

@ -229,11 +229,11 @@ export class AppUser extends AbstractApp {
setFolderHash(result.Folder, result.Hash);
folderFromCache.messageCountAll(result.MessageCount);
folderFromCache.messageCountAll(result.totalEmails);
let unreadCountChange = (folderFromCache.messageCountUnread() !== result.MessageUnseenCount);
let unreadCountChange = (folderFromCache.messageCountUnread() !== result.unreadEmails);
folderFromCache.messageCountUnread(result.MessageUnseenCount);
folderFromCache.messageCountUnread(result.unreadEmails);
if (unreadCountChange) {
MessageFlagsCache.clearFolder(folderFromCache.fullName);

View file

@ -148,11 +148,11 @@ folderInformationMultiply = (boot = false) => {
setFolderHash(item.Folder, item.Hash);
folder.messageCountAll(item.MessageCount);
folder.messageCountAll(item.totalEmails);
let unreadCountChange = folder.messageCountUnread() !== item.MessageUnseenCount;
let unreadCountChange = folder.messageCountUnread() !== item.unreadEmails;
folder.messageCountUnread(item.MessageUnseenCount);
folder.messageCountUnread(item.unreadEmails);
if (unreadCountChange) {
MessageFlagsCache.clearFolder(folder.fullName);

View file

@ -158,19 +158,18 @@ export class FolderCollectionModel extends AbstractCollectionModel
|| !isArray(expandedFolders)
|| !expandedFolders.includes(oCacheFolder.fullName));
if (oFolder.Extended) {
if (oFolder.Extended.Hash) {
setFolderHash(oCacheFolder.fullName, oFolder.Extended.Hash);
}
if (null != oFolder.Extended.MessageCount) {
oCacheFolder.messageCountAll(oFolder.Extended.MessageCount);
}
if (null != oFolder.Extended.MessageUnseenCount) {
oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount);
}
if (oFolder.Hash) {
setFolderHash(oCacheFolder.fullName, oFolder.Hash);
}
if (null != oFolder.totalEmails) {
oCacheFolder.messageCountAll(oFolder.totalEmails);
}
if (null != oFolder.unreadEmails) {
oCacheFolder.messageCountUnread(oFolder.unreadEmails);
}
return oCacheFolder;
});
@ -252,7 +251,7 @@ export class FolderModel extends AbstractModel {
focused: false,
selected: false,
edited: false,
subscribed: true,
isSubscribed: true,
checkable: false, // Check for new messages
askDelete: false,
@ -336,7 +335,7 @@ export class FolderModel extends AbstractModel {
hasVisibleSubfolders: () => !!folder.subFolders().find(folder => folder.visible()),
hasSubscriptions: () => folder.subscribed() | !!folder.subFolders().find(
hasSubscriptions: () => folder.isSubscribed() | !!folder.subFolders().find(
oFolder => {
const subscribed = oFolder.hasSubscriptions();
return !oFolder.isSystemFolder() && subscribed;
@ -359,13 +358,13 @@ export class FolderModel extends AbstractModel {
* - hasVisibleSubfolders()
* Or when all below conditions are true:
* - selectable()
* - subscribed() OR hideUnsubscribed = false
* - isSubscribed() OR hideUnsubscribed = false
* - FolderType.User
* - not kolabType()
*/
visible: () => {
const selectable = folder.canBeSelected(),
visible = (folder.subscribed() | !SettingsUserStore.hideUnsubscribed()) && selectable;
visible = (folder.isSubscribed() | !SettingsUserStore.hideUnsubscribed()) && selectable;
return folder.hasVisibleSubfolders() | visible;
},

View file

@ -17,8 +17,8 @@ export class MessageCollectionModel extends AbstractCollectionModel
this.Folder
this.FolderHash
this.Limit
this.MessageCount
this.MessageUnseenCount
this.totalEmails
this.unreadEmails
this.MessageResultCount
this.NewMessages
this.Offset

View file

@ -71,7 +71,7 @@ export class UserSettingsFolders /*extends AbstractViewSettings*/ {
Remote.abort('Folders').post('FolderRename', FolderUserStore.foldersRenaming, {
Folder: folder.fullName,
NewFolderName: nameToEdit,
Subscribe: folder.subscribed() ? 1 : 0
Subscribe: folder.isSubscribed() ? 1 : 0
})
.then(data => {
folder.name(nameToEdit/*data.Name*/);
@ -138,7 +138,7 @@ export class UserSettingsFolders /*extends AbstractViewSettings*/ {
() => {
// folderToRemove.flags.push('\\nonexistent');
folderToRemove.selectable(false);
// folderToRemove.subscribed(false);
// folderToRemove.isSubscribed(false);
// folderToRemove.checkable(false);
if (!folderToRemove.subFolders.length) {
removeFolderFromCacheList(folderToRemove.fullName);
@ -170,12 +170,12 @@ export class UserSettingsFolders /*extends AbstractViewSettings*/ {
}
toggleFolderSubscription(folder) {
let subscribe = !folder.subscribed();
let subscribe = !folder.isSubscribed();
Remote.request('FolderSubscribe', null, {
Folder: folder.fullName,
Subscribe: subscribe ? 1 : 0
});
folder.subscribed(subscribe);
folder.isSubscribed(subscribe);
}
toggleFolderCheckable(folder) {

View file

@ -138,7 +138,7 @@ export const FolderUserStore = new class {
folder.selectable() &&
folder.exists &&
timeout > folder.expires &&
(folder.isSystemFolder() || (folder.subscribed() && (folder.checkable() || !bDisplaySpecSetting)))
(folder.isSystemFolder() || (folder.isSubscribed() && (folder.checkable() || !bDisplaySpecSetting)))
) {
timeouts.push([folder.expires, folder.fullName]);
}

View file

@ -193,17 +193,17 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrenFolderCache
setFolderHash(collection.Folder, collection.FolderHash);
if (null != collection.MessageCount) {
folder.messageCountAll(collection.MessageCount);
if (null != collection.totalEmails) {
folder.messageCountAll(collection.totalEmails);
}
if (null != collection.MessageUnseenCount) {
if (pInt(folder.messageCountUnread()) !== pInt(collection.MessageUnseenCount)) {
if (null != collection.unreadEmails) {
if (pInt(folder.messageCountUnread()) !== pInt(collection.unreadEmails)) {
unreadCountChange = true;
MessageFlagsCache.clearFolder(folder.fullName);
}
folder.messageCountUnread(collection.MessageUnseenCount);
folder.messageCountUnread(collection.unreadEmails);
}
MessagelistUserStore.initUidNextAndNewMessages(folder.fullName, collection.UidNext, collection.NewMessages);

View file

@ -338,14 +338,14 @@ html:not(rl-mobile) {
.flagParent {
padding: 0 10px 0 5px;
}
.flagParent::after {
content: '☆'; /*⚐*/
}
&.flag-\\flagged .flagParent::after,
&.hasFlaggedSubMessage .flagParent::after {
color: orange;
content: '★'; /*⚑*/
}
&:not(.flag-\\flagged):not(.hasFlaggedSubMessage) .flagParent::after {
content: '☆'; /*⚐*/
}
&:not(.flag-\\flagged):not(.hasFlaggedSubMessage) .flagParent:not(:hover) {
opacity: 0.5;
}