Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

主进程主要对象类图

返回文档导航 · 技术架构 · 同步流程

本文依据当前 src/main.ts 和 src/main/ 实现,展示主要对象、职责及生命周期关系。 省略工具函数、数据传输类型和大部分私有方法,不包含渲染进程对象和托管同步服务端。

1. 入口与共享服务

src/main.ts 是装配入口,没有对应的应用类。 图中的 MainProcess 代表入口模块,WindowSession 是工厂返回的闭包对象,IpcHandlers 代表注册函数。 这些节点不是源码中额外存在的类。

classDiagram
direction TB
class MainProcess {
  <<module>>
  appReady()
  beforeQuit()
}
class WindowSession {
  <<factoryObject>>
  createAppWindow()
  getWorkspaceManager()
  getWorkspaceTargets()
  saveBeforeQuit()
}
class BrowserWindow {
  <<Electron>>
}
class WorkspaceManager
class WorkspaceStateStore
class IpcHandlers {
  <<registrationFunctions>>
  registerIpcHandlers()
  registerWorkspaceHandlers()
  registerSyncHandlers()
}
class FileAccess {
  grantDocument()
  assertDocument()
}
class DocumentWatcher {
  watch()
  ignoreOwnWrite()
  cancelOwnWrite()
}
class RecoveryStore {
  load()
  save()
}
class DeepSeekService {
  saveKey()
  ask()
}
class CommandHistoryStore {
  read()
  update()
}
class AppLog {
  flush()
}
MainProcess *-- WindowSession : 创建
MainProcess --> WorkspaceStateStore : 初始化单例
MainProcess *-- FileAccess
MainProcess *-- DocumentWatcher
MainProcess *-- RecoveryStore
MainProcess *-- DeepSeekService
MainProcess *-- CommandHistoryStore
MainProcess *-- AppLog : installAppLogging
MainProcess ..> IpcHandlers : 注入服务并注册
WindowSession "1" *-- "0..*" BrowserWindow : 笔记窗口
WindowSession "1" *-- "0..*" WorkspaceManager : 每窗口创建
BrowserWindow "1" -- "1" WorkspaceManager : 笔记窗口映射
WindowSession ..> WorkspaceStateStore : 回调保存打开列表
IpcHandlers ..> WindowSession : 回调定位请求窗口
IpcHandlers ..> FileAccess : 文档授权检查
IpcHandlers ..> DocumentWatcher : 监听与自身写入抑制
IpcHandlers ..> RecoveryStore : 草稿保存与同步保护
IpcHandlers ..> WorkspaceManager : 文件和笔记库操作
  • 每个笔记主窗口拥有一个 WorkspaceManager;未打开笔记库时,其 rootPath 为 null。
  • FileAccess、DocumentWatcher、RecoveryStore 和状态存储在进程内共享。
  • 文档变化由 DocumentWatcher 回调交给入口,更新大纲并向窗口发送 files:external-change。
  • 退出时保存窗口会话、等待剪贴板收集任务并刷新日志;窗口关闭时释放对应笔记库资源。

2. 笔记库与本地状态

classDiagram
direction LR
class WorkspaceManager {
  rootPath
  repositoryId
  filePaths
  open()
  close()
  scan()
  rename()
  move()
  search()
}
class WorkspaceStateStore {
  <<singleton>>
  initialize()
  getInstance()
  loadFromDisk()
  publicState()
  setOpenWorkspaces()
}
class RepositoryUiStateStore {
  stateFor()
  remove()
}
class RepositoryFavoriteStore {
  favorites()
}
class ManagedPathStore
class OutlineIndexStore
class WorkspaceLock {
  <<interface>>
}
class WorkspaceQueryMethods {
  <<methodGroup>>
}
WorkspaceManager --> WorkspaceStateStore : 共享应用状态
WorkspaceManager --> RepositoryUiStateStore : 注入的界面状态存储
WorkspaceManager --> RepositoryFavoriteStore : 注入的收藏存储
WorkspaceManager *-- "0..1" ManagedPathStore : 打开笔记库时创建
WorkspaceManager *-- "0..1" OutlineIndexStore : 打开笔记库时创建
WorkspaceManager --> "0..1" WorkspaceLock : 获取与释放独占锁
WorkspaceManager ..> WorkspaceQueryMethods : 原型方法装配
  • WorkspaceStateStore 管理全局设置、最近项目和窗口恢复所需的笔记库列表。
  • RepositoryUiStateStore、RepositoryFavoriteStore 由入口创建并共享,按笔记库隔离其数据。
  • ManagedPathStore 记录已管理路径,OutlineIndexStore 管理笔记库标题索引。
  • WorkspaceQueryMethods 的方法复制到 WorkspaceManager.prototype,不是继承或另建服务实例。

3. 同步对象

