在我们的项目中,omni-core(代码中对应 crate 模块名 omni_core)是作为我们本地优先架构的核心 Rust 底座基础库。 它作为一个独立的 Rust Crate,位于项目子目录 src-tauri/omni_core/ 下,并作为 Cargo Workspace 成员被 Tauri 主工程引入。下面为您梳理它的使用方法以及内部核心函数清单


一、 omni_core 该如何使用?

我们可以直接在 Rust 侧将其当做常规库进行函数调用,也可以作为 Tauri 的 IPC 命令直接从前端(JS)侧跨端调用。

1. 基础库声明与依赖引入

src-tauri/Cargo.toml 中,已通过本地路径将其声明为依赖项:

 
[dependencies]
 
omni_core = { path = "omni_core" }
 

在主工程的 Rust 代码中,只需声明 use omni_core::{fts, storage}; 即可开始调用。

2. Tauri 框架一键点火初始化

src-tauri/src/main.rs 中,通过链式调用 init_omni_core() 完成初始化:

 
use omni_core::OmniCoreExt;
 
  
 
tauri::Builder::default()
 
    .init_omni_core() // 一行代码注入 OpenDAL 共享 Operator 状态并注册 IPC 命令
 
    .setup(|app| { ... })
 

3. Rust 中的常规函数调用

在主程序 src-tauri/src/lib.rs 中,您可以直接从应用 State 中获取并操作这些服务。例如,执行带乐观锁的文件写入:

 
// 1. 从状态机中获取 SharedOperator 存储算子
 
let op = app_handle.state::<storage::SharedOperator>();
 
  
 
// 2. 构造乐观锁存储服务
 
let storage_service = storage::OptimisticStorageService::new(op.inner.clone());
 
  
 
// 3. 执行条件乐观锁安全写入
 
storage_service.write_with_optimistic_lock(
 
    "notes/my_note.md",
 
    data_bytes,
 
    &storage::EntityTag(expected_etag)
 
).await?;
 

二、 omni_core 都包含哪些核心函数?

omni_core 底座由三大核心模块构成。以下是公开(pub)的主要函数及结构体清单:

1. 统一接入模块: lib.rs

  • OmniCoreExt<R>::init_omni_core(self) -> Self

  - 功能:Tauri Builder 扩展方法。初始化内存引擎作为默认的本地 OpenDAL 共享算子状态,并自动注册 download_remote_dbupload_local_db 跨端网络同步 Command。

2. 全文检索分词模块: fts.rs

该模块提供 SQLite FTS 5 的中文分词接口(Jieba 引擎集成)与检索式清洗防护。

  • JiebaTokenizer::new(stopwords_raw: &str) -> Self

  - 功能:基于传入的停用词文本构建一个包含结巴分词引擎的分词器实例。

  • register_jieba_tokenizer(conn: &Connection, tokenizer: Box<JiebaTokenizer>) -> Result<()>

  - 功能:核心 FFI 绑定函数。向指定的 SQLite 数据库连接注册名为 jieba 的自定义中文分词器,且将 x_destroy 析构钩子安全挂载到 SQLite 生命周期,规避内存泄漏。

  • escape_fts5_query(input: &str) -> String

  - 功能:防御性检索式过滤哨兵。安全清洗或转义用户在输入框中填写的 ANDORNOT 关键字和未配对的双引号,防止 SQLite FTS 5 MATCH 解析崩溃。

  • delete_fts_record(conn: &Connection, id: i64, old_title: &str, old_content: &str) -> Result<()>

  - 功能:通过向 contentless 虚拟表发送 delete 动作指令,物理移除旧分词倒排索引 Posting 记录。

  • update_fts_record(conn: &Connection, id: i64, old_title: &str, old_content: &str, new_title: &str, new_content: &str) -> Result<()>

  - 功能:在单次原子事务中组合删除旧记录和插入新记录,安全更新虚拟表的索引记录。

3. 存储与多端同步模块: storage.rs

该模块提供基于 OpenDAL 的网络流式上传、双层防抖拓扑构建、文件路径并发锁、乐观锁校验与冲突数据自动沙箱隔离。

  • build_defensive_webdav_operator(endpoint: &str, root: &str, username: &str, token: &str) -> Result<Operator, Error>

  - 功能:基于 Rustls 物理构建 WebDAV 客户端。自动包裹单次 I/O 最长挂起 15 秒的 TimeoutLayer,以及在故障时以 避让因子重试最多 4 次的 RetryLayer,确保网络抖动自愈。

  • upload_file_with_memory_shield(op: &Operator, remote_path: &str, mut source_file: File) -> Result<(), Error>

  - 功能:并发分块流式上传(8 MB 分块、4 路并发)。在堆上以 shrink_to_fit 进行强力内存收缩释放,保证超大文件传输时内存开销在常数级。

  • preserve_conflict_fork(op: &Operator, original_path: &str, dirty_data: &[u8]) -> Result<String, OmniCoreError>

  - 功能:防覆盖沙箱。当乐观锁条件冲突触发熔断时,将本地脏数据自动输出到 .conflict.[UUID].[ext] 沙箱冲突隔离路径中。

OptimisticStorageService(并发与乐观锁存储接口):

  • OptimisticStorageService::new(op: Operator) -> Self

  - 功能:根据指定的存储算子构建高并发防冲突服务,内部自动初始化 PathLockManager(路径级别读写锁管理器,用 RwLock 协调写排他)。

  • compute_etag(&self, relative_path: &str) -> Result<EntityTag, OmniCoreError>

  - 功能:获取或计算文件的唯一 ETag 指纹(未提供 ETag 时,将计算数据大小和自定义 Checksum 生成特征码)。

  • write_with_optimistic_lock(&self, relative_path: &str, data: Vec<u8>, expected_etag: &EntityTag) -> Result<EntityTag, OmniCoreError>

  - 功能:校验磁盘/云端文件的当前 ETag 与 expected_etag 是否匹配。如果不匹配,抛出 ConditionNotMatch 乐观锁冲突错误,阻断并上报冲突;如果一致,执行排他写入,并返回新产生的 ETag。

Tauri 专属的跨端命令(可直接通过 invoke 在前端执行):

  • download_remote_db(app_handle, state, remote_path)

  - 功能:将远程的 SQLite 数据库备份安全地流式下载到本地 App 专属数据目录下,返回绝对路径。

  • upload_local_db(state, local_file_path, remote_path)

  - 功能:读取本地的 SQLite 数据库文件,以常数级内存占用将其流式同步至 WebDAV/S 3 远端备份路径。

如果您需要查看这些函数的使用样例,可以前往 src-tauri/tests/fts_tests.rs 以及 src-tauri/tests/lock_conflict_tests.rs,里面有详细的集成用例演示。