Files
snappymail/dev/Model/MessageCollection.js

70 lines
1.5 KiB
JavaScript

import { MessageModel } from 'Model/Message';
import {
initMessageFlagsFromCache,
storeMessageFlagsToCache,
hasNewMessageAndRemoveFromCache
} from 'Common/Cache';
'use strict';
class MessageCollectionModel extends Array
{
constructor() {
super();
/*
this.Filtered
this.Folder
this.FolderHash
this.Limit
this.MessageCount
this.MessageUnseenCount
this.MessageResultCount
this.NewMessages
this.Offset
this.Search
this.ThreadUid
this.UidNext
*/
}
/**
* @param {?Object} json
* @returns {MessageCollectionModel}
*/
static reviveFromJson(collection, cached) {
if (collection
&& 'Collection/MessageCollection' === collection['@Object']
&& Array.isArray(collection['@Collection'])) {
const result = new MessageCollectionModel;
Object.entries(collection).forEach(([key, value]) => '@' !== key[0] && (result[key] = value));
let newCount = 0;
collection['@Collection'].forEach(message => {
if (message && 'Object/Message' === message['@Object']) {
message = MessageModel.newInstanceFromJson(message);
if (message) {
if (hasNewMessageAndRemoveFromCache(message.folderFullNameRaw, message.uid) && 5 >= newCount) {
++newCount;
message.newForAnimation(true);
}
message.deleted(false);
cached ? initMessageFlagsFromCache(message) : storeMessageFlagsToCache(message);
result.push(message);
}
}
});
// collection[@Count] == result.length
return result;
}
}
}
export { MessageCollectionModel, MessageCollectionModel as default };