Last active
July 25, 2024 09:36
-
-
Save drewkerr/0f2b61ce34e2b9e3ce0ec6a92ab05c18 to your computer and use it in GitHub Desktop.
Read the current Focus mode on macOS Monterey (12.0+) using JavaScript for Automation (JXA)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const app = Application.currentApplication() | |
app.includeStandardAdditions = true | |
function getJSON(path) { | |
const fullPath = path.replace(/^~/, app.pathTo('home folder')) | |
const contents = app.read(fullPath) | |
return JSON.parse(contents) | |
} | |
function run() { | |
let focus = "No focus" // default | |
const assert = getJSON("~/Library/DoNotDisturb/DB/Assertions.json").data[0].storeAssertionRecords | |
const config = getJSON("~/Library/DoNotDisturb/DB/ModeConfigurations.json").data[0].modeConfigurations | |
if (assert) { // focus set manually | |
const modeid = assert[0].assertionDetails.assertionDetailsModeIdentifier | |
focus = config[modeid].mode.name | |
} else { // focus set by trigger | |
const date = new Date | |
const now = date.getHours() * 60 + date.getMinutes() | |
for (const modeid in config) { | |
const triggers = config[modeid].triggers.triggers[0] | |
if (triggers && triggers.enabledSetting == 2) { | |
const start = triggers.timePeriodStartTimeHour * 60 + triggers.timePeriodStartTimeMinute | |
const end = triggers.timePeriodEndTimeHour * 60 + triggers.timePeriodEndTimeMinute | |
if (start < end) { | |
if (now >= start && now < end) { | |
focus = config[modeid].mode.name | |
} | |
} else if (start > end) { // includes midnight | |
if (now >= start || now < end) { | |
focus = config[modeid].mode.name | |
} | |
} | |
} | |
} | |
} | |
return focus | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Python if you want in that context.