+2004-03-01 Rodrigo Moya <rodrigo@ximian.com>
+
+ * idl/Evolution-DataServer-Calendar.idl: added new arguments to the
+ notifyObjectsSent method for backends to return the list of users and
+ events for which it operated.
+
+ * libedata-cal/e-data-cal.[ch] (e_data_cal_notify_objects_sent): added
+ new argument and call the listener's notifyObjectsSent method with
+ a GNOME_Evolution_Calendar_UserList.
+
+ * libedata-cal/e-cal-backend-sync.[ch] (e_cal_backend_sync_send_objects,
+ _e_cal_backend_send_objects): added new arguments.
+
+ * backends/file/e-cal-backend-file.c (e_cal_backend_file_send_objects):
+ * backends/http/e-cal-backend-http.c (e_cal_backend_http_send_objects):
+ * backends/contacts/e-cal-backend-contacts.c
+ (e_cal_backend_contacts_send_objects):
+ * backends/groupwise/e-cal-backend-groupwise.c
+ (e_cal_backend_groupwise_send_objects): adapted to changes in
+ ECalBackend/ECalBackendSync API.
+
+ * backends/file/e-cal-backend-file.c (e_cal_backend_file_receive_objects,
+ e_cal_backend_file_send_objects): removed wrong return statement.
+
+ * libecal/e-cal-marshal.list: added new marshaller.
+
+ * libecal/e-cal.[ch] (e_cal_send_objects): get the user list from the
+ operation's result.
+ (cal_objects_sent_cb): added the new arguments and copy them to the
+ operation's result.
+
+ * libecal/e-cal-listener.[ch]: added new arguments to "send_objects"
+ signal.
+ (impl_notifyObjectsSent): added UserList argument to CORBA method, and
+ convert the CORBA user list to a GList to be passed to the signal
+ handlers.
+ (e_cal_listener_class_init): added new arguments to "send_objects"
+ signal.
+
2004-02-26 JP Rosevear <jpr@ximian.com>
* tests/ecal/test-ecal.c: make EXPECTED a macro so it compiles
static ECalBackendSyncStatus
e_cal_backend_contacts_send_objects (ECalBackendSync *backend, EDataCal *cal,
- const char *calobj)
+ const char *calobj, GList **users, char **modified_calobj)
{
+ *users = NULL;
+ *modified_calobj = NULL;
/* TODO: Investigate this */
return GNOME_Evolution_Calendar_Success;
}
}
static ECalBackendSyncStatus
-e_cal_backend_file_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj)
+e_cal_backend_file_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
+ char **modified_calobj)
{
- /* FIXME Put in a util routine to send stuff via email */
-
+ *users = NULL;
+ *modified_calobj = NULL;
+
return GNOME_Evolution_Calendar_Success;
}
}
static ECalBackendSyncStatus
-e_cal_backend_groupwise_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj)
+e_cal_backend_groupwise_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
+ char **modified_calobj)
{
+ /* FIXME */
+ *users = NULL;
+ *modified_calobj = NULL;
return GNOME_Evolution_Calendar_OtherError;
}
}
static ECalBackendSyncStatus
-e_cal_backend_http_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj)
+e_cal_backend_http_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
+ char **modified_calobj)
{
ECalBackendHttp *cbhttp;
ECalBackendHttpPrivate *priv;
cbhttp = E_CAL_BACKEND_HTTP (backend);
priv = cbhttp->priv;
+ *users = NULL;
+ *modified_calobj = NULL;
+
return GNOME_Evolution_Calendar_PermissionDenied;
}
oneway void notifyAlarmDiscarded (in CallStatus status);
oneway void notifyObjectsReceived (in CallStatus status);
- oneway void notifyObjectsSent (in CallStatus status);
+ oneway void notifyObjectsSent (in CallStatus status, in UserList users, in CalObj calobj);
oneway void notifyDefaultObjectRequested (in CallStatus status, in CalObj object);
oneway void notifyObjectRequested (in CallStatus status, in CalObj object);
static void
impl_notifyObjectsSent (PortableServer_Servant servant,
GNOME_Evolution_Calendar_CallStatus status,
+ GNOME_Evolution_Calendar_UserList *user_list,
+ const CORBA_char *modified_calobj,
CORBA_Environment *ev)
{
ECalListener *listener;
ECalListenerPrivate *priv;
-
+ int i;
+ icalcomponent *icalcomp = NULL;
+ GList *users = NULL;
+
listener = E_CAL_LISTENER (bonobo_object_from_servant (servant));
priv = listener->priv;
if (!priv->notify)
return;
- g_signal_emit (G_OBJECT (listener), signals[SEND_OBJECTS], 0, convert_status (status));
+ for (i = 0; i < user_list->_length; i++)
+ users = g_list_append (users, g_strdup (user_list->_buffer[i]));
+
+ icalcomp = icalparser_parse_string (modified_calobj);
+
+ g_signal_emit (G_OBJECT (listener), signals[SEND_OBJECTS], 0, convert_status (status), users, icalcomp);
+
+ g_list_foreach (users, (GFunc) g_free, NULL);
+ g_list_free (users);
+ icalcomponent_free (icalcomp);
}
static void
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ECalListenerClass, send_objects),
NULL, NULL,
- e_cal_marshal_VOID__INT,
- G_TYPE_NONE, 1, G_TYPE_INT);
+ e_cal_marshal_VOID__INT_POINTER_POINTER,
+ G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_POINTER);
signals[DEFAULT_OBJECT] =
g_signal_new ("default_object",
G_TYPE_FROM_CLASS (klass),
void (*discard_alarm) (ECalListener *listener, ECalendarStatus status);
void (*receive_objects) (ECalListener *listener, ECalendarStatus status);
- void (*send_objects) (ECalListener *listener, ECalendarStatus status);
+ void (*send_objects) (ECalListener *listener, ECalendarStatus status, GList *users, icalcomponent *modified_icalcomp);
void (*default_object) (ECalListener *listener, ECalendarStatus status, const char *object);
void (*object) (ECalListener *listener, ECalendarStatus status, const char *object);
NONE:INT,STRING
NONE:INT,BOOL
NONE:INT,POINTER
+NONE:INT,POINTER,POINTER
NONE:STRING,INT
NONE:INT,INT
NONE:ENUM,ENUM
GList *list;
gboolean bool;
char *string;
+ icalcomponent *icalcomp;
ECalView *query;
ECalViewListener *listener;
}
static void
-cal_objects_sent_cb (ECalListener *listener, ECalendarStatus status, gpointer data)
+cal_objects_sent_cb (ECalListener *listener, ECalendarStatus status, GList *users, icalcomponent *modified_icalcomp, gpointer data)
{
ECal *ecal = data;
ECalendarOp *op;
g_mutex_lock (op->mutex);
op->status = status;
+ op->list = g_list_copy (users);
+ if (modified_icalcomp)
+ op->icalcomp = icalcomponent_new_clone (modified_icalcomp);
+ else
+ op->icalcomp = NULL;
g_cond_signal (op->cond);
}
gboolean
-e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GError **error)
+e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomponent **modified_icalcomp, GError **error)
{
ECalPrivate *priv;
CORBA_Environment ev;
g_cond_wait (our_op->cond, our_op->mutex);
status = our_op->status;
+ *users = our_op->list;
+ *modified_icalcomp = our_op->icalcomp;
e_calendar_remove_op (ecal, our_op);
g_mutex_unlock (our_op->mutex);
gboolean e_cal_discard_alarm (ECal *ecal, ECalComponent *comp, const char *auid, GError **error);
gboolean e_cal_receive_objects (ECal *ecal, icalcomponent *icalcomp, GError **error);
-gboolean e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GError **error);
+gboolean e_cal_send_objects (ECal *ecal, icalcomponent *icalcomp, GList **users, icalcomponent **modified_icalcomp, GError **error);
gboolean e_cal_get_timezone (ECal *ecal, const char *tzid, icaltimezone **zone, GError **error);
gboolean e_cal_add_timezone (ECal *ecal, icaltimezone *izone, GError **error);
}
ECalBackendSyncStatus
-e_cal_backend_sync_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj)
+e_cal_backend_sync_send_objects (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
+ char **modified_calobj)
{
g_return_val_if_fail (backend && E_IS_CAL_BACKEND_SYNC (backend), GNOME_Evolution_Calendar_OtherError);
g_assert (E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync);
- return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync) (backend, cal, calobj);
+ return (* E_CAL_BACKEND_SYNC_GET_CLASS (backend)->send_objects_sync) (backend, cal, calobj, users, modified_calobj);
}
ECalBackendSyncStatus
_e_cal_backend_send_objects (ECalBackend *backend, EDataCal *cal, const char *calobj)
{
ECalBackendSyncStatus status;
+ GList *users = NULL;
+ char *modified_calobj = NULL;
- status = e_cal_backend_sync_send_objects (E_CAL_BACKEND_SYNC (backend), cal, calobj);
+ status = e_cal_backend_sync_send_objects (E_CAL_BACKEND_SYNC (backend), cal, calobj, &users, &modified_calobj);
+ e_data_cal_notify_objects_sent (cal, status, users, modified_calobj);
- e_data_cal_notify_objects_sent (cal, status);
+ g_list_foreach (users, (GFunc) g_free, NULL);
+ g_list_free (users);
+ g_free (modified_calobj);
}
static void
ECalBackendSyncStatus (*discard_alarm_sync) (ECalBackendSync *backend, EDataCal *cal, const char *uid, const char *auid);
ECalBackendSyncStatus (*receive_objects_sync) (ECalBackendSync *backend, EDataCal *cal, const char *calobj);
- ECalBackendSyncStatus (*send_objects_sync) (ECalBackendSync *backend, EDataCal *cal, const char *calobj);
+ ECalBackendSyncStatus (*send_objects_sync) (ECalBackendSync *backend, EDataCal *cal, const char *calobj, GList **users,
+ char **modified_calobj);
ECalBackendSyncStatus (*get_default_object_sync) (ECalBackendSync *backend, EDataCal *cal, char **object);
ECalBackendSyncStatus (*get_object_sync) (ECalBackendSync *backend, EDataCal *cal, const char *uid, const char *rid, char **object);
EDataCal *cal,
const char *calobj);
ECalBackendSyncStatus e_cal_backend_sync_send_objects (ECalBackendSync *backend,
- EDataCal *cal,
- const char *calobj);
+ EDataCal *cal,
+ const char *calobj,
+ GList **users,
+ char **modified_calobj);
ECalBackendSyncStatus e_cal_backend_sync_get_default_object (ECalBackendSync *backend,
EDataCal *cal,
char **object);
g_return_if_fail (calobj != NULL);
g_assert (CLASS (backend)->receive_objects != NULL);
- return (* CLASS (backend)->receive_objects) (backend, cal, calobj);
+ (* CLASS (backend)->receive_objects) (backend, cal, calobj);
}
void
g_return_if_fail (calobj != NULL);
g_assert (CLASS (backend)->send_objects != NULL);
- return (* CLASS (backend)->send_objects) (backend, cal, calobj);
+ (* CLASS (backend)->send_objects) (backend, cal, calobj);
}
/**
}
void
-e_data_cal_notify_objects_sent (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status)
+e_data_cal_notify_objects_sent (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status, GList *users, const char *calobj)
{
EDataCalPrivate *priv;
CORBA_Environment ev;
+ GNOME_Evolution_Calendar_UserList *corba_users;
g_return_if_fail (cal != NULL);
g_return_if_fail (E_IS_DATA_CAL (cal));
priv = cal->priv;
g_return_if_fail (priv->listener != CORBA_OBJECT_NIL);
+ corba_users = GNOME_Evolution_Calendar_UserList__alloc ();
+ corba_users->_length = g_list_length (users);
+ if (users) {
+ GList *l;
+ int n;
+
+ corba_users->_buffer = CORBA_sequence_GNOME_Evolution_Calendar_User_allocbuf (corba_users->_length);
+ for (l = users, n = 0; l != NULL; l = l->next, n++)
+ corba_users->_buffer[n] = CORBA_string_dup (l->data);
+ }
+
CORBA_exception_init (&ev);
- GNOME_Evolution_Calendar_CalListener_notifyObjectsSent (priv->listener, status, &ev);
+ GNOME_Evolution_Calendar_CalListener_notifyObjectsSent (priv->listener, status, corba_users, calobj, &ev);
if (BONOBO_EX (&ev))
g_message (G_STRLOC ": could not notify the listener of objects sent");
- CORBA_exception_free (&ev);
+ CORBA_exception_free (&ev);
+ CORBA_free (corba_users);
}
void
void e_data_cal_notify_alarm_discarded (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status);
void e_data_cal_notify_objects_received (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status);
-void e_data_cal_notify_objects_sent (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status);
+void e_data_cal_notify_objects_sent (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status, GList *users,
+ const char *calobj);
void e_data_cal_notify_default_object (EDataCal *cal, GNOME_Evolution_Calendar_CallStatus status,
const char *object);