diff --git a/Picker.omnifocusjs/Resources/en.lproj/showFlagged.strings b/Picker.omnifocusjs/Resources/en.lproj/showFlagged.strings new file mode 100644 index 0000000..49604df --- /dev/null +++ b/Picker.omnifocusjs/Resources/en.lproj/showFlagged.strings @@ -0,0 +1,5 @@ +"label" = "Show Flagged Projects"; +"shortLabel" = "Flagged"; +"mediumLabel" = "Show Flagged"; +"longLabel" = "Show Flagged Projects"; +"paletteLabel" = "Flagged"; diff --git a/Picker.omnifocusjs/Resources/index-cards.png b/Picker.omnifocusjs/Resources/index-cards.png new file mode 100644 index 0000000..5ff4e6c Binary files /dev/null and b/Picker.omnifocusjs/Resources/index-cards.png differ diff --git a/Picker.omnifocusjs/Resources/showFlagged.js b/Picker.omnifocusjs/Resources/showFlagged.js new file mode 100644 index 0000000..08b55f0 --- /dev/null +++ b/Picker.omnifocusjs/Resources/showFlagged.js @@ -0,0 +1,27 @@ +"use strict"; +(() => { + var action = new PlugIn.Action(async () => { + try { + let toFocus = []; + flattenedProjects + .filter((p) => p.status == Project.Status.Active) + .flatMap((p) => p.flattenedTasks.filter((t) => t.flagged && + (t.taskStatus == Task.Status.Available || + t.taskStatus == Task.Status.DueSoon || + t.taskStatus == Task.Status.Next || + t.taskStatus == Task.Status.Overdue))) + .forEach((task) => { + if (task.containingProject && toFocus.indexOf(task.containingProject) === -1) { + toFocus.push(task.containingProject); + } + }); + document.windows[0].perspective = Perspective.BuiltIn.Projects; + document.windows[0].focus = toFocus; + } + catch (err) { + console.error(err); + throw err; + } + }); + return action; +})(); diff --git a/Picker.omnifocusjs/Resources/showFlagged.ts b/Picker.omnifocusjs/Resources/showFlagged.ts new file mode 100644 index 0000000..0718284 --- /dev/null +++ b/Picker.omnifocusjs/Resources/showFlagged.ts @@ -0,0 +1,33 @@ +(() => { + var action = new PlugIn.Action(async () => { + try { + let toFocus: Project[] = []; + + flattenedProjects + .filter((p) => p.status == Project.Status.Active) + .flatMap((p) => + p.flattenedTasks.filter( + (t: Task) => + t.flagged && + (t.taskStatus == Task.Status.Available || + t.taskStatus == Task.Status.DueSoon || + t.taskStatus == Task.Status.Next || + t.taskStatus == Task.Status.Overdue) + ) + ) + .forEach((task: Task) => { + if (task.containingProject && toFocus.indexOf(task.containingProject) === -1) { + toFocus.push(task.containingProject); + } + }); + + document.windows[0].perspective = Perspective.BuiltIn.Projects; + document.windows[0].focus = toFocus as SectionArray; + } catch (err) { + console.error(err); + throw err; + } + }); + + return action; +})(); diff --git a/Picker.omnifocusjs/manifest.json b/Picker.omnifocusjs/manifest.json index ae5dc0f..fcfb370 100644 --- a/Picker.omnifocusjs/manifest.json +++ b/Picker.omnifocusjs/manifest.json @@ -8,6 +8,10 @@ { "identifier": "pick", "image": "arrow-clockwise.png" + }, + { + "identifier": "showFlagged", + "image": "index-cards.png", } ] }