aboutsummaryrefslogblamecommitdiffstats
path: root/calendar/idl/evolution-calendar.idl
blob: 27c79710570b8d3523ddd9dfc6550606ec0bf434 (plain) (tree)
1
2
3
4
5
6
7
8
9
                               







                                                           

                                
 
                     
 
                  









                                                                        







                                                 
                                             
 




                                                







                             


                                     


                                      



                                                                              
                   

                               
                              





                                                           





                                      









                                                               

                                                       

                           
                                       
                                         
                                      
                                          
                                           
 

                                                         
 


                                                                       


                                                     
 


                                                              


                                                                                       


                                                                                            
                                              
 
                                                                              
                         



                                                                                        






                                                                                          
















                                                                                                                   








                                                                            


                                                
                                              

                                                                                           





                                                                                        

                  
                                                                               
                                                                          
                   
                                                                   
 

                                                                               


                                                                      


                                                               
                                                

                                         
                                                 

                                                               

                                                                

                                                                 





          
/* Evolution calendar interface
 *
 * Copyright (C) 2000 Eskil Heyn Olsen
 * Copyright (C) 2000 Helix Code, Inc.
 *
 * Authors: Eskil Heyn Olsen <deity@eskil.dk>
 *          Federico Mena-Quintero <federico@helixcode.com>
 */

#ifndef _EVOLUTION_CALENDAR_IDL_
#define _EVOLUTION_CALENDAR_IDL_

#include <Bonobo.idl>

module Evolution {

module Calendar {
    /* A calendar object (event/todo/journal/etc), represented as an
     * iCalendar string.
     */
    typedef string CalObj;

    /* An unique identifier for a calendar object */
    typedef string CalObjUID;

    /* Sequence of unique identifiers */
    typedef sequence<CalObjUID> CalObjUIDSeq;

    /* Flags for getting UID sequences */
    typedef long CalObjType;
    const CalObjType TYPE_EVENT   = 1 << 0;
    const CalObjType TYPE_TODO    = 1 << 1;
    const CalObjType TYPE_JOURNAL = 1 << 2;
    const CalObjType TYPE_ANY     = 0x07;

    /* Types of object changes made */
    typedef long CalObjChangeType;
    const CalObjChangeType UPDATED = 1 << 0;
    const CalObjChangeType REMOVED = 1 << 1;
    
    /* Types of alarms */
    enum AlarmType {
        MAIL,
        PROGRAM,
        DISPLAY,
        AUDIO
    };

    /* Used to store a time_t */
    typedef unsigned long Time_t;

    /* Used to store pilot IDs */
    typedef unsigned long PilotID;

    /* An instance of a calendar object that actually occurs.  These are
     * "virtual" objects in that they are used to represent instances of
     * recurring events and alarms.  "Real" objects just contain the
     * information required to figure out the times at which they recur or
     * trigger.
     */
    struct CalObjInstance {
        CalObjUID uid;
        Time_t start;
        Time_t end;
    };

    typedef sequence<CalObjInstance> CalObjInstanceSeq;

    /* An object change */
    struct CalObjChange {
        CalObjUID uid;
        CalObjChangeType type;
    };

    /* An alarm trigger instance */
    struct CalAlarmInstance {
        CalObjUID uid;
        AlarmType type;
        Time_t trigger;
        Time_t occur;
    };

    typedef sequence<CalAlarmInstance> CalAlarmInstanceSeq;

    typedef sequence<CalObjChange> CalObjChangeSeq;

    interface Listener;

    /* Calendar client interface */
    interface Cal : Bonobo::Unknown {
        exception NotFound {};
        exception InvalidRange {};
        exception InvalidObject {};

        /* A calendar is identified by its URI */
        readonly attribute string uri;

        /* Gets the number of objects of the specified types */
        long get_n_objects (in CalObjType type);

        /* Gets an object based on its URI */
        CalObj get_object (in CalObjUID uid)
            raises (NotFound);

        /* Gets a list of UIDs based on object type */
        CalObjUIDSeq get_uids (in CalObjType type);

        /* Gets a list of UIDs that changed based on object type */
        CalObjChangeSeq get_changed_uids (in CalObjType type, in Time_t since);

        /* Gets a list of objects that occur or recur in the specified time range */
        CalObjUIDSeq get_objects_in_range (in CalObjType type, 
                           in Time_t start, in Time_t end)
            raises (InvalidRange);

        /* Gets the objects whose alarms trigger in the specified time
         * range.
         */
        CalAlarmInstanceSeq get_alarms_in_range (in Time_t start, in Time_t end)
            raises (InvalidRange);

        /* Gets the alarms for the specified object that trigger in the
         * specified time range.
         */
        CalAlarmInstanceSeq get_alarms_for_object (in CalObjUID uid,
                               in Time_t start, in Time_t end)
            raises (NotFound, InvalidRange);


            /* something
         *
         */
        CalObjUID get_uid_by_pilot_id (in PilotID pilotid)
            raises (NotFound);


            /*
             * update_pilot_id:
             * @uid: Unique identifier for the event we want to update
             * @pilot_id: new ID assigned by the pilot
             * @pilot_status: Status to flag the event with
             */
            void update_pilot_id (in CalObjUID uid, in PilotID pilot_id, in unsigned long pilot_status)
                raises (NotFound);

        /* Updates an object by adding it if it does not exist or by
         * changing an existing one.
         */
        void update_object (in CalObjUID uid, in CalObj calobj)
            raises (InvalidObject);

        /* Removes an object */
        void remove_object (in CalObjUID uid)
            raises (NotFound);
    };

    /* Listener for changes in a calendar */
    interface Listener : Bonobo::Unknown {
        /* Return status when loading a calendar; we need better error reporting */
        enum LoadStatus {
            SUCCESS,        /* All OK */
            ERROR,          /* Generic error */
            IN_USE,         /* Requested create while a calendar
                         * with the same URI was in use.
                         */
            METHOD_NOT_SUPPORTED    /* A method handler is not registered */
        };

        /* Called from a CalFactory when a calendar is initially loaded
         * or created.  The listener must remember the cal object.
         */
        void cal_loaded (in LoadStatus status, in Cal cal);

        /* Called from a Calendar when an object is added or changed */
        void obj_updated (in CalObjUID uid);

        /* Called from a Calendar when an object is removed */
        void obj_removed (in CalObjUID uid);
    };

    /* A calendar factory, can load and create calendars */
    interface CalFactory : Bonobo::Unknown {
        exception NilListener {};

        /* Load a calendar from an URI */
        void load (in string uri, in Listener listener)
            raises (NilListener);

        /* Create a new calendar at the specified URI */
        void create (in string uri, in Listener listener)
            raises (NilListener);
    };
};

};

#endif