snappymail/dev/Stores/User/Message.js
2023-04-03 10:29:26 +02:00

51 lines
1.3 KiB
JavaScript

import { ScopeMessageList, ScopeMessageView } from 'Common/Enums';
import { elementById } from 'Common/Globals';
import { exitFullscreen } from 'Common/Fullscreen';
import { addObservablesTo, addSubscribablesTo } from 'External/ko';
import { AppUserStore } from 'Stores/User/App';
import { SettingsUserStore } from 'Stores/User/Settings';
export const MessageUserStore = new class {
constructor() {
addObservablesTo(this, {
// message viewer
message: null,
error: '',
loading: false,
// Cache mail bodies
bodiesDom: null
});
// Subscribers
addSubscribablesTo(this, {
message: message => {
clearTimeout(this.MessageSeenTimer);
elementById('rl-right').classList.toggle('message-selected', !!message);
if (message) {
SettingsUserStore.usePreviewPane() || AppUserStore.focusedState(ScopeMessageView);
} else {
AppUserStore.focusedState(ScopeMessageList);
exitFullscreen();
}
[...(this.bodiesDom()?.children || [])].forEach(el => el.hidden = true);
},
});
this.purgeCache = this.purgeCache.throttle(30000);
}
purgeCache(all) {
const children = this.bodiesDom()?.children || [];
let i = Math.max(0, children.length - (all ? 0 : 15));
while (i--) {
children[i].remove();
if (children[i].message) {
children[i].message.body = null;
}
}
}
};