New main program that uses our new datatypes and objects.

1998-04-02  Miguel de Icaza  <miguel@nuclecu.unam.mx>

	* main.c: New main program that uses our new datatypes and
	objects.

	* calendar.c (calendar_load_from_vobject, calendar_load):
	Implement loading of vCalendar objects and vCalendar files.

	* calobj.c (ical_object_create_from_vobject): Implement loading of
	vCalendar event and todo objects.

	* timeutil.c (isodate_from_time_t): New function.

	* gnome-cal.c, gnome-cal.h: Implement a toplevel widget, derived
	from GnomeApp.  It holds all of the day views and arbitrates the
	display.

svn path=/trunk/; revision=93
This commit is contained in:
Miguel de Icaza
1998-04-02 07:57:58 +00:00
committed by Arturo Espinosa
parent 33b0ab0d0f
commit f865d886f5
22 changed files with 747 additions and 30 deletions

View File

@ -4,3 +4,4 @@ Makefile
_libs
.libs
gncal
gnomecal

View File

@ -1,3 +1,20 @@
1998-04-02 Miguel de Icaza <miguel@nuclecu.unam.mx>
* main.c: New main program that uses our new datatypes and
objects.
* calendar.c (calendar_load_from_vobject, calendar_load):
Implement loading of vCalendar objects and vCalendar files.
* calobj.c (ical_object_create_from_vobject): Implement loading of
vCalendar event and todo objects.
* timeutil.c (isodate_from_time_t): New function.
* gnome-cal.c, gnome-cal.h: Implement a toplevel widget, derived
from GnomeApp. It holds all of the day views and arbitrates the
display.
1998-04-02 Federico Mena Quintero <federico@nuclecu.unam.mx>
* gncal-week-view.[ch]: New week view composite widget. This

View File

@ -9,15 +9,23 @@ INCLUDES = \
bin_PROGRAMS = gnomecal
gnomecal_SOURCES = \
main.c \
gnome-cal.c \
gnome-cal.h \
views.c \
calendar.c \
calendar.h \
calobj.c \
calobj.h \
views.h
gncal-week-view.c \
gncal-week-view.h \
gncal-day-view.c \
gncal-day-view.h \
gnome-cal.c \
gnome-cal.h \
main.c \
timeutil.c \
timeutil.h \
view-utils.h \
view-utils.c \
views.h \
views.c
#gncal_SOURCES = \

View File

