first commit

This commit is contained in:
Elflare
2025-07-05 16:39:53 +08:00
parent ed12516cd1
commit 7e5ba72b71
6 changed files with 812 additions and 1 deletions

92
lua/memos/api.lua Normal file
View File

@@ -0,0 +1,92 @@
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, pageSize, pageToken, callback)
local list_url = config.host .. '/api/v1/memos'
local params = {}
table.insert(params, "parent=" .. parent)
table.insert(params, "pageSize=" .. tostring(pageSize))
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