fix: fix curl GET method can convert space to arguments
This commit is contained in:
parent
5a36ffad1c
commit
493fad6a3f
@ -1,8 +1,12 @@
|
|||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
<!--toc:start-->
|
<!--toc:start-->
|
||||||
|
|
||||||
- [TODO](#todo)
|
- [TODO](#todo)
|
||||||
<!--toc:end-->
|
<!--toc:end-->
|
||||||
|
|
||||||
- [ ] Refactor query engine to 'Backend' and 'Frontend'
|
- [ ] 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
|
||||||
|
@ -43,8 +43,8 @@ function M.query(data)
|
|||||||
assert(#result == 1)
|
assert(#result == 1)
|
||||||
result = result[1]
|
result = result[1]
|
||||||
data.result.baidu = {
|
data.result.baidu = {
|
||||||
title = result.src,
|
['title'] = result.src,
|
||||||
translation = result.dst,
|
[data.from == 'en' and 'translation' or 'definition'] = result.dst,
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -13,25 +13,22 @@ vim.api.nvim_create_autocmd('VimLeavePre', {
|
|||||||
function M.query(data)
|
function M.query(data)
|
||||||
if data.is_word == false or data.from == 'zh' then return end
|
if data.is_word == false or data.from == 'zh' then return end
|
||||||
|
|
||||||
data.path = data.path or require('Trans').conf.dir .. '/ultimate.db'
|
local path = 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 dict = db:open(path)
|
||||||
local dict = db:open(data.path)
|
|
||||||
local db_name = data.db_name or 'stardict'
|
local db_name = data.db_name or 'stardict'
|
||||||
local res = dict:select(db_name, {
|
local res = dict:select(db_name, {
|
||||||
where = { word = data.str, },
|
where = { word = data.str, },
|
||||||
keys = data.query_field,
|
keys = M.query_field,
|
||||||
limit = 1,
|
limit = 1,
|
||||||
})[1]
|
})[1]
|
||||||
|
|
||||||
|
|
||||||
data.result.offline = res and data.formatter(res) or false
|
data.result.offline = res and M.formatter(res) or false
|
||||||
return data
|
return data
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- this is a awesome plugin
|
||||||
M.query_field = {
|
M.query_field = {
|
||||||
'word',
|
'word',
|
||||||
'phonetic',
|
'phonetic',
|
||||||
|
@ -41,21 +41,24 @@ local function set_result(data)
|
|||||||
|
|
||||||
local frontend = Trans.frontend[data.frontend]
|
local frontend = Trans.frontend[data.frontend]
|
||||||
|
|
||||||
|
-- HACK :Rewrite this function to support multi request
|
||||||
local function do_query(name)
|
local function do_query(name)
|
||||||
local backend = backends[name]
|
local backend = backends[name]
|
||||||
if backend.no_wait then
|
if backend.no_wait then
|
||||||
backend.query(data)
|
backend.query(data)
|
||||||
if type(data.result[name]) == 'table' then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
backend.query(data)
|
backend.query(data)
|
||||||
frontend.wait(data.result, name, backend.timeout)
|
frontend.wait(data.result, name, backend.timeout)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return type(data.result[name]) == "table"
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, name in ipairs(backend_list) do
|
for _, name in ipairs(backend_list) do
|
||||||
do_query(name)
|
if do_query(name) then
|
||||||
|
-- TODO : process data
|
||||||
|
break
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -72,8 +75,16 @@ local function process(opts)
|
|||||||
if not data then return end
|
if not data then return end
|
||||||
|
|
||||||
set_result(data)
|
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)
|
render_window(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ function M.init()
|
|||||||
print('TODO: init hover window')
|
print('TODO: init hover window')
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.wait(tbl, key, timeout)
|
function M.wait(tbl, name, timeout)
|
||||||
local thread = coroutine.running()
|
local thread = coroutine.running()
|
||||||
local function pause(ms)
|
local function pause(ms)
|
||||||
vim.defer_fn(function()
|
vim.defer_fn(function()
|
||||||
@ -18,18 +18,14 @@ function M.wait(tbl, key, timeout)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local error_message = 'Faild'
|
local error_message = 'Faild'
|
||||||
local times = 0
|
|
||||||
local interval = math.floor(timeout / #error_message)
|
local interval = math.floor(timeout / #error_message)
|
||||||
while tbl[key] == nil do
|
for i = 1, #error_message do
|
||||||
print(('waitting' .. (' '):rep(times)))
|
if tbl[name] ~= nil then break end
|
||||||
|
print('waitting' .. ('.'):rep(i))
|
||||||
pause(interval)
|
pause(interval)
|
||||||
end
|
end
|
||||||
|
|
||||||
if tbl[key] == false then
|
-- TODO : End waitting animation
|
||||||
print('TODO: show error message: ' .. error_message)
|
|
||||||
else
|
|
||||||
vim.pretty_print(tbl[key])
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function M.process(data)
|
function M.process(data)
|
||||||
|
@ -2,34 +2,36 @@ local curl = {}
|
|||||||
|
|
||||||
curl.get = function(uri, opts)
|
curl.get = function(uri, opts)
|
||||||
local query = opts.query
|
local query = opts.query
|
||||||
|
local output = opts.output
|
||||||
local headers = opts.headers
|
local headers = opts.headers
|
||||||
local callback = opts.callback
|
local callback = opts.callback
|
||||||
local output = opts.output
|
|
||||||
|
|
||||||
-- INFO :Init Curl command with {s}ilent and {G}et
|
-- 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
|
-- INFO :Add headers
|
||||||
if headers then
|
if headers then
|
||||||
for k, v in pairs(headers) do
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
-- INFO :Store output to file
|
-- INFO :Store output to file
|
||||||
if output then
|
if output then
|
||||||
cmd[#cmd + 1] = [[-o ]] .. output
|
insert(('-o %q'):format(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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
-- INFO : Start a job
|
-- INFO : Start a job
|
||||||
|
Loading…
x
Reference in New Issue
Block a user