Skip to content

Commit d92d70b

Browse files
committed
Fix: incorrect state judgment && error lastreview time
1 parent ed95ad5 commit d92d70b

File tree

1 file changed

+38
-13
lines changed

1 file changed

+38
-13
lines changed

src/popup/util/fsrs.js

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,21 @@ const qualityToRating = (quality) => {
2626
export const calculateNextReview = (problem, feedback) => {
2727
try {
2828
const now = new Date();
29-
const lastReview = problem.fsrsState && problem.fsrsState.lastReview
30-
? new Date(problem.fsrsState.lastReview)
31-
: new Date(problem.submissionTime || now.getTime());
29+
30+
// 确保有一个有效的 lastReview 日期
31+
let lastReview;
32+
if (problem.fsrsState && problem.fsrsState.lastReview) {
33+
lastReview = new Date(problem.fsrsState.lastReview);
34+
} else if (problem.submissionTime) {
35+
lastReview = new Date(problem.submissionTime);
36+
} else {
37+
lastReview = new Date(now.getTime()); // 默认为昨天
38+
}
39+
40+
// 检查日期是否有效
41+
if (isNaN(lastReview.getTime())) {
42+
lastReview = new Date(now.getTime()); // 如果无效,使用昨天
43+
}
3244

3345
// 如果没有 fsrsState,创建一个默认的
3446
if (!problem.fsrsState) {
@@ -38,46 +50,59 @@ export const calculateNextReview = (problem, feedback) => {
3850
stability: card.stability,
3951
difficulty: card.difficulty,
4052
state: card.state,
41-
reps: card.reps,
42-
lapses: card.lapses
53+
reviewCount: card.reps,
54+
lapses: card.lapses,
55+
lastReview: +lastReview // 存储为时间戳
4356
}
4457
});
4558
}
46-
let card = problem.fsrsState
59+
let card = problem.fsrsState;
60+
61+
62+
63+
// 确保 nextReview 有效
64+
if (!card.nextReview || isNaN(card.nextReview)) {
65+
card.nextReview = +lastReview; // 默认为一天后
66+
}
4767

4868
const rating = qualityToRating(feedback.quality);
69+
70+
// 确保所有参数都有有效值
71+
const scheduledDays = Math.max(0, Math.floor((card.nextReview - card.lastReview) / (1000 * 60 * 60 * 24)));
72+
const elapsedDays = Math.max(0, (now.getTime() - lastReview.getTime()) / (1000 * 60 * 60 * 24));
73+
4974
const result = fsrs.next({
5075
due: card.nextReview,
5176
stability: card.stability,
5277
difficulty: card.difficulty,
53-
elapsed_days: (now.getTime() - lastReview.getTime()) / (1000 * 60 * 60 * 24),
54-
scheduled_days: Math.floor((card.nextReview - card.lastReview) / (1000 * 60 * 60 * 24)),
78+
elapsed_days: elapsedDays,
79+
scheduled_days: scheduledDays,
5580
reps: card.reviewCount,
5681
lapse_count: card.lapses,
5782
state: card.state,
58-
last_review: card.lastReview || undefined,
83+
last_review: lastReview, // 使用已经转换好的 Date 对象
5984
}, now, rating);
6085

61-
6286
return {
6387
/**长期调度模式,ivl一定大于1d */
6488
nextReview: +result.card.due,
6589
stability: result.card.stability,
6690
difficulty: result.card.difficulty,
6791
state: result.card.state,
68-
reps: result.card.reps,
92+
reviewCount: result.card.reps,
6993
lapses: result.card.lapses
7094
};
7195
} catch (error) {
7296
console.error('Error in calculateNextReview:', error);
97+
const now = new Date(); // 在 catch 块中定义 now 变量
7398
return {
7499
nextReview: now.getTime() + (24 * 60 * 60 * 1000),
75100
stability: problem.fsrsState.stability || S_MIN,
76101
/** ref: https://github.com/open-spaced-repetition/ts-fsrs/blob/5eabd189d4740027ce1018cc968e67ca46c048a3/src/fsrs/default.ts#L20-L40 */
77102
difficulty: problem.fsrsState.difficulty || params.w[4],
78103
/** 长期调度下状态一定是New或Review */
79104
state: problem.fsrsState.state || State.Review,
80-
reps: (problem.fsrsState.reviewCount || 0) + 1,
105+
reviewCount: (problem.fsrsState.reviewCount || 0) + 1,
81106
lapses: problem.fsrsState.lapses || 0
82107
};
83108
}
@@ -106,7 +131,7 @@ export const updateProblemWithFSRS = (problem, feedback) => {
106131
difficulty: fsrsResult.difficulty,
107132
stability: fsrsResult.stability,
108133
state: fsrsResult.state,
109-
lastReview: fsrsResult.lastReview,
134+
lastReview: now,
110135
nextReview: fsrsResult.nextReview,
111136
reviewCount: fsrsResult.reps,
112137
lapses: fsrsResult.lapses,

0 commit comments

Comments
 (0)