changed to be a .la file instead of .a, this allows lib*_conduit to use

* libversit: changed to be a .la file instead of .a, this allows
	lib*_conduit to use the library.

	* gncal/calendar-conduit: implemented iterate and
	iterate_specific.

	* gncal/corba-cal: fixed warnings.

svn path=/trunk/; revision=1239
This commit is contained in:
Eskil Heyn Olsen
1999-09-19 01:14:24 +00:00
parent b2c5bf685a
commit f75cc7238b
11 changed files with 580 additions and 157 deletions

View File

@ -106,7 +106,8 @@ calendar_pilot_sync_SOURCES = \
LINK_FLAGS = \
$(GNOME_LIBDIR) \
$(GNOMEGNORBA_LIBS) \
$(INTLLIBS) ../libversit/libversit.a
$(INTLLIBS) \
../libversit/libversit.la
calendar_pilot_sync_LDADD = \
$(PISOCK_LIBS) \
@ -126,15 +127,13 @@ libcalendar_conduit_la_SOURCES = \
GnomeCal-common.c \
GnomeCal-stubs.c \
calendar.c \
vcc.c \
vcaltmp.c \
vobject.c \
timeutil.c
libcalendar_conduit_la_LDFLAGS = \
-rpath $(libdir)
libcalendar_conduit_la_LIBADD = \
../libversit/libversit.la \
$(PISOCK_LIBS) \
$(GNOME_LIBDIR) \
$(GNOME_LIBS)
@ -199,7 +198,7 @@ EXTRA_DIST = \
bell.xpm \
recur.xpm \
$(idl_DATA) \
$(gnorba_DATA) \
$(gnorba_DATA)
Productivitydir = $(datadir)/gnome/apps/Applications

View File

