' $Id: sync-iPod-Calendar.ls,v 1.1 2008/02/17 09:14:50 fukudat Exp $ ' ' Copyright (c) 2008 Takeshi Fukuda. ' ' THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND. ' You may use, modify, and redistribute this software freely. Sub Click(Source As Button) Dim session As New NotesSession Dim db As NotesDatabase Set db = session.CurrentDatabase ' Get a file to open fileName$ = Environ("TMP") & "\" & "calendar.csv" ' Open the file Dim fileNumber As Integer fileNumber = Freefile Open fileName$ For Output As fileNumber On Error Goto Error_Handler ' Enumerate over the Calender events Dim col As NotesDocumentCollection Set col = db.Search("@IsAvailable(CalendarDateTime)", Nothing, 0) Dim doc As NotesDocument count% = 0 Set doc = col.GetFirstDocument ' Call WriteCSVHeader(fileNumber) While Not(doc Is Nothing) Call WriteCSVEntry(fileNumber, doc, count%) Set doc = col.GetNextDocument(doc) Wend ' Close the file Close fileNumber ' Messagebox Cstr(count%) & " entries were written to " & fileName$ ' Show it ' Dim ws As New NotesUIWorkspace ' ws.URLOpen("file:///" & fileName$) ' Run it rc = Shell("bash.exe -lc ""sync-iPod-Calendar $TMP/calendar.csv Calendar.sqlitedb iphone.fukudat.com; sleep 30"" ") Exit Sub Error_Handler: Messagebox "Error " & Cstr(Err) & ": " & Error$ & "on line " & Cstr(Erl) Close fileNumber Exit Sub End Sub Sub WriteCSVEntry(fileNumber As Integer, doc As NotesDocument, count As Integer) On Error Goto error_handler m% = Ubound(doc.StartDateTime) For n% = 0 To m% If doc.StartDateTime(n%) >= "2001/1/1" Then Print #fileNumber, quote(doc.Subject(0)) & ","; Print #filenumber, quote(doc.Location(0)) & ","; Print #filenumber, quote(doc.getItemValue("Body")(0)) & ","; Print #fileNumber, quote(doc.StartDateTime(n%)) & ","; Print #filenumber, quote(doc.StartTimeZone(0)) & ","; Print #filenumber, quote(doc.EndDateTime(n%)) & ","; Print #filenumber, quote(doc.AppointmentType(0)) count = count + 1 End If Next Exit Sub Error_Handler: Messagebox "Error " & Cstr(Err) & ": " & Error$ & "on line " & Cstr(Erl) End Sub Function quote(s0 As String) As String s1$ = """" length% = Len(s0) For i% = 1 To length% c$ = Mid$(s0, i%, 1) ' read one character Select Case c$ Case """": s1$ = s1$ & """""" ' Case "\" ' s1$ = s1$ & "\\" ' Case Chr(10): ' s1$ = s1$ & "\n" ' Case Chr(13) ' s1$ = s1$ & "\r" Case Else s1$ = s1$ & c$ End Select Next s1$ = s1$ & """" quote = s1$ End Function Sub WriteCSVHeader(fileNumber As Integer) Print #fileNumber, "Subject,"; Print #filenumber, "Location,"; Print #filenumber, "Body,"; Print #fileNumber, "StartDateTime,"; Print #filenumber, "StartTimeZone,"; Print #filenumber, "EndDateTime,"; Print #filenumber, "AppointmentType" End Sub