Release v1.1.4: Pomodoro & Stopwatch Mode Streamlining
Streamlined timer modes with bug fixes and code cleanup: Bug Fixes: - Fixed "POMODORO COMPLETE" showing in stopwatch mode - Fixed break timer showing pomodoro notices in stopwatch mode - Fixed pause/resume resetting timer to 0 in stopwatch mode - Fixed "Continue Working" button appearing in stopwatch mode - Fixed "Skip Break" button changing to "Continue" incorrectly Improvements: - Stopwatch mode now completely independent from pomodoro workflow - Removed break functionality from stopwatch mode (only Pause, Complete, Stop buttons) - Stopwatch mode maintains "FOCUSING ON" label throughout session - Cleaned up dead code (wasStopwatchBeforeBreak flag and related logic) - Simplified break resume logic (always returns to pomodoro mode) Technical: - Added isStopwatchMode flag for proper mode tracking - Fixed toggleTimer to handle stopwatch count-up vs pomodoro countdown - Removed unnecessary break integration code from stopwatch workflow
This commit is contained in:
16
src/main.ts
16
src/main.ts
@@ -35,6 +35,7 @@ export default class ImmersePlugin extends Plugin {
|
||||
currentTimerSeconds: number = 0;
|
||||
isTimerRunning: boolean = false;
|
||||
isBreakMode: boolean = false;
|
||||
isStopwatchMode: boolean = false;
|
||||
activeTaskId: string | null = null;
|
||||
pomodoroCount: number = 0;
|
||||
|
||||
@@ -551,6 +552,7 @@ export default class ImmersePlugin extends Plugin {
|
||||
this.activeTaskId = taskId;
|
||||
task.isActive = true;
|
||||
this.isBreakMode = false;
|
||||
this.isStopwatchMode = true;
|
||||
this.currentTimerSeconds = 0;
|
||||
this.isTimerRunning = true;
|
||||
this.secondsWorkedOnCurrentTask = task.actualMinutes * 60;
|
||||
@@ -610,6 +612,7 @@ export default class ImmersePlugin extends Plugin {
|
||||
this.activeTaskId = taskId;
|
||||
task.isActive = true;
|
||||
this.isBreakMode = false;
|
||||
this.isStopwatchMode = false;
|
||||
this.currentTimerSeconds = this.settings.pomodoroWorkMinutes * 60;
|
||||
this.isTimerRunning = true;
|
||||
|
||||
@@ -766,8 +769,14 @@ export default class ImmersePlugin extends Plugin {
|
||||
const elapsedMs = now - this.timerStartTimestamp;
|
||||
const elapsedSeconds = Math.floor(elapsedMs / 1000);
|
||||
|
||||
// Update timer (countdown from paused position)
|
||||
this.currentTimerSeconds = Math.max(0, this.pausedTimeRemaining - elapsedSeconds);
|
||||
// Update timer based on mode
|
||||
if (this.pausedTimeRemaining === 0 || this.isStopwatchMode) {
|
||||
// Stopwatch mode - count up from paused position
|
||||
this.currentTimerSeconds = this.pausedTimeRemaining + elapsedSeconds;
|
||||
} else {
|
||||
// Countdown mode (pomodoro/break) - count down from paused position
|
||||
this.currentTimerSeconds = Math.max(0, this.pausedTimeRemaining - elapsedSeconds);
|
||||
}
|
||||
|
||||
if (task && !this.isBreakMode) {
|
||||
// Update actual time worked
|
||||
@@ -783,7 +792,7 @@ export default class ImmersePlugin extends Plugin {
|
||||
this.updateStatusBar();
|
||||
this.updateTimerDisplay();
|
||||
|
||||
if (this.currentTimerSeconds <= 0) {
|
||||
if (this.currentTimerSeconds <= 0 && !this.isStopwatchMode) {
|
||||
this.handlePomodoroEnd();
|
||||
}
|
||||
}, 1000);
|
||||
@@ -814,6 +823,7 @@ export default class ImmersePlugin extends Plugin {
|
||||
}
|
||||
|
||||
this.isTimerRunning = false;
|
||||
this.isStopwatchMode = false;
|
||||
this.activeTaskId = null;
|
||||
this.secondsWorkedOnCurrentTask = 0;
|
||||
this.timerStartTimestamp = 0;
|
||||
|
||||
14
src/view.ts
14
src/view.ts
@@ -154,7 +154,13 @@ export class ImmerseView extends ItemView {
|
||||
const breakLabel = this.plugin.currentTimerSeconds > 0 ? '☕ BREAK TIME' : '✨ BREAK COMPLETE';
|
||||
activeCard.createEl('div', { cls: 'immerse-active-label', text: breakLabel });
|
||||
} else {
|
||||
const workLabel = this.plugin.currentTimerSeconds > 0 ? '🎯 FOCUSING ON' : '🍅 POMODORO COMPLETE';
|
||||
// Determine label based on whether timer is active and mode (stopwatch vs pomodoro)
|
||||
let workLabel: string;
|
||||
if (this.plugin.currentTimerSeconds > 0 || this.plugin.isStopwatchMode) {
|
||||
workLabel = '🎯 FOCUSING ON';
|
||||
} else {
|
||||
workLabel = '🍅 POMODORO COMPLETE';
|
||||
}
|
||||
activeCard.createEl('div', { cls: 'immerse-active-label', text: workLabel });
|
||||
}
|
||||
|
||||
@@ -234,8 +240,8 @@ export class ImmerseView extends ItemView {
|
||||
}
|
||||
} else {
|
||||
// Work mode controls
|
||||
if (this.plugin.currentTimerSeconds > 0) {
|
||||
// Work session still running
|
||||
if (this.plugin.currentTimerSeconds > 0 || this.plugin.isStopwatchMode) {
|
||||
// Work session still running (or stopwatch mode active)
|
||||
this.pauseBtnEl = controls.createEl('button', { cls: 'immerse-btn immerse-btn-secondary' });
|
||||
this.pauseBtnEl.innerHTML = this.plugin.isTimerRunning ? '⏸ Pause' : '▶ Resume';
|
||||
this.pauseBtnEl.addEventListener('click', () => this.plugin.toggleTimer());
|
||||
@@ -248,7 +254,7 @@ export class ImmerseView extends ItemView {
|
||||
stopBtn.innerHTML = '✕ Stop';
|
||||
stopBtn.addEventListener('click', () => this.plugin.stopTimer());
|
||||
} else {
|
||||
// Work session finished - show break and completion options
|
||||
// Pomodoro session finished - show break and completion options
|
||||
const startBreakBtn = controls.createEl('button', { cls: 'immerse-btn immerse-btn-secondary' });
|
||||
startBreakBtn.innerHTML = '☕ Start Break';
|
||||
startBreakBtn.addEventListener('click', () => this.plugin.startBreak());
|
||||
|
||||
Reference in New Issue
Block a user