Initial backup 2026-02-17
This commit is contained in:
105
skills/apple-calendar/scripts/cal-create.sh
Normal file
105
skills/apple-calendar/scripts/cal-create.sh
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
# Create a new calendar event
|
||||
# Usage: cal-create.sh <calendar> <summary> <start_date> <end_date> [location] [description] [allday] [recurrence]
|
||||
# Date format: "YYYY-MM-DD HH:MM" or "YYYY-MM-DD" for all-day events
|
||||
# Recurrence format: iCalendar RRULE (e.g., "FREQ=WEEKLY;COUNT=4" or "FREQ=DAILY;UNTIL=20260201")
|
||||
# Examples:
|
||||
# cal-create.sh Personal "Meeting" "2026-01-15 10:00" "2026-01-15 11:00"
|
||||
# cal-create.sh Personal "Vacation" "2026-02-01" "2026-02-05" "" "Beach trip" true
|
||||
# cal-create.sh Personal "Weekly Standup" "2026-01-20 09:00" "2026-01-20 09:30" "Zoom" "" false "FREQ=WEEKLY;COUNT=10"
|
||||
|
||||
CALENDAR="${1:-}"
|
||||
SUMMARY="${2:-}"
|
||||
START_DATE="${3:-}"
|
||||
END_DATE="${4:-}"
|
||||
LOCATION="${5:-}"
|
||||
DESCRIPTION="${6:-}"
|
||||
ALL_DAY="${7:-false}"
|
||||
RECURRENCE="${8:-}"
|
||||
|
||||
if [ -z "$CALENDAR" ] || [ -z "$SUMMARY" ] || [ -z "$START_DATE" ] || [ -z "$END_DATE" ]; then
|
||||
echo "Usage: cal-create.sh <calendar> <summary> <start_date> <end_date> [location] [description] [allday] [recurrence]"
|
||||
echo "Date format: 'YYYY-MM-DD HH:MM' or 'YYYY-MM-DD' for all-day"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
osascript - "$CALENDAR" "$SUMMARY" "$START_DATE" "$END_DATE" "$LOCATION" "$DESCRIPTION" "$ALL_DAY" "$RECURRENCE" <<'EOF'
|
||||
on splitString(theString, theDelimiter)
|
||||
set oldDelimiters to AppleScript's text item delimiters
|
||||
set AppleScript's text item delimiters to theDelimiter
|
||||
set theArray to every text item of theString
|
||||
set AppleScript's text item delimiters to oldDelimiters
|
||||
return theArray
|
||||
end splitString
|
||||
|
||||
on parseDate(dateStr)
|
||||
set dateParts to my splitString(dateStr, " ")
|
||||
set ymdParts to my splitString(item 1 of dateParts, "-")
|
||||
|
||||
set theDate to current date
|
||||
set year of theDate to (item 1 of ymdParts) as integer
|
||||
set month of theDate to (item 2 of ymdParts) as integer
|
||||
set day of theDate to (item 3 of ymdParts) as integer
|
||||
|
||||
if (count of dateParts) > 1 then
|
||||
set timeParts to my splitString(item 2 of dateParts, ":")
|
||||
set hours of theDate to (item 1 of timeParts) as integer
|
||||
set minutes of theDate to (item 2 of timeParts) as integer
|
||||
set seconds of theDate to 0
|
||||
else
|
||||
set hours of theDate to 0
|
||||
set minutes of theDate to 0
|
||||
set seconds of theDate to 0
|
||||
end if
|
||||
|
||||
return theDate
|
||||
end parseDate
|
||||
|
||||
on run argv
|
||||
set calendarName to item 1 of argv as string
|
||||
set eventSummary to item 2 of argv as string
|
||||
set startDateStr to item 3 of argv as string
|
||||
set endDateStr to item 4 of argv as string
|
||||
set eventLocation to item 5 of argv as string
|
||||
set eventDescription to item 6 of argv as string
|
||||
set isAllDay to item 7 of argv as string
|
||||
set eventRecurrence to item 8 of argv as string
|
||||
|
||||
set startDate to my parseDate(startDateStr)
|
||||
set endDate to my parseDate(endDateStr)
|
||||
|
||||
tell application "Calendar"
|
||||
try
|
||||
set cal to calendar calendarName
|
||||
on error
|
||||
return "Error: Calendar '" & calendarName & "' not found"
|
||||
end try
|
||||
|
||||
if not (writable of cal) then
|
||||
return "Error: Calendar '" & calendarName & "' is read-only"
|
||||
end if
|
||||
|
||||
set eventProps to {summary:eventSummary, start date:startDate, end date:endDate}
|
||||
|
||||
if isAllDay is "true" then
|
||||
set eventProps to eventProps & {allday event:true}
|
||||
end if
|
||||
|
||||
set newEvent to make new event at end of events of cal with properties eventProps
|
||||
|
||||
if eventLocation is not "" then
|
||||
set location of newEvent to eventLocation
|
||||
end if
|
||||
|
||||
if eventDescription is not "" then
|
||||
set description of newEvent to eventDescription
|
||||
end if
|
||||
|
||||
if eventRecurrence is not "" then
|
||||
set recurrence of newEvent to eventRecurrence
|
||||
end if
|
||||
|
||||
return "Created event: " & (uid of newEvent)
|
||||
end tell
|
||||
end run
|
||||
EOF
|
||||
Reference in New Issue
Block a user