diff --git a/lua/Trans/README.md b/lua/Trans/README.md index 93d2545..a43075c 100644 --- a/lua/Trans/README.md +++ b/lua/Trans/README.md @@ -1,8 +1,12 @@ # TODO <!--toc:start--> -- [TODO](#todo) + +- [TODO](#todo) <!--toc:end--> - [ ] Refactor query engine to 'Backend' and 'Frontend' -- [ ] Use `Trans.install` instead of `install.sh` +- [x] Use `Trans.install` instead of `install.sh` +- [ ] Check if str is a word +- [ ] init frontend window +- [ ] build frontend window format logic diff --git a/lua/Trans/backend/baidu.lua b/lua/Trans/backend/baidu.lua index ab8d3bc..0845035 100644 --- a/lua/Trans/backend/baidu.lua +++ b/lua/Trans/backend/baidu.lua @@ -43,8 +43,8 @@ function M.query(data) assert(#result == 1) result = result[1] data.result.baidu = { - title = result.src, - translation = result.dst, + ['title'] = result.src, + [data.from == 'en' and 'translation' or 'definition'] = result.dst, } return end diff --git a/lua/Trans/backend/offline.lua b/lua/Trans/backend/offline.lua index 4d39d76..c74e123 100644 --- a/lua/Trans/backend/offline.lua +++ b/lua/Trans/backend/offline.lua @@ -13,25 +13,22 @@ vim.api.nvim_create_autocmd('VimLeavePre', { function M.query(data) if data.is_word == false or data.from == 'zh' then return end - data.path = data.path or require('Trans').conf.dir .. '/ultimate.db' - data.engine = 'offline' - data.formatter = data.formatter or M.formatter - data.query_field = data.query_field or M.query_field + local path = require('Trans').conf.dir .. '/ultimate.db' - - local dict = db:open(data.path) + local dict = db:open(path) local db_name = data.db_name or 'stardict' local res = dict:select(db_name, { where = { word = data.str, }, - keys = data.query_field, + keys = M.query_field, limit = 1, })[1] - data.result.offline = res and data.formatter(res) or false + data.result.offline = res and M.formatter(res) or false return data end +-- this is a awesome plugin M.query_field = { 'word', 'phonetic', diff --git a/lua/Trans/core/translate.lua b/lua/Trans/core/translate.lua index de1a09e..4f62f1e 100644 --- a/lua/Trans/core/translate.lua +++ b/lua/Trans/core/translate.lua @@ -41,21 +41,24 @@ local function set_result(data) local frontend = Trans.frontend[data.frontend] + -- HACK :Rewrite this function to support multi request local function do_query(name) local backend = backends[name] if backend.no_wait then backend.query(data) - if type(data.result[name]) == 'table' then - return - end else backend.query(data) frontend.wait(data.result, name, backend.timeout) end + + return type(data.result[name]) == "table" end for _, name in ipairs(backend_list) do - do_query(name) + if do_query(name) then + -- TODO : process data + break + end end end @@ -72,8 +75,16 @@ local function process(opts) if not data then return end set_result(data) - if data.result == false then return end + local success = false + for _, v in pairs(data.result) do + if type(v) == "table" then + success = true + break + end + end + vim.pretty_print(data) + if success == false then return end render_window(data) end diff --git a/lua/Trans/frontend/hover.lua b/lua/Trans/frontend/hover.lua index f59b702..39358c2 100644 --- a/lua/Trans/frontend/hover.lua +++ b/lua/Trans/frontend/hover.lua @@ -8,7 +8,7 @@ function M.init() print('TODO: init hover window') end -function M.wait(tbl, key, timeout) +function M.wait(tbl, name, timeout) local thread = coroutine.running() local function pause(ms) vim.defer_fn(function() @@ -18,18 +18,14 @@ function M.wait(tbl, key, timeout) end local error_message = 'Faild' - local times = 0 local interval = math.floor(timeout / #error_message) - while tbl[key] == nil do - print(('waitting' .. (' '):rep(times))) + for i = 1, #error_message do + if tbl[name] ~= nil then break end + print('waitting' .. ('.'):rep(i)) pause(interval) end - if tbl[key] == false then - print('TODO: show error message: ' .. error_message) - else - vim.pretty_print(tbl[key]) - end + -- TODO : End waitting animation end function M.process(data) diff --git a/lua/Trans/wrapper/curl.lua b/lua/Trans/wrapper/curl.lua index 605d669..be91429 100644 --- a/lua/Trans/wrapper/curl.lua +++ b/lua/Trans/wrapper/curl.lua @@ -1,35 +1,37 @@ local curl = {} curl.get = function(uri, opts) - local query = opts.query - local headers = opts.headers + local query = opts.query + local output = opts.output + local headers = opts.headers local callback = opts.callback - local output = opts.output + -- INFO :Init Curl command with {s}ilent and {G}et - local cmd = { 'curl', '-GLs' } + local cmd = { 'curl', '-GLs', uri } + local size = #cmd + local function insert(value) + size = size + 1 + cmd[size] = value + end -- INFO :Add headers if headers then for k, v in pairs(headers) do - cmd[#cmd + 1] = ([[-H '%s: %s']]):format(k, v) + insert(('-H %q: %q'):format(k, v)) + end + end + + -- INFO :Add arguments + if query then + for k, v in pairs(query) do + insert(('--data-urlencode %q=%q'):format(k, v)) end end -- INFO :Store output to file if output then - cmd[#cmd + 1] = [[-o ]] .. output - end - - -- INFO :Add arguments - if query then - local info = {} - for k, v in pairs(query) do - info[#info + 1] = ('%s=%s'):format(k, v) - end - cmd[#cmd + 1] = ([['%s?%s']]):format(uri, table.concat(info, '&')) - else - cmd[#cmd + 1] = uri + insert(('-o %q'):format(output)) end -- INFO : Start a job