@ -49,8 +49,6 @@ CORBA_ORB orb;
static GNOME_Calendar_Repository
calendar_server (void)
{
int n =0;
calendar = goad_server_activate_with_id (NULL, "IDL:GNOME:Calendar:Repository:1.0",
0, NULL);
if (calendar == CORBA_OBJECT_NIL)
@ -71,6 +69,64 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data)
{
}
static void
local_from_ical(CalLocalRecord **local,iCalObject *obj) {
g_return_if_fail(local!=NULL);
g_return_if_fail(*local!=NULL);
g_return_if_fail(obj!=NULL);
(*local)->ical = obj;
(*local)->ID = (*local)->ical->pilot_id;
g_message("(*local)->Id = %ld",(*local)->ID);
switch((*local)->ical->pilot_status) {
case ICAL_PILOT_SYNC_NONE: (*local)->local.attr = RecordNothing; break;
case ICAL_PILOT_SYNC_MOD: (*local)->local.attr = RecordNew; break;
case ICAL_PILOT_SYNC_DEL: (*local)->local.attr = RecordDeleted; break;
}
(*local)->local.secret = 0;
if(obj->class!=NULL)
if(strcmp(obj->class,"PRIVATE")==0)
(*local)->local.secret = 1;
(*local)->local.archived = 0;
/* used by iterations */
(*local)->list_ptr = NULL;
}
static CalLocalRecord *
match_record_from_repository(PilotRecord *remote) {
char *vcal_string;
CalLocalRecord *loc;
g_return_val_if_fail(remote!=NULL,NULL);
printf ("requesting %ld []\n", remote->ID);
/* FIXME: ehm, who frees this string ? */
vcal_string =
GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
printf (_("\tObject did not exist\n"));
return NULL;
} else if(ev._major != CORBA_NO_EXCEPTION) {
printf(_("\tError while communicating with calendar server\n"));
CORBA_exception_free(&ev);
return NULL;
} else {
printf ("\tFound\n");
loc = g_new0(CalLocalRecord,1);
/* memory allocated in new_from_string is freed in free_match */
local_from_ical(&loc,ical_object_new_from_string (vcal_string));
return loc;
}
return NULL;
}
/* Code blatantly stolen from
* calendar-pilot-sync.c:
*
@ -97,7 +153,8 @@ update_record (PilotRecord *remote)
g_get_user_name (),
a.description ? a.description : "");
printf ("requesting %d [%s]\n", remote->ID, a.description);
printf ("requesting %ld [%s]\n", remote->ID, a.description);
/* FIXME: ehm, who frees this string ? */
vcal_string = GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
@ -277,7 +334,7 @@ load_records(GnomePilotConduit *c)
ConduitData *cd;
vcalendar_string =
GNOME_Calendar_Repository_get_updated_objects (calendar, &ev);
GNOME_Calendar_Repository_get_objects (calendar, &ev);
cd = GET_DATA(c);
g_assert(cd!=NULL);
@ -314,46 +371,69 @@ pre_sync(GnomePilotConduit *c, GnomePilotDBInfo *dbi)
return 1;
}
/**
* Find (if possible) the local record which matches
* the given PilotRecord.
* if successfull, return non-zero and set *local to
* a non-null value (the located local record),
* otherwise return 0 and set *local = NULL;
*/
static gint
match_record (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
match_record (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
PilotRecord *remote,
gpointer data)
{
g_return_val_if_fail(remote!=NULL,0);
g_print ("in match_record\n");
*local = NULL;
return 1;
g_print ("in match_record\n");
*local = match_record_from_repository(remote);
return 1;
}
/**
* Free the data allocated by a previous match_record call.
* If successfull, return non-zero and ser *local=NULL, otherwise
* return 0.
*/
static gint
free_match (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
free_match (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering free_match\n");
ical_object_destroy (CALLOCALRECORD(*local)->ical);
g_free(*local);
*local = NULL;
return 0;
return 1;
}
static gint
archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering archive_local\n");
return 1;
}
static gint
archive_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_remote (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering archive_remote\n");
return 1;
}
static gint
store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
store_remote (GnomePilotConduitStandardAbs *conduit,
PilotRecord *remote,
gpointer data)
{
@ -364,103 +444,147 @@ store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
return 1;
}
static gint
clear_status_archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering clear_status_archive_local\n");
return 1;
}
static gint
iterate (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering iterate\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
if(*local==NULL) {
g_message("calconduit: beginning iteration");
if(GET_DATA(conduit)->cal->events!=NULL) {
*local = g_new0(CalLocalRecord,1);
local_from_ical(local,(iCalObject*)GET_DATA(conduit)->cal->events->data);
(*local)->list_ptr = GET_DATA(conduit)->cal->events;
} else {
g_message("calconduit: no events");
(*local) = NULL;
}
} else {
g_message("calconduit: continuing iteration");
if(g_list_next((*local)->list_ptr)==NULL) {
g_message("calconduit: ending");
g_free((*local));
(*local) = NULL; /* ends iteration */
} else {
local_from_ical(local,(iCalObject*)(g_list_next((*local)->list_ptr)->data));
(*local)->list_ptr = g_list_next((*local)->list_ptr);
}
}
return 1;
}
static gint
iterate_specific (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate_specific (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gint flag,
gint archived,
gpointer data)
{
g_print ("entering iterate_specific\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
g_print ("entering iterate_specific\n");
do {
gnome_pilot_conduit_standard_abs_iterate(conduit,(LocalRecord**)local);
if((*local)==NULL) break;
if(archived && ((*local)->local.archived==archived)) break;
if((*local)->local.attr == flag) break;
} while((*local)!=NULL);
return 1;
}
static gint
purge (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
purge (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering purge\n");
return 1;
}
static gint
set_status (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_status (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint status,
gpointer data)
{
g_print ("entering set_status\n");
return 0;
}
static gint
set_archived (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_archived (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint archived,
gpointer data)
{
g_print ("entering set_archived\n");
return 1;
}
static gint
set_pilot_id (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_pilot_id (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
guint32 ID,
gpointer data)
{
g_print ("entering set_pilot_id\n");
return 1;
}
static gint
compare (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare\n");
return 1;
}
static gint
compare_backup (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare_backup (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare_backup\n");
return 1;
}
static gint
free_transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
free_transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering free_transmit\n");
return 1;
}
static gint
delete_all (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
delete_all (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering delete_all\n");
return 1;
}
static PilotRecord *
transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering transmit\n");

View File

@ -9,6 +9,19 @@
#include <pi-datebook.h>
#include <gnome.h>
#define CALLOCALRECORD(s) ((CalLocalRecord*)(s))
typedef struct _CalLocalRecord CalLocalRecord;
struct _CalLocalRecord {
/* The stuff from gnome-pilot-conduit-standard-abs.h */
LocalRecord local;
/* The Pilot ID of the record */
recordid_t ID;
/* The corresponding iCal object */
iCalObject *ical;
/* used by iterations, points to a GList element */
GList *list_ptr;
};
typedef struct _ConduitCfg ConduitCfg;

View File

@ -49,8 +49,6 @@ CORBA_ORB orb;
static GNOME_Calendar_Repository
calendar_server (void)
{
int n =0;
calendar = goad_server_activate_with_id (NULL, "IDL:GNOME:Calendar:Repository:1.0",
0, NULL);
if (calendar == CORBA_OBJECT_NIL)
@ -71,6 +69,64 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data)
{
}
static void
local_from_ical(CalLocalRecord **local,iCalObject *obj) {
g_return_if_fail(local!=NULL);
g_return_if_fail(*local!=NULL);
g_return_if_fail(obj!=NULL);
(*local)->ical = obj;
(*local)->ID = (*local)->ical->pilot_id;
g_message("(*local)->Id = %ld",(*local)->ID);
switch((*local)->ical->pilot_status) {
case ICAL_PILOT_SYNC_NONE: (*local)->local.attr = RecordNothing; break;
case ICAL_PILOT_SYNC_MOD: (*local)->local.attr = RecordNew; break;
case ICAL_PILOT_SYNC_DEL: (*local)->local.attr = RecordDeleted; break;
}
(*local)->local.secret = 0;
if(obj->class!=NULL)
if(strcmp(obj->class,"PRIVATE")==0)
(*local)->local.secret = 1;
(*local)->local.archived = 0;
/* used by iterations */
(*local)->list_ptr = NULL;
}
static CalLocalRecord *
match_record_from_repository(PilotRecord *remote) {
char *vcal_string;
CalLocalRecord *loc;
g_return_val_if_fail(remote!=NULL,NULL);
printf ("requesting %ld []\n", remote->ID);
/* FIXME: ehm, who frees this string ? */
vcal_string =
GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
printf (_("\tObject did not exist\n"));
return NULL;
} else if(ev._major != CORBA_NO_EXCEPTION) {
printf(_("\tError while communicating with calendar server\n"));
CORBA_exception_free(&ev);
return NULL;
} else {
printf ("\tFound\n");
loc = g_new0(CalLocalRecord,1);
/* memory allocated in new_from_string is freed in free_match */
local_from_ical(&loc,ical_object_new_from_string (vcal_string));
return loc;
}
return NULL;
}
/* Code blatantly stolen from
* calendar-pilot-sync.c:
*
@ -97,7 +153,8 @@ update_record (PilotRecord *remote)
g_get_user_name (),
a.description ? a.description : "");
printf ("requesting %d [%s]\n", remote->ID, a.description);
printf ("requesting %ld [%s]\n", remote->ID, a.description);
/* FIXME: ehm, who frees this string ? */
vcal_string = GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
@ -277,7 +334,7 @@ load_records(GnomePilotConduit *c)
ConduitData *cd;
vcalendar_string =
GNOME_Calendar_Repository_get_updated_objects (calendar, &ev);
GNOME_Calendar_Repository_get_objects (calendar, &ev);
cd = GET_DATA(c);
g_assert(cd!=NULL);
@ -314,46 +371,69 @@ pre_sync(GnomePilotConduit *c, GnomePilotDBInfo *dbi)
return 1;
}
/**
* Find (if possible) the local record which matches
* the given PilotRecord.
* if successfull, return non-zero and set *local to
* a non-null value (the located local record),
* otherwise return 0 and set *local = NULL;
*/
static gint
match_record (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
match_record (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
PilotRecord *remote,
gpointer data)
{
g_return_val_if_fail(remote!=NULL,0);
g_print ("in match_record\n");
*local = NULL;
return 1;
g_print ("in match_record\n");
*local = match_record_from_repository(remote);
return 1;
}
/**
* Free the data allocated by a previous match_record call.
* If successfull, return non-zero and ser *local=NULL, otherwise
* return 0.
*/
static gint
free_match (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
free_match (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering free_match\n");
ical_object_destroy (CALLOCALRECORD(*local)->ical);
g_free(*local);
*local = NULL;
return 0;
return 1;
}
static gint
archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering archive_local\n");
return 1;
}
static gint
archive_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_remote (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering archive_remote\n");
return 1;
}
static gint
store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
store_remote (GnomePilotConduitStandardAbs *conduit,
PilotRecord *remote,
gpointer data)
{
@ -364,103 +444,147 @@ store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
return 1;
}
static gint
clear_status_archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering clear_status_archive_local\n");
return 1;
}
static gint
iterate (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering iterate\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
if(*local==NULL) {
g_message("calconduit: beginning iteration");
if(GET_DATA(conduit)->cal->events!=NULL) {
*local = g_new0(CalLocalRecord,1);
local_from_ical(local,(iCalObject*)GET_DATA(conduit)->cal->events->data);
(*local)->list_ptr = GET_DATA(conduit)->cal->events;
} else {
g_message("calconduit: no events");
(*local) = NULL;
}
} else {
g_message("calconduit: continuing iteration");
if(g_list_next((*local)->list_ptr)==NULL) {
g_message("calconduit: ending");
g_free((*local));
(*local) = NULL; /* ends iteration */
} else {
local_from_ical(local,(iCalObject*)(g_list_next((*local)->list_ptr)->data));
(*local)->list_ptr = g_list_next((*local)->list_ptr);
}
}
return 1;
}
static gint
iterate_specific (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate_specific (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gint flag,
gint archived,
gpointer data)
{
g_print ("entering iterate_specific\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
g_print ("entering iterate_specific\n");
do {
gnome_pilot_conduit_standard_abs_iterate(conduit,(LocalRecord**)local);
if((*local)==NULL) break;
if(archived && ((*local)->local.archived==archived)) break;
if((*local)->local.attr == flag) break;
} while((*local)!=NULL);
return 1;
}
static gint
purge (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
purge (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering purge\n");
return 1;
}
static gint
set_status (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_status (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint status,
gpointer data)
{
g_print ("entering set_status\n");
return 0;
}
static gint
set_archived (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_archived (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint archived,
gpointer data)
{
g_print ("entering set_archived\n");
return 1;
}
static gint
set_pilot_id (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_pilot_id (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
guint32 ID,
gpointer data)
{
g_print ("entering set_pilot_id\n");
return 1;
}
static gint
compare (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare\n");
return 1;
}
static gint
compare_backup (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare_backup (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare_backup\n");
return 1;
}
static gint
free_transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
free_transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering free_transmit\n");
return 1;
}
static gint
delete_all (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
delete_all (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering delete_all\n");
return 1;
}
static PilotRecord *
transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering transmit\n");

View File

@ -9,6 +9,19 @@
#include <pi-datebook.h>
#include <gnome.h>
#define CALLOCALRECORD(s) ((CalLocalRecord*)(s))
typedef struct _CalLocalRecord CalLocalRecord;
struct _CalLocalRecord {
/* The stuff from gnome-pilot-conduit-standard-abs.h */
LocalRecord local;
/* The Pilot ID of the record */
recordid_t ID;
/* The corresponding iCal object */
iCalObject *ical;
/* used by iterations, points to a GList element */
GList *list_ptr;
};
typedef struct _ConduitCfg ConduitCfg;

View File

@ -45,7 +45,7 @@ gnomecal_from_servant (PortableServer_Servant servant)
static CORBA_char *
cal_repo_get_object (PortableServer_Servant servant,
CORBA_char *uid,
const CORBA_char *uid,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -131,7 +131,7 @@ cal_repo_get_id_from_pilot_id (PortableServer_Servant servant,
static void
cal_repo_delete_object (PortableServer_Servant servant,
CORBA_char *uid,
const CORBA_char *uid,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -153,8 +153,8 @@ cal_repo_delete_object (PortableServer_Servant servant,
static void
cal_repo_update_object (PortableServer_Servant servant,
CORBA_char *uid,
CORBA_char *vcalendar_object,
const CORBA_char *uid,
const CORBA_char *vcalendar_object,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -173,9 +173,9 @@ cal_repo_update_object (PortableServer_Servant servant,
static void
cal_repo_update_pilot_id (PortableServer_Servant servant,
CORBA_char *uid,
CORBA_long pilot_id,
CORBA_long pilot_status,
const CORBA_char *uid,
const CORBA_long pilot_id,
const CORBA_long pilot_status,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -207,7 +207,10 @@ cal_repo_get_objects (PortableServer_Servant servant,
GList *l;
char *str;
CORBA_char *res;
int items_dbg=0;
g_message("in cal_repo_get_objects");
dirty_cal = calendar_new ("Temporal");
for (l = gcal->cal->events; l; l = l->next){
@ -216,12 +219,16 @@ cal_repo_get_objects (PortableServer_Servant servant,
obj = ical_object_duplicate (l->data);
calendar_add_object (dirty_cal, obj);
items_dbg++;
}
str = calendar_get_as_vcal_string (dirty_cal);
res = CORBA_string_dup (str);
g_free (str);
calendar_destroy (dirty_cal);
g_message("added %d items to return value",items_dbg);
return res;
}

View File

@ -106,7 +106,8 @@ calendar_pilot_sync_SOURCES = \
LINK_FLAGS = \
$(GNOME_LIBDIR) \
$(GNOMEGNORBA_LIBS) \
$(INTLLIBS) ../libversit/libversit.a
$(INTLLIBS) \
../libversit/libversit.la
calendar_pilot_sync_LDADD = \
$(PISOCK_LIBS) \
@ -126,15 +127,13 @@ libcalendar_conduit_la_SOURCES = \
GnomeCal-common.c \
GnomeCal-stubs.c \
calendar.c \
vcc.c \
vcaltmp.c \
vobject.c \
timeutil.c
libcalendar_conduit_la_LDFLAGS = \
-rpath $(libdir)
libcalendar_conduit_la_LIBADD = \
../libversit/libversit.la \
$(PISOCK_LIBS) \
$(GNOME_LIBDIR) \
$(GNOME_LIBS)
@ -199,7 +198,7 @@ EXTRA_DIST = \
bell.xpm \
recur.xpm \
$(idl_DATA) \
$(gnorba_DATA) \
$(gnorba_DATA)
Productivitydir = $(datadir)/gnome/apps/Applications

View File

@ -49,8 +49,6 @@ CORBA_ORB orb;
static GNOME_Calendar_Repository
calendar_server (void)
{
int n =0;
calendar = goad_server_activate_with_id (NULL, "IDL:GNOME:Calendar:Repository:1.0",
0, NULL);
if (calendar == CORBA_OBJECT_NIL)
@ -71,6 +69,64 @@ calendar_notify (time_t time, CalendarAlarm *which, void *data)
{
}
static void
local_from_ical(CalLocalRecord **local,iCalObject *obj) {
g_return_if_fail(local!=NULL);
g_return_if_fail(*local!=NULL);
g_return_if_fail(obj!=NULL);
(*local)->ical = obj;
(*local)->ID = (*local)->ical->pilot_id;
g_message("(*local)->Id = %ld",(*local)->ID);
switch((*local)->ical->pilot_status) {
case ICAL_PILOT_SYNC_NONE: (*local)->local.attr = RecordNothing; break;
case ICAL_PILOT_SYNC_MOD: (*local)->local.attr = RecordNew; break;
case ICAL_PILOT_SYNC_DEL: (*local)->local.attr = RecordDeleted; break;
}
(*local)->local.secret = 0;
if(obj->class!=NULL)
if(strcmp(obj->class,"PRIVATE")==0)
(*local)->local.secret = 1;
(*local)->local.archived = 0;
/* used by iterations */
(*local)->list_ptr = NULL;
}
static CalLocalRecord *
match_record_from_repository(PilotRecord *remote) {
char *vcal_string;
CalLocalRecord *loc;
g_return_val_if_fail(remote!=NULL,NULL);
printf ("requesting %ld []\n", remote->ID);
/* FIXME: ehm, who frees this string ? */
vcal_string =
GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
printf (_("\tObject did not exist\n"));
return NULL;
} else if(ev._major != CORBA_NO_EXCEPTION) {
printf(_("\tError while communicating with calendar server\n"));
CORBA_exception_free(&ev);
return NULL;
} else {
printf ("\tFound\n");
loc = g_new0(CalLocalRecord,1);
/* memory allocated in new_from_string is freed in free_match */
local_from_ical(&loc,ical_object_new_from_string (vcal_string));
return loc;
}
return NULL;
}
/* Code blatantly stolen from
* calendar-pilot-sync.c:
*
@ -97,7 +153,8 @@ update_record (PilotRecord *remote)
g_get_user_name (),
a.description ? a.description : "");
printf ("requesting %d [%s]\n", remote->ID, a.description);
printf ("requesting %ld [%s]\n", remote->ID, a.description);
/* FIXME: ehm, who frees this string ? */
vcal_string = GNOME_Calendar_Repository_get_object_by_pilot_id (calendar, remote->ID, &ev);
if (ev._major == CORBA_USER_EXCEPTION){
@ -277,7 +334,7 @@ load_records(GnomePilotConduit *c)
ConduitData *cd;
vcalendar_string =
GNOME_Calendar_Repository_get_updated_objects (calendar, &ev);
GNOME_Calendar_Repository_get_objects (calendar, &ev);
cd = GET_DATA(c);
g_assert(cd!=NULL);
@ -314,46 +371,69 @@ pre_sync(GnomePilotConduit *c, GnomePilotDBInfo *dbi)
return 1;
}
/**
* Find (if possible) the local record which matches
* the given PilotRecord.
* if successfull, return non-zero and set *local to
* a non-null value (the located local record),
* otherwise return 0 and set *local = NULL;
*/
static gint
match_record (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
match_record (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
PilotRecord *remote,
gpointer data)
{
g_return_val_if_fail(remote!=NULL,0);
g_print ("in match_record\n");
*local = NULL;
return 1;
g_print ("in match_record\n");
*local = match_record_from_repository(remote);
return 1;
}
/**
* Free the data allocated by a previous match_record call.
* If successfull, return non-zero and ser *local=NULL, otherwise
* return 0.
*/
static gint
free_match (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
free_match (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering free_match\n");
ical_object_destroy (CALLOCALRECORD(*local)->ical);
g_free(*local);
*local = NULL;
return 0;
return 1;
}
static gint
archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering archive_local\n");
return 1;
}
static gint
archive_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
archive_remote (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering archive_remote\n");
return 1;
}
static gint
store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
store_remote (GnomePilotConduitStandardAbs *conduit,
PilotRecord *remote,
gpointer data)
{
@ -364,103 +444,147 @@ store_remote (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
return 1;
}
static gint
clear_status_archive_local (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
clear_status_archive_local (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering clear_status_archive_local\n");
return 1;
}
static gint
iterate (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gpointer data)
{
g_print ("entering iterate\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
if(*local==NULL) {
g_message("calconduit: beginning iteration");
if(GET_DATA(conduit)->cal->events!=NULL) {
*local = g_new0(CalLocalRecord,1);
local_from_ical(local,(iCalObject*)GET_DATA(conduit)->cal->events->data);
(*local)->list_ptr = GET_DATA(conduit)->cal->events;
} else {
g_message("calconduit: no events");
(*local) = NULL;
}
} else {
g_message("calconduit: continuing iteration");
if(g_list_next((*local)->list_ptr)==NULL) {
g_message("calconduit: ending");
g_free((*local));
(*local) = NULL; /* ends iteration */
} else {
local_from_ical(local,(iCalObject*)(g_list_next((*local)->list_ptr)->data));
(*local)->list_ptr = g_list_next((*local)->list_ptr);
}
}
return 1;
}
static gint
iterate_specific (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord **local,
iterate_specific (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord **local,
gint flag,
gint archived,
gpointer data)
{
g_print ("entering iterate_specific\n");
return 1;
g_return_val_if_fail(local!=NULL,0);
g_print ("entering iterate_specific\n");
do {
gnome_pilot_conduit_standard_abs_iterate(conduit,(LocalRecord**)local);
if((*local)==NULL) break;
if(archived && ((*local)->local.archived==archived)) break;
if((*local)->local.attr == flag) break;
} while((*local)!=NULL);
return 1;
}
static gint
purge (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
purge (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering purge\n");
return 1;
}
static gint
set_status (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_status (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint status,
gpointer data)
{
g_print ("entering set_status\n");
return 0;
}
static gint
set_archived (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_archived (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gint archived,
gpointer data)
{
g_print ("entering set_archived\n");
return 1;
}
static gint
set_pilot_id (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
set_pilot_id (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
guint32 ID,
gpointer data)
{
g_print ("entering set_pilot_id\n");
return 1;
}
static gint
compare (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare\n");
return 1;
}
static gint
compare_backup (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
compare_backup (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering compare_backup\n");
return 1;
}
static gint
free_transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
free_transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
PilotRecord *remote,
gpointer data)
{
g_print ("entering free_transmit\n");
return 1;
}
static gint
delete_all (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
delete_all (GnomePilotConduitStandardAbs *conduit,
gpointer data)
{
g_print ("entering delete_all\n");
return 1;
}
static PilotRecord *
transmit (GnomePilotConduitStandardAbs *pilot_conduit_standard_abs,
LocalRecord *local,
transmit (GnomePilotConduitStandardAbs *conduit,
CalLocalRecord *local,
gpointer data)
{
g_print ("entering transmit\n");

View File

@ -9,6 +9,19 @@
#include <pi-datebook.h>
#include <gnome.h>
#define CALLOCALRECORD(s) ((CalLocalRecord*)(s))
typedef struct _CalLocalRecord CalLocalRecord;
struct _CalLocalRecord {
/* The stuff from gnome-pilot-conduit-standard-abs.h */
LocalRecord local;
/* The Pilot ID of the record */
recordid_t ID;
/* The corresponding iCal object */
iCalObject *ical;
/* used by iterations, points to a GList element */
GList *list_ptr;
};
typedef struct _ConduitCfg ConduitCfg;

View File

@ -45,7 +45,7 @@ gnomecal_from_servant (PortableServer_Servant servant)
static CORBA_char *
cal_repo_get_object (PortableServer_Servant servant,
CORBA_char *uid,
const CORBA_char *uid,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -131,7 +131,7 @@ cal_repo_get_id_from_pilot_id (PortableServer_Servant servant,
static void
cal_repo_delete_object (PortableServer_Servant servant,
CORBA_char *uid,
const CORBA_char *uid,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -153,8 +153,8 @@ cal_repo_delete_object (PortableServer_Servant servant,
static void
cal_repo_update_object (PortableServer_Servant servant,
CORBA_char *uid,
CORBA_char *vcalendar_object,
const CORBA_char *uid,
const CORBA_char *vcalendar_object,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -173,9 +173,9 @@ cal_repo_update_object (PortableServer_Servant servant,
static void
cal_repo_update_pilot_id (PortableServer_Servant servant,
CORBA_char *uid,
CORBA_long pilot_id,
CORBA_long pilot_status,
const CORBA_char *uid,
const CORBA_long pilot_id,
const CORBA_long pilot_status,
CORBA_Environment *ev)
{
GnomeCalendar *gcal = gnomecal_from_servant (servant);
@ -207,7 +207,10 @@ cal_repo_get_objects (PortableServer_Servant servant,
GList *l;
char *str;
CORBA_char *res;
int items_dbg=0;
g_message("in cal_repo_get_objects");
dirty_cal = calendar_new ("Temporal");
for (l = gcal->cal->events; l; l = l->next){
@ -216,12 +219,16 @@ cal_repo_get_objects (PortableServer_Servant servant,
obj = ical_object_duplicate (l->data);
calendar_add_object (dirty_cal, obj);
items_dbg++;
}
str = calendar_get_as_vcal_string (dirty_cal);
res = CORBA_string_dup (str);
g_free (str);
calendar_destroy (dirty_cal);
g_message("added %d items to return value",items_dbg);
return res;
}

View File

@ -1,7 +1,7 @@
noinst_LIBRARIES = libversit.a
noinst_LTLIBRARIES = libversit.la
libversit_a_SOURCES = \
libversit_la_SOURCES = \
vcc.y \
vcc.h \
vobject.c \