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

21
main.js
View File

@@ -749,7 +749,12 @@ var ImmerseView = class extends import_obsidian2.ItemView {
const breakLabel = this.plugin.currentTimerSeconds > 0 ? "\u2615 BREAK TIME" : "\u2728 BREAK COMPLETE";
activeCard.createEl("div", { cls: "immerse-active-label", text: breakLabel });
} else {
const workLabel = this.plugin.currentTimerSeconds > 0 ? "\u{1F3AF} FOCUSING ON" : "\u{1F345} POMODORO COMPLETE";
let workLabel;
if (this.plugin.currentTimerSeconds > 0 || this.plugin.isStopwatchMode) {
workLabel = "\u{1F3AF} FOCUSING ON";
} else {
workLabel = "\u{1F345} POMODORO COMPLETE";
}
activeCard.createEl("div", { cls: "immerse-active-label", text: workLabel });
}
activeCard.createEl("div", { cls: "immerse-active-task-name", text: task.text });
@@ -809,7 +814,7 @@ var ImmerseView = class extends import_obsidian2.ItemView {
});
}
} else {
if (this.plugin.currentTimerSeconds > 0) {
if (this.plugin.currentTimerSeconds > 0 || this.plugin.isStopwatchMode) {
this.pauseBtnEl = controls.createEl("button", { cls: "immerse-btn immerse-btn-secondary" });
this.pauseBtnEl.innerHTML = this.plugin.isTimerRunning ? "\u23F8 Pause" : "\u25B6 Resume";
this.pauseBtnEl.addEventListener("click", () => this.plugin.toggleTimer());
@@ -1250,6 +1255,7 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
this.currentTimerSeconds = 0;
this.isTimerRunning = false;
this.isBreakMode = false;
this.isStopwatchMode = false;
this.activeTaskId = null;
this.pomodoroCount = 0;
// Timestamp-based tracking for reliable background timing
@@ -1652,6 +1658,7 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
this.activeTaskId = taskId;
task.isActive = true;
this.isBreakMode = false;
this.isStopwatchMode = true;
this.currentTimerSeconds = 0;
this.isTimerRunning = true;
this.secondsWorkedOnCurrentTask = task.actualMinutes * 60;
@@ -1690,6 +1697,7 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
this.activeTaskId = taskId;
task.isActive = true;
this.isBreakMode = false;
this.isStopwatchMode = false;
this.currentTimerSeconds = this.settings.pomodoroWorkMinutes * 60;
this.isTimerRunning = true;
this.secondsWorkedOnCurrentTask = Math.floor(task.actualMinutes * 60);
@@ -1788,7 +1796,11 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
const now = Date.now();
const elapsedMs = now - this.timerStartTimestamp;
const elapsedSeconds = Math.floor(elapsedMs / 1e3);
this.currentTimerSeconds = Math.max(0, this.pausedTimeRemaining - elapsedSeconds);
if (this.pausedTimeRemaining === 0 || this.isStopwatchMode) {
this.currentTimerSeconds = this.pausedTimeRemaining + elapsedSeconds;
} else {
this.currentTimerSeconds = Math.max(0, this.pausedTimeRemaining - elapsedSeconds);
}
if (task && !this.isBreakMode) {
this.secondsWorkedOnCurrentTask = initialSecondsWorked + elapsedSeconds;
task.actualMinutes = Math.floor(this.secondsWorkedOnCurrentTask / 60);
@@ -1797,7 +1809,7 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
}
this.updateStatusBar();
this.updateTimerDisplay();
if (this.currentTimerSeconds <= 0) {
if (this.currentTimerSeconds <= 0 && !this.isStopwatchMode) {
this.handlePomodoroEnd();
}
}, 1e3);
@@ -1822,6 +1834,7 @@ var ImmersePlugin = class extends import_obsidian4.Plugin {
}
}
this.isTimerRunning = false;
this.isStopwatchMode = false;
this.activeTaskId = null;
this.secondsWorkedOnCurrentTask = 0;
this.timerStartTimestamp = 0;