summaryrefslogtreecommitdiffstats
path: root/lua/inbox/view.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/inbox/view.lua')
-rw-r--r--lua/inbox/view.lua92
1 files changed, 42 insertions, 50 deletions
diff --git a/lua/inbox/view.lua b/lua/inbox/view.lua
index 60d3b96..e770417 100644
--- a/lua/inbox/view.lua
+++ b/lua/inbox/view.lua
@@ -19,22 +19,23 @@ function M.create_buffer(bufname, buf_options)
return bufnr
end
----@param bufname string
+---@param maildir string
---@return integer bufnr
-function M.initialize(bufname)
+function M.initialize(maildir)
local buf_options = vim.tbl_extend("keep", config.buf_options, {
buftype = "acwrite",
syntax = "inbox",
filetype = "inbox",
})
+ local bufname = string.format("maildir://%s", maildir)
local bufnr = M.create_buffer(bufname, buf_options)
-- vim.api.nvim_clear_autocmds({ buffer = bufnr, group = "Inbox" })
vim.keymap.set("n", "<Enter>", require("inbox").open_entry, { buffer = bufnr })
- M.render_inbox(bufnr)
+ M.render_inbox(bufnr, maildir)
return bufnr
end
@@ -45,61 +46,52 @@ function M.render_buffer_content(bufnr, lines, highlights, signs)
vim.bo[bufnr].modifiable = false
vim.bo[bufnr].modified = false
- utils.set_highlights(bufnr, highlights)
- utils.set_signs(bufnr, signs)
+ if highlights then
+ utils.set_highlights(bufnr, highlights)
+ end
+ if signs then
+ utils.set_signs(bufnr, signs)
+ end
end
---@param bufnr integer
-function M.render_inbox(bufnr)
+function M.render_inbox(bufnr, maildir)
local indexer = indexers.get_indexer()
- indexer.index(bufnr, M.render_inbox_async)
+ indexer.index(maildir, function(ids, entries, signs)
+ vim.b[bufnr].inbox_ids = ids
+ local lines, highlights = utils.render_table(entries, config.columns)
+
+ local winid = vim.api.nvim_get_current_win()
+ for k, v in pairs(config.win_options) do
+ vim.api.nvim_set_option_value(k, v, { scope = "local", win = winid })
+ end
+
+ M.render_buffer_content(bufnr, lines, highlights, signs)
+
+ vim.api.nvim_set_option_value(
+ "winbar",
+ utils.render_row({ "Flags", "Date", "From", "Subject" }, {
+ vim.fn.getwininfo(winid)[1].textoff,
+ unpack(config.columns),
+ }),
+ { scope = "local", win = winid }
+ )
+ end)
end
-function M.render_inbox_async(bufnr, entries, signs)
- local lines, highlights = utils.render_table(entries, config.columns)
-
- local winid = vim.api.nvim_get_current_win()
- for k, v in pairs(config.win_options) do
- vim.api.nvim_set_option_value(k, v, { scope = "local", win = winid })
- end
-
- M.render_buffer_content(bufnr, lines, highlights, signs)
-
- vim.api.nvim_set_option_value(
- "winbar",
- utils.render_row({ "Flags", "Date", "From", "Subject" }, {
- vim.fn.getwininfo(winid)[1].textoff,
- unpack(config.columns),
- }),
- { scope = "local", win = winid }
- )
-end
-
----@param bufname string
----@return integer? bufnr
-function M.render_part(bufname)
- local bufnr = vim.api.nvim_create_buf(true, false)
- local winid = vim.api.nvim_get_current_win()
-
- -- vim.api.nvim_clear_autocmds({ buffer = bufnr, group = "Inbox" })
-
- local buf_options = vim.tbl_extend("keep", config.buf_options, {
- buftype = "acwrite",
- syntax = "inbox",
- filetype = "inbox",
- })
+function M.render_entry(id, content_type)
+ local indexer = indexers.get_indexer()
+ local bufname = string.format("%s [%s]", id, content_type)
+ local bufnr = M.create_buffer(bufname, {})
- for k, v in pairs(buf_options) do
- vim.api.nvim_buf_set_option(bufnr, k, v)
- end
- for k, v in pairs(config.win_options) do
- vim.api.nvim_set_option_value(k, v, { scope = "local", win = winid })
- end
+ indexer.get_part(id, content_type, function(ct, lines)
+ content_type = content_type or ct
+ bufname = string.format("%s [%s]", id, content_type)
+ vim.api.nvim_buf_set_name(bufnr, bufname)
+ M.render_buffer_content(bufnr, lines)
+ end)
- vim.api.nvim_buf_set_name(bufnr, bufname)
- M.render_inbox(bufnr)
- vim.keymap.set("n", "<Enter>", require("inbox").open_entry, { buffer = bufnr })
- return bufnr
+ vim.api.nvim_set_current_buf(bufnr)
end
return M