-
Notifications
You must be signed in to change notification settings - Fork 47
Closed
Description
如 #330 所示
Memory 无法用于已经启用,且用户词典打开(默认情况)的方案,会导致大部分前端同步时抛出词典锁定的错误。
而如果想要使用 Memory 对象,所用方案很可能为启用用户词典状态(默认),lua 并未阻止此危险操作。所以此设计似有问题。请确认。
复现
测试方案(内含报错信息):
- 引入一个使用 Memory 对象的 lua,重新部署,该 Memory 对象指向 luna_pinyin
- 使用 luna_pinyin 打字,保证生成一些用户词
- 同步,各个前端报错,提示用户词典被其他程序锁定,部分前端用户词典无法同步。
有关问题的前端:ibus-rime,Squirrel ,fcitx5-rime(不会显示错误,但无法继续同步)
预期情况
Memory 可以正常工作,不导致用户词典锁定。
或者以下情况均可:
- 在新建 Memory 时,若检索到用户词典为 leveldb,则提示用户无法进行操作,中止操作,保证前端正常同步;
- 另设一个函数,提供 Memory 所提供的检索固态词典的能力,不涉及用户词典
- 修复 Memory 函数,当且仅当使用了其关涉用户词典的操作时,才去尝试打开 leveldb
问题 lua
-- filter:
-- - lua_fiter@*test
local F = {}
function F.init( env )
-- F.foo = Memory( env.engine, env.engine.schema) -- error
-- local foo = Memory( env.engine, env.engine.schema) -- no error
-- env.foo = Memory( env.engine, env.engine.schema) -- error
end
function F.func( input, env )
-- F.foo = Memory( env.engine, env.engine.schema) -- error
local foo = Memory( env.engine, env.engine.schema) -- error
-- env.foo = Memory( env.engine, env.engine.schema) -- error
for cand in input:iter() do
cand.comment = '*' -- make sure this lua being called
yield( cand )
end
end
return F
Originally posted by @mirtlecn in #333 (comment)
Metadata
Metadata
Assignees
Labels
No labels