remember ceval state in session storage
parent
2361f9fe3c
commit
9044b67891
|
@ -46,6 +46,12 @@ function median(values: number[]): number {
|
|||
return values.length % 2 ? values[half] : (values[half - 1] + values[half]) / 2.0;
|
||||
}
|
||||
|
||||
function enabledAfterDisable() {
|
||||
const enabledAfter = lichess.tempStorage.get('ceval.enabled-after');
|
||||
const disable = lichess.storage.get('ceval.disable');
|
||||
return !disable || enabledAfter === disable;
|
||||
}
|
||||
|
||||
export default function(opts: CevalOpts): CevalCtrl {
|
||||
const storageKey = (k: string) => {
|
||||
return opts.storageKeyPrefix ? `${opts.storageKeyPrefix}.${k}` : k;
|
||||
|
@ -81,7 +87,7 @@ export default function(opts: CevalOpts): CevalCtrl {
|
|||
const infinite = storedProp('ceval.infinite', false);
|
||||
let curEval: Tree.ClientEval | null = null;
|
||||
const allowed = prop(true);
|
||||
const enabled = prop(false);
|
||||
const enabled = prop(opts.possible && allowed() && enabledAfterDisable());
|
||||
let started: Started | false = false;
|
||||
let lastStarted: Started | false = false; // last started object (for going deeper even if stopped)
|
||||
const hovering = prop<Hovering | null>(null);
|
||||
|
@ -135,7 +141,7 @@ export default function(opts: CevalOpts): CevalCtrl {
|
|||
npsRecorder(ev);
|
||||
curEval = ev;
|
||||
opts.emit(ev, work);
|
||||
if (ev.fen !== lastEmitFen) {
|
||||
if (ev.fen !== lastEmitFen && enabledAfterDisable()) { // amnesty while auto disable not processed
|
||||
lastEmitFen = ev.fen;
|
||||
lichess.storage.fire('ceval.fen', ev.fen);
|
||||
}
|
||||
|
@ -150,7 +156,7 @@ export default function(opts: CevalOpts): CevalCtrl {
|
|||
|
||||
const start = (path: Tree.Path, steps: Step[], threatMode: boolean, deeper: boolean) => {
|
||||
|
||||
if (!enabled() || !opts.possible) return;
|
||||
if (!enabled() || !opts.possible || !enabledAfterDisable()) return;
|
||||
|
||||
isDeeper(deeper);
|
||||
const maxD = effectiveMaxDepth();
|
||||
|
@ -190,6 +196,10 @@ export default function(opts: CevalOpts): CevalCtrl {
|
|||
}
|
||||
}
|
||||
|
||||
// Notify all other tabs to disable ceval.
|
||||
lichess.storage.fire('ceval.disable');
|
||||
lichess.tempStorage.set('ceval.enabled-after', lichess.storage.get('ceval.disable')!);
|
||||
|
||||
pool.start(work);
|
||||
|
||||
started = {
|
||||
|
@ -238,7 +248,14 @@ export default function(opts: CevalOpts): CevalCtrl {
|
|||
toggle() {
|
||||
if (!opts.possible || !allowed()) return;
|
||||
stop();
|
||||
enabled(!enabled());
|
||||
if (!enabled() && !document.hidden) {
|
||||
const disable = lichess.storage.get('ceval.disable');
|
||||
if (disable) lichess.tempStorage.set('ceval.enabled-after', disable);
|
||||
enabled(true);
|
||||
} else {
|
||||
lichess.tempStorage.set('ceval.enabled-after', '');
|
||||
enabled(false);
|
||||
}
|
||||
},
|
||||
curDepth: () => curEval ? curEval.depth : 0,
|
||||
effectiveMaxDepth,
|
||||
|
|
|
@ -9,7 +9,7 @@ export { ctrl, view, winningChances };
|
|||
// stop when another tab starts. Listen only once here,
|
||||
// as the ctrl can be instantiated several times.
|
||||
// gotta do the click on the toggle to have it visually change.
|
||||
lichess.storage.make('ceval.disable').listen(_ => {
|
||||
lichess.storage.make('ceval.disable').listen(() => {
|
||||
const toggle = document.getElementById('analyse-toggle-ceval') as HTMLInputElement | undefined;
|
||||
if (toggle?.checked) toggle.click();
|
||||
});
|
||||
|
|
|
@ -144,7 +144,6 @@ export class Pool {
|
|||
}
|
||||
|
||||
start(work: Work): void {
|
||||
lichess.storage.fire('ceval.disable'); // disable on all other tabs
|
||||
this.getWorker().then(function(worker) {
|
||||
worker.start(work);
|
||||
}).catch(function(error) {
|
||||
|
|
|
@ -17,9 +17,9 @@ export function subscribe(ctrl: RoundController): void {
|
|||
// bots can cheat alright
|
||||
if (ctrl.data.player.user && ctrl.data.player.user.title === 'BOT') return;
|
||||
|
||||
// Disable ceval. Unless this game is loaded directly on a position being
|
||||
// analysed, there is plenty of time (7 moves, in most cases) for this to
|
||||
// take effect.
|
||||
// Notify tabs to disable ceval. Unless this game is loaded directly on a
|
||||
// position being analysed, there is plenty of time (7 moves, in most cases)
|
||||
// for this to take effect.
|
||||
lichess.storage.fire('ceval.disable');
|
||||
|
||||
lichess.storage.make('ceval.fen').listen(e => {
|
||||
|
|
Loading…
Reference in New Issue