diff options
Diffstat (limited to 'lua/inbox/view.lua')
-rw-r--r-- | lua/inbox/view.lua | 92 |
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 |