mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-07-13 03:27:39 +03:00
Easier SystemFolders handling
This commit is contained in:
parent
31db5ee238
commit
547d66ebcb
13 changed files with 75 additions and 85 deletions
|
|
@ -12,6 +12,8 @@ export const
|
||||||
|
|
||||||
forEachObjectValue = (obj, fn) => Object.values(obj).forEach(fn),
|
forEachObjectValue = (obj, fn) => Object.values(obj).forEach(fn),
|
||||||
|
|
||||||
|
forEachObjectEntry = (obj, fn) => Object.entries(obj).forEach(([key, value]) => fn(key, value)),
|
||||||
|
|
||||||
pInt = (value, defaultValue = 0) => {
|
pInt = (value, defaultValue = 0) => {
|
||||||
value = parseInt(value, 10);
|
value = parseInt(value, 10);
|
||||||
return isNaN(value) || !isFinite(value) ? defaultValue : value;
|
return isNaN(value) || !isFinite(value) ? defaultValue : value;
|
||||||
|
|
@ -28,14 +30,14 @@ export const
|
||||||
&& domItem.classList.toggle('disabled', domItem.disabled = item.disabled),
|
&& domItem.classList.toggle('disabled', domItem.disabled = item.disabled),
|
||||||
|
|
||||||
addObservablesTo = (target, observables) =>
|
addObservablesTo = (target, observables) =>
|
||||||
Object.entries(observables).forEach(([key, value]) =>
|
forEachObjectEntry(observables, (key, value) =>
|
||||||
target[key] = /*isArray(value) ? ko.observableArray(value) :*/ ko.observable(value) ),
|
target[key] = /*isArray(value) ? ko.observableArray(value) :*/ ko.observable(value) ),
|
||||||
|
|
||||||
addComputablesTo = (target, computables) =>
|
addComputablesTo = (target, computables) =>
|
||||||
Object.entries(computables).forEach(([key, fn]) => target[key] = ko.computed(fn)),
|
forEachObjectEntry(computables, (key, fn) => target[key] = ko.computed(fn)),
|
||||||
|
|
||||||
addSubscribablesTo = (target, subscribables) =>
|
addSubscribablesTo = (target, subscribables) =>
|
||||||
Object.entries(subscribables).forEach(([key, fn]) => target[key].subscribe(fn)),
|
forEachObjectEntry(subscribables, (key, fn) => target[key].subscribe(fn)),
|
||||||
|
|
||||||
inFocus = () => {
|
inFocus = () => {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { AbstractCollectionModel } from 'Model/AbstractCollection';
|
import { AbstractCollectionModel } from 'Model/AbstractCollection';
|
||||||
|
|
||||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||||
import { isArray, getKeyByValue } from 'Common/Utils';
|
import { isArray, getKeyByValue, forEachObjectEntry } from 'Common/Utils';
|
||||||
import { ClientSideKeyName, FolderType, FolderMetadataKeys } from 'Common/EnumsUser';
|
import { ClientSideKeyName, FolderType, FolderMetadataKeys } from 'Common/EnumsUser';
|
||||||
import * as Cache from 'Common/Cache';
|
import * as Cache from 'Common/Cache';
|
||||||
import { Settings, SettingsGet } from 'Common/Globals';
|
import { Settings, SettingsGet } from 'Common/Globals';
|
||||||
|
|
@ -27,8 +27,14 @@ normalizeFolder = sFolderFullName => ('' === sFolderFullName
|
||||||
? sFolderFullName
|
? sFolderFullName
|
||||||
: '';
|
: '';
|
||||||
|
|
||||||
// index is FolderType value
|
const SystemFolders = {
|
||||||
let SystemFolders = [0,'','','','','','',''];
|
Inbox: 0,
|
||||||
|
Sent: 0,
|
||||||
|
Drafts: 0,
|
||||||
|
Spam: 0,
|
||||||
|
Trash: 0,
|
||||||
|
Archive: 0
|
||||||
|
};
|
||||||
|
|
||||||
export class FolderCollectionModel extends AbstractCollectionModel
|
export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
{
|
{
|
||||||
|
|
@ -52,24 +58,14 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
static reviveFromJson(object) {
|
static reviveFromJson(object) {
|
||||||
const expandedFolders = Local.get(ClientSideKeyName.ExpandedFolders);
|
const expandedFolders = Local.get(ClientSideKeyName.ExpandedFolders);
|
||||||
if (object && object.SystemFolders) {
|
if (object && object.SystemFolders) {
|
||||||
let sf = object.SystemFolders;
|
forEachObjectEntry(SystemFolders, key =>
|
||||||
SystemFolders = [
|
SystemFolders[key] = SettingsGet(key+'Folder') || object.SystemFolders[FolderType[key]]
|
||||||
/* USER */ 0,
|
);
|
||||||
/* INBOX */ sf[1],
|
|
||||||
SettingsGet('SentFolder') || sf[2],
|
|
||||||
SettingsGet('DraftFolder') || sf[3],
|
|
||||||
SettingsGet('SpamFolder') || sf[4],
|
|
||||||
SettingsGet('TrashFolder') || sf[5],
|
|
||||||
SettingsGet('ArchiveFolder') || sf[12]
|
|
||||||
// SettingsGet('TemplatesFolder') || sf[19]
|
|
||||||
// IMPORTANT: sf[10],
|
|
||||||
// FLAGGED: sf[11],
|
|
||||||
// ALL: sf[13]
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.reviveFromJson(object, oFolder => {
|
return super.reviveFromJson(object, oFolder => {
|
||||||
let oCacheFolder = Cache.getFolderFromCacheList(oFolder.FullName);
|
let oCacheFolder = Cache.getFolderFromCacheList(oFolder.FullName),
|
||||||
|
type = FolderType[getKeyByValue(SystemFolders, oFolder.FullName)];
|
||||||
|
|
||||||
if (oCacheFolder) {
|
if (oCacheFolder) {
|
||||||
oFolder.SubFolders = FolderCollectionModel.reviveFromJson(oFolder.SubFolders);
|
oFolder.SubFolders = FolderCollectionModel.reviveFromJson(oFolder.SubFolders);
|
||||||
|
|
@ -79,14 +75,13 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
if (!oCacheFolder)
|
if (!oCacheFolder)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
if (1 == SystemFolders.indexOf(oFolder.FullName)) {
|
if (1 == type) {
|
||||||
oCacheFolder.type(FolderType.Inbox);
|
oCacheFolder.type(FolderType.Inbox);
|
||||||
Cache.setFolderInboxName(oFolder.FullName);
|
Cache.setFolderInboxName(oFolder.FullName);
|
||||||
}
|
}
|
||||||
Cache.setFolder(oCacheFolder.fullNameHash, oFolder.FullName, oCacheFolder);
|
Cache.setFolder(oCacheFolder.fullNameHash, oFolder.FullName, oCacheFolder);
|
||||||
}
|
}
|
||||||
|
|
||||||
let type = SystemFolders.indexOf(oFolder.FullName);
|
|
||||||
if (1 < type) {
|
if (1 < type) {
|
||||||
oCacheFolder.type(type);
|
oCacheFolder.type(type);
|
||||||
}
|
}
|
||||||
|
|
@ -115,22 +110,15 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
storeIt() {
|
storeIt() {
|
||||||
FolderUserStore.displaySpecSetting(Settings.app('folderSpecLimit') < this.CountRec);
|
FolderUserStore.displaySpecSetting(Settings.app('folderSpecLimit') < this.CountRec);
|
||||||
|
|
||||||
if (SystemFolders &&
|
if (!(
|
||||||
!(
|
|
||||||
SettingsGet('SentFolder') +
|
SettingsGet('SentFolder') +
|
||||||
SettingsGet('DraftFolder') +
|
SettingsGet('DraftsFolder') +
|
||||||
SettingsGet('SpamFolder') +
|
SettingsGet('SpamFolder') +
|
||||||
SettingsGet('TrashFolder') +
|
SettingsGet('TrashFolder') +
|
||||||
SettingsGet('ArchiveFolder')
|
SettingsGet('ArchiveFolder')
|
||||||
)
|
)
|
||||||
) {
|
) {
|
||||||
FolderUserStore.saveSystemFolders({
|
FolderUserStore.saveSystemFolders(SystemFolders);
|
||||||
SentFolder: SystemFolders[FolderType.Sent],
|
|
||||||
DraftFolder: SystemFolders[FolderType.Drafts],
|
|
||||||
SpamFolder: SystemFolders[FolderType.Spam],
|
|
||||||
TrashFolder: SystemFolders[FolderType.Trash],
|
|
||||||
ArchiveFolder: SystemFolders[FolderType.Archive]
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FolderUserStore.folderList(this);
|
FolderUserStore.folderList(this);
|
||||||
|
|
@ -144,11 +132,11 @@ export class FolderCollectionModel extends AbstractCollectionModel
|
||||||
FolderUserStore.quotaLimit(this.quotaLimit);
|
FolderUserStore.quotaLimit(this.quotaLimit);
|
||||||
FolderUserStore.capabilities(this.Capabilities);
|
FolderUserStore.capabilities(this.Capabilities);
|
||||||
|
|
||||||
FolderUserStore.sentFolder(normalizeFolder(SettingsGet('SentFolder') || SystemFolders[2]));
|
FolderUserStore.sentFolder(normalizeFolder(SystemFolders.Sent));
|
||||||
FolderUserStore.draftFolder(normalizeFolder(SettingsGet('DraftFolder') || SystemFolders[3]));
|
FolderUserStore.draftsFolder(normalizeFolder(SystemFolders.Drafts));
|
||||||
FolderUserStore.spamFolder(normalizeFolder(SettingsGet('SpamFolder') || SystemFolders[4]));
|
FolderUserStore.spamFolder(normalizeFolder(SystemFolders.Spam));
|
||||||
FolderUserStore.trashFolder(normalizeFolder(SettingsGet('TrashFolder') || SystemFolders[5]));
|
FolderUserStore.trashFolder(normalizeFolder(SystemFolders.Trash));
|
||||||
FolderUserStore.archiveFolder(normalizeFolder(SettingsGet('ArchiveFolder') || SystemFolders[6]));
|
FolderUserStore.archiveFolder(normalizeFolder(SystemFolders.Archive));
|
||||||
|
|
||||||
// FolderUserStore.folderList.valueHasMutated();
|
// FolderUserStore.folderList.valueHasMutated();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,7 +178,7 @@ export class MessageModel extends AbstractModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
computeSenderEmail() {
|
computeSenderEmail() {
|
||||||
const list = [FolderUserStore.sentFolder(), FolderUserStore.draftFolder()].includes(this.folder) ? 'to' : 'from';
|
const list = [FolderUserStore.sentFolder(), FolderUserStore.draftsFolder()].includes(this.folder) ? 'to' : 'from';
|
||||||
this.senderEmailsString(this[list].toString(true));
|
this.senderEmailsString(this[list].toString(true));
|
||||||
this.senderClearEmailsString(this[list].toStringClear());
|
this.senderClearEmailsString(this[list].toStringClear());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ import ko from 'ko';
|
||||||
|
|
||||||
import { FolderType, FolderSortMode } from 'Common/EnumsUser';
|
import { FolderType, FolderSortMode } from 'Common/EnumsUser';
|
||||||
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
import { UNUSED_OPTION_VALUE } from 'Common/Consts';
|
||||||
import { addObservablesTo, addSubscribablesTo, addComputablesTo } from 'Common/Utils';
|
import { addObservablesTo, addSubscribablesTo, addComputablesTo, forEachObjectEntry } from 'Common/Utils';
|
||||||
import { getFolderInboxName, getFolderFromCacheList } from 'Common/Cache';
|
import { getFolderInboxName, getFolderFromCacheList } from 'Common/Cache';
|
||||||
import { Settings } from 'Common/Globals';
|
import { Settings } from 'Common/Globals';
|
||||||
//import Remote from 'Remote/User/Fetch'; Circular dependency
|
//import Remote from 'Remote/User/Fetch'; Circular dependency
|
||||||
|
|
@ -26,7 +26,7 @@ export const FolderUserStore = new class {
|
||||||
quotaUsage: 0,
|
quotaUsage: 0,
|
||||||
|
|
||||||
sentFolder: '',
|
sentFolder: '',
|
||||||
draftFolder: '',
|
draftsFolder: '',
|
||||||
spamFolder: '',
|
spamFolder: '',
|
||||||
trashFolder: '',
|
trashFolder: '',
|
||||||
archiveFolder: '',
|
archiveFolder: '',
|
||||||
|
|
@ -46,7 +46,7 @@ export const FolderUserStore = new class {
|
||||||
|
|
||||||
self.namespace = '';
|
self.namespace = '';
|
||||||
|
|
||||||
self.folderList = ko.observableArray();
|
self.folderList = ko.observableArray(/*new FolderCollectionModel*/);
|
||||||
|
|
||||||
self.capabilities = ko.observableArray();
|
self.capabilities = ko.observableArray();
|
||||||
|
|
||||||
|
|
@ -54,7 +54,7 @@ export const FolderUserStore = new class {
|
||||||
|
|
||||||
addComputablesTo(self, {
|
addComputablesTo(self, {
|
||||||
|
|
||||||
draftFolderNotEnabled: () => !self.draftFolder() || UNUSED_OPTION_VALUE === self.draftFolder(),
|
draftsFolderNotEnabled: () => !self.draftsFolder() || UNUSED_OPTION_VALUE === self.draftsFolder(),
|
||||||
|
|
||||||
currentFolderFullName: () => (self.currentFolder() ? self.currentFolder().fullName : ''),
|
currentFolderFullName: () => (self.currentFolder() ? self.currentFolder().fullName : ''),
|
||||||
currentFolderFullNameHash: () => (self.currentFolder() ? self.currentFolder().fullNameHash : ''),
|
currentFolderFullNameHash: () => (self.currentFolder() ? self.currentFolder().fullNameHash : ''),
|
||||||
|
|
@ -64,7 +64,7 @@ export const FolderUserStore = new class {
|
||||||
|
|
||||||
folderListSystemNames: () => {
|
folderListSystemNames: () => {
|
||||||
const list = [getFolderInboxName()],
|
const list = [getFolderInboxName()],
|
||||||
others = [self.sentFolder(), self.draftFolder(), self.spamFolder(), self.trashFolder(), self.archiveFolder()];
|
others = [self.sentFolder(), self.draftsFolder(), self.spamFolder(), self.trashFolder(), self.archiveFolder()];
|
||||||
|
|
||||||
self.folderList().length &&
|
self.folderList().length &&
|
||||||
others.forEach(name => name && UNUSED_OPTION_VALUE !== name && list.push(name));
|
others.forEach(name => name && UNUSED_OPTION_VALUE !== name && list.push(name));
|
||||||
|
|
@ -87,14 +87,14 @@ export const FolderUserStore = new class {
|
||||||
};
|
};
|
||||||
|
|
||||||
self.sentFolder.subscribe(fRemoveSystemFolderType(self.sentFolder), self, 'beforeChange');
|
self.sentFolder.subscribe(fRemoveSystemFolderType(self.sentFolder), self, 'beforeChange');
|
||||||
self.draftFolder.subscribe(fRemoveSystemFolderType(self.draftFolder), self, 'beforeChange');
|
self.draftsFolder.subscribe(fRemoveSystemFolderType(self.draftsFolder), self, 'beforeChange');
|
||||||
self.spamFolder.subscribe(fRemoveSystemFolderType(self.spamFolder), self, 'beforeChange');
|
self.spamFolder.subscribe(fRemoveSystemFolderType(self.spamFolder), self, 'beforeChange');
|
||||||
self.trashFolder.subscribe(fRemoveSystemFolderType(self.trashFolder), self, 'beforeChange');
|
self.trashFolder.subscribe(fRemoveSystemFolderType(self.trashFolder), self, 'beforeChange');
|
||||||
self.archiveFolder.subscribe(fRemoveSystemFolderType(self.archiveFolder), self, 'beforeChange');
|
self.archiveFolder.subscribe(fRemoveSystemFolderType(self.archiveFolder), self, 'beforeChange');
|
||||||
|
|
||||||
addSubscribablesTo(self, {
|
addSubscribablesTo(self, {
|
||||||
sentFolder: fSetSystemFolderType(FolderType.Sent),
|
sentFolder: fSetSystemFolderType(FolderType.Sent),
|
||||||
draftFolder: fSetSystemFolderType(FolderType.Drafts),
|
draftsFolder: fSetSystemFolderType(FolderType.Drafts),
|
||||||
spamFolder: fSetSystemFolderType(FolderType.Spam),
|
spamFolder: fSetSystemFolderType(FolderType.Spam),
|
||||||
trashFolder: fSetSystemFolderType(FolderType.Trash),
|
trashFolder: fSetSystemFolderType(FolderType.Trash),
|
||||||
archiveFolder: fSetSystemFolderType(FolderType.Archive)
|
archiveFolder: fSetSystemFolderType(FolderType.Archive)
|
||||||
|
|
@ -160,13 +160,13 @@ export const FolderUserStore = new class {
|
||||||
|
|
||||||
saveSystemFolders(folders) {
|
saveSystemFolders(folders) {
|
||||||
folders = folders || {
|
folders = folders || {
|
||||||
SentFolder: FolderUserStore.sentFolder(),
|
Sent: FolderUserStore.sentFolder(),
|
||||||
DraftFolder: FolderUserStore.draftFolder(),
|
Drafts: FolderUserStore.draftsFolder(),
|
||||||
SpamFolder: FolderUserStore.spamFolder(),
|
Spam: FolderUserStore.spamFolder(),
|
||||||
TrashFolder: FolderUserStore.trashFolder(),
|
Trash: FolderUserStore.trashFolder(),
|
||||||
ArchiveFolder: FolderUserStore.archiveFolder()
|
Archive: FolderUserStore.archiveFolder()
|
||||||
};
|
};
|
||||||
Object.entries(folders).forEach(([k,v])=>Settings.set(k,v));
|
forEachObjectEntry(folders, (k,v)=>Settings.set(k+'Folder',v));
|
||||||
rl.app.Remote.saveSystemFolders(null, folders);
|
rl.app.Remote.saveSystemFolders(null, folders);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
showBcc: false,
|
showBcc: false,
|
||||||
showReplyTo: false,
|
showReplyTo: false,
|
||||||
|
|
||||||
draftFolder: '',
|
draftsFolder: '',
|
||||||
draftUid: 0,
|
draftUid: 0,
|
||||||
sending: false,
|
sending: false,
|
||||||
saving: false,
|
saving: false,
|
||||||
|
|
@ -250,7 +250,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
attachmentsCount: () => this.attachments.length,
|
attachmentsCount: () => this.attachments.length,
|
||||||
attachmentsInErrorCount: () => this.attachmentsInError.length,
|
attachmentsInErrorCount: () => this.attachmentsInError.length,
|
||||||
attachmentsInProcessCount: () => this.attachmentsInProcess.length,
|
attachmentsInProcessCount: () => this.attachmentsInProcess.length,
|
||||||
isDraftFolderMessage: () => this.draftFolder() && this.draftUid(),
|
isDraftFolderMessage: () => this.draftsFolder() && this.draftUid(),
|
||||||
|
|
||||||
identitiesOptions: () =>
|
identitiesOptions: () =>
|
||||||
IdentityUserStore.map(item => ({
|
IdentityUserStore.map(item => ({
|
||||||
|
|
@ -338,7 +338,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
IdentityID: this.currentIdentity() ? this.currentIdentity().id() : '',
|
IdentityID: this.currentIdentity() ? this.currentIdentity().id() : '',
|
||||||
MessageFolder: this.draftFolder(),
|
MessageFolder: this.draftsFolder(),
|
||||||
MessageUid: this.draftUid(),
|
MessageUid: this.draftUid(),
|
||||||
SaveFolder: sSaveFolder,
|
SaveFolder: sSaveFolder,
|
||||||
To: this.to(),
|
To: this.to(),
|
||||||
|
|
@ -412,7 +412,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
sSentFolder = UNUSED_OPTION_VALUE === sSentFolder ? '' : sSentFolder;
|
sSentFolder = UNUSED_OPTION_VALUE === sSentFolder ? '' : sSentFolder;
|
||||||
|
|
||||||
setFolderHash(this.draftFolder(), '');
|
setFolderHash(this.draftsFolder(), '');
|
||||||
setFolderHash(sSentFolder, '');
|
setFolderHash(sSentFolder, '');
|
||||||
|
|
||||||
Remote.sendMessage(
|
Remote.sendMessage(
|
||||||
|
|
@ -441,7 +441,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
}
|
}
|
||||||
|
|
||||||
saveCommand() {
|
saveCommand() {
|
||||||
if (FolderUserStore.draftFolderNotEnabled()) {
|
if (FolderUserStore.draftsFolderNotEnabled()) {
|
||||||
showScreenPopup(FolderSystemPopupView, [SetSystemFoldersNotification.Draft]);
|
showScreenPopup(FolderSystemPopupView, [SetSystemFoldersNotification.Draft]);
|
||||||
} else {
|
} else {
|
||||||
this.savedError(false);
|
this.savedError(false);
|
||||||
|
|
@ -449,7 +449,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
this.autosaveStart();
|
this.autosaveStart();
|
||||||
|
|
||||||
setFolderHash(FolderUserStore.draftFolder(), '');
|
setFolderHash(FolderUserStore.draftsFolder(), '');
|
||||||
|
|
||||||
Remote.saveMessage(
|
Remote.saveMessage(
|
||||||
(iError, oData) => {
|
(iError, oData) => {
|
||||||
|
|
@ -463,18 +463,18 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
if (this.bFromDraft) {
|
if (this.bFromDraft) {
|
||||||
const message = MessageUserStore.message();
|
const message = MessageUserStore.message();
|
||||||
if (message && this.draftFolder() === message.folder && this.draftUid() == message.uid) {
|
if (message && this.draftsFolder() === message.folder && this.draftUid() == message.uid) {
|
||||||
MessageUserStore.message(null);
|
MessageUserStore.message(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.draftFolder(oData.Result.NewFolder);
|
this.draftsFolder(oData.Result.NewFolder);
|
||||||
this.draftUid(oData.Result.NewUid);
|
this.draftUid(oData.Result.NewUid);
|
||||||
|
|
||||||
this.savedTime(new Date);
|
this.savedTime(new Date);
|
||||||
|
|
||||||
if (this.bFromDraft) {
|
if (this.bFromDraft) {
|
||||||
setFolderHash(this.draftFolder(), '');
|
setFolderHash(this.draftsFolder(), '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -486,7 +486,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
this.reloadDraftFolder();
|
this.reloadDraftFolder();
|
||||||
},
|
},
|
||||||
this.getMessageRequestParams(FolderUserStore.draftFolder())
|
this.getMessageRequestParams(FolderUserStore.draftsFolder())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -499,7 +499,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
i18n('POPUPS_ASK/DESC_WANT_DELETE_MESSAGES'),
|
||||||
() => {
|
() => {
|
||||||
if (this.modalVisibility()) {
|
if (this.modalVisibility()) {
|
||||||
rl.app.deleteMessagesFromFolderWithoutCheck(this.draftFolder(), [this.draftUid()]);
|
rl.app.deleteMessagesFromFolderWithoutCheck(this.draftsFolder(), [this.draftUid()]);
|
||||||
this.closeCommand();
|
this.closeCommand();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -514,7 +514,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
this.modalVisibility() &&
|
this.modalVisibility() &&
|
||||||
!this.saving() &&
|
!this.saving() &&
|
||||||
!this.sending() &&
|
!this.sending() &&
|
||||||
!FolderUserStore.draftFolderNotEnabled() &&
|
!FolderUserStore.draftsFolderNotEnabled() &&
|
||||||
SettingsUserStore.allowDraftAutosave()
|
SettingsUserStore.allowDraftAutosave()
|
||||||
) {
|
) {
|
||||||
this.saveCommand();
|
this.saveCommand();
|
||||||
|
|
@ -536,7 +536,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
clearTimeout(this.iTimer);
|
clearTimeout(this.iTimer);
|
||||||
this.iTimer = setTimeout(()=>{
|
this.iTimer = setTimeout(()=>{
|
||||||
if (this.modalVisibility()
|
if (this.modalVisibility()
|
||||||
&& !FolderUserStore.draftFolderNotEnabled()
|
&& !FolderUserStore.draftsFolderNotEnabled()
|
||||||
&& SettingsUserStore.allowDraftAutosave()
|
&& SettingsUserStore.allowDraftAutosave()
|
||||||
&& !this.isEmptyForm(false)
|
&& !this.isEmptyForm(false)
|
||||||
&& !this.saving()
|
&& !this.saving()
|
||||||
|
|
@ -568,13 +568,13 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
}
|
}
|
||||||
|
|
||||||
reloadDraftFolder() {
|
reloadDraftFolder() {
|
||||||
const draftFolder = FolderUserStore.draftFolder();
|
const draftsFolder = FolderUserStore.draftsFolder();
|
||||||
if (draftFolder && UNUSED_OPTION_VALUE !== draftFolder) {
|
if (draftsFolder && UNUSED_OPTION_VALUE !== draftsFolder) {
|
||||||
setFolderHash(draftFolder, '');
|
setFolderHash(draftsFolder, '');
|
||||||
if (FolderUserStore.currentFolderFullName() === draftFolder) {
|
if (FolderUserStore.currentFolderFullName() === draftsFolder) {
|
||||||
rl.app.reloadMessageList(true);
|
rl.app.reloadMessageList(true);
|
||||||
} else {
|
} else {
|
||||||
rl.app.folderInformation(draftFolder);
|
rl.app.folderInformation(draftsFolder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -884,7 +884,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
this.bFromDraft = true;
|
this.bFromDraft = true;
|
||||||
|
|
||||||
this.draftFolder(message.folder);
|
this.draftsFolder(message.folder);
|
||||||
this.draftUid(message.uid);
|
this.draftUid(message.uid);
|
||||||
|
|
||||||
this.subject(sSubject);
|
this.subject(sSubject);
|
||||||
|
|
@ -1422,7 +1422,7 @@ class ComposePopupView extends AbstractViewPopup {
|
||||||
this.dragAndDropOver(false);
|
this.dragAndDropOver(false);
|
||||||
this.dragAndDropVisible(false);
|
this.dragAndDropVisible(false);
|
||||||
|
|
||||||
this.draftFolder('');
|
this.draftsFolder('');
|
||||||
this.draftUid(0);
|
this.draftUid(0);
|
||||||
|
|
||||||
this.sending(false);
|
this.sending(false);
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ class FolderSystemPopupView extends AbstractViewPopup {
|
||||||
);
|
);
|
||||||
|
|
||||||
this.sentFolder = FolderUserStore.sentFolder;
|
this.sentFolder = FolderUserStore.sentFolder;
|
||||||
this.draftFolder = FolderUserStore.draftFolder;
|
this.draftsFolder = FolderUserStore.draftsFolder;
|
||||||
this.spamFolder = FolderUserStore.spamFolder;
|
this.spamFolder = FolderUserStore.spamFolder;
|
||||||
this.trashFolder = FolderUserStore.trashFolder;
|
this.trashFolder = FolderUserStore.trashFolder;
|
||||||
this.archiveFolder = FolderUserStore.archiveFolder;
|
this.archiveFolder = FolderUserStore.archiveFolder;
|
||||||
|
|
@ -45,7 +45,7 @@ class FolderSystemPopupView extends AbstractViewPopup {
|
||||||
|
|
||||||
addSubscribablesTo(FolderUserStore, {
|
addSubscribablesTo(FolderUserStore, {
|
||||||
sentFolder: fSaveSystemFolders,
|
sentFolder: fSaveSystemFolders,
|
||||||
draftFolder: fSaveSystemFolders,
|
draftsFolder: fSaveSystemFolders,
|
||||||
spamFolder: fSaveSystemFolders,
|
spamFolder: fSaveSystemFolders,
|
||||||
trashFolder: fSaveSystemFolders,
|
trashFolder: fSaveSystemFolders,
|
||||||
archiveFolder: fSaveSystemFolders
|
archiveFolder: fSaveSystemFolders
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ export class MailMessageList extends AbstractViewRight {
|
||||||
|
|
||||||
isTrashFolder: () => (FolderUserStore.trashFolder() || 0) === MessageUserStore.listEndFolder(),
|
isTrashFolder: () => (FolderUserStore.trashFolder() || 0) === MessageUserStore.listEndFolder(),
|
||||||
|
|
||||||
isDraftFolder: () => (FolderUserStore.draftFolder() || 0) === MessageUserStore.listEndFolder(),
|
isDraftFolder: () => (FolderUserStore.draftsFolder() || 0) === MessageUserStore.listEndFolder(),
|
||||||
|
|
||||||
isSentFolder: () => (FolderUserStore.sentFolder() || 0) === MessageUserStore.listEndFolder(),
|
isSentFolder: () => (FolderUserStore.sentFolder() || 0) === MessageUserStore.listEndFolder(),
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -493,7 +493,7 @@ export class MailMessageView extends AbstractViewRight {
|
||||||
* @returns {boolean}
|
* @returns {boolean}
|
||||||
*/
|
*/
|
||||||
isDraftFolder() {
|
isDraftFolder() {
|
||||||
return MessageUserStore.message() && FolderUserStore.draftFolder() === MessageUserStore.message().folder;
|
return MessageUserStore.message() && FolderUserStore.draftsFolder() === MessageUserStore.message().folder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ abstract class FolderType
|
||||||
const DRAFTS = 3;
|
const DRAFTS = 3;
|
||||||
const JUNK = 4;
|
const JUNK = 4;
|
||||||
const TRASH = 5;
|
const TRASH = 5;
|
||||||
|
const ARCHIVE = 6;
|
||||||
const IMPORTANT = 10;
|
const IMPORTANT = 10;
|
||||||
const FLAGGED = 11;
|
const FLAGGED = 11;
|
||||||
const ARCHIVE = 12;
|
|
||||||
const ALL = 13;
|
const ALL = 13;
|
||||||
|
|
||||||
// TODO: SnappyMail
|
// TODO: SnappyMail
|
||||||
|
|
|
||||||
|
|
@ -957,7 +957,7 @@ class Actions
|
||||||
|
|
||||||
if ($oSettingsLocal instanceof Settings) {
|
if ($oSettingsLocal instanceof Settings) {
|
||||||
$aResult['SentFolder'] = (string)$oSettingsLocal->GetConf('SentFolder', '');
|
$aResult['SentFolder'] = (string)$oSettingsLocal->GetConf('SentFolder', '');
|
||||||
$aResult['DraftFolder'] = (string)$oSettingsLocal->GetConf('DraftFolder', '');
|
$aResult['DraftsFolder'] = (string)$oSettingsLocal->GetConf('DraftFolder', '');
|
||||||
$aResult['SpamFolder'] = (string)$oSettingsLocal->GetConf('SpamFolder', '');
|
$aResult['SpamFolder'] = (string)$oSettingsLocal->GetConf('SpamFolder', '');
|
||||||
$aResult['TrashFolder'] = (string)$oSettingsLocal->GetConf('TrashFolder', '');
|
$aResult['TrashFolder'] = (string)$oSettingsLocal->GetConf('TrashFolder', '');
|
||||||
$aResult['ArchiveFolder'] = (string)$oSettingsLocal->GetConf('ArchiveFolder', '');
|
$aResult['ArchiveFolder'] = (string)$oSettingsLocal->GetConf('ArchiveFolder', '');
|
||||||
|
|
|
||||||
|
|
@ -137,7 +137,7 @@ trait Accounts
|
||||||
$oSettingsLocal = $this->SettingsProvider(true)->Load($oAccount);
|
$oSettingsLocal = $this->SettingsProvider(true)->Load($oAccount);
|
||||||
if ($oSettingsLocal instanceof \RainLoop\Settings) {
|
if ($oSettingsLocal instanceof \RainLoop\Settings) {
|
||||||
$aResult['SentFolder'] = (string) $oSettingsLocal->GetConf('SentFolder', '');
|
$aResult['SentFolder'] = (string) $oSettingsLocal->GetConf('SentFolder', '');
|
||||||
$aResult['DraftFolder'] = (string) $oSettingsLocal->GetConf('DraftFolder', '');
|
$aResult['DraftsFolder'] = (string) $oSettingsLocal->GetConf('DraftFolder', '');
|
||||||
$aResult['SpamFolder'] = (string) $oSettingsLocal->GetConf('SpamFolder', '');
|
$aResult['SpamFolder'] = (string) $oSettingsLocal->GetConf('SpamFolder', '');
|
||||||
$aResult['TrashFolder'] = (string) $oSettingsLocal->GetConf('TrashFolder', '');
|
$aResult['TrashFolder'] = (string) $oSettingsLocal->GetConf('TrashFolder', '');
|
||||||
$aResult['ArchiveFolder'] = (string) $oSettingsLocal->GetConf('ArchiveFolder', '');
|
$aResult['ArchiveFolder'] = (string) $oSettingsLocal->GetConf('ArchiveFolder', '');
|
||||||
|
|
|
||||||
|
|
@ -457,11 +457,11 @@ trait Folders
|
||||||
|
|
||||||
$oSettingsLocal = $this->SettingsProvider(true)->Load($oAccount);
|
$oSettingsLocal = $this->SettingsProvider(true)->Load($oAccount);
|
||||||
|
|
||||||
$oSettingsLocal->SetConf('SentFolder', $this->GetActionParam('SentFolder', ''));
|
$oSettingsLocal->SetConf('SentFolder', $this->GetActionParam('Sent', ''));
|
||||||
$oSettingsLocal->SetConf('DraftFolder', $this->GetActionParam('DraftFolder', ''));
|
$oSettingsLocal->SetConf('DraftFolder', $this->GetActionParam('Drafts', ''));
|
||||||
$oSettingsLocal->SetConf('SpamFolder', $this->GetActionParam('SpamFolder', ''));
|
$oSettingsLocal->SetConf('SpamFolder', $this->GetActionParam('Spam', ''));
|
||||||
$oSettingsLocal->SetConf('TrashFolder', $this->GetActionParam('TrashFolder', ''));
|
$oSettingsLocal->SetConf('TrashFolder', $this->GetActionParam('Trash', ''));
|
||||||
$oSettingsLocal->SetConf('ArchiveFolder', $this->GetActionParam('ArchiveFolder', ''));
|
$oSettingsLocal->SetConf('ArchiveFolder', $this->GetActionParam('Archive', ''));
|
||||||
|
|
||||||
return $this->DefaultResponse(__FUNCTION__,
|
return $this->DefaultResponse(__FUNCTION__,
|
||||||
$this->SettingsProvider(true)->Save($oAccount, $oSettingsLocal));
|
$this->SettingsProvider(true)->Save($oAccount, $oSettingsLocal));
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<label data-i18n="FOLDER_LIST/DRAFTS_NAME"></label>
|
<label data-i18n="FOLDER_LIST/DRAFTS_NAME"></label>
|
||||||
<select data-bind="options: folderSelectList, value: draftFolder,
|
<select data-bind="options: folderSelectList, value: draftsFolder,
|
||||||
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defaultOptionsAfterRender"></select>
|
optionsText: 'name', optionsValue: 'id', optionsAfterRender: defaultOptionsAfterRender"></select>
|
||||||
</div>
|
</div>
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue