From 1b7dea838864096b6fe8c6ab123950df7710e721 Mon Sep 17 00:00:00 2001 From: samerbam Date: Thu, 24 Aug 2023 18:18:10 -0400 Subject: [PATCH] /api/todos/write --- application/main.py | 3 ++- application/qrcode.png | Bin 0 -> 9641 bytes application/static/scripts.js | 40 ++++++++++++++++++++++++++++++++++ application/thermal_print.py | 4 ++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 application/qrcode.png diff --git a/application/main.py b/application/main.py index a792b1a..d81ca46 100644 --- a/application/main.py +++ b/application/main.py @@ -19,6 +19,7 @@ auth = VerifyToken() data = TodoDatabase() printer = ThermalPrinter(data) # printer.print_default() #temp debug +printer.print_qrcode() @@ -28,7 +29,7 @@ class Todo(BaseModel): recurring: bool class TodoList(BaseModel): - date: str #Always current date OLD TEXT: #Either current date in %Y-%m-%d format or "recurring" for a recurring task + date: str #Always selected date OLD TEXT: #Either current date in %Y-%m-%d format or "recurring" for a recurring task todos: list[Todo] diff --git a/application/qrcode.png b/application/qrcode.png new file mode 100644 index 0000000000000000000000000000000000000000..14c0121040c1cfdd08ead22bb04b0fb9283ce301 GIT binary patch literal 9641 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 Nb@X(&xR(C)e*qyp`-=bo literal 0 HcmV?d00001 diff --git a/application/static/scripts.js b/application/static/scripts.js index 4c41e65..98d750b 100644 --- a/application/static/scripts.js +++ b/application/static/scripts.js @@ -254,6 +254,16 @@ function addTask(defaultTimeRange="", defaultTaskText="New Task", editable=true) timeButtonDisplay.innerHTML = defaultTimeRange timePickerWindowButton.appendChild(timeButtonDisplay) + let recButtonDiv = document.createElement("div") + recButtonDiv.className = "recurringButton hover:bg-slate-200 cursor-pointer rounded-md flex flex-row space-x-1 items-center" + secondContainer.appendChild(recButtonDiv) + + let recButtonSpan = document.createElement("span") + recButtonSpan.className = "w-8 h-8 flex space-x-2 space-y-2 items-center justify-center" + recButtonSpan.innerHTML += "" + recButtonDiv.appendChild(recButtonSpan) + + row.appendChild(secondContainer) @@ -566,6 +576,36 @@ function savePrintButtonListener(e) { if (spbt.innerHTML === "Save") { setsavePrintButton(save=false) + + let todo_list = [] + + for (let row of document.getElementsByClassName("task-row")) { + todos_list.push({"time": row.querySelector("#timeButtonDisplay").innerHTML, "task": row.querySelector("#task").innerHTML, "recurring": row.dataset.recurring}) + } + + fetch("/api/todos/write", { + method: "post", + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json', + 'Authorization': "Bearer " + jToken + }, + + //make sure to serialize your JSON body + body: JSON.stringify({ + "date": dayjs(document.getElementById("date-view").innerHTML.slice(4), "MMM D, YYYY").format("YYYY-MM-DD"), + "todos": todo_list + }) + }) + .then( (response) => { + response.json().then(r => { + console.log(r.status) + }) + //do something awesome that makes the world a better place + }); + + + //TODO: send api request to save todos to database } else if (spbt.innerHTML === "Print") { diff --git a/application/thermal_print.py b/application/thermal_print.py index a02be2e..50ea604 100644 --- a/application/thermal_print.py +++ b/application/thermal_print.py @@ -233,6 +233,10 @@ class ThermalPrinter(): def finished_printing(self): self.p.cut() #move paper up enough to tear off (probably a better way, but this works.) + def print_qrcode(self): + self.p.text("\n") + self.p.set(align="center") + self.p.image("application/qrcode.png") # class SyncData(): # def __init__(self):