Keith John Hutchison
Keith John Hutchison

Reputation: 5277

Parsing command line arguments for osascript -l JavaScript

I'm looking for a way to get command line arguments for a javascript file that is using osascript.

I've tried referencing argv which works with apple script files. I've tried referencing system, and I've tried referencing this.

Documentation appears to be light on the ground ... I've tried multiple searches but I'm either getting node matches or apple script matches.

This is the script I want to pass parameters to.

#!/usr/bin/osascript

console.log(this)

for ( key in this ) {
    console.log(key)
}

var app = Application.currentApplication()
app.includeStandardAdditions = true
var Calendar = Application("Calendar")

var eventStart = app.currentDate()
eventStart = eventStart
eventStart.setDate(eventStart.getDate() + 1)
eventStart.setHours(15)
eventStart.setMinutes(0)
eventStart.setSeconds(0)
var eventEnd = new Date(eventStart.getTime())
eventEnd.setHours(16)

var projectCalendars = Calendar.calendars.whose({name: "csmu"})
var projectCalendar = projectCalendars[0]

var event = Calendar.Event({summary: "Important Meeting!", startDate: eventStart, endDate: eventEnd})
projectCalendar.events.push(event)
event

This is an example run.

./create-event.js '{"calendar":"BD2T-AT"}'
[object GlobalObject]
eventEnd
eventStart
Calendar
event
app
projectCalendar
projectCalendars
Application("Calendar").calendars.whose({_match: [ObjectSpecifier().name, "csmu"]}).calendars.at(0).events.byId("3F6F91B0-06CD-4688-ADED-238BA40915DC")

How do you parse command line arguments for osascript -l JavaScript

Upvotes: 1

Views: 1326

Answers (1)

Keith John Hutchison
Keith John Hutchison

Reputation: 5277

I tried creating a run function. That worked!

Example script.

#!/usr/bin/osascript

function run(command_line_parameters){

    command_line_parameters = JSON.parse(command_line_parameters)

    calendar_name = command_line_parameters['calendar']

    summary = command_line_parameters['summary']

    starts = command_line_parameters['starts']
    start_date_time = starts.split(' ')
    start_date = start_date_time[0]
    start_time = start_date_time[1].split(':')

    ends = command_line_parameters['ends']
    end_date_time = ends.split(' ')
    end_date = end_date_time[0]
    end_time = end_date_time[1].split(':')

    var app = Application.currentApplication()
    app.includeStandardAdditions = true
    var Calendar = Application("Calendar")

    var eventStart = new Date(start_date)

    eventStart.setHours(start_time[0])
    eventStart.setMinutes(start_time[1])
    eventStart.setSeconds(0)

    var eventEnd = new Date(end_date)
    eventEnd.setHours(end_time[0])
    eventEnd.setMinutes(end_time[1])
    eventEnd.setSeconds(0)

    console.log(calendar_name,summary,starts,ends)

    var projectCalendars = Calendar.calendars.whose({name: calendar_name})
    var projectCalendar = projectCalendars[0]

    var event = Calendar.Event({summary: summary, startDate: eventStart, endDate: eventEnd})
    projectCalendar.events.push(event)
    event

}

Example run.

./create-event.js '{"calendar":"BD2L-AT", "starts":"2018-12-16 09:00", "ends":"2018-12-16 13:43", "summary":"Created from command line"}'

Which created an event in the BD2L-AT calendar from 09:00 to 13:43 on the 16 of December 2018.

Upvotes: 2

Related Questions