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
```
**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
Customize your task lists with:
@@ -182,7 +182,7 @@ Default lists: Work 💼, Personal 🏠, Learning 📚
## 🎨 Customization
### Adding Custom Lists
1. Go to Settings → Focus Task → Lists
1. Go to Settings → Immerse → Lists
2. Click "+ Add List"
3. Set the name, emoji, and color
4. Click Save

View File

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

View File

@@ -51,7 +51,7 @@ async function packageRelease() {
console.log(`\nFiles included:`);
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(`💡 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) {
console.error('❌ Error packaging release:', error);

View File

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

View File

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

View File

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

View File

@@ -3,7 +3,7 @@ import {
WorkspaceLeaf,
} from 'obsidian';
import { VIEW_TYPE_IMMERSE, FocusTask } from './types';
import { VIEW_TYPE_IMMERSE, ImmerseTask } from './types';
import { QuickAddTaskModal, EditTaskModal } from './modals';
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 taskEl = container.createEl('div', {