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:

committed by
Arturo Espinosa

parent
33b0ab0d0f
commit
f865d886f5
@ -4,3 +4,4 @@ Makefile
|
|||||||
_libs
|
_libs
|
||||||
.libs
|
.libs
|
||||||
gncal
|
gncal
|
||||||
|
gnomecal
|
||||||
|
@ -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>
|
1998-04-02 Federico Mena Quintero <federico@nuclecu.unam.mx>
|
||||||
|
|
||||||
* gncal-week-view.[ch]: New week view composite widget. This
|
* gncal-week-view.[ch]: New week view composite widget. This
|
||||||
|
@ -9,15 +9,23 @@ INCLUDES = \
|
|||||||
bin_PROGRAMS = gnomecal
|
bin_PROGRAMS = gnomecal
|
||||||
|
|
||||||
gnomecal_SOURCES = \
|
gnomecal_SOURCES = \
|
||||||
main.c \
|
|
||||||
gnome-cal.c \
|
|
||||||
gnome-cal.h \
|
|
||||||
views.c \
|
|
||||||
calendar.c \
|
calendar.c \
|
||||||
calendar.h \
|
calendar.h \
|
||||||
calobj.c \
|
calobj.c \
|
||||||
calobj.h \
|
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 = \
|
#gncal_SOURCES = \
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
* Miguel de Icaza (miguel@gnu.org)
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
* Federico Mena (federico@gimp.org)
|
* Federico Mena (federico@gimp.org)
|
||||||
*/
|
*/
|
||||||
|
#include <string.h>
|
||||||
|
#include <glib.h>
|
||||||
#include "calobj.h"
|
#include "calobj.h"
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
iCalObject *
|
iCalObject *
|
||||||
ical_object_new (void)
|
ical_object_new (void)
|
||||||
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
|
|||||||
|
|
||||||
g_free (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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define CALOBJ_H
|
#define CALOBJ_H
|
||||||
|
|
||||||
#include <libgnome/libgnome.h>
|
#include <libgnome/libgnome.h>
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
BEGIN_GNOME_DECLS
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
@ -89,14 +90,16 @@ typedef struct {
|
|||||||
char *url;
|
char *url;
|
||||||
time_t recurid;
|
time_t recurid;
|
||||||
|
|
||||||
/* VALARM objects are always inside another object, never alone */
|
CalendarAlarm *dalarm;
|
||||||
CalendarAlarm *alarm;
|
CalendarAlarm *aalarm;
|
||||||
} iCalObject;
|
} iCalObject;
|
||||||
|
|
||||||
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
iCalObject *ical_object_new (void);
|
iCalObject *ical_object_new (void);
|
||||||
void ical_object_destroy (iCalObject *ico);
|
void ical_object_destroy (iCalObject *ico);
|
||||||
|
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
|
||||||
|
|
||||||
END_GNOME_DECLS
|
END_GNOME_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "calendar.h"
|
#include "calendar.h"
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
Calendar *
|
Calendar *
|
||||||
calendar_new (char *title)
|
calendar_new (char *title)
|
||||||
@ -28,6 +29,7 @@ calendar_new (char *title)
|
|||||||
void
|
void
|
||||||
calendar_add_object (Calendar *cal, iCalObject *obj)
|
calendar_add_object (Calendar *cal, iCalObject *obj)
|
||||||
{
|
{
|
||||||
|
printf ("Adding object\n");
|
||||||
switch (obj->type){
|
switch (obj->type){
|
||||||
case ICAL_EVENT:
|
case ICAL_EVENT:
|
||||||
cal->events = g_list_prepend (cal->events, obj);
|
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;
|
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);
|
||||||
|
}
|
||||||
|
@ -12,6 +12,7 @@ typedef struct {
|
|||||||
GList *todo;
|
GList *todo;
|
||||||
GList *journal;
|
GList *journal;
|
||||||
|
|
||||||
|
time_t created;
|
||||||
int modified;
|
int modified;
|
||||||
} Calendar;
|
} Calendar;
|
||||||
|
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
* Miguel de Icaza (miguel@gnu.org)
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
* Federico Mena (federico@gimp.org)
|
* Federico Mena (federico@gimp.org)
|
||||||
*/
|
*/
|
||||||
|
#include <string.h>
|
||||||
|
#include <glib.h>
|
||||||
#include "calobj.h"
|
#include "calobj.h"
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
iCalObject *
|
iCalObject *
|
||||||
ical_object_new (void)
|
ical_object_new (void)
|
||||||
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
|
|||||||
|
|
||||||
g_free (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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define CALOBJ_H
|
#define CALOBJ_H
|
||||||
|
|
||||||
#include <libgnome/libgnome.h>
|
#include <libgnome/libgnome.h>
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
BEGIN_GNOME_DECLS
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
@ -89,14 +90,16 @@ typedef struct {
|
|||||||
char *url;
|
char *url;
|
||||||
time_t recurid;
|
time_t recurid;
|
||||||
|
|
||||||
/* VALARM objects are always inside another object, never alone */
|
CalendarAlarm *dalarm;
|
||||||
CalendarAlarm *alarm;
|
CalendarAlarm *aalarm;
|
||||||
} iCalObject;
|
} iCalObject;
|
||||||
|
|
||||||
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
iCalObject *ical_object_new (void);
|
iCalObject *ical_object_new (void);
|
||||||
void ical_object_destroy (iCalObject *ico);
|
void ical_object_destroy (iCalObject *ico);
|
||||||
|
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
|
||||||
|
|
||||||
END_GNOME_DECLS
|
END_GNOME_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -39,10 +39,13 @@ setup_widgets (GnomeCalendar *gcal)
|
|||||||
{
|
{
|
||||||
GtkWidget *notebook;
|
GtkWidget *notebook;
|
||||||
GtkWidget *day_view, *week_view, *year_view, *task_view;
|
GtkWidget *day_view, *week_view, *year_view, *task_view;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
now = time (NULL);
|
||||||
|
|
||||||
notebook = gtk_notebook_new ();
|
notebook = gtk_notebook_new ();
|
||||||
day_view = day_view_create (gcal);
|
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);
|
year_view = year_view_create (gcal);
|
||||||
task_view = tasks_create (gcal);
|
task_view = tasks_create (gcal);
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ gnome_calendar_new (char *title)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gnome_calendar_load (char *file)
|
gnome_calendar_load (GnomeCalendar *gcal, char *file)
|
||||||
{
|
{
|
||||||
|
calendar_load (gcal->cal, file);
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ typedef struct {
|
|||||||
|
|
||||||
guint gnome_calendar_get_type (void);
|
guint gnome_calendar_get_type (void);
|
||||||
GtkWidget *gnome_calendar_new (char *title);
|
GtkWidget *gnome_calendar_new (char *title);
|
||||||
void gnome_calendar_load (char *file);
|
void gnome_calendar_load (GnomeCalendar *gcal, char *file);
|
||||||
|
|
||||||
END_GNOME_DECLS
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
@ -9,15 +9,23 @@ INCLUDES = \
|
|||||||
bin_PROGRAMS = gnomecal
|
bin_PROGRAMS = gnomecal
|
||||||
|
|
||||||
gnomecal_SOURCES = \
|
gnomecal_SOURCES = \
|
||||||
main.c \
|
|
||||||
gnome-cal.c \
|
|
||||||
gnome-cal.h \
|
|
||||||
views.c \
|
|
||||||
calendar.c \
|
calendar.c \
|
||||||
calendar.h \
|
calendar.h \
|
||||||
calobj.c \
|
calobj.c \
|
||||||
calobj.h \
|
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 = \
|
#gncal_SOURCES = \
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "calendar.h"
|
#include "calendar.h"
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
Calendar *
|
Calendar *
|
||||||
calendar_new (char *title)
|
calendar_new (char *title)
|
||||||
@ -28,6 +29,7 @@ calendar_new (char *title)
|
|||||||
void
|
void
|
||||||
calendar_add_object (Calendar *cal, iCalObject *obj)
|
calendar_add_object (Calendar *cal, iCalObject *obj)
|
||||||
{
|
{
|
||||||
|
printf ("Adding object\n");
|
||||||
switch (obj->type){
|
switch (obj->type){
|
||||||
case ICAL_EVENT:
|
case ICAL_EVENT:
|
||||||
cal->events = g_list_prepend (cal->events, obj);
|
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;
|
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);
|
||||||
|
}
|
||||||
|
@ -12,6 +12,7 @@ typedef struct {
|
|||||||
GList *todo;
|
GList *todo;
|
||||||
GList *journal;
|
GList *journal;
|
||||||
|
|
||||||
|
time_t created;
|
||||||
int modified;
|
int modified;
|
||||||
} Calendar;
|
} Calendar;
|
||||||
|
|
||||||
|
@ -39,10 +39,13 @@ setup_widgets (GnomeCalendar *gcal)
|
|||||||
{
|
{
|
||||||
GtkWidget *notebook;
|
GtkWidget *notebook;
|
||||||
GtkWidget *day_view, *week_view, *year_view, *task_view;
|
GtkWidget *day_view, *week_view, *year_view, *task_view;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
|
now = time (NULL);
|
||||||
|
|
||||||
notebook = gtk_notebook_new ();
|
notebook = gtk_notebook_new ();
|
||||||
day_view = day_view_create (gcal);
|
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);
|
year_view = year_view_create (gcal);
|
||||||
task_view = tasks_create (gcal);
|
task_view = tasks_create (gcal);
|
||||||
|
|
||||||
@ -86,7 +89,7 @@ gnome_calendar_new (char *title)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gnome_calendar_load (char *file)
|
gnome_calendar_load (GnomeCalendar *gcal, char *file)
|
||||||
{
|
{
|
||||||
|
calendar_load (gcal->cal, file);
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ typedef struct {
|
|||||||
|
|
||||||
guint gnome_calendar_get_type (void);
|
guint gnome_calendar_get_type (void);
|
||||||
GtkWidget *gnome_calendar_new (char *title);
|
GtkWidget *gnome_calendar_new (char *title);
|
||||||
void gnome_calendar_load (char *file);
|
void gnome_calendar_load (GnomeCalendar *gcal, char *file);
|
||||||
|
|
||||||
END_GNOME_DECLS
|
END_GNOME_DECLS
|
||||||
|
|
||||||
|
@ -173,10 +173,25 @@ GnomeUIInfo gnome_cal_menu [] = {
|
|||||||
GNOMEUIINFO_END
|
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
|
static void
|
||||||
setup_menu (GtkWidget *gcal)
|
setup_menu (GtkWidget *gcal)
|
||||||
{
|
{
|
||||||
gnome_app_create_menus_with_data (GNOME_APP (gcal), gnome_cal_menu, 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
|
static void
|
||||||
@ -191,8 +206,13 @@ new_calendar (char *full_name, char *calendar_file)
|
|||||||
setup_menu (toplevel);
|
setup_menu (toplevel);
|
||||||
gtk_widget_show (toplevel);
|
gtk_widget_show (toplevel);
|
||||||
|
|
||||||
if (g_file_exists (calendar_file))
|
if (g_file_exists (calendar_file)){
|
||||||
gnome_calendar_load (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++;
|
active_calendars++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,10 +173,25 @@ GnomeUIInfo gnome_cal_menu [] = {
|
|||||||
GNOMEUIINFO_END
|
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
|
static void
|
||||||
setup_menu (GtkWidget *gcal)
|
setup_menu (GtkWidget *gcal)
|
||||||
{
|
{
|
||||||
gnome_app_create_menus_with_data (GNOME_APP (gcal), gnome_cal_menu, 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
|
static void
|
||||||
@ -191,8 +206,13 @@ new_calendar (char *full_name, char *calendar_file)
|
|||||||
setup_menu (toplevel);
|
setup_menu (toplevel);
|
||||||
gtk_widget_show (toplevel);
|
gtk_widget_show (toplevel);
|
||||||
|
|
||||||
if (g_file_exists (calendar_file))
|
if (g_file_exists (calendar_file)){
|
||||||
gnome_calendar_load (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++;
|
active_calendars++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,10 @@
|
|||||||
* Miguel de Icaza (miguel@gnu.org)
|
* Miguel de Icaza (miguel@gnu.org)
|
||||||
* Federico Mena (federico@gimp.org)
|
* Federico Mena (federico@gimp.org)
|
||||||
*/
|
*/
|
||||||
|
#include <string.h>
|
||||||
|
#include <glib.h>
|
||||||
#include "calobj.h"
|
#include "calobj.h"
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
iCalObject *
|
iCalObject *
|
||||||
ical_object_new (void)
|
ical_object_new (void)
|
||||||
@ -46,3 +49,168 @@ ical_object_destroy (iCalObject *ico)
|
|||||||
|
|
||||||
g_free (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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define CALOBJ_H
|
#define CALOBJ_H
|
||||||
|
|
||||||
#include <libgnome/libgnome.h>
|
#include <libgnome/libgnome.h>
|
||||||
|
#include "versit/vcc.h"
|
||||||
|
|
||||||
BEGIN_GNOME_DECLS
|
BEGIN_GNOME_DECLS
|
||||||
|
|
||||||
@ -89,14 +90,16 @@ typedef struct {
|
|||||||
char *url;
|
char *url;
|
||||||
time_t recurid;
|
time_t recurid;
|
||||||
|
|
||||||
/* VALARM objects are always inside another object, never alone */
|
CalendarAlarm *dalarm;
|
||||||
CalendarAlarm *alarm;
|
CalendarAlarm *aalarm;
|
||||||
} iCalObject;
|
} iCalObject;
|
||||||
|
|
||||||
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
iCalObject *ical_new (char *comment, char *organizer, char *summary);
|
||||||
iCalObject *ical_object_new (void);
|
iCalObject *ical_object_new (void);
|
||||||
void ical_object_destroy (iCalObject *ico);
|
void ical_object_destroy (iCalObject *ico);
|
||||||
|
iCalObject *ical_object_create_from_vobject (VObject *obj, const char *object_name);
|
||||||
|
|
||||||
END_GNOME_DECLS
|
END_GNOME_DECLS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -29,6 +29,17 @@ time_from_isodate (char *str)
|
|||||||
return mktime (&my_tm);
|
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_t
|
||||||
time_from_start_duration (time_t start, char *duration)
|
time_from_start_duration (time_t start, char *duration)
|
||||||
{
|
{
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
time_t time_from_isodate (char *str);
|
time_t time_from_isodate (char *str);
|
||||||
time_t time_from_start_duration (time_t start, char *duration);
|
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
|
/* Returns pointer to a statically-allocated buffer with a string of the form
|
||||||
* 3am, 4am, 12pm, 08h, 17h, etc.
|
* 3am, 4am, 12pm, 08h, 17h, etc.
|
||||||
|
Reference in New Issue
Block a user