Skip to content

【Bug】Memory 对象会导致 Rime 无法同步 #335

@mirtlecn

Description

@mirtlecn

#330 所示

Memory 无法用于已经启用,且用户词典打开(默认情况)的方案,会导致大部分前端同步时抛出词典锁定的错误。

而如果想要使用 Memory 对象,所用方案很可能为启用用户词典状态(默认),lua 并未阻止此危险操作。所以此设计似有问题。请确认。

复现

测试方案(内含报错信息):

test_lua.zip

  • 引入一个使用 Memory 对象的 lua,重新部署,该 Memory 对象指向 luna_pinyin
  • 使用 luna_pinyin 打字,保证生成一些用户词
  • 同步,各个前端报错,提示用户词典被其他程序锁定,部分前端用户词典无法同步。

有关问题的前端:ibus-rime,Squirrelfcitx5-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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions