Complete internal code renaming from FocusTask to Immerse types

- Renamed FocusTask → ImmerseTask
- Renamed FocusTaskSettings → ImmerseSettings
- Renamed FocusTaskData → ImmerseData
- Updated CSS classes: focus-task-status-* → immerse-status-*
- Updated package release script zip filename
- Updated remaining README references
- Rebuilt main.js with new type names
This commit is contained in:
2025-11-23 20:12:28 +01:00
parent 331a2b41df
commit 683c4ddafe
7 changed files with 35 additions and 35 deletions

View File

@@ -169,7 +169,7 @@ When enabled, completed tasks are automatically appended to your daily note with
- [x] Write project proposal | 💼 Work | ⏱️ 45min / 30min (15min over estimate) | ✅ 14:30 - [x] Write project proposal | 💼 Work | ⏱️ 45min / 30min (15min over estimate) | ✅ 14:30
``` ```
**Requirements:** The core "Daily Notes" plugin must be enabled in Obsidian settings. Focus Task respects your Daily Notes configuration (folder, date format, and template). **Requirements:** The core "Daily Notes" plugin must be enabled in Obsidian settings. Immerse respects your Daily Notes configuration (folder, date format, and template).
### Lists ### Lists
Customize your task lists with: Customize your task lists with:
@@ -182,7 +182,7 @@ Default lists: Work 💼, Personal 🏠, Learning 📚
## 🎨 Customization ## 🎨 Customization
### Adding Custom Lists ### Adding Custom Lists
1. Go to Settings → Focus Task → Lists 1. Go to Settings → Immerse → Lists
2. Click "+ Add List" 2. Click "+ Add List"
3. Set the name, emoji, and color 3. Set the name, emoji, and color
4. Click Save 4. Click Save

View File

