Development/Tutorials/PIM/ical

    From KDE TechBase
    Revision as of 09:13, 26 September 2011 by Tstaerk (talk | contribs)

    iCal is a standardized data format for storing appointments, events and todos in a calendar file. It is being used by Apple and Outlook. Using the KDE libraries you can read and write files in this format.

    Writing a calendar

    As a start, we will write a program that generates the calendar file /tmp/test.ics containing one todo named "test todo".

    CMakeLists.txt

    PROJECT( kde4start )
    FIND_PACKAGE(KDE4 REQUIRED)
    INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} . )
    
    
    SET(kde4startSources main.cpp )
    
    KDE4_ADD_EXECUTABLE(kde4start ${kde4startSources} )
    
    TARGET_LINK_LIBRARIES(kde4start ${KDE4_KDEUI_LIBS} ${KDE4_KCAL_LIBS} ${KDE4_KPARTS_LIBS} kdepim kcal_resourceremote )
    

    main.cpp

    /*
    This is a demo/test case for KDE's iCalendar functionality.
    (c) 2008-2011 by Thorsten Staerk
    */
    
    #include <QString>
    #include <kapplication.h>
    #include <kaboutdata.h>
    #include <kcmdlineargs.h>
    #include <KMainWindow>
    #include <kcal/resourcecalendar.h>
    #include <kcal/resourcecached.h>
    #include <kcal/resourcelocal.h>
    
    int main (int argc, char *argv[])
    {
      const QByteArray& ba=QByteArray("test");
      const KLocalizedString name=ki18n("myName");
      KAboutData aboutData( ba, ba, name, ba, name);
      KCmdLineArgs::init( argc, argv, &aboutData );
      KApplication khello;
      KCal::ResourceCalendar* cal;
      KCal::ResourceCached* resource;
      resource=new KCal::ResourceLocal("/tmp/test.ics");
      cal=resource;
      cal->load();
      KCal::Todo* todo1 = new KCal::Todo();
      todo1->setSummary("test todo");
      cal->addTodo(todo1);
      KABC::Lock *lock = cal->lock();
      cal->save();
      lock->unlock();
    }
    

    build and run it

    cmake . && make -j8 && ./kdestart
    

    result

    If we delete /tmp/test.ics and then run the program, the file will look about like this:

    # cat /tmp/test.ics
    BEGIN:VCALENDAR
    PRODID:-//K Desktop Environment//NONSGML libkcal 4.3//EN
    VERSION:2.0
    BEGIN:VTODO
    DTSTAMP:20110926T090835Z
    CREATED:20110926T090835Z
    UID:libkcal-1018318974.1052
    LAST-MODIFIED:20110926T090835Z
    SUMMARY:test todo
    PERCENT-COMPLETE:0
    END:VTODO
    END:VCALENDAR
    

    However, the UID is calculated by random. If we run the program several times, it will append new todos, not overwrite any.