Files
memos.nvim/lua/memos/api.lua
Elflare f5c87ad10a add hotkey and unify config naming to snake_case
BREAKING CHANGE: The configuration option `pageSize` has been renamed to `page_size` to maintain a consistent style. Users need to update their personal configurations.
2025-07-08 09:53:38 +08:00

93 lines
2.9 KiB
Lua

local Job = require('plenary.job')
local config = require('memos').config
local M = {}
local function run_curl(args, on_exit)
table.insert(args, '-H')
table.insert(args, 'Authorization: Bearer ' .. config.token)
Job:new({ command = 'curl', args = args, on_exit = on_exit }):start()
end
function M.get_current_user(callback)
run_curl({
'-s', '--fail', '-X', 'POST', config.host .. '/api/v1/auth/status',
}, function(job, return_val)
if return_val == 0 then
local result_string = table.concat(job:result(), "")
local data = vim.json.decode(result_string)
callback(data or nil)
else
vim.schedule(function() vim.notify("Failed to get user info.", vim.log.levels.ERROR) end)
callback(nil)
end
end)
end
function M.list_memos(parent, filter, page_size, pageToken, callback)
local list_url = config.host .. '/api/v1/memos'
local params = {}
table.insert(params, "parent=" .. parent)
table.insert(params, "page_size=" .. tostring(page_size))
if pageToken and pageToken ~= "" then table.insert(params, "pageToken=" .. pageToken) end
if filter and filter ~= '' then
table.insert(params, 'filter=content.contains("' .. vim.fn.escape(filter, '\\"') .. '")')
end
list_url = list_url .. "?" .. table.concat(params, "&")
run_curl({
'-s', '--fail', '-X', 'GET', list_url,
}, function(job, return_val)
if return_val == 0 then
local result_string = table.concat(job:result(), "")
local data = vim.json.decode(result_string)
callback({ memos = data.memos or {}, nextPageToken = data.nextPageToken or "" })
else
vim.schedule(function() vim.notify("Failed to fetch memos.", vim.log.levels.ERROR) end)
callback(nil)
end
end)
end
-- 【修改】让 create_memo 的回调函数返回新创建的 memo 对象
function M.create_memo(content, callback)
local create_url = config.host .. '/api/v1/memos'
local json_data = vim.json.encode({ content = content })
run_curl({
'-s', '--fail', '-X', 'POST', create_url,
'-H', 'Content-Type: application/json',
'--data', json_data,
}, function(job, return_val)
if return_val == 0 then
local result_string = table.concat(job:result(), "")
local new_memo = vim.json.decode(result_string)
callback(new_memo)
else
callback(nil)
end
end)
end
function M.update_memo(memo_name, content, callback)
local update_url = config.host .. '/api/v1/' .. memo_name
local json_data = vim.json.encode({ content = content })
run_curl({
'-s', '--fail', '-X', 'PATCH', update_url,
'-H', 'Content-Type: application/json',
'--data', json_data,
}, function(job, return_val)
callback(return_val == 0)
end)
end
function M.delete_memo(memo_name, callback)
local delete_url = config.host .. '/api/v1/' .. memo_name
run_curl({
'-s', '--fail', '-X', 'DELETE', delete_url,
}, function(job, return_val)
callback(return_val == 0)
end)
end
return M