Faster Selector.autoSelect

This commit is contained in:
the-djmaze 2022-09-09 17:04:52 +02:00
parent 44ac2626ec
commit 0c87bbac21
4 changed files with 26 additions and 32 deletions

View file

@ -55,17 +55,15 @@ export class Selector {
this.listChecked.subscribe(items => { this.listChecked.subscribe(items => {
if (items.length) { if (items.length) {
if (null === koSelectedItem()) { if (koSelectedItem()) {
if (koSelectedItem.valueHasMutated) {
koSelectedItem.valueHasMutated();
}
} else {
koSelectedItem(null); koSelectedItem(null);
} else {
koSelectedItem.valueHasMutated?.();
} }
} else if (this.autoSelect() && koFocusedItem()) { } else if (this.autoSelect()) {
koSelectedItem(koFocusedItem()); koSelectedItem(koFocusedItem());
} }
}, this); });
let selectedItemUseCallback = true; let selectedItemUseCallback = true;
@ -78,9 +76,9 @@ export class Selector {
} else if (selectedItemUseCallback) { } else if (selectedItemUseCallback) {
this.itemSelected(); this.itemSelected();
} }
}, this); });
koFocusedItem.subscribe(item => item && (this.sLastUid = this.getItemUid(item)), this); koFocusedItem.subscribe(item => item && (this.sLastUid = this.getItemUid(item)));
/** /**
* Below code is used to keep checked/focused/selected states when array is refreshed. * Below code is used to keep checked/focused/selected states when array is refreshed.
@ -176,7 +174,7 @@ export class Selector {
this.iFocusedNextHelper = 0; this.iFocusedNextHelper = 0;
} }
if (!isChecked && !koSelectedItem() && koFocusedItem() && this.autoSelect()) { if (this.autoSelect() && !isChecked && !koSelectedItem()) {
koSelectedItem(koFocusedItem()); koSelectedItem(koFocusedItem());
} }
} }
@ -262,7 +260,7 @@ export class Selector {
* @returns {boolean} * @returns {boolean}
*/ */
autoSelect() { autoSelect() {
return !!(this.oCallbacks.AutoSelect || (()=>1))(); return !!(this.oCallbacks.AutoSelect || (()=>1))() && this.focusedItem();
} }
/** /**

View file

@ -35,7 +35,8 @@ const
rl.route.off(); rl.route.off();
hasher.replaceHash(hash); hasher.replaceHash(hash);
rl.route.on(); rl.route.on();
} },
disableAutoSelect = ko.observable(false).extend({ falseTimeout: 500 });
export const MessagelistUserStore = ko.observableArray().extend({ debounce: 0 }); export const MessagelistUserStore = ko.observableArray().extend({ debounce: 0 });
@ -59,8 +60,6 @@ addObservablesTo(MessagelistUserStore, {
focusedMessage: null focusedMessage: null
}); });
MessagelistUserStore.disableAutoSelect = ko.observable(false).extend({ falseTimeout: 500 });
// Computed Observables // Computed Observables
addComputablesTo(MessagelistUserStore, { addComputablesTo(MessagelistUserStore, {
@ -162,6 +161,11 @@ MessagelistUserStore.notifyNewMessages = (folder, newMessages) => {
} }
} }
MessagelistUserStore.canAutoSelect = () =>
!/is:unseen/.test(MessagelistUserStore.mainSearch())
&& !disableAutoSelect()
&& SettingsUserStore.usePreviewPane();
/** /**
* @param {boolean=} bDropPagePosition = false * @param {boolean=} bDropPagePosition = false
* @param {boolean=} bDropCurrentFolderCache = false * @param {boolean=} bDropCurrentFolderCache = false
@ -258,7 +262,7 @@ MessagelistUserStore.reload = (bDropPagePosition = false, bDropCurrentFolderCach
MessageUserStore.message(null); MessageUserStore.message(null);
} }
MessagelistUserStore.disableAutoSelect(true); disableAutoSelect(true);
MessagelistUserStore(collection); MessagelistUserStore(collection);
MessagelistUserStore.isIncomplete(false); MessagelistUserStore.isIncomplete(false);

View file

@ -175,7 +175,7 @@ export class MailMessageList extends AbstractViewRight {
this.selector.on('ItemGetUid', message => (message ? message.generateUid() : '')); this.selector.on('ItemGetUid', message => (message ? message.generateUid() : ''));
this.selector.on('AutoSelect', () => this.useAutoSelect()); this.selector.on('AutoSelect', () => MessagelistUserStore.canAutoSelect());
this.selector.on('UpOrDown', v => this.goToUpOrDown(v)); this.selector.on('UpOrDown', v => this.goToUpOrDown(v));
@ -366,12 +366,6 @@ export class MailMessageList extends AbstractViewRight {
return true; return true;
} }
useAutoSelect() {
return !MessagelistUserStore.disableAutoSelect()
&& !/is:unseen/.test(MessagelistUserStore.mainSearch())
&& SettingsUserStore.usePreviewPane();
}
cancelSearch() { cancelSearch() {
MessagelistUserStore.mainSearch(''); MessagelistUserStore.mainSearch('');
this.focusSearch(false); this.focusSearch(false);
@ -649,7 +643,7 @@ export class MailMessageList extends AbstractViewRight {
MessagelistUserStore.mainSearch(sLastSearchValue); MessagelistUserStore.mainSearch(sLastSearchValue);
return false; return false;
} }
if (MessageUserStore.message() && this.useAutoSelect()) { if (MessageUserStore.message() && MessagelistUserStore.canAutoSelect()) {
isFullscreen() || toggleFullscreen(); isFullscreen() || toggleFullscreen();
return false; return false;
} }

View file

@ -57,7 +57,7 @@ import { MessageModel } from 'Model/Message';
const const
oMessageScrollerDom = () => elementById('messageItem') || {}, oMessageScrollerDom = () => elementById('messageItem') || {},
currentMessage = () => MessageUserStore.message(); currentMessage = MessageUserStore.message;
export class MailMessageView extends AbstractViewRight { export class MailMessageView extends AbstractViewRight {
constructor() { constructor() {
@ -85,7 +85,7 @@ export class MailMessageView extends AbstractViewRight {
createCommand(() => { createCommand(() => {
const message = currentMessage(); const message = currentMessage();
if (message) { if (message) {
MessageUserStore.message(null); currentMessage(null);
rl.app.deleteMessagesFromFolder(folderType, message.folder, [message.uid], useFolder); rl.app.deleteMessagesFromFolder(folderType, message.folder, [message.uid], useFolder);
} }
}, this.messageVisibility); }, this.messageVisibility);
@ -219,24 +219,22 @@ export class MailMessageView extends AbstractViewRight {
} }
closeMessage() { closeMessage() {
MessageUserStore.message(null); currentMessage(null);
} }
messageEditCommand() { messageEditCommand() {
if (currentMessage()) { currentMessage() && showMessageComposer([ComposeType.Draft, currentMessage()]);
showMessageComposer([ComposeType.Draft, currentMessage()]);
}
} }
goUpCommand() { goUpCommand() {
fireEvent('mailbox.message-list.selector.go-up', fireEvent('mailbox.message-list.selector.go-up',
SettingsUserStore.usePreviewPane() || !!currentMessage() // bForceSelect !!currentMessage() // bForceSelect
); );
} }
goDownCommand() { goDownCommand() {
fireEvent('mailbox.message-list.selector.go-down', fireEvent('mailbox.message-list.selector.go-down',
SettingsUserStore.usePreviewPane() || !!currentMessage() // bForceSelect !!currentMessage() // bForceSelect
); );
} }
@ -338,7 +336,7 @@ export class MailMessageView extends AbstractViewRight {
AppUserStore.focusedState(Scope.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }
} else if (!preview) { } else if (!preview) {
MessageUserStore.message(null); currentMessage(null);
} else { } else {
AppUserStore.focusedState(Scope.MessageList); AppUserStore.focusedState(Scope.MessageList);
} }