@ -6,7 +6,10 @@
* Miguel de Icaza (miguel@gnu.org)
* Federico Mena (federico@gimp.org)
*/
#include <string.h>
#include <glib.h>
#include "calobj.h"
#include "versit/vcc.h"
iCalObject *
ical_object_new (void)
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
g_free (ico);
}
GList *
set_list (char *str, char *sc)
{
GList *list = 0;
char *s;
for (s = strtok (str, sc); s; s = strtok (NULL, sc))
list = g_list_prepend (list, g_strdup (s));
return list;
}
#define is_a_prop_of(obj,prop) isAPropertyOf (obj,prop)
#define str_val(obj) (char *) vObjectUStringZValue (obj)
#define has(obj,prop) (vo = isAPropertyOf (obj, prop))
/* FIXME: we need to load the recurrence properties */
iCalObject *
ical_object_create_from_vobject (VObject *o, const char *object_name)
{
time_t now = time (NULL);
iCalObject *ical;
VObject *vo;
VObjectIterator i;
ical = g_new0 (iCalObject, 1);
if (strcmp (object_name, VCEventProp) == 0)
ical->type = ICAL_EVENT;
else if (strcmp (object_name, VCTodoProp) == 0)
ical->type = ICAL_TODO;
else
return 0;
/* uid */
if (has (o, VCUniqueStringProp))
ical->uid = g_strdup (str_val (vo));
/* seq */
if (has (o, VCSequenceProp))
ical->seq = atoi (str_val (vo));
else
ical->seq = 0;
/* dtstart */
if (has (o, VCDTstartProp))
ical->dtstart = time_from_isodate (str_val (vo));
else
ical->dtstart = 0;
/* dtend */
if (has (o, VCDTendProp))
ical->dtend = time_from_isodate (str_val (vo));
else
ical->dtend = 0;
/* dcreated */
if (has (o, VCDCreatedProp))
ical->created = time_from_isodate (str_val (vo));
/* completed */
if (has (o, VCCompletedProp))
ical->completed = time_from_isodate (str_val (vo));
/* last_mod */
if (has (o, VCLastModifiedProp))
ical->last_mod = time_from_isodate (str_val (vo));
else
ical->last_mod = now;
/* exdate */
if (has (o, VCExpDateProp))
ical->exdate = set_list (str_val (vo), ",");
/* description */
if (has (o, VCDescriptionProp))
ical->description = g_strdup (str_val (vo));
/* summary */
if (has (o, VCSummaryProp))
ical->summary = g_strdup (str_val (vo));
else
ical->summary = g_strdup ("");
/* status */
if (has (o, VCStatusProp))
ical->status = g_strdup (str_val (vo));
else
ical->status = g_strdup ("NEEDS ACTION");
if (has (o, VCClassProp))
ical->class = g_strdup (str_val (vo));
else
ical->status = g_strdup ("PUBLIC");
/* categories */
if (has (o, VCCategoriesProp))
ical->categories = set_list (str_val (vo), ",");
/* resources */
if (has (o, VCResourcesProp))
ical->resources = set_list (str_val (vo), ";");
/* priority */
if (has (o, VCPriorityProp))
ical->priority = atoi (str_val (vo));
/* tranparency */
if (has (o, VCTranspProp))
ical->transp = atoi (str_val (vo)) ? ICAL_TRANSPARENT : ICAL_OPAQUE;
/* related */
if (has (o, VCRelatedToProp))
ical->related = set_list (str_val (vo), ";");
/* attach */
initPropIterator (&i, o);
while (moreIteration (&i)){
vo = nextVObject (&i);
if (strcmp (vObjectName (vo), VCAttachProp) == 0)
ical->attach = g_list_prepend (ical->attach, g_strdup (str_val (vo)));
}
/* url */
if (has (o, VCURLProp))
ical->url = g_strdup (str_val (vo));
/* FIXME: dalarm */
if (has (o, VCDAlarmProp))
;
/* FIXME: aalarm */
if (has (o, VCAAlarmProp))
;
/* FIXME: palarm */
if (has (o, VCPAlarmProp))
;
/* FIXME: malarm */
if (has (o, VCMAlarmProp))
;
/* FIXME: rdate */
if (has (o, VCRDateProp))
;
/* FIXME: rrule */
if (has (o, VCRRuleProp))
;
return ical;
}
void
ical_object_save (iCalObject *ical)
{
VObject *o;
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
o = newVObject (VCTodoProp);
}

View File

@ -8,6 +8,7 @@
#define CALOBJ_H
#include <libgnome/libgnome.h>
#include "versit/vcc.h"
BEGIN_GNOME_DECLS
@ -89,14 +90,16 @@ typedef struct {
char *url;
time_t recurid;
/* VALARM objects are always inside another object, never alone */
CalendarAlarm *alarm;
CalendarAlarm *dalarm;
CalendarAlarm *aalarm;
} iCalObject;
iCalObject *ical_new (char *comment, char *organizer, char *summary);
iCalObject *ical_object_new (void);
void ical_object_destroy (iCalObject *ico);
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
END_GNOME_DECLS
#endif

View File

