1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-08 06:28:27 -04:00

calendar: support tasks/VTODO from dank calendar

This commit is contained in:
bbedward
2026-07-06 12:40:41 -04:00
parent c175f4823a
commit 240adfa28f
4 changed files with 339 additions and 226 deletions
+43 -8
View File
@@ -63,6 +63,7 @@ Singleton {
id: dankBackend
enabled: root.backendPref === "dankcal" || root.backendPref === "auto"
onEventsByDateChanged: root.mergeEvents()
onTasksByDateChanged: root.mergeEvents()
onConnectedChanged: {
if (connected && root._rangeSet)
root.loadEvents(root.lastStartDate, root.lastEndDate);
@@ -198,6 +199,17 @@ Singleton {
}
function addTaskForDate(date, text) {
const taskCal = isDankActive && dankBackend.connected ? dankBackend.defaultTaskCalendar() : null;
if (taskCal) {
const due = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
dankBackend.createTask({
"calendarId": taskCal.id,
"summary": text,
"allDay": true,
"due": due.toISOString()
});
return;
}
let dateKey = Qt.formatDate(date, "yyyy-MM-dd");
let tasks = Object.assign({}, root.localTasks);
if (!tasks[dateKey])
@@ -214,6 +226,13 @@ Singleton {
}
function toggleTask(taskId) {
if (taskId.startsWith("vtodo_")) {
const id = taskId.slice(6);
const task = dankBackend.taskById(id);
if (task)
dankBackend.completeTask(id, !task.completed);
return;
}
let cleanId = taskId.replace("task_", "");
let tasks = Object.assign({}, root.localTasks);
let updated = false;
@@ -237,6 +256,10 @@ Singleton {
}
function removeTask(taskId) {
if (taskId.startsWith("vtodo_")) {
dankBackend.deleteTask(taskId.slice(6));
return;
}
let cleanId = taskId.replace("task_", "");
let tasks = Object.assign({}, root.localTasks);
let updated = false;
@@ -283,6 +306,12 @@ Singleton {
}
function editTask(taskId, newText) {
if (taskId.startsWith("vtodo_")) {
dankBackend.updateTask(taskId.slice(6), {
"summary": newText
});
return;
}
let cleanId = taskId.replace("task_", "");
let tasks = Object.assign({}, root.localTasks);
let updated = false;
@@ -305,6 +334,17 @@ Singleton {
}
}
function _mergeInto(merged, byDate) {
for (let dateKey in byDate) {
if (!merged[dateKey])
merged[dateKey] = [];
for (let event of byDate[dateKey]) {
if (!merged[dateKey].some(e => e.id === event.id))
merged[dateKey].push(event);
}
}
}
function mergeEvents() {
let merged = {};
let backendEvents = _activeBackendEventsByDate();
@@ -312,14 +352,9 @@ Singleton {
for (let dateKey in backendEvents)
merged[dateKey] = [].concat(backendEvents[dateKey]);
for (let dateKey in root.taskEventsByDate) {
if (!merged[dateKey])
merged[dateKey] = [];
for (let event of root.taskEventsByDate[dateKey]) {
if (!merged[dateKey].some(e => e.id === event.id))
merged[dateKey].push(event);
}
}
_mergeInto(merged, root.taskEventsByDate);
if (isDankActive)
_mergeInto(merged, dankBackend.tasksByDate);
for (let dateKey in merged) {
let list = merged[dateKey];