Compare commits

..

2 Commits

8 changed files with 22 additions and 45 deletions

View File

@@ -42,7 +42,7 @@ labelWhitespace = whitespace:[ \t\r]+ {
}
}
tag = "#" tag:[a-zA-Z0-9-/]+ {
tag = "#" tag:[a-zA-Z0-9-]+ {
return {
span: "tag",
value: tag.join("")
@@ -74,15 +74,13 @@ delete = type:deleteIcon _ action:[a-zA-Z]+ {
/**************************************************************************************************************************************/
reminder = reminderIcon _ time:(defaultTime / longTime / shortTime)|..,(_ "," _)| {
reminder = reminderIcon _ time:(longTime / shortTime)? {
return {
feature: "reminder",
time
}
}
defaultTime = "_"
longTime = hour:[0-9]|1..2| ":" minute:[0-9]|1..2| {
return `${hour.join("").padStart(2, '0')}:${minute.join("").padStart(2, '0')}`;
}

View File

@@ -7,5 +7,5 @@ buildNpmPackage {
pname = "obsidian-tasks-reminder";
version = "0.0.1";
src = ./.;
npmDepsHash = "sha256-qSCP2eerP9oQcpLsEj2XE2X6vap8MMTuydzWItlAHuA=";
npmDepsHash = "sha256-aWFq1EFyz9PpKTaQaCjpxN89Zj1pvRxdku4HX4PEXbM=";
}

View File

@@ -16,14 +16,14 @@ const backends = [
export async function remind(config: Config, profileConfig: ProfileConfig, db: TaskDatabase) {
const now = dayjs().format("HH:mm");
await run(config, profileConfig, db[now]);
await run(config, profileConfig, db, db[now]);
if(profileConfig?.defaultTime && profileConfig?.defaultTime === now) {
run(config, profileConfig, db._);
run(config, profileConfig, db, db.default);
}
}
async function run(config: Config, profileConfig: ProfileConfig, tasks?: Task[]) {
async function run(config: Config, profileConfig: ProfileConfig, db: TaskDatabase, tasks?: Task[]) {
if(!tasks) {
return;
}

View File

@@ -164,10 +164,10 @@ function defaultMapper(task: Task): NtfyDTO {
}
}
function defaultCombineMapper(tasks: Task[], bullet = (index: number) => "-"): NtfyDTO {
function defaultCombineMapper(tasks: Task[], bullet = "-"): NtfyDTO {
const text = tasks
.toSorted((a, b) => b.priority - a.priority)
.map((t, i) => `${bullet(i)} ${t.label}`)
.map(t => `${bullet} ${t.label}`)
.join("\n");
const priority = mapPriority(Math.max(...tasks.map(t => t.priority)));

View File

@@ -1,10 +1,6 @@
import fs from "fs";
import { Task, TaskDatabase } from "../types/task";
type FlatReminder = {
task: Task;
time: string;
}
/**
* Applies the mapper for each task from list, groups them by time and dumps the data into JSON formatted file.
@@ -25,29 +21,12 @@ export function serializeDatabase(tasks: Task[]): string {
* Applies the mapper for each task from list and groups them by time.
*/
export function createDatabase(tasks: Task[]): TaskDatabase {
return tasks
.flatMap(flatTimes)
.reduce(pushTaskToDatabase, {} as TaskDatabase);
return tasks.filter(t => t.reminder).reduce((acc, t) => {
if (t.reminder) {
(acc[t.reminder] = (acc[t.reminder] || [])).push(t);
};
return acc;
}, {} as TaskDatabase);
}
/**
* Returns list pairs of input task and consecutive reminder times.
* If reminder is missing, returns empty array.
* If reminder is empty array, returns ['_'], where '_' designates the default time.
* @param task input task
* @returns list pairs of input task and consecutive reminder times
*/
function flatTimes(task: Task): FlatReminder[] {
if (task.reminder === undefined) {
return [];
}
return task.reminder.length === 0
? [{ task, time: '_' }]
: task.reminder.map(time => ({ task, time }));
}
function pushTaskToDatabase(db: TaskDatabase, { task, time }: FlatReminder): TaskDatabase {
(db[time] = db[time] ?? []).push(task);
return db;
}

View File

@@ -128,11 +128,11 @@ export class DynamicTask implements Task {
return this.#features<ParsedTaskDependency>("dependency").find(x => x.type === '⛔')?.deps || [];
}
get reminder(): string[]|undefined {
get reminder(): string|undefined {
const feature = this.parsed.meta.find(x => x.feature === 'reminder');
if (feature) {
return feature.time;
return feature.time || "default";
}
return undefined;
@@ -209,7 +209,7 @@ export class DynamicTask implements Task {
o("delete", this.onDelete),
o("id", this.id),
o("deps", this.dependsOn?.join(",")),
o("reminder", this.reminder?.join(",")),
o("reminder", this.reminder),
o("tags", this.tags.join(","))
];
@@ -255,7 +255,7 @@ export class DynamicTask implements Task {
break;
case 'reminder':
segments.push(['⏰', meta.time.join(",")]);
segments.push(['⏰', meta.time]);
break;
case 'recurrence':

View File

@@ -54,5 +54,5 @@ export type ParsedTaskDependency = {
export type ParsedTaskReminder = {
feature: 'reminder';
time: string[];
time: string;
}

View File

@@ -17,7 +17,7 @@ export type Task = {
onDelete?: string;
id?: string;
dependsOn?: string[];
reminder?: string[];
reminder?: string;
sourceFile: string;
sourceLine: number;
source: string;