Database Settings
Settings represent the database synchronized configuration values.
NOTE: editing these should be done with care, as storing invalid values may corrupt your database or produce instability in the various client applications.
Settings Keys
Each of the database settings is represented by a key string. Here’s a script for accessing a list of the database keys:
Get Settings Keys
settings.keys.sort().join("\n")
Here are the resulting keys:
ContextModeShowsParents
DefaultDueTime
DefaultStartTime
DueSoonGranularity
DueSoonInterval
InboxIsActive
OFMAutomaticallyHideCompletedItems
OFMCompleteWhenLastItemComplete
OFMDefaultSingletonProjectPersistentIdentifier
OFMRemoteNotificationGroupID
OFMRemoteNotificationGroupIDLastRegenerationDate
OFMRemoteNotificationsDisabled
OFMRequiredRelationshipToProcessInboxItem
OFMTaskDefaultSequential
PerspectiveOrder_v3
ProjectInfoReviewRepetitionString
ReminderCalendarAlarmIndex
ReminderCalendarExportEnabled
UseNewHomeScreenAnimations
XMLVersionUpgradeLog
Settings Functions
The value of the database settings are accessed and altered by using the following functions, passing in the target key string as a function parameter.
Here are the settings functions:
defaultObjectForKey(key:String) → (Object or null) • Get the default value for the setting. The value may be a Boolean, String, or other class.
hasNonDefaultObjectForKey(key:String) → (Boolean) • Returns true if the current value for the setting is not its default value.
objectForKey(key:String) → (Object or null) • Returns the current value for the setting whose key matches the passed-in string.
setObjectForKey(value:Object or null, key:String) → ( ) • Set the value for the setting.
boolForKey(key:String) → (Boolean) • Used to retrieve the value of a setting whose value is a boolean.
setBoolForKey(value:Boolean, key:String) → ( ) • Used to set the value of setting whose value is a boolean.
integerForKey(key:String) → (Number) • Used to retrieve the value of a setting whose value is an integer.
setIntegerForKey(value:Number, key:String) → ( ) • Used to set the value of a setting whose value is an integer.
Examples
Here are some example scripts for accessing and changing settings values:
Get|Set Key Value
settings.objectForKey('InboxIsActive')
//--> true
settings.defaultObjectForKey('InboxIsActive')
//--> true
settings.boolForKey('InboxIsActive')
//--> true
settings.setBoolForKey(false, 'InboxIsActive')
settings.boolForKey('InboxIsActive')
//--> false
Restore Setting to Default (Boolean) Value
var targetKey = 'InboxIsActive'
var defaultValue = settings.defaultObjectForKey(targetKey)
settings.setBoolForKey(defaultValue, targetKey)
Here's a script demonstrating how to get and set the value of the start time setting:
Default Start Time Setting
settings.defaultObjectForKey('DefaultStartTime')
//--> "00:00"
settings.objectForKey('DefaultStartTime')
//--> "00:00"
settings.setObjectForKey('01:00','DefaultStartTime')
//--> "01:00"
//--> How to reset time setting to default value
defaultValue = settings.defaultObjectForKey('DefaultStartTime')
settings.setObjectForKey(defaultValue,'DefaultStartTime')
Here's a script demonstrating how to get and set the granularity value of the due soon setting:
Due Soon Granularity Setting
settings.defaultObjectForKey('DueSoonGranularity')
//--> 1
settings.integerForKey('DueSoonGranularity')
//--> 1
settings.setIntegerForKey(0,'DueSoonGranularity')
//--> 0
defaultValue = settings.defaultObjectForKey('DueSoonGranularity')
settings.setIntegerForKey(defaultValue,'DueSoonGranularity')
Using Default Deferment Settings
This plug-in shows how to use the default deferment settings to increase the defer date of the selected task one day. Select the DOWNLOAD PLUG-IN button to download a pair of plug-ins: Defer Task +1 Day, Defer Task -1 Day
Defer Task +1 Day
/*{
"type": "action",
"targets": ["omnifocus"],
"author": "Otto Automator",
"identifier": "com.omni-automation.of.defer-task-plus-one-day",
"version": "1.0",
"description": "This plug-in will increase the deferment of the selected task by one day.",
"label": "Defer Task +1 Day",
"shortLabel": "Defer Task +1d"
}*/
(() => {
var action = new PlugIn.Action(function(selection, sender){
// action code
// selection options: tasks, projects, folders, tags, databaseObjects, allObjects
var task = selection.tasks[0]
var currentDeferDate = task.deferDate
if (currentDeferDate){
var dc = new DateComponents()
dc.day = dc.day + 1
var targetDate = Calendar.current.dateByAddingDateComponents(currentDeferDate, dc)
task.deferDate = targetDate
} else {
var startTime = settings.objectForKey('DefaultStartTime')
//--> "00:00:00"
var timeElements = startTime.split(":")
var now = new Date()
var currentDeferDate = Calendar.current.startOfDay(now)
var dc = new DateComponents()
dc.day = dc.day + 1
dc.hour = Number(timeElements[0])
dc.minutes = Number(timeElements[1])
dc.seconds = Number(timeElements[2])
var targetDate = Calendar.current.dateByAddingDateComponents(currentDeferDate, dc)
task.deferDate = targetDate
}
});
action.validate = function(selection, sender){
// validation code
// selection options: tasks, projects, folders, tags, databaseObjects, allObjects
return (selection.tasks.length === 1)
};
return action;
})();
Creating a new OmniFocus task due tomorrow at the default due time:
New Task for Tomorrow
defaultDueTime = settings.defaultObjectForKey('DefaultDueTime')
timeElements = defaultDueTime.split(":")
dateObj = Calendar.current.startOfDay(new Date())
duration = new DateComponents()
duration.day = 1
duration.hour = parseInt(timeElements[0])
duration.minute = parseInt(timeElements[1])
targetDateObj = Calendar.current.dateByAddingDateComponents(dateObj, duration)
task = new Task("My New Task")
task.dueDate = targetDateObj