Lazy loaded image
obsidian插件:yuhanbo-task,智能任务管理与番茄时钟插件
00 分钟
2025-6-26
2025-6-26
type
status
date
slug
summary
tags
category
icon
password
Obsidian 是一款强大的笔记软件,通过插件扩展其功能,可以实现各种定制化的需求。本文将深入解析一款 Obsidian 任务管理与番茄时钟插件的代码,该插件集成了任务管理、番茄时钟和 AI 智能拆分功能,旨在提高用户的工作效率。

插件概述

这款插件主要由以下几个部分组成:
  1. 核心功能:番茄时钟、任务管理和 AI 智能拆分。
  1. 主要文件
      • README.md:插件的说明文档,包含功能介绍、使用方法和设置项说明。
      • manifest.json:插件的清单文件,包含插件的 ID、名称、版本等基本信息。
      • package.json:Node.js 包管理文件,包含插件的依赖项和脚本。
      • styles.css:插件的样式文件,用于定义插件的界面样式。
      • main.js:插件的主要逻辑文件,包含插件的核心功能实现。
  1. 技术栈:JavaScript、CSS、Obsidian API、DeepSeek API。
notion image

文件结构与功能

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 文件的主要组成部分:
  1. 插件类 YuhanboTaskPlugin
      • onload:插件加载时执行的函数,用于初始化插件。
        • 加载设置:从 Obsidian 存储中加载插件设置。
        • 添加设置标签页:将插件设置添加到 Obsidian 设置页面。
        • 创建任务管理器:创建用于管理任务的 TaskManager 实例。
        • 添加番茄时钟状态栏:在 Obsidian 状态栏中添加番茄时钟计时器。
        • 添加侧边栏按钮:在 Obsidian 侧边栏中添加按钮,用于启动番茄时钟和查看任务列表。
        • 添加命令:添加 Obsidian 命令,用于启动番茄时钟、添加任务和查看任务列表。
        • 初始化目录:初始化任务文件夹。
        • 加载所有任务:从任务文件夹中加载所有任务。
      • onunload:插件卸载时执行的函数,用于清理插件。
        • 清理番茄时钟计时器:停止番茄时钟计时器。
        • 移除状态栏:移除 Obsidian 状态栏中的番茄时钟计时器。
      • saveSettings:保存插件设置到 Obsidian 存储。
      • confirmReset:确认重置对话框。
      • resetTaskSystem:重置任务系统。
      • openTaskFolder:打开任务文件夹。
  1. 番茄时钟计时器类 PomodoroTimer
      • constructor:构造函数,用于初始化番茄时钟计时器。
        • 设置初始状态:设置番茄时钟的初始状态为 IDLE
        • 加载设置:加载插件设置,包括工作时长、休息时长和提示音设置。
        • 创建状态栏:在 Obsidian 状态栏中创建番茄时钟计时器。
        • 加载提示音:加载用户自定义的提示音文件。
      • setupStatusBar:设置状态栏。
      • loadAudio:加载音频。
      • playSound:播放声音。
      • updateStatusBar:更新状态栏显示。
      • formatTime:格式化时间显示。
      • startWorkWithTaskSelection:启动工作与任务选择。
      • startWork:启动工作。
      • startShortBreak:启动短休息。
      • startLongBreak:启动长休息。
      • startTimer:启动计时器。
      • handleTimerEnd:处理计时器结束。
      • pause:暂停计时器。
      • resume:恢复计时器。
      • reset:重置计时器。
      • cleanup:清理计时器。
  1. 设置标签页类 YuhanboTaskSettingTab
      • display:显示设置页面。
        • API 设置:配置 DeepSeek API Key 和提示词文件路径。
        • 任务保存路径设置:配置重复性任务、一次性任务和已完成任务的文件夹路径。
        • 番茄时钟设置:配置工作和休息时间。
        • 提示音设置:启用/禁用提示音,设置提示音文件路径。
  1. 任务管理器类 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:解析任务文件。
  1. 任务选择弹窗类 TaskSelectionModal
      • onOpen:打开任务选择弹窗时执行的函数,用于显示任务列表。
        • 创建搜索框:创建用于搜索任务的输入框。
        • 创建任务列表:创建用于显示任务的列表。
        • 渲染任务列表:将任务渲染到任务列表中。
      • renderTaskList:渲染任务列表。
      • onClose:关闭任务选择弹窗时执行的函数,用于清理弹窗。
  1. 任务进度更新弹窗类 TaskProgressModal
      • onOpen:打开任务进度更新弹窗时执行的函数,用于显示任务信息和进度条。
        • 创建任务信息:创建用于显示任务信息的区域。
        • 创建进度条:创建用于显示和更新任务进度的进度条。
      • onClose:关闭任务进度更新弹窗时执行的函数,用于清理弹窗。
  1. 任务创建和编辑弹窗类 TaskModal
      • onOpen:打开任务创建和编辑弹窗时执行的函数,用于显示任务表单。
        • 创建表单:创建用于输入任务信息的表单。
        • 添加标题输入框:添加用于输入任务标题的输入框。
        • 添加描述输入框:添加用于输入任务描述的输入框。
        • 添加类型选择框:添加用于选择任务类型的选择框。
        • 添加截止日期输入框:添加用于输入任务截止日期的输入框。
        • 添加标签输入框:添加用于输入任务标签的输入框。
        • 添加 AI 智能拆分选项:添加用于启用 AI 智能拆分功能的复选框。
        • 添加保存和取消按钮:添加用于保存和取消任务的按钮。
      • generateSubtasksWithAI:使用 AI 智能拆分功能生成子任务。
      • renderSubtasks:渲染子任务列表。
      • getWeekdayName:获取星期几的中文名称。
      • onClose:关闭任务创建和编辑弹窗时执行的函数,用于清理弹窗。
  1. 任务列表弹窗类 TaskListModal
      • onOpen:打开任务列表弹窗时执行的函数,用于显示任务列表。
        • 创建标签页:创建用于切换任务类型的标签页。
        • 创建任务列表:创建用于显示任务的列表。
        • 渲染任务列表:将任务渲染到任务列表中。
      • setActiveTab:设置活动标签页。
      • renderTaskList:渲染任务列表。
      • confirmDelete:确认删除任务。
      • onClose:关闭任务列表弹窗时执行的函数,用于清理弹窗。

