type
status
date
slug
summary
tags
category
icon
password
github 开源:yuhanbo758/obsidian-yuhanbo-task: Obsidian 智能任务管理与番茄时钟插件,集成 AI 智能拆分的任务管理系统,配备专业番茄时钟,提升工作效率。
Obsidian 是一款强大的笔记软件,通过插件扩展其功能,可以实现各种定制化的需求。本文将深入解析一款 Obsidian 任务管理与番茄时钟插件的代码,该插件集成了任务管理、番茄时钟和 AI 智能拆分功能,旨在提高用户的工作效率。
插件概述
这款插件主要由以下几个部分组成:
- 核心功能:番茄时钟、任务管理和 AI 智能拆分。
- 主要文件:
README.md
:插件的说明文档,包含功能介绍、使用方法和设置项说明。manifest.json
:插件的清单文件,包含插件的 ID、名称、版本等基本信息。package.json
:Node.js 包管理文件,包含插件的依赖项和脚本。styles.css
:插件的样式文件,用于定义插件的界面样式。main.js
:插件的主要逻辑文件,包含插件的核心功能实现。
- 技术栈:JavaScript、CSS、Obsidian API、DeepSeek API。

文件结构与功能
README.md
README.md
文件是插件的说明文档,其主要内容包括:- 功能介绍:详细描述了插件的各项功能,例如番茄时钟的设置、任务的分类和 AI 智能拆分的使用。
- 使用方法:指导用户如何安装和使用插件,包括番茄时钟的启动、任务的创建和 AI 智能拆分的步骤。
- 设置项说明:解释了插件的各项设置项,例如 API 设置、任务保存路径设置、番茄时钟设置和提示音设置。
- 命令列表:列出了插件的所有命令,例如“开始番茄时钟”、“添加新任务”等。
- 许可证:声明了插件的许可证类型,这里是 MIT 许可证。
manifest.json
manifest.json
文件是插件的清单文件,其主要内容包括:id
:插件的唯一 ID,用于标识插件。
name
:插件的名称,显示在 Obsidian 插件列表中。
version
:插件的版本号。
minAppVersion
:插件所需的最低 Obsidian 版本。
description
:插件的描述,用于简要介绍插件的功能。
author
:插件的作者。
authorUrl
:插件作者的 URL。
isDesktopOnly
:指示插件是否仅在桌面端运行。
package.json
package.json
文件是 Node.js 包管理文件,其主要内容包括:name
:插件的名称。
version
:插件的版本号。
description
:插件的描述。
main
:插件的入口文件,这里是main.js
。
author
:插件的作者。
license
:插件的许可证类型。
keywords
:插件的关键词,用于在插件市场中搜索。
styles.css
styles.css
文件是插件的样式文件,用于定义插件的界面样式。其主要内容包括:- 全局样式:定义了插件的全局样式,例如字体、颜色和边框。
- 侧边栏工具样式:定义了插件侧边栏按钮的样式。
- 番茄时钟状态栏样式:定义了番茄时钟状态栏的样式。
- 番茄时钟样式:定义了番茄时钟界面的样式。
- 弹窗通用样式:定义了插件弹窗的通用样式。
- 任务列表样式:定义了任务列表的样式。
- 任务表单样式:定义了任务表单的样式。
- 子任务样式:定义了子任务列表的样式。
- 任务进度更新弹窗样式:定义了任务进度更新弹窗的样式。
- 标签页样式:定义了标签页的样式。
- 设置页面样式:定义了插件设置页面的样式。
- 响应式样式:定义了插件的响应式样式,以适应不同屏幕尺寸。
main.js
main.js
文件是插件的主要逻辑文件,包含插件的核心功能实现。以下是 main.js
文件的主要组成部分:- 插件类
YuhanboTaskPlugin
: onload
:插件加载时执行的函数,用于初始化插件。- 加载设置:从 Obsidian 存储中加载插件设置。
- 添加设置标签页:将插件设置添加到 Obsidian 设置页面。
- 创建任务管理器:创建用于管理任务的
TaskManager
实例。 - 添加番茄时钟状态栏:在 Obsidian 状态栏中添加番茄时钟计时器。
- 添加侧边栏按钮:在 Obsidian 侧边栏中添加按钮,用于启动番茄时钟和查看任务列表。
- 添加命令:添加 Obsidian 命令,用于启动番茄时钟、添加任务和查看任务列表。
- 初始化目录:初始化任务文件夹。
- 加载所有任务:从任务文件夹中加载所有任务。
onunload
:插件卸载时执行的函数,用于清理插件。- 清理番茄时钟计时器:停止番茄时钟计时器。
- 移除状态栏:移除 Obsidian 状态栏中的番茄时钟计时器。
saveSettings
:保存插件设置到 Obsidian 存储。confirmReset
:确认重置对话框。resetTaskSystem
:重置任务系统。openTaskFolder
:打开任务文件夹。
- 番茄时钟计时器类
PomodoroTimer
: constructor
:构造函数,用于初始化番茄时钟计时器。- 设置初始状态:设置番茄时钟的初始状态为
IDLE
。 - 加载设置:加载插件设置,包括工作时长、休息时长和提示音设置。
- 创建状态栏:在 Obsidian 状态栏中创建番茄时钟计时器。
- 加载提示音:加载用户自定义的提示音文件。
setupStatusBar
:设置状态栏。loadAudio
:加载音频。playSound
:播放声音。updateStatusBar
:更新状态栏显示。formatTime
:格式化时间显示。startWorkWithTaskSelection
:启动工作与任务选择。startWork
:启动工作。startShortBreak
:启动短休息。startLongBreak
:启动长休息。startTimer
:启动计时器。handleTimerEnd
:处理计时器结束。pause
:暂停计时器。resume
:恢复计时器。reset
:重置计时器。cleanup
:清理计时器。
- 设置标签页类
YuhanboTaskSettingTab
: display
:显示设置页面。- API 设置:配置 DeepSeek API Key 和提示词文件路径。
- 任务保存路径设置:配置重复性任务、一次性任务和已完成任务的文件夹路径。
- 番茄时钟设置:配置工作和休息时间。
- 提示音设置:启用/禁用提示音,设置提示音文件路径。
- 任务管理器类
TaskManager
: constructor
:构造函数,用于初始化任务管理器。- 加载设置:加载插件设置,包括任务文件夹路径。
- 创建任务列表:创建用于存储任务的列表。
getBJDate
:获取北京时间。validateTasks
:验证任务数据。validatePaths
:验证保存路径。handleOneTimeTask
:处理一次性任务。handleRepeatingTask
:处理重复性任务。handleWeeklyTask
:处理每周任务。handleMonthlyTask
:处理每月任务。handleYearlyTask
:处理每年任务。handleDailyTask
:处理每日任务。initializeDirectories
:初始化任务文件夹。loadTasks
:从任务文件夹中加载所有任务。validateLoadedTasks
:验证加载的任务数据。generateTaskId
:生成任务 ID。getTaskById
:通过 ID 获取任务。getAllActiveTasks
:获取所有活动任务。addTask
:添加任务。appendRepeatingTaskToFile
:追加单个重复性任务到对应文件。saveTasks
:保存所有任务。saveOneTimeTasks
:保存一次性任务。saveRepeatingTasks
:保存重复性任务。saveCompletedTasks
:保存已完成任务。formatTaskToMarkdown
:将任务格式化为 Markdown 文本。getCycleNameFromCycle
:获取周期名称。deleteTask
:删除任务。updateTask
:更新任务的进度或状态。getWeekdayName
:获取星期几的中文名称。parseTasksFromFile
:解析任务文件。
- 任务选择弹窗类
TaskSelectionModal
: onOpen
:打开任务选择弹窗时执行的函数,用于显示任务列表。- 创建搜索框:创建用于搜索任务的输入框。
- 创建任务列表:创建用于显示任务的列表。
- 渲染任务列表:将任务渲染到任务列表中。
renderTaskList
:渲染任务列表。onClose
:关闭任务选择弹窗时执行的函数,用于清理弹窗。
- 任务进度更新弹窗类
TaskProgressModal
: onOpen
:打开任务进度更新弹窗时执行的函数,用于显示任务信息和进度条。- 创建任务信息:创建用于显示任务信息的区域。
- 创建进度条:创建用于显示和更新任务进度的进度条。
onClose
:关闭任务进度更新弹窗时执行的函数,用于清理弹窗。
- 任务创建和编辑弹窗类
TaskModal
: onOpen
:打开任务创建和编辑弹窗时执行的函数,用于显示任务表单。- 创建表单:创建用于输入任务信息的表单。
- 添加标题输入框:添加用于输入任务标题的输入框。
- 添加描述输入框:添加用于输入任务描述的输入框。
- 添加类型选择框:添加用于选择任务类型的选择框。
- 添加截止日期输入框:添加用于输入任务截止日期的输入框。
- 添加标签输入框:添加用于输入任务标签的输入框。
- 添加 AI 智能拆分选项:添加用于启用 AI 智能拆分功能的复选框。
- 添加保存和取消按钮:添加用于保存和取消任务的按钮。
generateSubtasksWithAI
:使用 AI 智能拆分功能生成子任务。renderSubtasks
:渲染子任务列表。getWeekdayName
:获取星期几的中文名称。onClose
:关闭任务创建和编辑弹窗时执行的函数,用于清理弹窗。
- 任务列表弹窗类
TaskListModal
: onOpen
:打开任务列表弹窗时执行的函数,用于显示任务列表。- 创建标签页:创建用于切换任务类型的标签页。
- 创建任务列表:创建用于显示任务的列表。
- 渲染任务列表:将任务渲染到任务列表中。
setActiveTab
:设置活动标签页。renderTaskList
:渲染任务列表。confirmDelete
:确认删除任务。onClose
:关闭任务列表弹窗时执行的函数,用于清理弹窗。
核心功能实现
番茄时钟
番茄时钟功能由
PomodoroTimer
类实现,主要包括以下步骤:- 设置计时器状态:根据当前状态(工作、休息、暂停)设置计时器的状态。
- 设置计时器时长:根据当前状态设置计时器的时长(工作时长、短休息时长、长休息时长)。
- 启动计时器:使用
setInterval
函数启动计时器,每秒更新状态栏显示。
- 处理计时器结束:计时器结束时,播放提示音,并根据当前状态执行相应的操作(启动休息、启动工作)。
任务管理
任务管理功能由
TaskManager
类实现,主要包括以下步骤:- 加载任务:从任务文件夹中加载所有任务,并将任务存储在任务列表中。
- 添加任务:将新任务添加到任务列表中,并保存到任务文件中。
- 删除任务:从任务列表中删除任务,并从任务文件中移除。
- 更新任务:更新任务的进度或状态,并将更新后的任务保存到任务文件中。
AI 智能拆分
AI 智能拆分功能由
TaskModal
类和 DeepSeek API 实现,主要包括以下步骤:- 获取 API Key:从插件设置中获取 DeepSeek API Key。
- 构建 API 请求:根据任务标题和描述构建 API 请求,请求 DeepSeek API 生成子任务。
- 解析 API 响应:解析 DeepSeek API 的响应,提取子任务列表。
- 渲染子任务列表:将子任务列表渲染到任务表单中。
算法与数据结构
- 日期处理:插件使用了 JavaScript 的
Date
对象来处理日期和时间,例如计算任务的截止日期和执行日期。
- 任务存储:插件使用 JavaScript 的数组来存储任务列表,并使用 JSON 格式将任务数据保存到任务文件中。
- 字符串处理:插件使用了 JavaScript 的字符串处理函数来解析任务文件,例如
split
、match
和replace
函数。
潜在限制与改进建议
- 依赖外部 API:AI 智能拆分功能依赖 DeepSeek API,如果 API 不可用或网络连接不稳定,则该功能无法正常使用。
- 建议:可以考虑添加备用 API 或本地 AI 模型,以提高插件的可用性。
- 任务文件格式:插件使用 Markdown 格式存储任务数据,如果任务文件格式不正确,则可能导致任务加载失败。
- 建议:可以考虑使用更结构化的数据格式,例如 JSON 或 YAML,以提高任务数据的可靠性。
- 提示音设置:插件的提示音设置比较简单,只支持 MP3 和 WAV 格式的音频文件。
- 建议:可以考虑添加更多提示音设置选项,例如自定义提示音时长、音量和循环次数。
编程语言与库
- JavaScript:插件的主要编程语言是 JavaScript,用于实现插件的核心功能。
- CSS:插件使用 CSS 来定义界面样式,包括全局样式、侧边栏样式、番茄时钟样式和任务列表样式。
- Obsidian API:插件使用 Obsidian API 来访问 Obsidian 的核心功能,例如加载和保存设置、创建和管理文件、添加命令和状态栏。
- DeepSeek API:插件使用 DeepSeek API 来实现 AI 智能拆分功能,用于将复杂任务拆分为多个子任务。
- moment.js:处理日期和时间。