simplify visualization
This commit is contained in:
parent
d6fc41fe05
commit
91fcb96619
|
|
@ -1,9 +1,11 @@
|
||||||
from collections.abc import Callable, Sequence
|
from collections.abc import Callable, Sequence
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
from pynvim import Nvim, command, plugin
|
from pynvim import Nvim, command, plugin
|
||||||
from pynvim.api import Buffer
|
from pynvim.api import Buffer
|
||||||
|
|
||||||
from .clickup import ClickupSession
|
from .clickup import ClickupSession, ClickupTask
|
||||||
from .hints import JSONData
|
from .hints import JSONData
|
||||||
from .yaml import load, dump
|
from .yaml import load, dump
|
||||||
|
|
||||||
|
|
@ -28,18 +30,20 @@ class MrPyPlugin:
|
||||||
"assignees": usernames_from_objs,
|
"assignees": usernames_from_objs,
|
||||||
}
|
}
|
||||||
|
|
||||||
def select_task_id(self) -> None:
|
def select_task_id(self, tags: set[str] | None = None) -> None:
|
||||||
tasks = self.clickup.get_tasks()
|
tasks = self.clickup.get_tasks(**({"tags[]": "&tags[]=".join(tags)} if tags else {}))
|
||||||
task_names_by_id = [
|
task_names_by_id = [
|
||||||
{
|
{
|
||||||
"idx": tix + 1,
|
"idx": tix + 1,
|
||||||
"id": t.id,
|
"id": t.id,
|
||||||
|
"text": t.short,
|
||||||
"name": t.name,
|
"name": t.name,
|
||||||
|
"tags": t.tags,
|
||||||
"status": t.status,
|
"status": t.status,
|
||||||
"is_child": bool(t.parent),
|
"is_child": bool(t.parent),
|
||||||
"preview": {
|
"preview": {
|
||||||
"text": f"---\n{dump(t.showables)}---\n{t.markdown_description}",
|
"text": dump(t.showables),
|
||||||
"ft": "markdown",
|
"ft": "yaml",
|
||||||
},
|
},
|
||||||
"action": f":Mrpy {t.id}",
|
"action": f":Mrpy {t.id}",
|
||||||
}
|
}
|
||||||
|
|
@ -70,8 +74,12 @@ class MrPyPlugin:
|
||||||
|
|
||||||
ret[#ret + 1] = { item.name, hl }
|
ret[#ret + 1] = { item.name, hl }
|
||||||
|
|
||||||
|
for _, v in ipairs(item.tags) do
|
||||||
|
ret[#ret + 1] = { " #" .. v, "SnacksPickerComment" }
|
||||||
|
end
|
||||||
|
|
||||||
ret[#ret + 1] = {
|
ret[#ret + 1] = {
|
||||||
" (#" .. item.id .. ")",
|
" " .. item.id,
|
||||||
"SnacksPickerComment"
|
"SnacksPickerComment"
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
|
|
@ -91,34 +99,36 @@ class MrPyPlugin:
|
||||||
task = self.clickup.get_task(task_id)
|
task = self.clickup.get_task(task_id)
|
||||||
temp_buf: Buffer = self.nvim.api.create_buf(True, False)
|
temp_buf: Buffer = self.nvim.api.create_buf(True, False)
|
||||||
self.nvim.api.buf_set_name(temp_buf, f"[ClickUp] {task.name}")
|
self.nvim.api.buf_set_name(temp_buf, f"[ClickUp] {task.name}")
|
||||||
self.nvim.buffers[temp_buf.number].options["filetype"] = "markdown"
|
self.nvim.buffers[temp_buf.number].options["filetype"] = "yaml"
|
||||||
self.nvim.api.create_autocmd(
|
self.nvim.api.create_autocmd(
|
||||||
["BufWriteCmd"],
|
["BufWriteCmd"],
|
||||||
{"buffer": temp_buf.number, "command": "MrpyPush " + str(temp_buf.number)},
|
{"buffer": temp_buf.number, "command": "MrpyPush " + str(temp_buf.number)},
|
||||||
)
|
)
|
||||||
|
|
||||||
content = ["---"]
|
content = [
|
||||||
|
f"# yaml-language-server: $schema={Path(__file__).parent.parent.parent.parent}/schema.json ",
|
||||||
|
"---",
|
||||||
|
]
|
||||||
content.extend(
|
content.extend(
|
||||||
dump(
|
dump(
|
||||||
task.showables,
|
task.showables,
|
||||||
).splitlines()
|
).splitlines()
|
||||||
)
|
)
|
||||||
content.append("---")
|
|
||||||
content.extend(task.markdown_description.splitlines())
|
|
||||||
|
|
||||||
self.nvim.api.buf_set_lines(temp_buf, 0, 0, False, content)
|
self.nvim.api.buf_set_lines(temp_buf, 0, 0, False, content)
|
||||||
self.nvim.buffers[temp_buf.number].options["modified"] = False
|
self.nvim.buffers[temp_buf.number].options["modified"] = False
|
||||||
self.nvim.api.win_set_buf(0, temp_buf)
|
self.nvim.api.win_set_buf(0, temp_buf)
|
||||||
|
|
||||||
@command("Mrpy", nargs="?")
|
@command("Mrpy", nargs="*")
|
||||||
def entry(self, args: Sequence[str] = ()) -> None:
|
def entry(self, args: Sequence[str] = ()) -> None:
|
||||||
match args:
|
match args:
|
||||||
case (str() as task_id,):
|
case (str() as task_id,):
|
||||||
|
try:
|
||||||
self.open_task_buffer(task_id)
|
self.open_task_buffer(task_id)
|
||||||
case ():
|
except:
|
||||||
self.select_task_id()
|
self.select_task_id({task_id})
|
||||||
case _:
|
case tags:
|
||||||
pass
|
self.select_task_id(set(tags))
|
||||||
|
|
||||||
@command("MrpyPush", nargs="?")
|
@command("MrpyPush", nargs="?")
|
||||||
def on_vbuf_write(self, args: Sequence[str] = ()) -> None:
|
def on_vbuf_write(self, args: Sequence[str] = ()) -> None:
|
||||||
|
|
@ -132,14 +142,60 @@ class MrPyPlugin:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
a = self.nvim.buffers[buf_no][0:-1]
|
a = self.nvim.buffers[buf_no][0:-1]
|
||||||
_, fm, *text = "\n".join(a).split("---\n")
|
fm = "\n".join(a)
|
||||||
data = load(fm)
|
data = load(fm)
|
||||||
assert isinstance(data, dict)
|
assert isinstance(data, dict)
|
||||||
|
|
||||||
data["markdown_description"] = "\n\n".join(text)
|
data["markdown_content"] = data["markdown_content"].strip() + "\n"
|
||||||
|
|
||||||
self.nvim.err_write(str(data) + "\n")
|
self.clickup.update(ClickupTask(**data))
|
||||||
# self.clickup.update(data)
|
|
||||||
self.nvim.buffers[buf_no].options["modified"] = False
|
self.nvim.buffers[buf_no].options["modified"] = False
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@command("MrpyNew", nargs=0)
|
||||||
|
def on_new_task(self) -> None:
|
||||||
|
task = ClickupTask(name="", status="backlog", markdown_content="", parent_list="")
|
||||||
|
temp_buf: Buffer = self.nvim.api.create_buf(True, False)
|
||||||
|
self.nvim.api.buf_set_name(temp_buf, f"[ClickUp] New Task")
|
||||||
|
self.nvim.buffers[temp_buf.number].options["filetype"] = "yaml"
|
||||||
|
self.nvim.api.create_autocmd(
|
||||||
|
["BufWriteCmd"],
|
||||||
|
{"buffer": temp_buf.number, "command": "MrpyPushNew " + str(temp_buf.number)},
|
||||||
|
)
|
||||||
|
|
||||||
|
content = [
|
||||||
|
f"# yaml-language-server: $schema={Path(__file__).parent.parent.parent.parent}/schema.json ",
|
||||||
|
"---",
|
||||||
|
]
|
||||||
|
content.extend(
|
||||||
|
dump(
|
||||||
|
task.showables,
|
||||||
|
).splitlines()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.nvim.api.buf_set_lines(temp_buf, 0, 0, False, content)
|
||||||
|
self.nvim.buffers[temp_buf.number].options["modified"] = False
|
||||||
|
self.nvim.api.win_set_buf(0, temp_buf)
|
||||||
|
|
||||||
|
@command("MrpyPushNew", nargs=1)
|
||||||
|
def on_new_vbuf_write(self, buf_no: Sequence[Any] = ()) -> None:
|
||||||
|
buf_no = int(buf_no[0])
|
||||||
|
|
||||||
|
try:
|
||||||
|
a = self.nvim.buffers[buf_no][0:-1]
|
||||||
|
fm = "\n".join(a)
|
||||||
|
data = load(fm)
|
||||||
|
assert isinstance(data, dict)
|
||||||
|
|
||||||
|
data["markdown_content"] = data["markdown_content"].strip() + "\n"
|
||||||
|
|
||||||
|
new_task = ClickupTask(**data)
|
||||||
|
new_task_id = self.clickup.create(new_task)
|
||||||
|
|
||||||
|
self.nvim.buffers[buf_no].options["modified"] = False
|
||||||
|
self.nvim.command("bdelete " + str(buf_no))
|
||||||
|
|
||||||
|
self.entry([new_task_id])
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue