feat(vocab): update SRS session storage version to v3 and improve session handling
Some checks failed
Deploy to production / deploy (push) Failing after 1m3s
Some checks failed
Deploy to production / deploy (push) Failing after 1m3s
This commit is contained in:
@@ -141,7 +141,9 @@ import { normalizeComparableWithNumberWords } from '@/utils/numberAnswerVariants
|
|||||||
|
|
||||||
const PRACTICE_MIN_EXPOSURES = 3;
|
const PRACTICE_MIN_EXPOSURES = 3;
|
||||||
// The original daily batch remains stable when the dialog is reopened.
|
// The original daily batch remains stable when the dialog is reopened.
|
||||||
const SRS_SESSION_STORAGE_VERSION = 2;
|
// Keep in sync with VocabCourseView. v3 discards legacy empty sessions that
|
||||||
|
// could block cards due later on the same calendar day.
|
||||||
|
const SRS_SESSION_STORAGE_VERSION = 3;
|
||||||
const HARD_REQUIRED_CONSECUTIVE_CORRECT = 5;
|
const HARD_REQUIRED_CONSECUTIVE_CORRECT = 5;
|
||||||
const MAX_DAILY_DUE = 50;
|
const MAX_DAILY_DUE = 50;
|
||||||
const MAX_DAILY_HARD_VOCABS = 7;
|
const MAX_DAILY_HARD_VOCABS = 7;
|
||||||
|
|||||||
@@ -375,7 +375,9 @@ import { confirmAction, showApiError, showInfo, showSuccess } from '@/utils/feed
|
|||||||
import VocabPracticeDialog from '@/dialogues/socialnetwork/VocabPracticeDialog.vue';
|
import VocabPracticeDialog from '@/dialogues/socialnetwork/VocabPracticeDialog.vue';
|
||||||
import { localizeVocabCourseTitle } from '@/utils/vocabCourseTitle.js';
|
import { localizeVocabCourseTitle } from '@/utils/vocabCourseTitle.js';
|
||||||
|
|
||||||
const SRS_SESSION_STORAGE_VERSION = 2;
|
// v3 invalidates old empty daily sessions. Those could be created before a
|
||||||
|
// scheduled card became visible and then incorrectly hide today's due batch.
|
||||||
|
const SRS_SESSION_STORAGE_VERSION = 3;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'VocabCourseView',
|
name: 'VocabCourseView',
|
||||||
@@ -600,6 +602,16 @@ export default {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const total = Math.max(0, Number(session.initialTotalDue) || 0);
|
const total = Math.max(0, Number(session.initialTotalDue) || 0);
|
||||||
|
// A session with no originally scheduled cards must not take
|
||||||
|
// precedence over cards that are now due. This happened when the
|
||||||
|
// page was opened before the old time-of-day threshold and kept a
|
||||||
|
// zero-card session for the rest of the calendar day.
|
||||||
|
if (total === 0 && this.srsDueItems.length > 0) {
|
||||||
|
localStorage.removeItem(key);
|
||||||
|
this.srsTodayRemaining = null;
|
||||||
|
this.srsTodayQuota = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
const initialIds = new Set(Array.isArray(session.initialDueIds) ? session.initialDueIds : []);
|
const initialIds = new Set(Array.isArray(session.initialDueIds) ? session.initialDueIds : []);
|
||||||
const done = new Set((Array.isArray(session.doneIds) ? session.doneIds : [])
|
const done = new Set((Array.isArray(session.doneIds) ? session.doneIds : [])
|
||||||
.filter((id) => initialIds.has(id))).size;
|
.filter((id) => initialIds.has(id))).size;
|
||||||
|
|||||||
Reference in New Issue
Block a user