mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
CollectionModels reviveFromJson
This commit is contained in:
parent
d747de7649
commit
7d89de2fdb
3 changed files with 69 additions and 71 deletions
|
|
@ -2,6 +2,11 @@
|
||||||
export class AbstractCollectionModel extends Array
|
export class AbstractCollectionModel extends Array
|
||||||
{
|
{
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
/*
|
||||||
|
if (new.target === Parent) {
|
||||||
|
throw new Error("Can't instantiate abstract class!");
|
||||||
|
}
|
||||||
|
*/
|
||||||
super();
|
super();
|
||||||
props && Object.entries(props).forEach(([key, value]) => '@' !== key[0] && (this[key] = value));
|
props && Object.entries(props).forEach(([key, value]) => '@' !== key[0] && (this[key] = value));
|
||||||
// props[@Count]
|
// props[@Count]
|
||||||
|
|
@ -12,4 +17,21 @@ export class AbstractCollectionModel extends Array
|
||||||
? object['@Collection']
|
? object['@Collection']
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static reviveFromJson(object, itemCallback) {
|
||||||
|
// FolderCollectionModel => FolderCollection
|
||||||
|
// AttachmentCollectionModel => AttachmentCollection
|
||||||
|
// MessageCollectionModel => MessageCollection
|
||||||
|
const name = this.name.replace('Model', ''),
|
||||||
|
collection = this.getFromJSON(object, name);
|
||||||
|
if (collection) {
|
||||||
|
const result = new this(object);
|
||||||
|
collection.forEach(item => {
|
||||||
|
item && itemCallback && (item = itemCallback(item, result));
|
||||||
|
item && result.push(item);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,61 +43,45 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
* @returns {FolderCollectionModel}
|
* @returns {FolderCollectionModel}
|
||||||
*/
|
*/
|
||||||
static reviveFromJson(object) {
|
static reviveFromJson(object) {
|
||||||
const collection = this.getFromJSON(object, 'FolderCollection');
|
const expandedFolders = Local.get(ClientSideKeyName.ExpandedFolders),
|
||||||
if (collection) {
|
bDisplaySpecSetting = FolderStore.displaySpecSetting();
|
||||||
const result = new FolderCollectionModel(object),
|
return super.reviveFromJson(object, (oFolder, self) => {
|
||||||
expandedFolders = Local.get(ClientSideKeyName.ExpandedFolders),
|
let oCacheFolder = Cache.getFolderFromCacheList(oFolder.FullNameRaw);
|
||||||
bDisplaySpecSetting = FolderStore.displaySpecSetting();
|
if (!oCacheFolder && (oCacheFolder = FolderModel.newInstanceFromJson(oFolder))) {
|
||||||
|
if (oFolder.FullNameRaw == self.SystemFolders[ServerFolderType.INBOX]) {
|
||||||
|
oCacheFolder.type(FolderType.Inbox);
|
||||||
|
Cache.setFolderInboxName(oFolder.FullNameRaw);
|
||||||
|
}
|
||||||
|
Cache.setFolder(oCacheFolder.fullNameHash, oFolder.FullNameRaw, oCacheFolder);
|
||||||
|
}
|
||||||
|
|
||||||
collection.forEach(oFolder => {
|
if (oCacheFolder) {
|
||||||
if (oFolder) {
|
oCacheFolder.checkable(bDisplaySpecSetting ? !!oFolder.Checkable : true);
|
||||||
let oCacheFolder = Cache.getFolderFromCacheList(oFolder.FullNameRaw);
|
|
||||||
if (!oCacheFolder) {
|
oCacheFolder.collapsed(!expandedFolders
|
||||||
oCacheFolder = FolderModel.newInstanceFromJson(oFolder);
|
|| !Array.isArray(expandedFolders)
|
||||||
if (oCacheFolder) {
|
|| !expandedFolders.includes(oCacheFolder.fullNameHash));
|
||||||
if (oFolder.FullNameRaw == result.SystemFolders[ServerFolderType.INBOX]) {
|
|
||||||
oCacheFolder.type(FolderType.Inbox);
|
if (oFolder.Extended) {
|
||||||
Cache.setFolderInboxName(oFolder.FullNameRaw);
|
if (oFolder.Extended.Hash) {
|
||||||
}
|
Cache.setFolderHash(oCacheFolder.fullNameRaw, oFolder.Extended.Hash);
|
||||||
Cache.setFolder(oCacheFolder.fullNameHash, oFolder.FullNameRaw, oCacheFolder);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oCacheFolder) {
|
if (null != oFolder.Extended.MessageCount) {
|
||||||
if (bDisplaySpecSetting) {
|
oCacheFolder.messageCountAll(oFolder.Extended.MessageCount);
|
||||||
oCacheFolder.checkable(!!oFolder.Checkable);
|
}
|
||||||
} else {
|
|
||||||
oCacheFolder.checkable(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
oCacheFolder.collapsed(!expandedFolders
|
if (null != oFolder.Extended.MessageUnseenCount) {
|
||||||
|| !Array.isArray(expandedFolders)
|
oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount);
|
||||||
|| !expandedFolders.includes(oCacheFolder.fullNameHash));
|
|
||||||
|
|
||||||
if (oFolder.Extended) {
|
|
||||||
if (oFolder.Extended.Hash) {
|
|
||||||
Cache.setFolderHash(oCacheFolder.fullNameRaw, oFolder.Extended.Hash);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null != oFolder.Extended.MessageCount) {
|
|
||||||
oCacheFolder.messageCountAll(oFolder.Extended.MessageCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null != oFolder.Extended.MessageUnseenCount) {
|
|
||||||
oCacheFolder.messageCountUnread(oFolder.Extended.MessageUnseenCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
oFolder.SubFolders = FolderCollectionModel.reviveFromJson(oFolder.SubFolders);
|
|
||||||
oFolder.SubFolders && oCacheFolder.subFolders(oFolder.SubFolders);
|
|
||||||
|
|
||||||
result.push(oCacheFolder);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
oFolder.SubFolders = FolderCollectionModel.reviveFromJson(oFolder.SubFolders);
|
||||||
}
|
oFolder.SubFolders && oCacheFolder.subFolders(oFolder.SubFolders);
|
||||||
|
|
||||||
|
}
|
||||||
|
return oCacheFolder;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
storeIt() {
|
storeIt() {
|
||||||
|
|
|
||||||
|
|
@ -34,30 +34,22 @@ export class MessageCollectionModel extends AbstractCollectionModel
|
||||||
* @returns {MessageCollectionModel}
|
* @returns {MessageCollectionModel}
|
||||||
*/
|
*/
|
||||||
static reviveFromJson(object, cached) {
|
static reviveFromJson(object, cached) {
|
||||||
const collection = this.getFromJSON(object, 'MessageCollection');
|
let newCount = 0;
|
||||||
if (collection) {
|
return super.reviveFromJson(object, message => {
|
||||||
const result = new MessageCollectionModel(object);
|
if (message && 'Object/Message' === message['@Object']) {
|
||||||
|
message = MessageModel.newInstanceFromJson(message);
|
||||||
let newCount = 0;
|
if (message) {
|
||||||
collection.forEach(message => {
|
if (hasNewMessageAndRemoveFromCache(message.folderFullNameRaw, message.uid) && 5 >= newCount) {
|
||||||
if (message && 'Object/Message' === message['@Object']) {
|
++newCount;
|
||||||
message = MessageModel.newInstanceFromJson(message);
|
message.newForAnimation(true);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
message.deleted(false);
|
||||||
}
|
|
||||||
|
cached ? initMessageFlagsFromCache(message) : storeMessageFlagsToCache(message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue