Code:
Object oImportICSBtn is a Button
Set Size to 37 70
Set Location to 8 595
Set peAnchors to anTopRight
//Set Label to 'New Appt'
// fires when the button is clicked
Procedure Onclick
Date dDate
//Sysdate dDate
//Send pPopupGCal 0 '' dDate
String[] sLines
String sLine
Integer iCount iChIn i iLength
Boolean bIsEvent
Integer iYear iMonth iDay iHour iMin
String sSTM
Date dStartDate dEndDate dWorkDate
DateTime dtWorkDate dtWorkDate2
Integer iStartHr iEndHr iNumber iHeader
Number nGMTStart nGMTEnd nGMTWork nWork
String sTitle
String sOwner sTest
Boolean bUTC
Move False to bIsEvent
Move True to bUTC
Move (Seq_New_Channel()) to iChIn
Direct_Input channel iChIn 'CLIPBOARD:'
[not SeqEof] Begin
Repeat
Readln sLine
Move sLine to sLines[iCount]
If (sLine='BEGIN:VEVENT') Move True to bIsEvent
Increment iCount
Until [SeqEof]
End
Close_Input channel iChIn
Send Seq_Release_Channel iChIn
If (bIsEvent) Begin
For i from 0 to (iCount-1)
Move sLines[i] to sLine
Move (Trim(sLine)) to sLine
If ((Left(sLine,8))='DTSTART:') Begin
Move (Length(sLine)) to iLength
Move (Right(sLine,(iLength-8))) to sLine
Move (Right(sLine,1)) to sTest
If (sTest='Z') Move True to bUTC
Else Move False to bUTC
Move (Mid(sLine,4,1)) to iYear
Move (Mid(sLine,2,5)) to iMonth
Move (Mid(sLine,2,7)) to iDay
Move (Mid(sLine,2,10)) to iHour
Move (Mid(sLine,2,12)) to iMin
Move (CurrentDateTime()) to dtWorkDate
Move (DateSetDay(dtWorkDate,1)) to dtWorkDate
Move (DateSetYear(dtWorkDate,iYear)) to dtWorkDate
Move (DateSetMonth(dtWorkDate,iMonth)) to dtWorkDate
Move (DateSetDay(dtWorkDate,iDay)) to dtWorkDate
Move (DateSetHour(dtWorkDate,iHour)) to dtWorkDate
Move (DateSetMinute(dtWorkDate,iMin)) to dtWorkDate
Move (DateSetSecond(dtWorkDate,0)) to dtWorkDate
//Need: Number in GMT
// Date in Local
// Integer(time) in Local Time
If (not(bUTC)) Begin
//dtWorkDate is already LOCAL
Move (fGetUTC(dtWorkDate,SYSFILE.Def_Country, SYSFILE.Def_CommonCity)) to nGMTStart
Move dtWorkDate to dStartDate
Move (fGetDFDateTime(nGMTStart)) to dtWorkDate2
Move (fCreateDFDateTime(dtWorkDate2)) to nWork
Move (fLocalTime(nWork,SYSFILE.Def_Country,SYSFILE.Def_CommonCity)) to iStartHr
End
Else Begin
//dtWorkDATE is already UTC
Move (fCreateDFDateTime(dtWorkDate)) to nGMTStart
Move (fGetDFDateTime(nGMTStart)) to dtWorkDate2
Move dtWorkDate2 to dStartDate
Move (fCreateDFDateTime(dtWorkDate2)) to nWork
Move (fLocalTime(nWork,SYSFILE.Def_Country,SYSFILE.Def_CommonCity)) to iStartHr
End
End
If ((Left(sLine,6))='DTEND:') Begin
Move (Length(sLine)) to iLength
Move (Right(sLine,(iLength-6))) to sLine
Move (Right(sLine,1)) to sTest
If (sTest='Z') Move True to bUTC
Else Move False to bUTC
Move (Mid(sLine,4,1)) to iYear
Move (Mid(sLine,2,5)) to iMonth
Move (Mid(sLine,2,7)) to iDay
Move (Mid(sLine,2,10)) to iHour
Move (Mid(sLine,2,12)) to iMin
Move (CurrentDateTime()) to dtWorkDate
Move (DateSetDay(dtWorkDate,1)) to dtWorkDate
Move (DateSetYear(dtWorkDate,iYear)) to dtWorkDate
Move (DateSetMonth(dtWorkDate,iMonth)) to dtWorkDate
Move (DateSetDay(dtWorkDate,iDay)) to dtWorkDate
Move (DateSetHour(dtWorkDate,iHour)) to dtWorkDate
Move (DateSetMinute(dtWorkDate,iMin)) to dtWorkDate
Move (DateSetSecond(dtWorkDate,0)) to dtWorkDate
//Need: Number in GMT
// Date in Local
// Integer(time) in Local Time
If (not(bUTC)) Begin
//dtWorkDate is already LOCAL
Move (fGetUTC(dtWorkDate,SYSFILE.Def_Country, SYSFILE.Def_CommonCity)) to nGMTEnd
Move dtWorkDate to dEndDate
Move (fGetDFDateTime(nGMTEnd)) to dtWorkDate2
Move (fCreateDFDateTime(dtWorkDate2)) to nWork
Move (fLocalTime(nWork,SYSFILE.Def_Country,SYSFILE.Def_CommonCity)) to iEndHr
End
Else Begin
//dtWorkDATE is already UTC
Move (fCreateDFDateTime(dtWorkDate)) to nGMTEnd
Move (fGetDFDateTime(nGMTEnd)) to dtWorkDate2
Move dtWorkDate2 to dEndDate
Move (fCreateDFDateTime(dtWorkDate2)) to nWork
Move (fLocalTime(nWork,SYSFILE.Def_Country,SYSFILE.Def_CommonCity)) to iEndHr
End
End
If ((Left(sLine,8))='SUMMARY:') Begin
Move (Length(sLine)) to iLength
Move (Right(sLine,(iLength-8))) to sLine
Move sLine to sTitle
End
Loop
//************************************************************
Get psUser of hAppWS to sSTM
Move sSTM to sOwner
Clear GCal_Evt
Reread
Move sSTM to GCAL_EVT.CREATED_BY
Move dStartDate to GCAL_EVT.STARTDATE
Move iStartHr to GCAL_EVT.STARTTIME
Move dEndDate to GCAL_EVT.ENDDATE
Move iEndHr to GCAL_EVT.ENDTIME
Move nGMTStart to GCAL_EVT.StartDateTime
//Move nGMTEnd to GCAL_EVT.EndDateTime
If (nGMTEnd>nGMTStart) Move nGMTEnd to GCAL_EVT.EndDateTime
Else Move nGMTStart to GCAL_EVT.EndDateTime
Move sysfile.Def_Country to GCAL_EVT.Country
Move sysfile.Def_CommonCity to GCAL_EVT.CommonCity
Move sTitle to GCAL_EVT.TITLE
Move sOwner to GCAL_EVT.STM //will need to change this later after testing to allow users to select which calendars
//Move sWhere to GCAL_EVT.Where
Get fGSCTimeStamp to GCAL_EVT.LASTCHANGE
//Move sType to GCAL_EVT.TYPE
//Move sDetail to GCAL_EVT.DETAIL
Move 'N' to GCAL_EVT.ISPRIVATE
Move 'N' to GCAL_EVT.TODO_ITEM
Move 'N' to GCAL_EVT.Completed
Move 'Y' to GCAL_EVT.isheader //will need to change this later MAYBE
If (iNumber=0) Begin
Move (GCAL_SYS.LAST_EVENT+1) to iNumber
Move (GCAL_SYS.LAST_EVENT+1) to GCAL_Sys.LAST_EVENT
Move iNumber to GCAL_EVT.Number
//Move iNumber to GCAL_EVT.HEADER
Move iNumber to GCAL_EVT.LINKEDNUMBER
Move 'N' to GCAL_EVT.Spanner
Move iNumber to GCAL_EVT.Top
End
If (iHeader=0) Move iNumber to iHeader
Move iHeader to GCAL_EVT.Header
//Move sEmpGroup to GCAL_EVT.EMPGROUP
SaveRecord GCAL_EVT GCAL_SYS
Unlock
If (dStartDate<dEndDate) Begin
Move dStartDate to dWorkDate
Repeat
Move (dWorkdate+1) to dWorkDate
Move dWorkDate to dtWorkDate
Move (DateSetHour(dtWorkDate,0)) to dtWorkDate
Move (DateSetMinute(dtWorkDate,0)) to dtWorkDate
Move (DateSetSecond(dtWorkDate,0)) to dtWorkDate
Move (fGetUTC(dtWorkDate,sysfile.Def_Country,sysfile.Def_CommonCity)) to nGMTWork
Clear GCal_Evt
Reread
Move sSTM to GCAL_EVT.CREATED_BY
Move dWorkDate to GCAL_EVT.STARTDATE
Move 0 to GCAL_EVT.STARTTIME
Move dEndDate to GCAL_EVT.ENDDATE
Move iEndHr to GCAL_EVT.ENDTIME
Move nGMTWork to GCAL_EVT.StartDateTime
Move nGMTEnd to GCAL_EVT.EndDateTime
If (nGMTEnd>nGMTWork) Move nGMTEnd to GCAL_EVT.EndDateTime
Else Move nGMTStart to GCAL_EVT.EndDateTime
Move sysfile.def_Country to GCAL_EVT.Country
Move sysfile.Def_CommonCity to GCAL_EVT.CommonCity
//Move sWhere to GCAL_EVT.Where
Move sTitle to GCAL_EVT.TITLE
Move sOwner to GCAL_EVT.STM //will need to change this later after testing to allow users to select which calendars
Get fGSCTimeStamp to GCAL_EVT.LASTCHANGE
//Move sType to GCAL_EVT.TYPE
//Move sDetail to GCAL_EVT.DETAIL
Move 'N' to GCAL_EVT.ISPRIVATE
Move 'N' to GCAL_EVT.TODO_ITEM
Move 'N' to GCAL_EVT.Completed
Move 'Y' to GCAL_EVT.isheader //will need to change this later MAYBE
//If (iNumber=0) Begin
Move (GCAL_SYS.LAST_EVENT+1) to GCal_Evt.Number
//Move (GCal_Sys.Last_Event+1) to GCAL_EVT.HEADER
Move (GCal_Sys.Last_Event+1) to GCAL_EVT.LINKEDNUMBER
Move 'Y' to GCAL_EVT.Spanner
Move iNumber to GCAL_EVT.Top
Move (GCAL_SYS.LAST_EVENT+1) to GCAL_Sys.LAST_EVENT
//End
If (iHeader=0) Move iNumber to iHeader
Move iHeader to GCAL_EVT.Header
//Move sEmpGroup to GCAL_EVT.EMPGROUP
SaveRecord GCAL_EVT GCAL_SYS
Unlock
Until (dWorkDate=dEndDate)
End
//************************************************************
Send Info_Box ("Calendar Event imported:\n Date: "+(String(dStartDate))+"\n Owner: "+sSTM)
Procedure_Return
End
Send Stop_Box 'Nothing to import'
End_Procedure
End_object