Skip to content

Commit

Permalink
Fix Priority handling
Browse files Browse the repository at this point in the history
  • Loading branch information
thesamim committed Oct 31, 2023
1 parent 6bf428b commit 7fa5d62
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 16 deletions.
11 changes: 6 additions & 5 deletions src/syncModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export class TickTickSync {

try {
const currentTask =await this.plugin.taskParser.convertTextToTickTickTaskObject(linetxt,filepath,line,fileContent)
// console.log("Adding because line content new check.")
console.log("Adding because line content new check. ", currentTask.priority)
const newTask = await this.plugin.tickTickRestAPI.AddTask(currentTask)
if (currentTask.parentId) {
let parentTask = await this.plugin.cacheOperation?.loadTaskFromCacheID(currentTask.parentId);
Expand Down Expand Up @@ -253,6 +253,7 @@ export class TickTickSync {
//console.log(`current line is ${i}`)
//console.log(`line text: ${line}`)
// console.log(filepath)
console.log("Adding because fullTextNewTaskCheck. ", currentTask.priority)
const currentTask =await this.plugin.taskParser.convertTextToTickTickTaskObject(line,filepath,i,content)
if(typeof currentTask === "undefined"){
continue
Expand Down Expand Up @@ -386,13 +387,12 @@ export class TickTickSync {
//due date whether to modify
const dueDateModified = (await this.plugin.taskParser.isDueDateChanged(lineTask,savedTask))
//TODO Fix This!
console.error("IGnoring priority and parentage. Re-Instate ASAP")
console.error("IGnoring parentage. Re-Instate ASAP")
const parentIdModified = false;
const priorityModified = false;
// // parent id whether to modify
// parent id whether to modify
// const parentIdModified = !(lineTask.parentId === savedTask.parentId)
// //check priority
// const priorityModified = !(lineTask.priority === savedTask.priority)
const priorityModified = !(lineTask.priority === savedTask.priority)

try {
let contentChanged= false;
Expand Down Expand Up @@ -465,6 +465,7 @@ export class TickTickSync {
if (contentChanged || tagsChanged ||dueDateChanged ||projectChanged || parentIdChanged || priorityChanged) {
console.log("task content was modified");
//console.log(updatedContent)
console.log("Adding because updating actually ", lineTask.priority)
const updatedTask = await this.plugin.tickTickRestAPI?.UpdateTask(lineTask)
lineTask.path = filepath
await this.plugin.cacheOperation?.updateTaskToCacheByID(lineTask);
Expand Down
107 changes: 96 additions & 11 deletions src/taskParser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,46 @@ interface dataviewTaskObject {
// }



const priorityEmojis = ['⏬','🔽','🔼','⏫','🔺',]
const prioritySymbols = {
Highest: '🔺',
High: '⏫',
Medium: '🔼',
Low: '🔽',
Lowest: '⏬',
None: '',
}
enum Priority {
Highest = '5',
High = '5',
Medium = '3',
None = '0',
Low = '1',
Lowest = '0',
}

const keywords = {
TickTick_TAG: "#ticktick",
DUE_DATE: "🗓️|📅|📆|🗓",
priority: "⏬|🔽|🔼|⏫|🔺"
// priorityIcons: "⏬|🔽|🔼|⏫|🔺",
// priority: `\s([${priorityEmojis.toString()}])\s`
priority: `\\s([\u{23EC}\u{1F53D}\u{1F53C}\u{23EB}\u{1F53A}])\\s`
};



//For now, we're going to do task view emojies only
const priorityMapping = [
{ ticktick: 0, obsidian: null },
{ ticktick: 0, obsidian: '⏬' },
{ ticktick: 1, obsidian: '🔽' },
{ ticktick: 3, obsidian: '🔼' },
{ ticktick: 5, obsidian: '⏫' },
{ ticktick: 5, obsidian: '🔺' }
];


const REGEX = {
TickTick_TAG: new RegExp(`^[\\s]*[-] \\[[x ]\\] [\\s\\S]*${keywords.TickTick_TAG}[\\s\\S]*$`, "i"),
TickTick_ID: /\[ticktick_id::\s*[\d\S]+\]/,
Expand All @@ -60,7 +94,7 @@ const REGEX = {
DUE_DATE : new RegExp(`(?:${keywords.DUE_DATE})\\s?(\\d{4}-\\d{2}-\\d{2})`),
PROJECT_NAME: /\[project::\s*(.*?)\]/,
TASK_CONTENT: {
REMOVE_PRIORITY: /\s!!([1-4])\s/,
REMOVE_PRIORITY: /[🔺🔼🔽]/ug,
REMOVE_TAGS: /(^|\s)( *#[a-zA-Z\d\u4e00-\u9fa5-]+)/g, //Allow 1 or more spaces before hashtag
REMOVE_SPACE: /^\s+|\s+$/g,
REMOVE_DATE: new RegExp(`(${keywords.DUE_DATE})\\s?\\d{4}-\\d{2}-\\d{2}`),
Expand All @@ -74,7 +108,9 @@ const REGEX = {
TASK_CHECKBOX_CHECKED: /- \[(x|X)\] /,
TASK_INDENTATION: /^(\s{2,}|\t)(-|\*)\s+\[(x|X| )\]/,
TAB_INDENTATION: /^(\t+)/,
TASK_PRIORITY: /\s!!([1-4])\s/,
// TASK_PRIORITY: /\s!!([1-4])\s/,
TASK_PRIORITY: new RegExp(keywords.priority),
priorityRegex: /^.*([🔺🔼🔽]).*$/u,
BLANK_LINE: /^\s*$/,
TickTick_EVENT_DATE: /(\d{4})-(\d{2})-(\d{2})/
};
Expand Down Expand Up @@ -119,12 +155,21 @@ export class TaskParser {

}
private addPriorityToLine(resultLine: string, task: ITask) {
resultLine = `${resultLine} [${task.priority}]`;
let priority = this.translateTickTickToObsidian(task.priority);
if (priority != null ) {
// console.log("task pri: ", task.priority, " emoji num: ", priority, priorityEmojis[priority])
console.log("task pri: ", task.priority, " emoji num: ", priority)
resultLine = `${resultLine} ${priority}`;
}
else
{
console.log("task pri: ", task.priority, " undefined: ", priority)
}
return resultLine;
}

private addDueDateToLine(resultLine: string, task: ITask) {
resultLine = resultLine + '🗓️' + task.dueDate;
resultLine = resultLine + ' 🗓️' + task.dueDate;
return resultLine;
}

Expand Down Expand Up @@ -250,7 +295,7 @@ export class TaskParser {
priority:priority,
status: isCompleted? 2: 0, //Status: 0 is no completed. Anything else is completed.
}
console.log("new task: ", "Parent: ", task.parentId, "Tags: ", task.tags)
console.log("new task: ", "Parent: ", task.parentId, "Tags: ", task.tags, "Priority: ", task.priority)
return task;
}

Expand Down Expand Up @@ -470,14 +515,44 @@ export class TaskParser {
}


// Task priority from 1 (normal) to 4 (urgent).
// Task priority from 0 (none) to 4 (urgent).
getTaskPriority(lineText:string): number{
const match = REGEX.TASK_PRIORITY.exec(lineText)
return match ? Number(match[1]) : 1;
console.log("#### line: ", lineText)
console.log("#### Regex: ", REGEX.priorityRegex )
let priority = "0";
const priorityMatch = lineText.match(REGEX.priorityRegex);


if (priorityMatch !== null) {
let x = 0;
priorityMatch.forEach(priority => {
console.log("#### match: ", x, "--", priority);
x++;
});
console.log("#### priority: ", priority, " type: ", (typeof priority));
}

return priority;
}

protected parsePriority(p: string): Priority {
// const { prioritySymbols } = prioritySymbols;
switch (p) {
case prioritySymbols.Lowest:
return Priority.Lowest;
case prioritySymbols.Low:
return Priority.Low;
case prioritySymbols.Medium:
return Priority.Medium;
case prioritySymbols.High:
return Priority.High;
case prioritySymbols.Highest:
return Priority.Highest;
default:
return Priority.None;
}
}



//remove task indentation
removeTaskIndentation(text) {
const regex = /^([ \t]*)?- \[(x| )\] /;
Expand Down Expand Up @@ -617,4 +692,14 @@ export class TaskParser {
createURL(newTaskId: string): string {
return `https://ticktick.com/webapp/#q/all/tasks/${newTaskId}`;
}

translateTickTickToObsidian(ticktickPriority: number) {
const mapping = priorityMapping.find((item) => item.ticktick === ticktickPriority);
return mapping ? mapping.obsidian : null;
}

translateObsidianToTickTick(obsidianPriority: number) {
const mapping = priorityMapping.find((item) => item.obsidian === obsidianPriority);
return mapping ? mapping.ticktick : null;
}
}

0 comments on commit 7fa5d62

Please sign in to comment.