classDiagram
direction TB
class SyncHandlers {
  <<registrationFunction>>
  registerSyncHandlers()
}
class SyncManager {
  hostedClients
  login()
  logout()
  overview()
  hostedClient()
}
class AutoSyncScheduler {
  configure()
  tick()
  stop()
}
class PreferenceSync {
  tick()
  stop()
}
class FavoriteSync {
  tick()
  stop()
}
class DirtyDocumentRegistry {
  update()
  pathsForRoot()
  delete()
}
class SyncConfigStore
class SyncCredentialStore
class SyncDeviceIdentityStore
class SyncClient {
  rootPath
  libraryId
  deviceId
  initialize()
}
class SyncRemote {
  <<interface>>
  applyOperation()
  pull()
  historyPage()
}
class HostedSyncRemote
class SyncStateStore
class SyncHistoryStore
class SyncLogStore
class ManagedPathStore
SyncHandlers ..> SyncManager : 按需创建并缓存
SyncHandlers ..> AutoSyncScheduler : 创建与停止
SyncHandlers ..> PreferenceSync : 配置存在时创建
SyncHandlers ..> FavoriteSync : 收藏存储存在时创建
SyncHandlers --> DirtyDocumentRegistry : 共享登记表与受保护路径
AutoSyncScheduler ..> SyncManager : 注入回调执行同步
PreferenceSync ..> SyncManager : 回调获取远端上下文
FavoriteSync ..> SyncManager : 回调获取远端上下文
SyncManager *-- SyncConfigStore
SyncManager *-- SyncCredentialStore
SyncManager *-- SyncDeviceIdentityStore
SyncManager "1" *-- "0..*" SyncClient : 按账户和笔记库缓存
SyncManager ..> HostedSyncRemote : 创建远端对象
SyncClient --> "0..1" SyncRemote : remote
HostedSyncRemote ..|> SyncRemote : 结构类型契约
SyncClient *-- SyncStateStore
SyncClient *-- SyncHistoryStore
SyncClient *-- ManagedPathStore
SyncStateStore *-- SyncLogStore
  • SyncManager 是应用侧同步入口,首次需要服务时加载;设置或收藏的启动同步也可能触发加载。
  • AutoSyncScheduler 通过注入回调选择当前窗口及后台笔记库,不直接持有管理器字段。
  • PreferenceSync 同步用户设置和快捷键,FavoriteSync 同步收藏。
    • 两者通过回调获取远端上下文,不通过文档 SyncClient 传输数据。
  • DirtyDocumentRegistry 汇总窗口内未保存路径;同步处理器还读取 RecoveryStore 的恢复草稿。
    • 两种路径共同构成自动同步写盘前的保护范围。
  • SyncClient 持有单个笔记库的同步状态、历史缓存、已管理路径和远端接口。
    • 文件、传输、合并、恢复、自动同步等方法组在 client/index.ts 装配到原型。
    • SyncManagerLibraryMethods 同样通过原型装配扩展 SyncManager,不是继承关系。
  • 两处 ManagedPathStore 是不同实例,访问同一笔记库的已管理路径清单。

4. 导出与辅助能力

classDiagram
direction LR
class PublishExporter {
  publish()
  publishAll()
  remove()
}
class DocumentExporter {
  generate()
  write()
  batch()
}
class PublishRenderer {
  render()
  close()
}
class ClipboardCollector {
  start()
  pause()
  stop()
}
class ClipboardHandlers {
  <<registrationFunction>>
  registerClipboardCollector()
}
class VoiceHandlers {
  <<registrationFunction>>
  registerVoiceHandlers()
}
class VoiceService
class VoiceRecordings
PublishExporter ..> PublishRenderer : renderFragment 回调
DocumentExporter --> PublishRenderer : 注入 renderer
ClipboardHandlers ..> ClipboardCollector : 创建并桥接 IPC
VoiceHandlers ..> VoiceService : 按需创建
VoiceHandlers ..> VoiceRecordings : 按需创建
  • PublishExporter 输出静态笔记页面,DocumentExporter 输出 PDF / DOCX,共用发布渲染能力。
  • 剪贴板收集器在进程内共享,通过注册层连接文件授权、窗口和文档监听服务。
  • 语音处理器由通用 IPC 注册入口加载,首次相关操作时才创建服务或录音存储。
  • 片段窗口、快速命令窗口、全局热键及和弦输入使用工厂控制器,未展开其内部对象。

5. 图例与源码入口

  • *--:创建并管理生命周期。
  • -->:持有或使用关联对象。
  • ..>:调用、创建或通过回调依赖;不表示持有实例字段。
  • ..|>:实现接口契约;本项目的远端接口采用 TypeScript 结构类型。
  • 数字标注为对象数量;未标数量的关系不表达严格基数。
  • 图中方法省略参数、返回类型和可见性,仅作为源码定位提示。
对象或模块 源码
入口装配 main.ts
窗口与笔记库映射 window-session.ts
笔记库与查询装配 workspace-manager.ts
全局状态 workspace-state-store.ts
通用 IPC 与语音入口 ipc-handlers.ts
笔记库 IPC workspace-handlers.ts
同步装配与自动任务 sync-handlers.ts
同步管理器 sync/manager.ts
同步客户端与方法组装配 sync/client/index.ts
客户端状态与历史初始化 sync/client/local.ts
静态发布 publish-export.ts
文档导出 document-export.ts
共享渲染器 publish-renderer.ts
剪贴板收集装配 clipboard-collector-ipc.ts
语音服务装配 voice-handlers.ts

keyboard-mvp

module-extraction

点赞(0) 阅读(5) 举报
目录
标题