核心功能实现

番茄时钟

番茄时钟功能由 PomodoroTimer 类实现,主要包括以下步骤:
  1. 设置计时器状态:根据当前状态(工作、休息、暂停)设置计时器的状态。
  1. 设置计时器时长:根据当前状态设置计时器的时长(工作时长、短休息时长、长休息时长)。
  1. 启动计时器:使用 setInterval 函数启动计时器,每秒更新状态栏显示。
  1. 处理计时器结束:计时器结束时,播放提示音,并根据当前状态执行相应的操作(启动休息、启动工作)。

任务管理

任务管理功能由 TaskManager 类实现,主要包括以下步骤:
  1. 加载任务:从任务文件夹中加载所有任务,并将任务存储在任务列表中。
  1. 添加任务:将新任务添加到任务列表中,并保存到任务文件中。
  1. 删除任务:从任务列表中删除任务,并从任务文件中移除。
  1. 更新任务:更新任务的进度或状态,并将更新后的任务保存到任务文件中。

AI 智能拆分

AI 智能拆分功能由 TaskModal 类和 DeepSeek API 实现,主要包括以下步骤:
  1. 获取 API Key:从插件设置中获取 DeepSeek API Key。
  1. 构建 API 请求:根据任务标题和描述构建 API 请求,请求 DeepSeek API 生成子任务。
  1. 解析 API 响应:解析 DeepSeek API 的响应,提取子任务列表。
  1. 渲染子任务列表:将子任务列表渲染到任务表单中。

算法与数据结构

  1. 日期处理:插件使用了 JavaScript 的 Date 对象来处理日期和时间,例如计算任务的截止日期和执行日期。
  1. 任务存储:插件使用 JavaScript 的数组来存储任务列表,并使用 JSON 格式将任务数据保存到任务文件中。
  1. 字符串处理:插件使用了 JavaScript 的字符串处理函数来解析任务文件,例如 splitmatchreplace 函数。

潜在限制与改进建议

  1. 依赖外部 API:AI 智能拆分功能依赖 DeepSeek API,如果 API 不可用或网络连接不稳定,则该功能无法正常使用。
      • 建议:可以考虑添加备用 API 或本地 AI 模型,以提高插件的可用性。
  1. 任务文件格式:插件使用 Markdown 格式存储任务数据,如果任务文件格式不正确,则可能导致任务加载失败。
      • 建议:可以考虑使用更结构化的数据格式,例如 JSON 或 YAML,以提高任务数据的可靠性。
  1. 提示音设置:插件的提示音设置比较简单,只支持 MP3 和 WAV 格式的音频文件。
      • 建议:可以考虑添加更多提示音设置选项,例如自定义提示音时长、音量和循环次数。

编程语言与库

  1. JavaScript:插件的主要编程语言是 JavaScript,用于实现插件的核心功能。
  1. CSS:插件使用 CSS 来定义界面样式,包括全局样式、侧边栏样式、番茄时钟样式和任务列表样式。
  1. Obsidian API:插件使用 Obsidian API 来访问 Obsidian 的核心功能,例如加载和保存设置、创建和管理文件、添加命令和状态栏。
  1. DeepSeek API:插件使用 DeepSeek API 来实现 AI 智能拆分功能,用于将复杂任务拆分为多个子任务。
  1. moment.js:处理日期和时间。

Mermaid 流程图

上一篇
东财股票自动化交易下载
下一篇
指数评估:A股6月19日全线下跌,板块分化明显,投资机会藏在哪里?

评论
Loading...