Scripting mit Tyme

Tyme ist vollständig per AppleScript (oder JavaScript) programmierbar. Um die von Tyme unterstützten AppleScript-Befehle anzuzeigen, starte den AppleScript Editor und ziehe dann Tyme.app auf das Dock-Symbol des Editors. Die folgenden Beispiele zeigen, wie du Projekte, Aufgaben und Zeitangaben anlegen kannst:

// starting a timer
StartTrackerForTaskID "B98A6E...221CC252"

// listing active task ids
trackedTaskIDs

// stopping a timer
StopTrackerForTaskID "B98A6E6E...5221CC252"

// creating a project
make new project with properties {
    name:"A", 
    defaultHourlyRate:120.0, 
    dueDate:(current date), 
    plannedBudget:1000.0, 
    plannedDuration:60.0
}

// searching for a project
set p to the first item of (every project whose name = "A")
name of p

// creating a task
make new task with properties {
    name:"B", 
    taskType:"timed", 
    dueDate:(current date), 
    timedRoundingMinutes:30, 
    timedHourlyRate:75.0
} at the end of tasks of p

// searching for a task
set t to the first item of (every task of every project whose name = "B")
name of t

// creating a new time record
make new taskRecord with properties {
    recordType:"timed", 
    timeStart:today - 60 * 18, 
    note:"Hello World!"
} at the end of taskRecords of t

set r to the first item of taskRecords of t
note of r

// creating a new mileage record
make new task with properties {
    name:"C", 
    taskType:"mileage", 
    mileageKilometerRate:0.4
} at the end of tasks of p

set m to the first item of (every task of every project whose name = "C")
name of m

// creating fixed costs
make new task with properties {
    name:"D", 
    taskType:"fixed", 
    fixedRate:4.99, 
    fixedQuantity:3
} at the end of tasks of p

set f to the first item of (every task of every project whose name = "D")
name of f

Schreibe deinen eigenen Exporter mit dem 'get task records' Befehl:

GetTaskRecordIDs 
    startDate ((current date) - 36000) 
    endDate (current date) 
    categoryID "B98A6E6E..001F35221CC252" 
    with onlyBillable
 
set fetchedRecords to fetchedTaskRecordIDs as list

// loop through all fetched records
repeat with recordID in fetchedRecords
   GetRecordWithID recordID
   timedDuration of lastFetchedTaskRecord
   ... // write the record anywhere
end repeat

Tyme hat auch ein paar Skript-Hooks. Beispielsweise kannst du ein AppleScript auslösen, wenn eine neuer Zeiteintrag erstellt wird oder ein Timer gestartet oder gestoppt wird. Du kannst beispielsweise einen ToDo als erledigt in ToDoIst oder Omnifocus markieren oder einen Alfred Workflow schreiben, um andere Dinge in Tyme zu automatisieren. Das Schreiben eigener Skripte, die auf diese Ereignisse reagieren, ist einfach, erstelle einfach eine neue Skriptdatei namens tyme3_applescript_hooks.scpt" in diesem Ordner "~/Library/Application Scripts/com.tyme-app.Tyme3-macOS/" (wenn sie nicht vorhanden ist, erstelle diesen).

Du musst dafür die folgenden Methoden implementieren:

on timerStartedForTaskRecord(tskRecordID)
    tell application "Tyme"
    GetRecordWithID tskRecordID
    set tskID to relatedTaskID of lastFetchedTaskRecord
    set tsk to the first item of (every task of every project whose id = tskID)
    set tskName to name of tsk
    say tskName
    end tell
end timerStartedForTaskRecord

on timerStoppedForTaskRecord(tskRecordID)
    tell application "Tyme"
    GetRecordWithID tskRecordID
    if recordType of lastFetchedTaskRecord is equal to "timed" then
        set d to timedDuration of lastFetchedTaskRecord
        say d
    end if
    end tell
end timerStoppedForTaskRecord

on timeoutDetectedForTaskRecord(tskRecordID)
    tell application "Tyme"
    GetRecordWithID tskRecordID
    set tskID to relatedTaskID of lastFetchedTaskRecord
    set tsk to the first item of (every task of every project whose id = tskID)
    set tskName to name of tsk
    say tskName
    end tell
end timeoutDetectedForTaskRecord

on projectCompletedChanged(projectID)
    tell application "Tyme"
    set prj to the first item of (every project whose id = projectID)
    set prjName to name of prj
    say prjName
    end tell
end projectCompletedChanged

on taskCompletedChanged(tskID)
    tell application "Tyme"
    set tsk to the first item of (every task of every project whose id = tskID)
    set tskName to name of tsk
    say tskName
    end tell
end taskCompletedChanged

Es gibt einige Open-Source-Integrationen mit anderen Anwendungen zu Tyme auf Github. Ein guter Ort, um sich inspirieren zu lassen:

Tyme 2 + Fantastical + Omnifocus
Tyme 2 + Slack Standup Notes
Tyme 2 + Alfred 3 Workflow