Calendar objects as defined by the iCalendar IETF draft. Calendar holder
Calendar objects as defined by the iCalendar IETF draft. Calendar holder for Calendar Objects. -mig&fed svn path=/trunk/; revision=79
This commit is contained in:
48
calendar/cal-util/calobj.c
Normal file
48
calendar/cal-util/calobj.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Calendar objects implementations.
|
||||||
|
* Copyright (C) 1998 the Free Software Foundation
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
|
* Federico Mena (federico@gimp.org)
|
||||||
|
*/
|
||||||
|
#include "calobj.h"
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_object_new (void)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = g_new0 (iCalObject);
|
||||||
|
|
||||||
|
ico->seq = -1;
|
||||||
|
ico->dtstamp = time (NULL);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_new (char *comment, char *organizer, char *summary)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = ical_object_new ();
|
||||||
|
|
||||||
|
ico->comment = g_strdup (comment);
|
||||||
|
ico->organizer = g_strdup (organizer);
|
||||||
|
ico->summary = g_strdup (summary);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define free_if_defined(x) if (x){ g_free (x); x = 0; }
|
||||||
|
|
||||||
|
void
|
||||||
|
ical_object_destroy (iCalObject *ico)
|
||||||
|
{
|
||||||
|
free_if_defined (ico->comment);
|
||||||
|
free_if_defined (ico->organizer);
|
||||||
|
free_if_defined (ico->summary);
|
||||||
|
|
||||||
|
g_free (ico);
|
||||||
|
}
|
100
calendar/cal-util/calobj.h
Normal file
100
calendar/cal-util/calobj.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Internal representation of a Calendar object. This is modeled after the
|
||||||
|
* iCalendar/vCalendar specificiation
|
||||||
|
*
|
||||||
|
* Authors: Miguel de Icaza (miguel@gnu.org), Federico Mena (federico@gimp.org).
|
||||||
|
*/
|
||||||
|
#ifndef CALOBJ_H
|
||||||
|
#define CALOBJ_H
|
||||||
|
|
||||||
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *alarm_audio_file;
|
||||||
|
char *alarm_script;
|
||||||
|
char *alarm_email;
|
||||||
|
char *alarm_text; /* Text to be displayed */
|
||||||
|
} CalendarAlarm;
|
||||||
|
|
||||||
|
/* Calendar object type */
|
||||||
|
typedef enum {
|
||||||
|
ICAL_EVENT,
|
||||||
|
ICAL_TODO,
|
||||||
|
ICAL_JOURNAL,
|
||||||
|
ICAL_FBREQUEST,
|
||||||
|
ICAL_FBREPLY,
|
||||||
|
ICAL_BUSYTIME,
|
||||||
|
ICAL_TIMEZONE
|
||||||
|
} iCalType;
|
||||||
|
|
||||||
|
/* For keys that might contain binary or text/binary */
|
||||||
|
typedef struct {
|
||||||
|
char *data;
|
||||||
|
int len;
|
||||||
|
} iCalValue;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int valid; /* true if the Geography was specified */
|
||||||
|
double latitude;
|
||||||
|
double longitude;
|
||||||
|
} iCalGeo;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ICAL_OPAQUE,
|
||||||
|
ICAL_TRANSPARENT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char NotYet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This describes an iCalendar object, note that we never store durations, instead we
|
||||||
|
* always compute the end time computed from the start + duration.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
iCalType type;
|
||||||
|
|
||||||
|
GList *attach; /* type: one or more URIs or binary data */
|
||||||
|
GList *attendee; /* type: CAL-ADDRESS */
|
||||||
|
GList *categories; /* type: one or more TEXT */
|
||||||
|
char *class;
|
||||||
|
|
||||||
|
char *comment; /* we collapse one or more TEXTs into one */
|
||||||
|
time_t completed;
|
||||||
|
time_t created;
|
||||||
|
GList *contact; /* type: one or more TEXT */
|
||||||
|
char *description;
|
||||||
|
time_t dtstamp;
|
||||||
|
time_t dtstart;
|
||||||
|
time_t dtend;
|
||||||
|
GList *exdate; /* type: one or more time_t's */
|
||||||
|
GList *exrule; /* type: one or more RECUR */
|
||||||
|
iCalGeo geo;
|
||||||
|
time_t last_mod;
|
||||||
|
char *location;
|
||||||
|
char *organizer;
|
||||||
|
int percent;
|
||||||
|
int priority;
|
||||||
|
char *rstatus; /* request status for freebusy */
|
||||||
|
GList *related; /* type: one or more TEXT */
|
||||||
|
GList *resources; /* type: one or more TEXT */
|
||||||
|
GList *rdate; /* type: one or more recurrence date */
|
||||||
|
GList *rrule; /* type: one or more recurrence rules */
|
||||||
|
int seq;
|
||||||
|
char *status;
|
||||||
|
char *summary;
|
||||||
|
iCalTransp transp;
|
||||||
|
char *uid;
|
||||||
|
char *url;
|
||||||
|
time_t recurid;
|
||||||
|
|
||||||
|
/* VALARM objects are always inside another object, never alone */
|
||||||
|
CalendarAlarm *alarm;
|
||||||
|
} iCalObject;
|
||||||
|
|
||||||
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
|
iCalObject *ical_object_new (void);
|
||||||
|
|
||||||
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
116
calendar/calendar.c
Normal file
116
calendar/calendar.c
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Calendar manager object
|
||||||
|
*
|
||||||
|
* This keeps track of a given calendar. Eventually this will abtract everything
|
||||||
|
* related to getting calendars/saving calendars locally or to a remote Calendar Service
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 the Free Software Foundation
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
|
* Federico Mena (federico@gimp.org)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "calobj.h"
|
||||||
|
#include "calendar.h"
|
||||||
|
|
||||||
|
Calendar *
|
||||||
|
calendar_new (char *title)
|
||||||
|
{
|
||||||
|
Calendar *cal;
|
||||||
|
|
||||||
|
cal = g_new0 (Calendar, 1);
|
||||||
|
cal->title = g_strdup (title);
|
||||||
|
|
||||||
|
return cal;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_add_object (Calendar *cal, iCalObject *obj)
|
||||||
|
{
|
||||||
|
switch (obj->type){
|
||||||
|
case ICAL_EVENT:
|
||||||
|
cal->events = g_list_prepend (cal->events, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_TODO:
|
||||||
|
cal->todo = g_list_prepend (cal->todo, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_JOURNAL:
|
||||||
|
cal->journal = g_list_prepend (cal->journal, obj);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_remove_object (Calendar *cal, iCalObject *obj)
|
||||||
|
{
|
||||||
|
switch (obj->type){
|
||||||
|
case ICAL_EVENT:
|
||||||
|
cal->events = g_list_remove (cal->events, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_TODO:
|
||||||
|
cal->todo = g_list_remove (cal->todo, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_JOURNAL:
|
||||||
|
cal->journal = g_list_remove (cal->journal, obj);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_destroy (Calendar *cal)
|
||||||
|
{
|
||||||
|
g_list_foreach (cal->events, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->events);
|
||||||
|
|
||||||
|
g_list_foreach (cal->todo, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->todo);
|
||||||
|
|
||||||
|
g_list_foreach (cal->journal, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->journal);
|
||||||
|
|
||||||
|
if (cal->title)
|
||||||
|
g_free (cal->title);
|
||||||
|
if (cal->filename)
|
||||||
|
g_free (cal->filename);
|
||||||
|
|
||||||
|
g_free (cal);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
calendar_get_objects_in_range (GList *objects, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
GList *new_events = 0;
|
||||||
|
|
||||||
|
for (; objects; objects = objects->next){
|
||||||
|
iCalObject *object = objects->data;
|
||||||
|
|
||||||
|
if ((start <= object->dtstart) && (end >= object->dtend))
|
||||||
|
new_events = g_list_prepend (new_events, object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
calendar_get_events_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->events, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->todo, start, end);
|
||||||
|
}
|
||||||
|
GList *
|
||||||
|
calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->journal, start, end);
|
||||||
|
}
|
25
calendar/calendar.h
Normal file
25
calendar/calendar.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef CALOBJ_H
|
||||||
|
#define CALOBJ_H
|
||||||
|
|
||||||
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *title;
|
||||||
|
char *filename;
|
||||||
|
GList *events;
|
||||||
|
GList *todo;
|
||||||
|
GList *journal;
|
||||||
|
} Calendar;
|
||||||
|
|
||||||
|
Calendar *calendar_new (char *title);
|
||||||
|
void calendar_add_object (Calendar *cal, iCalObject *obj);
|
||||||
|
void calendar_remove_object (Calendar *cal, iCalObject *obj);
|
||||||
|
void calendar_destroy (Calendar *cal);
|
||||||
|
|
||||||
|
GList *calendar_get_events_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
GList *calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
GList *calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
|
||||||
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
#endif
|
48
calendar/calobj.c
Normal file
48
calendar/calobj.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Calendar objects implementations.
|
||||||
|
* Copyright (C) 1998 the Free Software Foundation
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
|
* Federico Mena (federico@gimp.org)
|
||||||
|
*/
|
||||||
|
#include "calobj.h"
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_object_new (void)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = g_new0 (iCalObject);
|
||||||
|
|
||||||
|
ico->seq = -1;
|
||||||
|
ico->dtstamp = time (NULL);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_new (char *comment, char *organizer, char *summary)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = ical_object_new ();
|
||||||
|
|
||||||
|
ico->comment = g_strdup (comment);
|
||||||
|
ico->organizer = g_strdup (organizer);
|
||||||
|
ico->summary = g_strdup (summary);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define free_if_defined(x) if (x){ g_free (x); x = 0; }
|
||||||
|
|
||||||
|
void
|
||||||
|
ical_object_destroy (iCalObject *ico)
|
||||||
|
{
|
||||||
|
free_if_defined (ico->comment);
|
||||||
|
free_if_defined (ico->organizer);
|
||||||
|
free_if_defined (ico->summary);
|
||||||
|
|
||||||
|
g_free (ico);
|
||||||
|
}
|
100
calendar/calobj.h
Normal file
100
calendar/calobj.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Internal representation of a Calendar object. This is modeled after the
|
||||||
|
* iCalendar/vCalendar specificiation
|
||||||
|
*
|
||||||
|
* Authors: Miguel de Icaza (miguel@gnu.org), Federico Mena (federico@gimp.org).
|
||||||
|
*/
|
||||||
|
#ifndef CALOBJ_H
|
||||||
|
#define CALOBJ_H
|
||||||
|
|
||||||
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *alarm_audio_file;
|
||||||
|
char *alarm_script;
|
||||||
|
char *alarm_email;
|
||||||
|
char *alarm_text; /* Text to be displayed */
|
||||||
|
} CalendarAlarm;
|
||||||
|
|
||||||
|
/* Calendar object type */
|
||||||
|
typedef enum {
|
||||||
|
ICAL_EVENT,
|
||||||
|
ICAL_TODO,
|
||||||
|
ICAL_JOURNAL,
|
||||||
|
ICAL_FBREQUEST,
|
||||||
|
ICAL_FBREPLY,
|
||||||
|
ICAL_BUSYTIME,
|
||||||
|
ICAL_TIMEZONE
|
||||||
|
} iCalType;
|
||||||
|
|
||||||
|
/* For keys that might contain binary or text/binary */
|
||||||
|
typedef struct {
|
||||||
|
char *data;
|
||||||
|
int len;
|
||||||
|
} iCalValue;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int valid; /* true if the Geography was specified */
|
||||||
|
double latitude;
|
||||||
|
double longitude;
|
||||||
|
} iCalGeo;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ICAL_OPAQUE,
|
||||||
|
ICAL_TRANSPARENT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char NotYet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This describes an iCalendar object, note that we never store durations, instead we
|
||||||
|
* always compute the end time computed from the start + duration.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
iCalType type;
|
||||||
|
|
||||||
|
GList *attach; /* type: one or more URIs or binary data */
|
||||||
|
GList *attendee; /* type: CAL-ADDRESS */
|
||||||
|
GList *categories; /* type: one or more TEXT */
|
||||||
|
char *class;
|
||||||
|
|
||||||
|
char *comment; /* we collapse one or more TEXTs into one */
|
||||||
|
time_t completed;
|
||||||
|
time_t created;
|
||||||
|
GList *contact; /* type: one or more TEXT */
|
||||||
|
char *description;
|
||||||
|
time_t dtstamp;
|
||||||
|
time_t dtstart;
|
||||||
|
time_t dtend;
|
||||||
|
GList *exdate; /* type: one or more time_t's */
|
||||||
|
GList *exrule; /* type: one or more RECUR */
|
||||||
|
iCalGeo geo;
|
||||||
|
time_t last_mod;
|
||||||
|
char *location;
|
||||||
|
char *organizer;
|
||||||
|
int percent;
|
||||||
|
int priority;
|
||||||
|
char *rstatus; /* request status for freebusy */
|
||||||
|
GList *related; /* type: one or more TEXT */
|
||||||
|
GList *resources; /* type: one or more TEXT */
|
||||||
|
GList *rdate; /* type: one or more recurrence date */
|
||||||
|
GList *rrule; /* type: one or more recurrence rules */
|
||||||
|
int seq;
|
||||||
|
char *status;
|
||||||
|
char *summary;
|
||||||
|
iCalTransp transp;
|
||||||
|
char *uid;
|
||||||
|
char *url;
|
||||||
|
time_t recurid;
|
||||||
|
|
||||||
|
/* VALARM objects are always inside another object, never alone */
|
||||||
|
CalendarAlarm *alarm;
|
||||||
|
} iCalObject;
|
||||||
|
|
||||||
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
|
iCalObject *ical_object_new (void);
|
||||||
|
|
||||||
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
116
calendar/gui/calendar.c
Normal file
116
calendar/gui/calendar.c
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
/*
|
||||||
|
* Calendar manager object
|
||||||
|
*
|
||||||
|
* This keeps track of a given calendar. Eventually this will abtract everything
|
||||||
|
* related to getting calendars/saving calendars locally or to a remote Calendar Service
|
||||||
|
*
|
||||||
|
* Copyright (C) 1998 the Free Software Foundation
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
|
* Federico Mena (federico@gimp.org)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include "calobj.h"
|
||||||
|
#include "calendar.h"
|
||||||
|
|
||||||
|
Calendar *
|
||||||
|
calendar_new (char *title)
|
||||||
|
{
|
||||||
|
Calendar *cal;
|
||||||
|
|
||||||
|
cal = g_new0 (Calendar, 1);
|
||||||
|
cal->title = g_strdup (title);
|
||||||
|
|
||||||
|
return cal;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_add_object (Calendar *cal, iCalObject *obj)
|
||||||
|
{
|
||||||
|
switch (obj->type){
|
||||||
|
case ICAL_EVENT:
|
||||||
|
cal->events = g_list_prepend (cal->events, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_TODO:
|
||||||
|
cal->todo = g_list_prepend (cal->todo, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_JOURNAL:
|
||||||
|
cal->journal = g_list_prepend (cal->journal, obj);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_remove_object (Calendar *cal, iCalObject *obj)
|
||||||
|
{
|
||||||
|
switch (obj->type){
|
||||||
|
case ICAL_EVENT:
|
||||||
|
cal->events = g_list_remove (cal->events, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_TODO:
|
||||||
|
cal->todo = g_list_remove (cal->todo, obj);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICAL_JOURNAL:
|
||||||
|
cal->journal = g_list_remove (cal->journal, obj);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
calendar_destroy (Calendar *cal)
|
||||||
|
{
|
||||||
|
g_list_foreach (cal->events, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->events);
|
||||||
|
|
||||||
|
g_list_foreach (cal->todo, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->todo);
|
||||||
|
|
||||||
|
g_list_foreach (cal->journal, ical_object_destroy, NULL);
|
||||||
|
g_list_free (cal->journal);
|
||||||
|
|
||||||
|
if (cal->title)
|
||||||
|
g_free (cal->title);
|
||||||
|
if (cal->filename)
|
||||||
|
g_free (cal->filename);
|
||||||
|
|
||||||
|
g_free (cal);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GList *
|
||||||
|
calendar_get_objects_in_range (GList *objects, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
GList *new_events = 0;
|
||||||
|
|
||||||
|
for (; objects; objects = objects->next){
|
||||||
|
iCalObject *object = objects->data;
|
||||||
|
|
||||||
|
if ((start <= object->dtstart) && (end >= object->dtend))
|
||||||
|
new_events = g_list_prepend (new_events, object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
calendar_get_events_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->events, start, end);
|
||||||
|
}
|
||||||
|
|
||||||
|
GList *
|
||||||
|
calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->todo, start, end);
|
||||||
|
}
|
||||||
|
GList *
|
||||||
|
calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end)
|
||||||
|
{
|
||||||
|
calendar_get_objects_in_range (cal->journal, start, end);
|
||||||
|
}
|
25
calendar/gui/calendar.h
Normal file
25
calendar/gui/calendar.h
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#ifndef CALOBJ_H
|
||||||
|
#define CALOBJ_H
|
||||||
|
|
||||||
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *title;
|
||||||
|
char *filename;
|
||||||
|
GList *events;
|
||||||
|
GList *todo;
|
||||||
|
GList *journal;
|
||||||
|
} Calendar;
|
||||||
|
|
||||||
|
Calendar *calendar_new (char *title);
|
||||||
|
void calendar_add_object (Calendar *cal, iCalObject *obj);
|
||||||
|
void calendar_remove_object (Calendar *cal, iCalObject *obj);
|
||||||
|
void calendar_destroy (Calendar *cal);
|
||||||
|
|
||||||
|
GList *calendar_get_events_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
GList *calendar_get_todo_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
GList *calendar_get_journal_in_range (Calendar *cal, time_t start, time_t end);
|
||||||
|
|
||||||
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
#endif
|
39
calendar/gui/icalendar-types
Normal file
39
calendar/gui/icalendar-types
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
evento todo journal fbrequest fbreply busytime timezone
|
||||||
|
attach attach attach
|
||||||
|
attendee attendee attendee attendee attendee attendee
|
||||||
|
categories categories categories
|
||||||
|
class class class
|
||||||
|
comment comment comment comment comment comment comment
|
||||||
|
completed
|
||||||
|
contact contact contact
|
||||||
|
created created created created
|
||||||
|
description description description
|
||||||
|
dtstamp dtstamp
|
||||||
|
dtend/duration due->dtend dtend [duration] dtend dtend
|
||||||
|
dtstart dtstart dtstart dtstart dtstart dtstart dtstart
|
||||||
|
exdate exdate exdate
|
||||||
|
exrule exrule exrule
|
||||||
|
geo geo
|
||||||
|
last-mod last-mod last-mod last-mod last-mod
|
||||||
|
location location
|
||||||
|
organizer organizer organizer
|
||||||
|
percent
|
||||||
|
priority priority
|
||||||
|
rstatus rstatus rstatus rstatus
|
||||||
|
related related related
|
||||||
|
resources resources
|
||||||
|
rdate rdate rdate [rdate/rrule]
|
||||||
|
rrule rrule rrule
|
||||||
|
dtstamp dtstamp dtstamp dtstamp
|
||||||
|
seq seq seq seq seq
|
||||||
|
status status
|
||||||
|
summary summary summary
|
||||||
|
transp
|
||||||
|
uid uid uid uid uid
|
||||||
|
url url url url url
|
||||||
|
recurid recurid recurid
|
||||||
|
freebusy freebusy
|
||||||
|
tzname
|
||||||
|
tzoffset-to
|
||||||
|
tzoffset-from
|
||||||
|
|
39
calendar/icalendar-types
Normal file
39
calendar/icalendar-types
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
evento todo journal fbrequest fbreply busytime timezone
|
||||||
|
attach attach attach
|
||||||
|
attendee attendee attendee attendee attendee attendee
|
||||||
|
categories categories categories
|
||||||
|
class class class
|
||||||
|
comment comment comment comment comment comment comment
|
||||||
|
completed
|
||||||
|
contact contact contact
|
||||||
|
created created created created
|
||||||
|
description description description
|
||||||
|
dtstamp dtstamp
|
||||||
|
dtend/duration due->dtend dtend [duration] dtend dtend
|
||||||
|
dtstart dtstart dtstart dtstart dtstart dtstart dtstart
|
||||||
|
exdate exdate exdate
|
||||||
|
exrule exrule exrule
|
||||||
|
geo geo
|
||||||
|
last-mod last-mod last-mod last-mod last-mod
|
||||||
|
location location
|
||||||
|
organizer organizer organizer
|
||||||
|
percent
|
||||||
|
priority priority
|
||||||
|
rstatus rstatus rstatus rstatus
|
||||||
|
related related related
|
||||||
|
resources resources
|
||||||
|
rdate rdate rdate [rdate/rrule]
|
||||||
|
rrule rrule rrule
|
||||||
|
dtstamp dtstamp dtstamp dtstamp
|
||||||
|
seq seq seq seq seq
|
||||||
|
status status
|
||||||
|
summary summary summary
|
||||||
|
transp
|
||||||
|
uid uid uid uid uid
|
||||||
|
url url url url url
|
||||||
|
recurid recurid recurid
|
||||||
|
freebusy freebusy
|
||||||
|
tzname
|
||||||
|
tzoffset-to
|
||||||
|
tzoffset-from
|
||||||
|
|
48
calendar/pcs/calobj.c
Normal file
48
calendar/pcs/calobj.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* Calendar objects implementations.
|
||||||
|
* Copyright (C) 1998 the Free Software Foundation
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
|
* Federico Mena (federico@gimp.org)
|
||||||
|
*/
|
||||||
|
#include "calobj.h"
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_object_new (void)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = g_new0 (iCalObject);
|
||||||
|
|
||||||
|
ico->seq = -1;
|
||||||
|
ico->dtstamp = time (NULL);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
iCalObject *
|
||||||
|
ical_new (char *comment, char *organizer, char *summary)
|
||||||
|
{
|
||||||
|
iCalObject *ico;
|
||||||
|
|
||||||
|
ico = ical_object_new ();
|
||||||
|
|
||||||
|
ico->comment = g_strdup (comment);
|
||||||
|
ico->organizer = g_strdup (organizer);
|
||||||
|
ico->summary = g_strdup (summary);
|
||||||
|
|
||||||
|
return ico;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define free_if_defined(x) if (x){ g_free (x); x = 0; }
|
||||||
|
|
||||||
|
void
|
||||||
|
ical_object_destroy (iCalObject *ico)
|
||||||
|
{
|
||||||
|
free_if_defined (ico->comment);
|
||||||
|
free_if_defined (ico->organizer);
|
||||||
|
free_if_defined (ico->summary);
|
||||||
|
|
||||||
|
g_free (ico);
|
||||||
|
}
|
100
calendar/pcs/calobj.h
Normal file
100
calendar/pcs/calobj.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Internal representation of a Calendar object. This is modeled after the
|
||||||
|
* iCalendar/vCalendar specificiation
|
||||||
|
*
|
||||||
|
* Authors: Miguel de Icaza (miguel@gnu.org), Federico Mena (federico@gimp.org).
|
||||||
|
*/
|
||||||
|
#ifndef CALOBJ_H
|
||||||
|
#define CALOBJ_H
|
||||||
|
|
||||||
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
char *alarm_audio_file;
|
||||||
|
char *alarm_script;
|
||||||
|
char *alarm_email;
|
||||||
|
char *alarm_text; /* Text to be displayed */
|
||||||
|
} CalendarAlarm;
|
||||||
|
|
||||||
|
/* Calendar object type */
|
||||||
|
typedef enum {
|
||||||
|
ICAL_EVENT,
|
||||||
|
ICAL_TODO,
|
||||||
|
ICAL_JOURNAL,
|
||||||
|
ICAL_FBREQUEST,
|
||||||
|
ICAL_FBREPLY,
|
||||||
|
ICAL_BUSYTIME,
|
||||||
|
ICAL_TIMEZONE
|
||||||
|
} iCalType;
|
||||||
|
|
||||||
|
/* For keys that might contain binary or text/binary */
|
||||||
|
typedef struct {
|
||||||
|
char *data;
|
||||||
|
int len;
|
||||||
|
} iCalValue;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int valid; /* true if the Geography was specified */
|
||||||
|
double latitude;
|
||||||
|
double longitude;
|
||||||
|
} iCalGeo;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
ICAL_OPAQUE,
|
||||||
|
ICAL_TRANSPARENT
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char NotYet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This describes an iCalendar object, note that we never store durations, instead we
|
||||||
|
* always compute the end time computed from the start + duration.
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
iCalType type;
|
||||||
|
|
||||||
|
GList *attach; /* type: one or more URIs or binary data */
|
||||||
|
GList *attendee; /* type: CAL-ADDRESS */
|
||||||
|
GList *categories; /* type: one or more TEXT */
|
||||||
|
char *class;
|
||||||
|
|
||||||
|
char *comment; /* we collapse one or more TEXTs into one */
|
||||||
|
time_t completed;
|
||||||
|
time_t created;
|
||||||
|
GList *contact; /* type: one or more TEXT */
|
||||||
|
char *description;
|
||||||
|
time_t dtstamp;
|
||||||
|
time_t dtstart;
|
||||||
|
time_t dtend;
|
||||||
|
GList *exdate; /* type: one or more time_t's */
|
||||||
|
GList *exrule; /* type: one or more RECUR */
|
||||||
|
iCalGeo geo;
|
||||||
|
time_t last_mod;
|
||||||
|
char *location;
|
||||||
|
char *organizer;
|
||||||
|
int percent;
|
||||||
|
int priority;
|
||||||
|
char *rstatus; /* request status for freebusy */
|
||||||
|
GList *related; /* type: one or more TEXT */
|
||||||
|
GList *resources; /* type: one or more TEXT */
|
||||||
|
GList *rdate; /* type: one or more recurrence date */
|
||||||
|
GList *rrule; /* type: one or more recurrence rules */
|
||||||
|
int seq;
|
||||||
|
char *status;
|
||||||
|
char *summary;
|
||||||
|
iCalTransp transp;
|
||||||
|
char *uid;
|
||||||
|
char *url;
|
||||||
|
time_t recurid;
|
||||||
|
|
||||||
|
/* VALARM objects are always inside another object, never alone */
|
||||||
|
CalendarAlarm *alarm;
|
||||||
|
} iCalObject;
|
||||||
|
|
||||||
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
|
iCalObject *ical_object_new (void);
|
||||||
|
|
||||||
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Reference in New Issue
Block a user