@@ -914,7 +914,7 @@ var ImmersePlugin = class extends import_obsidian3.Plugin {
// ============ Status Bar Timer ============ // ============ Status Bar Timer ============
createStatusBar() { createStatusBar() {
this.statusBarEl = this.addStatusBarItem(); this.statusBarEl = this.addStatusBarItem();
this.statusBarEl.addClass("focus-task-status-bar"); this.statusBarEl.addClass("immerse-status-bar");
this.updateStatusBar(); this.updateStatusBar();
this.statusBarEl.addEventListener("click", () => { this.statusBarEl.addEventListener("click", () => {
this.activateView(); this.activateView();
@@ -929,10 +929,10 @@ var ImmersePlugin = class extends import_obsidian3.Plugin {
const timeStr = this.formatTime(this.currentTimerSeconds); const timeStr = this.formatTime(this.currentTimerSeconds);
const icon = this.isTimerRunning ? "\u25B6" : "\u23F8"; const icon = this.isTimerRunning ? "\u25B6" : "\u23F8";
this.statusBarEl.setText(`\u26A1 ${icon} ${timeStr} - ${taskName}${task && task.text.length > 20 ? "..." : ""}`); this.statusBarEl.setText(`\u26A1 ${icon} ${timeStr} - ${taskName}${task && task.text.length > 20 ? "..." : ""}`);
this.statusBarEl.addClass("focus-task-status-active"); this.statusBarEl.addClass("immerse-status-active");
} else { } else {
this.statusBarEl.setText("\u26A1 Immerse"); this.statusBarEl.setText("\u26A1 Immerse");
this.statusBarEl.removeClass("focus-task-status-active"); this.statusBarEl.removeClass("immerse-status-active");
} }
} }
// ============ Sounds & Celebrations ============ // ============ Sounds & Celebrations ============

View File

@@ -51,7 +51,7 @@ async function packageRelease() {
console.log(`\nFiles included:`); console.log(`\nFiles included:`);
FILES_TO_INCLUDE.forEach(file => console.log(` - ${file}`)); FILES_TO_INCLUDE.forEach(file => console.log(` - ${file}`));
console.log(`\n💡 Tip: You can now upload these files from the '${RELEASE_DIR}' directory to your Gitea release.`); console.log(`\n💡 Tip: You can now upload these files from the '${RELEASE_DIR}' directory to your Gitea release.`);
console.log(`💡 Tip: To create a zip, run: cd ${RELEASE_DIR} && zip -r ../focus-task-${manifest.version}.zip *`); console.log(`💡 Tip: To create a zip, run: cd ${RELEASE_DIR} && zip -r ../immerse-${manifest.version}.zip *`);
} catch (error) { } catch (error) {
console.error('❌ Error packaging release:', error); console.error('❌ Error packaging release:', error);

View File

@@ -9,9 +9,9 @@ import {
} from 'obsidian'; } from 'obsidian';
import { import {
FocusTask, ImmerseTask,
FocusTaskSettings, ImmerseSettings,
FocusTaskData, ImmerseData,
DEFAULT_SETTINGS, DEFAULT_SETTINGS,
DEFAULT_DATA, DEFAULT_DATA,
VIEW_TYPE_IMMERSE, VIEW_TYPE_IMMERSE,
@@ -26,8 +26,8 @@ import { QuickAddTaskModal } from './modals';
// ============ Main Plugin Class ============ // ============ Main Plugin Class ============
export default class ImmersePlugin extends Plugin { export default class ImmersePlugin extends Plugin {
settings: FocusTaskSettings; settings: ImmerseSettings;
data: FocusTaskData; data: ImmerseData;
// Timer state // Timer state
timerInterval: number | null = null; timerInterval: number | null = null;
@@ -183,7 +183,7 @@ export default class ImmersePlugin extends Plugin {
// ============ Task Management ============ // ============ Task Management ============
createTask(text: string, estimatedMinutes: number = this.settings.defaultEstimateMinutes, list: string = 'work'): FocusTask { createTask(text: string, estimatedMinutes: number = this.settings.defaultEstimateMinutes, list: string = 'work'): ImmerseTask {
return { return {
id: this.generateId(), id: this.generateId(),
text, text,
@@ -201,13 +201,13 @@ export default class ImmersePlugin extends Plugin {
return Date.now().toString(36) + Math.random().toString(36).substr(2); return Date.now().toString(36) + Math.random().toString(36).substr(2);
} }
addTask(task: FocusTask) { addTask(task: ImmerseTask) {
this.data.tasks.push(task); this.data.tasks.push(task);
this.saveAllData(); this.saveAllData();
this.refreshView(); this.refreshView();
} }
updateTask(taskId: string, updates: Partial<FocusTask>) { updateTask(taskId: string, updates: Partial<ImmerseTask>) {
const task = this.data.tasks.find(t => t.id === taskId); const task = this.data.tasks.find(t => t.id === taskId);
if (task) { if (task) {
Object.assign(task, updates); Object.assign(task, updates);
@@ -578,9 +578,9 @@ export default class ImmersePlugin extends Plugin {
createStatusBar() { createStatusBar() {
this.statusBarEl = this.addStatusBarItem(); this.statusBarEl = this.addStatusBarItem();
this.statusBarEl.addClass('focus-task-status-bar'); this.statusBarEl.addClass('immerse-status-bar');
this.updateStatusBar(); this.updateStatusBar();
// Click to open panel // Click to open panel
this.statusBarEl.addEventListener('click', () => { this.statusBarEl.addEventListener('click', () => {
this.activateView(); this.activateView();
@@ -595,18 +595,18 @@ export default class ImmersePlugin extends Plugin {
const taskName = this.isBreakMode ? '☕ Break' : (task?.text.substring(0, 20) || 'Task'); const taskName = this.isBreakMode ? '☕ Break' : (task?.text.substring(0, 20) || 'Task');
const timeStr = this.formatTime(this.currentTimerSeconds); const timeStr = this.formatTime(this.currentTimerSeconds);
const icon = this.isTimerRunning ? '▶' : '⏸'; const icon = this.isTimerRunning ? '▶' : '⏸';
this.statusBarEl.setText(`${icon} ${timeStr} - ${taskName}${task && task.text.length > 20 ? '...' : ''}`); this.statusBarEl.setText(`${icon} ${timeStr} - ${taskName}${task && task.text.length > 20 ? '...' : ''}`);
this.statusBarEl.addClass('focus-task-status-active'); this.statusBarEl.addClass('immerse-status-active');
} else { } else {
this.statusBarEl.setText('⚡ Immerse'); this.statusBarEl.setText('⚡ Immerse');
this.statusBarEl.removeClass('focus-task-status-active'); this.statusBarEl.removeClass('immerse-status-active');
} }
} }
// ============ Sounds & Celebrations ============ // ============ Sounds & Celebrations ============
showCelebration(task: FocusTask) { showCelebration(task: ImmerseTask) {
let messages = CELEBRATION_MESSAGES; let messages = CELEBRATION_MESSAGES;
let extraMessage = ''; let extraMessage = '';
@@ -673,7 +673,7 @@ export default class ImmersePlugin extends Plugin {
// ============ Daily Note Logging ============ // ============ Daily Note Logging ============
async logTaskToDailyNote(task: FocusTask) { async logTaskToDailyNote(task: ImmerseTask) {
try { try {
const list = this.settings.lists.find(l => l.id === task.list); const list = this.settings.lists.find(l => l.id === task.list);
@@ -862,15 +862,15 @@ export default class ImmersePlugin extends Plugin {
}); });
} }
getTasksByList(listId: string): FocusTask[] { getTasksByList(listId: string): ImmerseTask[] {
return this.data.tasks.filter(t => t.list === listId); return this.data.tasks.filter(t => t.list === listId);
} }
getPendingTasks(): FocusTask[] { getPendingTasks(): ImmerseTask[] {
return this.data.tasks.filter(t => !t.completed); return this.data.tasks.filter(t => !t.completed);
} }
getTodaysTasks(): FocusTask[] { getTodaysTasks(): ImmerseTask[] {
const today = new Date().toDateString(); const today = new Date().toDateString();
return this.data.tasks.filter(t => { return this.data.tasks.filter(t => {
if (t.scheduledDate === today) return true; if (t.scheduledDate === today) return true;

View File

@@ -5,7 +5,7 @@ import {
Setting, Setting,
} from 'obsidian'; } from 'obsidian';
import { FocusTask } from './types'; import { ImmerseTask } from './types';
import ImmersePlugin from './main'; import ImmersePlugin from './main';
// ============ Quick Add Task Modal ============ // ============ Quick Add Task Modal ============
@@ -113,9 +113,9 @@ export class QuickAddTaskModal extends Modal {
export class EditTaskModal extends Modal { export class EditTaskModal extends Modal {
plugin: ImmersePlugin; plugin: ImmersePlugin;
task: FocusTask; task: ImmerseTask;
constructor(app: App, plugin: ImmersePlugin, task: FocusTask) { constructor(app: App, plugin: ImmersePlugin, task: ImmerseTask) {
super(app); super(app);
this.plugin = plugin; this.plugin = plugin;
this.task = { ...task }; this.task = { ...task };

View File

@@ -1,6 +1,6 @@
// ============ Types & Interfaces ============ // ============ Types & Interfaces ============
export interface FocusTask { export interface ImmerseTask {
id: string; id: string;
text: string; text: string;
completed: boolean; completed: boolean;
@@ -21,7 +21,7 @@ export interface TaskList {
icon: string; icon: string;
} }
export interface FocusTaskSettings { export interface ImmerseSettings {
pomodoroWorkMinutes: number; pomodoroWorkMinutes: number;
pomodoroBreakMinutes: number; pomodoroBreakMinutes: number;
longBreakMinutes: number; longBreakMinutes: number;
@@ -36,8 +36,8 @@ export interface FocusTaskSettings {
logToDaily: boolean; logToDaily: boolean;
} }
export interface FocusTaskData { export interface ImmerseData {
tasks: FocusTask[]; tasks: ImmerseTask[];
completedToday: number; completedToday: number;
totalFocusMinutesToday: number; totalFocusMinutesToday: number;
streak: number; streak: number;
@@ -45,7 +45,7 @@ export interface FocusTaskData {
pomodorosCompleted: number; pomodorosCompleted: number;
} }
export const DEFAULT_SETTINGS: FocusTaskSettings = { export const DEFAULT_SETTINGS: ImmerseSettings = {
pomodoroWorkMinutes: 25, pomodoroWorkMinutes: 25,
pomodoroBreakMinutes: 5, pomodoroBreakMinutes: 5,
longBreakMinutes: 15, longBreakMinutes: 15,
@@ -64,7 +64,7 @@ export const DEFAULT_SETTINGS: FocusTaskSettings = {
logToDaily: false, logToDaily: false,
}; };
export const DEFAULT_DATA: FocusTaskData = { export const DEFAULT_DATA: ImmerseData = {
tasks: [], tasks: [],
completedToday: 0, completedToday: 0,
totalFocusMinutesToday: 0, totalFocusMinutesToday: 0,

View File

@@ -3,7 +3,7 @@ import {
WorkspaceLeaf, WorkspaceLeaf,
} from 'obsidian'; } from 'obsidian';
import { VIEW_TYPE_IMMERSE, FocusTask } from './types'; import { VIEW_TYPE_IMMERSE, ImmerseTask } from './types';
import { QuickAddTaskModal, EditTaskModal } from './modals'; import { QuickAddTaskModal, EditTaskModal } from './modals';
import ImmersePlugin from './main'; import ImmersePlugin from './main';
@@ -324,7 +324,7 @@ export class ImmerseView extends ItemView {
} }
} }
renderTaskItem(container: Element, task: FocusTask) { renderTaskItem(container: Element, task: ImmerseTask) {
const list = this.plugin.settings.lists.find(l => l.id === task.list); const list = this.plugin.settings.lists.find(l => l.id === task.list);
const taskEl = container.createEl('div', { const taskEl = container.createEl('div', {