From d6130d64a8fc68ce93d2aa7d0bd8fb12439a4b33 Mon Sep 17 00:00:00 2001 From: Brian Hicks Date: Wed, 14 Sep 2022 10:13:49 -0500 Subject: [PATCH] allow the Session script to start projects and tags as well as tasks --- Session.omnifocusjs/Resources/start.js | 59 ++++++++++++++++----- Session.omnifocusjs/Resources/start.ts | 71 ++++++++++++++++++++------ 2 files changed, 101 insertions(+), 29 deletions(-) diff --git a/Session.omnifocusjs/Resources/start.js b/Session.omnifocusjs/Resources/start.js index b96c5f8..c0aa4ba 100644 --- a/Session.omnifocusjs/Resources/start.js +++ b/Session.omnifocusjs/Resources/start.js @@ -4,33 +4,64 @@ WARNING: if you're looking at the file ending in .js and want to make changes, don't! Modify the .ts file and run `tsc` instead! */ (() => { + function findCategory(tag) { + if (tag.name == "Wandering Toolmaker") { + return tag.name; + } + else if (tag.name == "teams" || (tag.parent && tag.parent.name == "teams") || tag.name == "work" || (tag.parent && tag.parent.name == "work")) { + return "Team"; + } + else if (tag.name == "personal" || (tag.parent && tag.parent.name == "personal")) { + return "Personal"; + } + return null; + } var action = new PlugIn.Action(async (selection, sender) => { try { - let task = selection.tasks[0]; let possibleCategories = [ "Personal", "Team", "Wandering Toolmaker", ]; let defaultCategory = possibleCategories[0]; - for (let tag of task.tags) { - if (tag.name == "Wandering Toolmaker") { - defaultCategory = tag.name; - break; + let defaultProject = null; + let defaultMinutes = "25"; + if (selection.tasks[0]) { + let task = selection.tasks[0]; + for (let tag of task.tags) { + let category = findCategory(tag); + if (category !== null) { + defaultCategory = category; + break; + } } - else if (tag.name == "teams" || (tag.parent && tag.parent.name == "teams") || tag.name == "work" || (tag.parent && tag.parent.name == "work")) { - defaultCategory = "Team"; - break; + if (task.containingProject) { + defaultProject = task.containingProject.name; } - else if (tag.name == "personal" || (tag.parent && tag.parent.name == "personal")) { - defaultCategory = "Personal"; - break; + } + else if (selection.tags[0]) { + let tag = selection.tags[0]; + defaultProject = tag.name; + let category = findCategory(tag); + if (category !== null) { + defaultCategory = category; + } + } + else if (selection.projects[0]) { + let project = selection.projects[0]; + defaultProject = project.name; + for (let tag of project.tags) { + let category = findCategory(tag); + if (category !== null) { + defaultCategory = category; + break; + } } } let focusForm = new Form(); - focusForm.addField(new Form.Field.String("project", "Project", task.containingProject ? task.containingProject.name : null)); + focusForm.addField(new Form.Field.String("project", "Project", defaultProject)); focusForm.addField(new Form.Field.Option("category", "Category", possibleCategories, possibleCategories, defaultCategory)); - focusForm.addField(new Form.Field.String("minutes", "Minutes", "25")); + focusForm.addField(new Form.Field.String("minutes", "Minutes", defaultMinutes)); await focusForm.show("Focus on…", "Start"); let values = focusForm.values; let rawSessionUrl = `session:///start?intent=${encodeURIComponent(values.project)}&categoryName=${encodeURIComponent(values.category)}&duration=${encodeURIComponent(values.minutes)}`; @@ -45,7 +76,7 @@ don't! Modify the .ts file and run `tsc` instead! } }); action.validate = function (selection, sender) { - return (selection.tasks.length === 1); + return (selection.tasks.length === 1 || selection.tags.length === 1 || selection.projects.length === 1); }; return action; })(); diff --git a/Session.omnifocusjs/Resources/start.ts b/Session.omnifocusjs/Resources/start.ts index b4e320e..162fe10 100644 --- a/Session.omnifocusjs/Resources/start.ts +++ b/Session.omnifocusjs/Resources/start.ts @@ -3,34 +3,75 @@ WARNING: if you're looking at the file ending in .js and want to make changes, don't! Modify the .ts file and run `tsc` instead! */ (() => { + function findCategory(tag: Tag): string | null { + if (tag.name == "Wandering Toolmaker") { + return tag.name + + } else if (tag.name == "teams" || (tag.parent && tag.parent.name == "teams") || tag.name == "work" || (tag.parent && tag.parent.name == "work")) { + return "Team" + + } else if (tag.name == "personal" || (tag.parent && tag.parent.name == "personal")) { + return "Personal" + } + + return null + } + var action = new PlugIn.Action(async (selection: Selection, sender: any) => { try { - let task = selection.tasks[0] let possibleCategories = [ "Personal", "Team", "Wandering Toolmaker", ]; - let defaultCategory = possibleCategories[0]; + let defaultCategory: string = possibleCategories[0]; + let defaultProject: string | null = null; + let defaultMinutes: string = "25"; - for (let tag of task.tags) { - if (tag.name == "Wandering Toolmaker") { - defaultCategory = tag.name; - break; - } else if (tag.name == "teams" || (tag.parent && tag.parent.name == "teams") || tag.name == "work" || (tag.parent && tag.parent.name == "work")) { - defaultCategory = "Team"; - break; - } else if (tag.name == "personal" || (tag.parent && tag.parent.name == "personal")) { - defaultCategory = "Personal"; - break; + if (selection.tasks[0]) { + let task = selection.tasks[0] + + for (let tag of task.tags) { + let category = findCategory(tag); + if (category !== null) { + defaultCategory = category + break + } + } + + if (task.containingProject) { + defaultProject = task.containingProject.name; + } + + } else if (selection.tags[0]) { + let tag = selection.tags[0] + + defaultProject = tag.name + + let category = findCategory(tag) + if (category !== null) { + defaultCategory = category + } + + } else if (selection.projects[0]) { + let project = selection.projects[0] + + defaultProject = project.name + + for (let tag of project.tags) { + let category = findCategory(tag); + if (category !== null) { + defaultCategory = category + break + } } } let focusForm = new Form(); - focusForm.addField(new Form.Field.String("project", "Project", task.containingProject ? task.containingProject.name : null)); + focusForm.addField(new Form.Field.String("project", "Project", defaultProject)); focusForm.addField(new Form.Field.Option("category", "Category", possibleCategories, possibleCategories, defaultCategory)); - focusForm.addField(new Form.Field.String("minutes", "Minutes", "25")); + focusForm.addField(new Form.Field.String("minutes", "Minutes", defaultMinutes)); await focusForm.show("Focus on…", "Start"); let values = focusForm.values as { @@ -51,7 +92,7 @@ don't! Modify the .ts file and run `tsc` instead! }); action.validate = function(selection: Selection, sender: any){ - return (selection.tasks.length === 1) + return (selection.tasks.length === 1 || selection.tags.length === 1 || selection.projects.length === 1) }; return action;