@ -13,6 +13,7 @@
*/
#include "calendar.h"
#include "versit/vcc.h"
Calendar *
calendar_new (char *title)
@ -28,6 +29,7 @@ calendar_new (char *title)
void
calendar_add_object (Calendar *cal, iCalObject *obj)
{
printf ("Adding object\n");
switch (obj->type){
case ICAL_EVENT:
cal->events = g_list_prepend (cal->events, obj);
@ -133,3 +135,56 @@ calendar_compare_by_dtstart (gpointer a, gpointer b)
return (diff < 0) ? -1 : (diff > 0) ? 1 : 0;
}
#define str_val(obj) (char *) vObjectUStringZValue (obj)
/* Loads our calendar contents from a vObject */
void
calendar_load_from_vobject (Calendar *cal, VObject *vcal)
{
VObjectIterator i;;
initPropIterator (&i, vcal);
while (moreIteration (&i)){
VObject *this = nextVObject (&i);
iCalObject *ical;
const char *object_name = vObjectName (this);
if (strcmp (object_name, VCDCreatedProp) == 0){
cal->created = time_from_isodate (str_val (this));
continue;
}
if (strcmp (object_name, VCLocationProp) == 0)
continue; /* FIXME: imlement */
if (strcmp (object_name, VCProdIdProp) == 0)
continue; /* FIXME: implement */
if (strcmp (object_name, VCVersionProp) == 0)
continue; /* FIXME: implement */
ical = ical_object_create_from_vobject (this, object_name);
if (ical)
calendar_add_object (cal, ical);
}
}
/* Loads a calendar from a file */
void
calendar_load (Calendar *cal, char *fname)
{
VObject *vcal;
if (cal->filename){
g_warning ("Calendar load called again\n");
return;
}
cal->filename = g_strdup (fname);
vcal = Parse_MIME_FromFileName (fname);
calendar_load_from_vobject (cal, vcal);
cleanVObject (vcal);
}

View File

@ -12,6 +12,7 @@ typedef struct {
GList *todo;
GList *journal;
time_t created;
int modified;
} Calendar;

View File

@ -6,7 +6,10 @@
* Miguel de Icaza (miguel@gnu.org)
* Federico Mena (federico@gimp.org)
*/
#include <string.h>
#include <glib.h>
#include "calobj.h"
#include "versit/vcc.h"
iCalObject *
ical_object_new (void)
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
g_free (ico);
}
GList *
set_list (char *str, char *sc)
{
GList *list = 0;
char *s;
for (s = strtok (str, sc); s; s = strtok (NULL, sc))
list = g_list_prepend (list, g_strdup (s));
return list;
}
#define is_a_prop_of(obj,prop) isAPropertyOf (obj,prop)
#define str_val(obj) (char *) vObjectUStringZValue (obj)
#define has(obj,prop) (vo = isAPropertyOf (obj, prop))
/* FIXME: we need to load the recurrence properties */
iCalObject *
ical_object_create_from_vobject (VObject *o, const char *object_name)
{
time_t now = time (NULL);
iCalObject *ical;
VObject *vo;
VObjectIterator i;
ical = g_new0 (iCalObject, 1);
if (strcmp (object_name, VCEventProp) == 0)
ical->type = ICAL_EVENT;
else if (strcmp (object_name, VCTodoProp) == 0)
ical->type = ICAL_TODO;
else
return 0;
/* uid */
if (has (o, VCUniqueStringProp))
ical->uid = g_strdup (str_val (vo));
/* seq */
if (has (o, VCSequenceProp))
ical->seq = atoi (str_val (vo));
else
ical->seq = 0;
/* dtstart */
if (has (o, VCDTstartProp))
ical->dtstart = time_from_isodate (str_val (vo));
else
ical->dtstart = 0;
/* dtend */
if (has (o, VCDTendProp))
ical->dtend = time_from_isodate (str_val (vo));
else
ical->dtend = 0;
/* dcreated */
if (has (o, VCDCreatedProp))
ical->created = time_from_isodate (str_val (vo));
/* completed */
if (has (o, VCCompletedProp))
ical->completed = time_from_isodate (str_val (vo));
/* last_mod */
if (has (o, VCLastModifiedProp))
ical->last_mod = time_from_isodate (str_val (vo));
else
ical->last_mod = now;
/* exdate */
if (has (o, VCExpDateProp))
ical->exdate = set_list (str_val (vo), ",");
/* description */
if (has (o, VCDescriptionProp))
ical->description = g_strdup (str_val (vo));
/* summary */
if (has (o, VCSummaryProp))
ical->summary = g_strdup (str_val (vo));
else
ical->summary = g_strdup ("");
/* status */
if (has (o, VCStatusProp))
ical->status = g_strdup (str_val (vo));
else
ical->status = g_strdup ("NEEDS ACTION");
if (has (o, VCClassProp))
ical->class = g_strdup (str_val (vo));
else
ical->status = g_strdup ("PUBLIC");
/* categories */
if (has (o, VCCategoriesProp))
ical->categories = set_list (str_val (vo), ",");
/* resources */
if (has (o, VCResourcesProp))
ical->resources = set_list (str_val (vo), ";");
/* priority */
if (has (o, VCPriorityProp))
ical->priority = atoi (str_val (vo));
/* tranparency */
if (has (o, VCTranspProp))
ical->transp = atoi (str_val (vo)) ? ICAL_TRANSPARENT : ICAL_OPAQUE;
/* related */
if (has (o, VCRelatedToProp))
ical->related = set_list (str_val (vo), ";");
/* attach */
initPropIterator (&i, o);
while (moreIteration (&i)){
vo = nextVObject (&i);
if (strcmp (vObjectName (vo), VCAttachProp) == 0)
ical->attach = g_list_prepend (ical->attach, g_strdup (str_val (vo)));
}
/* url */
if (has (o, VCURLProp))
ical->url = g_strdup (str_val (vo));
/* FIXME: dalarm */
if (has (o, VCDAlarmProp))
;
/* FIXME: aalarm */
if (has (o, VCAAlarmProp))
;
/* FIXME: palarm */
if (has (o, VCPAlarmProp))
;
/* FIXME: malarm */
if (has (o, VCMAlarmProp))
;
/* FIXME: rdate */
if (has (o, VCRDateProp))
;
/* FIXME: rrule */
if (has (o, VCRRuleProp))
;
return ical;
}
void
ical_object_save (iCalObject *ical)
{
VObject *o;
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
o = newVObject (VCTodoProp);
}

