General Bug fixes on Timers/Breaks
This commit is contained in:
73
src/main.ts
73
src/main.ts
@@ -36,9 +36,10 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
isBreakMode: boolean = false;
|
||||
activeTaskId: string | null = null;
|
||||
pomodoroCount: number = 0;
|
||||
|
||||
|
||||
// Focus time tracking (in seconds for accuracy)
|
||||
private focusSecondsToday: number = 0;
|
||||
private secondsWorkedOnCurrentTask: number = 0;
|
||||
|
||||
// Status bar element
|
||||
statusBarEl: HTMLElement | null = null;
|
||||
@@ -263,6 +264,7 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
this.isBreakMode = false;
|
||||
this.currentTimerSeconds = 0;
|
||||
this.isTimerRunning = true;
|
||||
this.secondsWorkedOnCurrentTask = task.actualMinutes * 60;
|
||||
|
||||
// Full refresh to show the active task card
|
||||
this.refreshView();
|
||||
@@ -271,7 +273,8 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
// Start interval (count up mode - stopwatch)
|
||||
this.timerInterval = window.setInterval(() => {
|
||||
this.currentTimerSeconds++;
|
||||
task.actualMinutes = Math.floor(this.currentTimerSeconds / 60);
|
||||
this.secondsWorkedOnCurrentTask++;
|
||||
task.actualMinutes = Math.floor(this.secondsWorkedOnCurrentTask / 60);
|
||||
|
||||
// Track focus time
|
||||
this.focusSecondsToday++;
|
||||
@@ -303,23 +306,23 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
this.currentTimerSeconds = this.settings.pomodoroWorkMinutes * 60;
|
||||
this.isTimerRunning = true;
|
||||
|
||||
// Initialize from existing actual time to preserve progress across breaks
|
||||
this.secondsWorkedOnCurrentTask = task.actualMinutes * 60;
|
||||
|
||||
// Full refresh to show the active task card
|
||||
this.refreshView();
|
||||
this.updateStatusBar();
|
||||
|
||||
// Track seconds worked for accurate focus time
|
||||
let secondsWorked = 0;
|
||||
|
||||
this.timerInterval = window.setInterval(() => {
|
||||
this.currentTimerSeconds--;
|
||||
|
||||
|
||||
if (!this.isBreakMode) {
|
||||
secondsWorked++;
|
||||
task.actualMinutes = Math.floor(secondsWorked / 60);
|
||||
this.secondsWorkedOnCurrentTask++;
|
||||
task.actualMinutes = Math.floor(this.secondsWorkedOnCurrentTask / 60);
|
||||
// Increment focus time by 1 second
|
||||
this.focusSecondsToday++;
|
||||
}
|
||||
|
||||
|
||||
// Light update - only timer display, no full refresh
|
||||
this.updateStatusBar();
|
||||
this.updateTimerDisplay();
|
||||
@@ -331,45 +334,61 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
}
|
||||
|
||||
handlePomodoroEnd() {
|
||||
// Stop the timer interval to prevent going into negative
|
||||
if (this.timerInterval) {
|
||||
window.clearInterval(this.timerInterval);
|
||||
this.timerInterval = null;
|
||||
}
|
||||
|
||||
// Set timer to 0 to ensure it doesn't show negative
|
||||
this.currentTimerSeconds = 0;
|
||||
this.isTimerRunning = false;
|
||||
|
||||
// Update displays immediately
|
||||
this.updateStatusBar();
|
||||
this.updateTimerDisplay();
|
||||
|
||||
if (!this.isBreakMode) {
|
||||
// Work session ended
|
||||
this.pomodoroCount++;
|
||||
this.data.pomodorosCompleted++;
|
||||
|
||||
|
||||
if (this.settings.enableSounds) {
|
||||
this.playAlertSound();
|
||||
}
|
||||
|
||||
|
||||
new Notice('🍅 Pomodoro complete! Time for a break.');
|
||||
|
||||
|
||||
if (this.settings.autoStartBreak) {
|
||||
this.startBreak();
|
||||
} else {
|
||||
this.stopTimer();
|
||||
this.refreshView();
|
||||
}
|
||||
} else {
|
||||
// Break ended
|
||||
// Break ended - keep timer at 0 until user resumes
|
||||
if (this.settings.enableSounds) {
|
||||
this.playAlertSound();
|
||||
}
|
||||
new Notice('⚡ Break over! Ready to focus?');
|
||||
this.isBreakMode = false;
|
||||
this.stopTimer();
|
||||
|
||||
// Keep the break card visible with timer at 0:00
|
||||
this.refreshView();
|
||||
}
|
||||
|
||||
|
||||
this.saveAllData();
|
||||
}
|
||||
|
||||
startBreak() {
|
||||
this.isBreakMode = true;
|
||||
this.isTimerRunning = true;
|
||||
const isLongBreak = this.pomodoroCount % this.settings.longBreakInterval === 0;
|
||||
this.currentTimerSeconds = (isLongBreak ? this.settings.longBreakMinutes : this.settings.pomodoroBreakMinutes) * 60;
|
||||
|
||||
|
||||
new Notice(isLongBreak ? '☕ Long break time!' : '☕ Short break time!');
|
||||
|
||||
|
||||
// Full refresh to show break state
|
||||
this.refreshView();
|
||||
|
||||
|
||||
if (!this.timerInterval) {
|
||||
this.timerInterval = window.setInterval(() => {
|
||||
this.currentTimerSeconds--;
|
||||
@@ -382,7 +401,7 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
}
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
|
||||
this.updateStatusBar();
|
||||
}
|
||||
|
||||
@@ -396,11 +415,12 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
// Resume
|
||||
this.isTimerRunning = true;
|
||||
const task = this.data.tasks.find(t => t.id === this.activeTaskId);
|
||||
|
||||
|
||||
this.timerInterval = window.setInterval(() => {
|
||||
this.currentTimerSeconds--;
|
||||
if (task && !this.isBreakMode) {
|
||||
task.actualMinutes = Math.floor((this.settings.pomodoroWorkMinutes * 60 - this.currentTimerSeconds) / 60);
|
||||
this.secondsWorkedOnCurrentTask++;
|
||||
task.actualMinutes = Math.floor(this.secondsWorkedOnCurrentTask / 60);
|
||||
// Track focus time
|
||||
this.focusSecondsToday++;
|
||||
}
|
||||
@@ -415,7 +435,7 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
} else {
|
||||
new Notice('No active task. Select a task first.');
|
||||
}
|
||||
|
||||
|
||||
// Full refresh to update pause/resume button state
|
||||
this.updateStatusBar();
|
||||
this.refreshView();
|
||||
@@ -426,16 +446,17 @@ export default class FocusTaskPlugin extends Plugin {
|
||||
window.clearInterval(this.timerInterval);
|
||||
this.timerInterval = null;
|
||||
}
|
||||
|
||||
|
||||
if (this.activeTaskId) {
|
||||
const task = this.data.tasks.find(t => t.id === this.activeTaskId);
|
||||
if (task) {
|
||||
task.isActive = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.isTimerRunning = false;
|
||||
this.activeTaskId = null;
|
||||
this.secondsWorkedOnCurrentTask = 0;
|
||||
this.updateStatusBar();
|
||||
this.saveAllData();
|
||||
this.refreshView();
|
||||
|
||||
Reference in New Issue
Block a user