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:
2025-11-25 21:41:12 +01:00
parent 271780f48a
commit 8d6a20ff05
7 changed files with 45 additions and 15 deletions

View File

@@ -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;

View File

@@ -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());