View File

@ -8,6 +8,7 @@
#define CALOBJ_H
#include <libgnome/libgnome.h>
#include "versit/vcc.h"
BEGIN_GNOME_DECLS
@ -89,14 +90,16 @@ typedef struct {
char *url;
time_t recurid;
/* VALARM objects are always inside another object, never alone */
CalendarAlarm *alarm;
CalendarAlarm *dalarm;
CalendarAlarm *aalarm;
} iCalObject;
iCalObject *ical_new (char *comment, char *organizer, char *summary);
iCalObject *ical_object_new (void);
void ical_object_destroy (iCalObject *ico);
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
END_GNOME_DECLS
#endif

View File

@ -39,10 +39,13 @@ setup_widgets (GnomeCalendar *gcal)
{
GtkWidget *notebook;
GtkWidget *day_view, *week_view, *year_view, *task_view;
time_t now;
now = time (NULL);
notebook = gtk_notebook_new ();
day_view = day_view_create (gcal);
week_view = week_view_create (gcal);
week_view = gncal_week_view_new (gcal->cal, now);
year_view = year_view_create (gcal);
task_view = tasks_create (gcal);
@ -86,7 +89,7 @@ gnome_calendar_new (char *title)
}
void
gnome_calendar_load (char *file)
gnome_calendar_load (GnomeCalendar *gcal, char *file)
{
calendar_load (gcal->cal, file);
}

View File

