林一二2023年02月10日 09:58
- 监听 ydoc update,通过 tauri command 传到主进程,写入 fs
- 写入 fs 后读回来再传回前端后不可用,ydoc 里的 map 无变化
- 不需要merge,不需要等待
- 如果 yrs 处有 ydoc,则 apply 一个 update 即可√
- 确保一开始 new 的 private Workspace 里的 ydoc 有 update 到 yjs 的 ydoc 上
- 在 rs 侧初始化 ydoc√
- 首先 apply 初始的 update,两边互相 on update apply update
- 确保在 blocksuite 初始化 ydoc 前,把 rs 侧初始值 apply 进去√
- 可以先序列化出内容,用写死的值试一下
- tauri对于下载的支持比较麻烦,需要写一堆样板代码
- 可以还原meta信息,正文缺失。可以尝试整个写到sqlite再读回来
- 估计是
space:60b204fbb1c844eba8137a3400711650与doc.guid – "622bf4c8-0986-4123-97ea-e453cc4a5cc6"不同导致的
- 估计是
- 尝试在 yrs 侧用这个写死的值,看看能不能读到 meta 信息
- 只能用static不能let,但是会
allocations are not allowed in statics不能用vec - 改为用函数返回后,成功加载到了 meta 信息,所以在 yjs 侧完整导出后,到 rs 转一趟是可行的
- 只能用static不能let,但是会
- 写一个简单的 yjs yrs 通过 tauri 交互的集成测试
- 改为把单个 update 写入 sqlite
- 依然不可用,update 里能看到键入的文字,但取出 apply 到 yjs 后 ydoc 里的 map 无变化
- 在 tauri command 里访问 state 上的 ydoc 实例,把 update 先写进去再 encode_update_v1
tx.commit()后,tx.encode_update_v1()取到的内容还是空的,不可行- 可能是初次创建的 ydoc 内容没加入 new doc 是空的
- 通过 MessageReader 解码后 match 分类,只处理 SyncMessage::Update 类别
decoder = DecoderV1::from(¶meters.update[..])MessageReader::new(&mut decoder)得到的数据为空,即使 update 有值,不可行- 对这个 ydoc get map 然后 to json,发现内容都是空的,在 yrs 这还是没 update 成功
- 直接在 yjs 处 merge update 后,每次 on update 存一个 encode state as update 到 rust 处
- 尝试把 update 如 blocksuite playground 上的导出功能那样先序列化出来,手动 apply 回去,看看是否生效,如果这个 update 可用,则直接存这个 update
- 完整存储可用,开发模式下可以持久化了
- 但是启动时间很长,需要优化排查
- 是因为数据库问题卡住了。而且其实只有开发模式会卡半天然后才开,因为开发服务器还在构建产物
- 而且打包后启动报错
Failed to create_workspace with error error returned from database: (code: 787) FOREIGN KEY constraint failed- 原因是affine没构建,产物是旧的,补上
beforeBuildCommand后解决
- 原因是affine没构建,产物是旧的,补上
- yrs依然无法apply update,问下apply 完整update会不会有问题
- 可以apply 完整update,不是这个问题
- 后续放在打包affine的tauri应用
- 但是启动时间很长,需要优化排查
- 尝试改用 Electron,在主线程用 yjs 处理问题
Undefined widget 'supertag-form'