import { App, TFile } from "obsidian"; import { Task, Category } from "./types"; export function formatDuration(milliseconds: number): string { const totalSeconds = Math.floor(milliseconds / 1000); const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; if (hours > 0) { return `${hours}h ${minutes}m ${seconds}s`; } else if (minutes > 0) { return `${minutes}m ${seconds}s`; } else { return `${seconds}s`; } } export function generateUniqueId(): string { return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } async function getDailyNote(app: App): Promise { const { vault } = app; // @ts-ignore - Access internal daily notes API const dailyNotesPlugin = app.internalPlugins.plugins["daily-notes"]; if (!dailyNotesPlugin || !dailyNotesPlugin.enabled) { throw new Error("Daily notes plugin is not enabled. Please enable it in Settings → Core plugins."); } // @ts-ignore - Access daily notes interface const { createDailyNote, getDailyNote, getAllDailyNotes } = app.internalPlugins.plugins["daily-notes"].instance; // @ts-ignore const dailyNotes = getAllDailyNotes(); // @ts-ignore const today = window.moment(); // @ts-ignore let dailyNote = getDailyNote(today, dailyNotes); if (!dailyNote) { // @ts-ignore dailyNote = await createDailyNote(today); } return dailyNote; } export async function logTaskToDailyNote( app: App, task: Task, category: Category | undefined, format: string ): Promise { try { const dailyNote = await getDailyNote(app); const duration = formatDuration(task.totalElapsed); const logEntry = format .replace("{{title}}", task.title) .replace("{{duration}}", duration) .replace("{{emoji}}", category?.emoji || "") .replace("{{category}}", category?.name || ""); const content = await app.vault.read(dailyNote); const newContent = content ? `${content}\n${logEntry}` : logEntry; await app.vault.modify(dailyNote, newContent); } catch (error) { console.error("Failed to log task to daily note:", error); throw error; } }