@ -28,7 +28,7 @@ typedef struct {
guint gnome_calendar_get_type (void);
GtkWidget *gnome_calendar_new (char *title);
void gnome_calendar_load (char *file);
void gnome_calendar_load (GnomeCalendar *gcal, char *file);
END_GNOME_DECLS

View File

@ -9,15 +9,23 @@ INCLUDES = \
bin_PROGRAMS = gnomecal
gnomecal_SOURCES = \
main.c \
gnome-cal.c \
gnome-cal.h \
views.c \
calendar.c \
calendar.h \
calobj.c \
calobj.h \
views.h
gncal-week-view.c \
gncal-week-view.h \
gncal-day-view.c \
gncal-day-view.h \
gnome-cal.c \
gnome-cal.h \
main.c \
timeutil.c \
timeutil.h \
view-utils.h \
view-utils.c \
views.h \
views.c
#gncal_SOURCES = \

View File

@ -13,6 +13,7 @@
*/
#include "calendar.h"
#include "versit/vcc.h"
Calendar *
calendar_new (char *title)
@ -28,6 +29,7 @@ calendar_new (char *title)
void
calendar_add_object (Calendar *cal, iCalObject *obj)
{
printf ("Adding object\n");
switch (obj->type){
case ICAL_EVENT:
cal->events = g_list_prepend (cal->events, obj);
@ -133,3 +135,56 @@ calendar_compare_by_dtstart (gpointer a, gpointer b)
return (diff < 0) ? -1 : (diff > 0) ? 1 : 0;
}
#define str_val(obj) (char *) vObjectUStringZValue (obj)
/* Loads our calendar contents from a vObject */
void
calendar_load_from_vobject (Calendar *cal, VObject *vcal)
{
VObjectIterator i;;
initPropIterator (&i, vcal);
while (moreIteration (&i)){
VObject *this = nextVObject (&i);
iCalObject *ical;
const char *object_name = vObjectName (this);
if (strcmp (object_name, VCDCreatedProp) == 0){
cal->created = time_from_isodate (str_val (this));
continue;
}
if (strcmp (object_name, VCLocationProp) == 0)
continue; /* FIXME: imlement */
if (strcmp (object_name, VCProdIdProp) == 0)
continue; /* FIXME: implement */
if (strcmp (object_name, VCVersionProp) == 0)
continue; /* FIXME: implement */
ical = ical_object_create_from_vobject (this, object_name);
if (ical)
calendar_add_object (cal, ical);
}
}
/* Loads a calendar from a file */
void
calendar_load (Calendar *cal, char *fname)
{
VObject *vcal;
if (cal->filename){
g_warning ("Calendar load called again\n");
return;
}
cal->filename = g_strdup (fname);
vcal = Parse_MIME_FromFileName (fname);
calendar_load_from_vobject (cal, vcal);
cleanVObject (vcal);
}

View File

@ -12,6 +12,7 @@ typedef struct {
GList *todo;
GList *journal;
time_t created;
int modified;
} Calendar;

View File

@ -39,10 +39,13 @@ setup_widgets (GnomeCalendar *gcal)
{
GtkWidget *notebook;
GtkWidget *day_view, *week_view, *year_view, *task_view;
time_t now;
now = time (NULL);
notebook = gtk_notebook_new ();
day_view = day_view_create (gcal);
week_view = week_view_create (gcal);
week_view = gncal_week_view_new (gcal->cal, now);
year_view = year_view_create (gcal);
task_view = tasks_create (gcal);
@ -86,7 +89,7 @@ gnome_calendar_new (char *title)
}
void
gnome_calendar_load (char *file)
gnome_calendar_load (GnomeCalendar *gcal, char *file)
{
calendar_load (gcal->cal, file);
}

View File

@ -28,7 +28,7 @@ typedef struct {
guint gnome_calendar_get_type (void);
GtkWidget *gnome_calendar_new (char *title);
void gnome_calendar_load (char *file);
void gnome_calendar_load (GnomeCalendar *gcal, char *file);
END_GNOME_DECLS

View File

@ -173,10 +173,25 @@ GnomeUIInfo gnome_cal_menu [] = {
GNOMEUIINFO_END
};
GnomeUIInfo gnome_toolbar [] = {
{ GNOME_APP_UI_ITEM, N_("Prev"), N_("Previous"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
{ GNOME_APP_UI_ITEM, N_("Today"), N_("Today"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
{ GNOME_APP_UI_ITEM, N_("Next"), N_("Next"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD },
GNOMEUIINFO_END
};
static void
setup_menu (GtkWidget *gcal)
{
gnome_app_create_menus_with_data (GNOME_APP (gcal), gnome_cal_menu, gcal);
gnome_app_create_toolbar_with_data (GNOME_APP (gcal), gnome_toolbar, gcal);
}
static void
@ -191,8 +206,13 @@ new_calendar (char *full_name, char *calendar_file)
setup_menu (toplevel);
gtk_widget_show (toplevel);
if (g_file_exists (calendar_file))
gnome_calendar_load (calendar_file);
if (g_file_exists (calendar_file)){
printf ("Trying to load %s\n", calendar_file);
gnome_calendar_load (GNOME_CALENDAR (toplevel), calendar_file);
} else {
printf ("tring: ./test.vcf\n");
gnome_calendar_load (GNOME_CALENDAR (toplevel), "./test.vcf");
}
active_calendars++;
}

View File

@ -173,10 +173,25 @@ GnomeUIInfo gnome_cal_menu [] = {
GNOMEUIINFO_END
};
GnomeUIInfo gnome_toolbar [] = {
{ GNOME_APP_UI_ITEM, N_("Prev"), N_("Previous"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
{ GNOME_APP_UI_ITEM, N_("Today"), N_("Today"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_BACK },
{ GNOME_APP_UI_ITEM, N_("Next"), N_("Next"), /*previous_clicked*/0, 0, 0,
GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_FORWARD },
GNOMEUIINFO_END
};
static void
setup_menu (GtkWidget *gcal)
{
gnome_app_create_menus_with_data (GNOME_APP (gcal), gnome_cal_menu, gcal);
gnome_app_create_toolbar_with_data (GNOME_APP (gcal), gnome_toolbar, gcal);
}
static void
@ -191,8 +206,13 @@ new_calendar (char *full_name, char *calendar_file)
setup_menu (toplevel);
gtk_widget_show (toplevel);
if (g_file_exists (calendar_file))
gnome_calendar_load (calendar_file);
if (g_file_exists (calendar_file)){
printf ("Trying to load %s\n", calendar_file);
gnome_calendar_load (GNOME_CALENDAR (toplevel), calendar_file);
} else {
printf ("tring: ./test.vcf\n");
gnome_calendar_load (GNOME_CALENDAR (toplevel), "./test.vcf");
}
active_calendars++;
}

View File

@ -6,7 +6,10 @@
* Miguel de Icaza (miguel@gnu.org)
* Federico Mena (federico@gimp.org)
*/
#include <string.h>
#include <glib.h>
#include "calobj.h"
#include "versit/vcc.h"
iCalObject *
ical_object_new (void)
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
g_free (ico);
}
GList *
set_list (char *str, char *sc)
{
GList *list = 0;
char *s;
for (s = strtok (str, sc); s; s = strtok (NULL, sc))
list = g_list_prepend (list, g_strdup (s));
return list;
}
#define is_a_prop_of(obj,prop) isAPropertyOf (obj,prop)
#define str_val(obj) (char *) vObjectUStringZValue (obj)
#define has(obj,prop) (vo = isAPropertyOf (obj, prop))
/* FIXME: we need to load the recurrence properties */
iCalObject *
ical_object_create_from_vobject (VObject *o, const char *object_name)
{
time_t now = time (NULL);
iCalObject *ical;
VObject *vo;
VObjectIterator i;
ical = g_new0 (iCalObject, 1);
if (strcmp (object_name, VCEventProp) == 0)
ical->type = ICAL_EVENT;
else if (strcmp (object_name, VCTodoProp) == 0)
ical->type = ICAL_TODO;
else
return 0;
/* uid */
if (has (o, VCUniqueStringProp))
ical->uid = g_strdup (str_val (vo));
/* seq */
if (has (o, VCSequenceProp))
ical->seq = atoi (str_val (vo));
else
ical->seq = 0;
/* dtstart */
if (has (o, VCDTstartProp))
ical->dtstart = time_from_isodate (str_val (vo));
else
ical->dtstart = 0;
/* dtend */
if (has (o, VCDTendProp))
ical->dtend = time_from_isodate (str_val (vo));
else
ical->dtend = 0;
/* dcreated */
if (has (o, VCDCreatedProp))
ical->created = time_from_isodate (str_val (vo));
/* completed */
if (has (o, VCCompletedProp))
ical->completed = time_from_isodate (str_val (vo));
/* last_mod */
if (has (o, VCLastModifiedProp))
ical->last_mod = time_from_isodate (str_val (vo));
else
ical->last_mod = now;
/* exdate */
if (has (o, VCExpDateProp))
ical->exdate = set_list (str_val (vo), ",");
/* description */
if (has (o, VCDescriptionProp))
ical->description = g_strdup (str_val (vo));
/* summary */
if (has (o, VCSummaryProp))
ical->summary = g_strdup (str_val (vo));
else
ical->summary = g_strdup ("");
/* status */
if (has (o, VCStatusProp))
ical->status = g_strdup (str_val (vo));
else
ical->status = g_strdup ("NEEDS ACTION");
if (has (o, VCClassProp))
ical->class = g_strdup (str_val (vo));
else
ical->status = g_strdup ("PUBLIC");
/* categories */
if (has (o, VCCategoriesProp))
ical->categories = set_list (str_val (vo), ",");
/* resources */
if (has (o, VCResourcesProp))
ical->resources = set_list (str_val (vo), ";");
/* priority */
if (has (o, VCPriorityProp))
ical->priority = atoi (str_val (vo));
/* tranparency */
if (has (o, VCTranspProp))
ical->transp = atoi (str_val (vo)) ? ICAL_TRANSPARENT : ICAL_OPAQUE;
/* related */
if (has (o, VCRelatedToProp))
ical->related = set_list (str_val (vo), ";");
/* attach */
initPropIterator (&i, o);
while (moreIteration (&i)){
vo = nextVObject (&i);
if (strcmp (vObjectName (vo), VCAttachProp) == 0)
ical->attach = g_list_prepend (ical->attach, g_strdup (str_val (vo)));
}
/* url */
if (has (o, VCURLProp))
ical->url = g_strdup (str_val (vo));
/* FIXME: dalarm */
if (has (o, VCDAlarmProp))
;
/* FIXME: aalarm */
if (has (o, VCAAlarmProp))
;
/* FIXME: palarm */
if (has (o, VCPAlarmProp))
;
/* FIXME: malarm */
if (has (o, VCMAlarmProp))
;
/* FIXME: rdate */
if (has (o, VCRDateProp))
;
/* FIXME: rrule */
if (has (o, VCRRuleProp))
;
return ical;
}
void
ical_object_save (iCalObject *ical)
{
VObject *o;
if (ical->type == ICAL_EVENT)
o = newVObject (VCEventProp);
else
o = newVObject (VCTodoProp);
}

View File

@ -8,6 +8,7 @@
#define CALOBJ_H
#include <libgnome/libgnome.h>
#include "versit/vcc.h"
BEGIN_GNOME_DECLS
@ -89,14 +90,16 @@ typedef struct {
char *url;
time_t recurid;
/* VALARM objects are always inside another object, never alone */
CalendarAlarm *alarm;
CalendarAlarm *dalarm;
CalendarAlarm *aalarm;
} iCalObject;
iCalObject *ical_new (char *comment, char *organizer, char *summary);
iCalObject *ical_object_new (void);
void ical_object_destroy (iCalObject *ico);
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
END_GNOME_DECLS
#endif

View File

@ -29,6 +29,17 @@ time_from_isodate (char *str)
return mktime (&my_tm);
}
char *
isodate_from_time_t (time_t t)
{
struct tm *tm;
static char isotime [40];
tm = localtime (&t);
strftime (isotime, sizeof (isotime)-1, "%Y%m%dT%H%M%sZ", tm);
return &isotime;
}
time_t
time_from_start_duration (time_t start, char *duration)
{

View File

@ -15,6 +15,7 @@
time_t time_from_isodate (char *str);
time_t time_from_start_duration (time_t start, char *duration);
char *isodate_from_time_t (time_t t);
/* Returns pointer to a statically-allocated buffer with a string of the form
* 3am, 4am, 12pm, 08h, 17h, etc.