aboutsummaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2010-07-09 20:29:51 +0800
committerMilan Crha <mcrha@redhat.com>2010-07-09 20:29:51 +0800
commit03d626856b294bc98919ac244e04e9b8821a681d (patch)
tree62433e158f1791aa6b9222ecbe05d164c4703f6c /calendar
parent6d4ce8571ff62a3e489999d2feeac1691e06c59a (diff)
downloadgsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar.gz
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar.bz2
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar.lz
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar.xz
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.tar.zst
gsoc2013-evolution-03d626856b294bc98919ac244e04e9b8821a681d.zip
Bug #623204 - Be able to report detailed errors from backends
Diffstat (limited to 'calendar')
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.c8
-rw-r--r--calendar/gui/alarm-notify/alarm-queue.c8
-rw-r--r--calendar/gui/dialogs/delete-error.c30
-rw-r--r--calendar/gui/dialogs/delete-error.h2
-rw-r--r--calendar/gui/e-cal-model.c31
-rw-r--r--calendar/gui/e-cal-model.h6
-rw-r--r--calendar/gui/e-itip-control.c12
-rw-r--r--calendar/gui/e-memo-table.c11
-rw-r--r--calendar/gui/e-task-table.c11
-rw-r--r--calendar/gui/gnome-cal.c23
-rw-r--r--calendar/importers/icalendar-importer.c6
11 files changed, 92 insertions, 56 deletions
diff --git a/calendar/gui/alarm-notify/alarm-notify.c b/calendar/gui/alarm-notify/alarm-notify.c
index 7ad414c61c..df6a8fc4f7 100644
--- a/calendar/gui/alarm-notify/alarm-notify.c
+++ b/calendar/gui/alarm-notify/alarm-notify.c
@@ -308,16 +308,16 @@ alarm_notify_new (void)
}
static void
-cal_opened_cb (ECal *client, ECalendarStatus status, gpointer user_data)
+cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
{
AlarmNotifyPrivate *priv;
AlarmNotify *an = ALARM_NOTIFY (user_data);
priv = an->priv;
- d (printf("%s:%d (cal_opened_cb) %s - Calendar Status %d\n", __FILE__, __LINE__, e_cal_get_uri (client), status));
+ d (printf("%s:%d (cal_opened_cb) %s - Calendar Status %d%s%s%s\n", __FILE__, __LINE__, e_cal_get_uri (client), error ? error->code : 0, error ? " (" : "", error ? error->message : "", error ? ")" : ""));
- if (status == E_CALENDAR_STATUS_OK)
+ if (!error)
alarm_queue_add_client (client);
else {
g_hash_table_remove (priv->uri_client_hash[e_cal_get_source_type (client)],
@@ -389,7 +389,7 @@ alarm_notify_add_calendar (AlarmNotify *an, ECalSourceType source_type, ESource
if (client) {
d (printf("%s:%d (alarm_notify_add_calendar) %s - Calendar Open Async... %p\n", __FILE__, __LINE__, str_uri, client));
g_hash_table_insert (priv->uri_client_hash[source_type], g_strdup (str_uri), client);
- g_signal_connect (G_OBJECT (client), "cal_opened", G_CALLBACK (cal_opened_cb), an);
+ g_signal_connect (G_OBJECT (client), "cal_opened_ex", G_CALLBACK (cal_opened_cb), an);
/* to resolve floating DATE-TIME properly */
e_cal_set_default_timezone (client, config_data_get_timezone (), NULL);
e_cal_open_async (client, FALSE);
diff --git a/calendar/gui/alarm-notify/alarm-queue.c b/calendar/gui/alarm-notify/alarm-queue.c
index f7ef6fdcf4..426d69ec55 100644
--- a/calendar/gui/alarm-notify/alarm-queue.c
+++ b/calendar/gui/alarm-notify/alarm-queue.c
@@ -597,14 +597,14 @@ load_alarms_for_today (ClientAlarms *ca)
/* Called when a calendar client finished loading; we load its alarms */
static void
-cal_opened_cb (ECal *client, ECalendarStatus status, gpointer data)
+cal_opened_cb (ECal *client, const GError *error, gpointer data)
{
ClientAlarms *ca;
ca = data;
- d(printf("%s:%d (cal_opened_cb) - Opened Calendar %p (Status %d)\n",__FILE__, __LINE__, client, status==E_CALENDAR_STATUS_OK));
- if (status != E_CALENDAR_STATUS_OK)
+ d(printf("%s:%d (cal_opened_cb) - Opened Calendar %p (Status %d%s%s%s)\n",__FILE__, __LINE__, client, error ? error->code : 0, error ? " (" : "", error ? error->message : "", error ? ")" : ""));
+ if (error)
return;
load_alarms_for_today (ca);
@@ -1999,7 +1999,7 @@ alarm_queue_add_async (struct _alarm_client_msg *msg)
if (e_cal_get_load_state (client) == E_CAL_LOAD_LOADED) {
load_alarms_for_today (ca);
} else {
- g_signal_connect (client, "cal_opened",
+ g_signal_connect (client, "cal_opened_ex",
G_CALLBACK (cal_opened_cb),
ca);
}
diff --git a/calendar/gui/dialogs/delete-error.c b/calendar/gui/dialogs/delete-error.c
index c312e16ada..9b9d22ae4c 100644
--- a/calendar/gui/dialogs/delete-error.c
+++ b/calendar/gui/dialogs/delete-error.c
@@ -39,7 +39,7 @@
*
**/
void
-delete_error_dialog (GError *error, ECalComponentVType vtype)
+delete_error_dialog (const GError *error, ECalComponentVType vtype)
{
GtkWidget *dialog;
const gchar *str;
@@ -49,19 +49,23 @@ delete_error_dialog (GError *error, ECalComponentVType vtype)
return;
switch (error->code) {
- case E_CALENDAR_STATUS_CORBA_EXCEPTION:
+ case E_CALENDAR_STATUS_DBUS_EXCEPTION:
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
- str = _("The event could not be deleted due to a corba error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The event could not be deleted due to a dbus error: %s");
break;
case E_CAL_COMPONENT_TODO:
- str = _("The task could not be deleted due to a corba error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The task could not be deleted due to a dbus error: %s");
break;
case E_CAL_COMPONENT_JOURNAL:
- str = _("The memo could not be deleted due to a corba error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The memo could not be deleted due to a dbus error: %s");
break;
default:
- str = _("The item could not be deleted due to a corba error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The item could not be deleted due to a dbus error: %s");
break;
}
break;
@@ -84,16 +88,20 @@ delete_error_dialog (GError *error, ECalComponentVType vtype)
case E_CALENDAR_STATUS_OTHER_ERROR:
switch (vtype) {
case E_CAL_COMPONENT_EVENT:
- str = _("The event could not be deleted due to an error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The event could not be deleted due to an error: %s");
break;
case E_CAL_COMPONENT_TODO:
- str = _("The task could not be deleted due to an error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The task could not be deleted due to an error: %s");
break;
case E_CAL_COMPONENT_JOURNAL:
- str = _("The memo could not be deleted due to an error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The memo could not be deleted due to an error: %s");
break;
default:
- str = _("The item could not be deleted due to an error");
+ /* Translators: The '%s' is replaced with a detailed error message */
+ str = _("The item could not be deleted due to an error: %s");
break;
}
break;
@@ -106,7 +114,7 @@ delete_error_dialog (GError *error, ECalComponentVType vtype)
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK, "%s", str);
+ GTK_BUTTONS_OK, str, error->message);
if (vtype == E_CAL_COMPONENT_EVENT)
icon_name = "x-office-calendar";
else if (vtype == E_CAL_COMPONENT_TODO)
diff --git a/calendar/gui/dialogs/delete-error.h b/calendar/gui/dialogs/delete-error.h
index dab620541f..0353d188f2 100644
--- a/calendar/gui/dialogs/delete-error.h
+++ b/calendar/gui/dialogs/delete-error.h
@@ -30,6 +30,6 @@
#include <libecal/e-cal.h>
#include <libecal/e-cal-component.h>
-void delete_error_dialog (GError *error, ECalComponentVType vtype);
+void delete_error_dialog (const GError *error, ECalComponentVType vtype);
#endif
diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c
index e745d33810..d04c87ad93 100644
--- a/calendar/gui/e-cal-model.c
+++ b/calendar/gui/e-cal-model.c
@@ -136,7 +136,10 @@ enum {
ROW_APPENDED,
COMPS_DELETED,
CAL_VIEW_PROGRESS,
+ #ifndef E_CAL_DISABLE_DEPRECATED
CAL_VIEW_DONE,
+ #endif
+ CAL_VIEW_COMPLETE,
STATUS_MESSAGE,
TIMEZONE_CHANGED,
LAST_SIGNAL
@@ -394,6 +397,8 @@ e_cal_model_class_init (ECalModelClass *class)
NULL, NULL,
e_marshal_VOID__STRING_INT_INT,
G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
+
+ #ifndef E_CAL_DISABLE_DEPRECATED
signals[CAL_VIEW_DONE] =
g_signal_new ("cal_view_done",
G_TYPE_FROM_CLASS (class),
@@ -402,6 +407,16 @@ e_cal_model_class_init (ECalModelClass *class)
NULL, NULL,
e_marshal_VOID__INT_INT,
G_TYPE_NONE, 2, G_TYPE_INT, G_TYPE_INT);
+ #endif
+
+ signals[CAL_VIEW_COMPLETE] =
+ g_signal_new ("cal_view_complete",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ECalModelClass, cal_view_complete),
+ NULL, NULL,
+ e_marshal_VOID__INT_STRING_INT,
+ G_TYPE_NONE, 3, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT);
signals[STATUS_MESSAGE] = g_signal_new (
"status-message",
@@ -2003,16 +2018,20 @@ e_cal_view_progress_cb (ECalView *query, const gchar *message, gint percent, gpo
}
static void
-e_cal_view_done_cb (ECalView *query, ECalendarStatus status, gpointer user_data)
+e_cal_view_complete_cb (ECalView *query, ECalendarStatus status, const gchar *error_msg, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
ECal *client = e_cal_view_get_client (query);
g_return_if_fail (E_IS_CAL_MODEL (model));
+ #ifndef E_CAL_DISABLE_DEPRECATED
/* emit the signal on the model and let the view catch it to display */
g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_DONE], 0, status,
e_cal_get_source_type (client));
+ #endif
+ g_signal_emit (G_OBJECT (model), signals[CAL_VIEW_COMPLETE], 0, status, error_msg,
+ e_cal_get_source_type (client));
}
static void
@@ -2062,7 +2081,7 @@ try_again:
g_signal_connect (client_data->query, "objects_modified", G_CALLBACK (e_cal_view_objects_modified_cb), model);
g_signal_connect (client_data->query, "objects_removed", G_CALLBACK (e_cal_view_objects_removed_cb), model);
g_signal_connect (client_data->query, "view_progress", G_CALLBACK (e_cal_view_progress_cb), model);
- g_signal_connect (client_data->query, "view_done", G_CALLBACK (e_cal_view_done_cb), model);
+ g_signal_connect (client_data->query, "view_complete", G_CALLBACK (e_cal_view_complete_cb), model);
e_cal_view_start (client_data->query);
}
@@ -2086,17 +2105,17 @@ backend_died_cb (ECal *client, gpointer user_data)
}
static void
-cal_opened_cb (ECal *client, ECalendarStatus status, gpointer user_data)
+cal_opened_cb (ECal *client, const GError *error, gpointer user_data)
{
ECalModel *model = (ECalModel *) user_data;
ECalModelClient *client_data;
- if (status == E_CALENDAR_STATUS_BUSY) {
+ if (g_error_matches (error, E_CALENDAR_ERROR, E_CALENDAR_STATUS_BUSY)) {
e_cal_open_async (client, FALSE);
return;
}
- if (status != E_CALENDAR_STATUS_OK) {
+ if (error) {
e_cal_model_remove_client (model, client);
e_cal_model_update_status_message (model, NULL, -1.0);
return;
@@ -2159,7 +2178,7 @@ add_new_client (ECalModel *model, ECal *client, gboolean do_query)
e_cal_set_default_timezone (client, e_cal_model_get_timezone (model), NULL);
- g_signal_connect (client, "cal_opened", G_CALLBACK (cal_opened_cb), model);
+ g_signal_connect (client, "cal_opened_ex", G_CALLBACK (cal_opened_cb), model);
e_cal_open_async (client, TRUE);
}
diff --git a/calendar/gui/e-cal-model.h b/calendar/gui/e-cal-model.h
index 29c3335310..2750006f06 100644
--- a/calendar/gui/e-cal-model.h
+++ b/calendar/gui/e-cal-model.h
@@ -160,9 +160,15 @@ struct _ECalModelClass {
const gchar *message,
gint progress,
ECalSourceType type);
+ #ifndef E_CAL_DISABLE_DEPRECATED
void (*cal_view_done) (ECalModel *model,
ECalendarStatus status,
ECalSourceType type);
+ #endif
+ void (*cal_view_complete) (ECalModel *model,
+ ECalendarStatus status,
+ const gchar *error_msg,
+ ECalSourceType type);
void (*status_message) (ECalModel *model,
const gchar *message,
gdouble percent);
diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c
index fed200d34c..dd9516f7bf 100644
--- a/calendar/gui/e-itip-control.c
+++ b/calendar/gui/e-itip-control.c
@@ -142,7 +142,7 @@ set_ok_sens (EItipControl *itip)
}
static void
-cal_opened_cb (ECal *ecal, ECalendarStatus status, gpointer data)
+cal_opened_cb (ECal *ecal, const GError *error, gpointer data)
{
EItipControl *itip = data;
EItipControlPrivate *priv;
@@ -156,7 +156,7 @@ cal_opened_cb (ECal *ecal, ECalendarStatus status, gpointer data)
g_signal_handlers_disconnect_matched (ecal, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, cal_opened_cb, NULL);
- if (status != E_CALENDAR_STATUS_OK) {
+ if (error) {
g_hash_table_remove (priv->ecals[source_type], e_source_peek_uid (source));
return;
@@ -166,7 +166,7 @@ cal_opened_cb (ECal *ecal, ECalendarStatus status, gpointer data)
set_ok_sens (itip);
}
-typedef void (* EItipControlOpenFunc) (ECal *ecal, ECalendarStatus status, gpointer data);
+typedef void (* EItipControlOpenFunc) (ECal *ecal, const GError *error, gpointer data);
static ECal *
start_calendar_server (EItipControl *itip, ESource *source, ECalSourceType type, EItipControlOpenFunc func, gpointer data)
@@ -189,7 +189,7 @@ start_calendar_server (EItipControl *itip, ESource *source, ECalSourceType type,
zone = calendar_config_get_icaltimezone ();
e_cal_set_default_timezone (ecal, zone, NULL);
- g_signal_connect (G_OBJECT (ecal), "cal_opened", G_CALLBACK (func), data);
+ g_signal_connect (G_OBJECT (ecal), "cal_opened_ex", G_CALLBACK (func), data);
g_hash_table_insert (priv->ecals[type], g_strdup (e_source_peek_uid (source)), ecal);
@@ -239,7 +239,7 @@ source_changed_cb (ESourceComboBox *escb, EItipControl *itip)
}
static void
-find_cal_opened_cb (ECal *ecal, ECalendarStatus status, gpointer data)
+find_cal_opened_cb (ECal *ecal, const GError *error, gpointer data)
{
EShell *shell;
EShellSettings *shell_settings;
@@ -262,7 +262,7 @@ find_cal_opened_cb (ECal *ecal, ECalendarStatus status, gpointer data)
g_signal_handlers_disconnect_matched (ecal, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, find_cal_opened_cb, NULL);
- if (status != E_CALENDAR_STATUS_OK) {
+ if (error) {
g_hash_table_remove (priv->ecals[source_type], e_source_peek_uid (source));
goto cleanup;
diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c
index a078fd140f..9888ec80d4 100644
--- a/calendar/gui/e-memo-table.c
+++ b/calendar/gui/e-memo-table.c
@@ -168,9 +168,10 @@ memo_table_model_cal_view_progress_cb (EMemoTable *memo_table,
}
static void
-memo_table_model_cal_view_done_cb (EMemoTable *memo_table,
- ECalendarStatus status,
- ECalSourceType type)
+memo_table_model_cal_view_complete_cb ( EMemoTable *memo_table,
+ ECalendarStatus status,
+ const gchar *error_msg,
+ ECalSourceType type)
{
memo_table_emit_status_message (memo_table, NULL, -1.0);
}
@@ -216,8 +217,8 @@ memo_table_set_model (EMemoTable *memo_table,
memo_table);
g_signal_connect_swapped (
- model, "cal-view-done",
- G_CALLBACK (memo_table_model_cal_view_done_cb),
+ model, "cal-view-complete",
+ G_CALLBACK (memo_table_model_cal_view_complete_cb),
memo_table);
}
diff --git a/calendar/gui/e-task-table.c b/calendar/gui/e-task-table.c
index 98d422aa16..f792ad3c66 100644
--- a/calendar/gui/e-task-table.c
+++ b/calendar/gui/e-task-table.c
@@ -246,9 +246,10 @@ task_table_model_cal_view_progress_cb (ETaskTable *task_table,
}
static void
-task_table_model_cal_view_done_cb (ETaskTable *task_table,
- ECalendarStatus status,
- ECalSourceType type)
+task_table_model_cal_view_complete_cb ( ETaskTable *task_table,
+ ECalendarStatus status,
+ const gchar *error_msg,
+ ECalSourceType type)
{
task_table_emit_status_message (task_table, NULL, -1.0);
}
@@ -294,8 +295,8 @@ task_table_set_model (ETaskTable *task_table,
task_table);
g_signal_connect_swapped (
- model, "cal-view-done",
- G_CALLBACK (task_table_model_cal_view_done_cb),
+ model, "cal-view-complete",
+ G_CALLBACK (task_table_model_cal_view_complete_cb),
task_table);
}
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 38121c095c..5ecbf0a157 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -305,10 +305,11 @@ view_progress_cb (ECalModel *model,
}
static void
-view_done_cb (ECalModel *model,
- ECalendarStatus status,
- ECalSourceType type,
- GnomeCalendar *gcal)
+view_complete_cb (ECalModel *model,
+ ECalendarStatus status,
+ const gchar *error_msg,
+ ECalSourceType type,
+ GnomeCalendar *gcal)
{
gcal_update_status_message (gcal, NULL, -1);
}
@@ -419,8 +420,8 @@ gnome_calendar_constructed (GObject *object)
G_CALLBACK (view_progress_cb), gcal);
g_signal_connect (
- model, "cal-view-done",
- G_CALLBACK (view_done_cb), gcal);
+ model, "cal-view-complete",
+ G_CALLBACK (view_complete_cb), gcal);
/* Day View */
calendar_view = e_day_view_new (model);
@@ -807,11 +808,11 @@ dn_e_cal_view_objects_removed_cb (ECalView *query, GList *ids, gpointer data)
/* Callback used when the calendar query is done */
static void
-dn_e_cal_view_done_cb (ECalView *query, ECalendarStatus status, gpointer data)
+dn_e_cal_view_complete_cb (ECalView *query, ECalendarStatus status, const gchar *error_msg, gpointer data)
{
/* FIXME Better error reporting */
if (status != E_CALENDAR_STATUS_OK)
- g_warning (G_STRLOC ": Query did not successfully complete");
+ g_warning (G_STRLOC ": Query did not successfully complete, code:%d (%s)", status, error_msg ? error_msg : "Unknown error");
}
ECalendarView *
@@ -1103,8 +1104,8 @@ try_again:
G_CALLBACK (dn_e_cal_view_objects_modified_cb), gcal);
g_signal_connect (new_query, "objects_removed",
G_CALLBACK (dn_e_cal_view_objects_removed_cb), gcal);
- g_signal_connect (new_query, "view_done",
- G_CALLBACK (dn_e_cal_view_done_cb), gcal);
+ g_signal_connect (new_query, "view_complete",
+ G_CALLBACK (dn_e_cal_view_complete_cb), gcal);
g_mutex_lock (priv->dn_query_lock);
priv->dn_queries = g_list_append (priv->dn_queries, new_query);
@@ -1487,7 +1488,7 @@ gnome_calendar_do_dispose (GObject *object)
g_signal_handlers_disconnect_by_func (
priv->model, view_progress_cb, gcal);
g_signal_handlers_disconnect_by_func (
- priv->model, view_done_cb, gcal);
+ priv->model, view_complete_cb, gcal);
g_object_unref (priv->model);
priv->model = NULL;
}
diff --git a/calendar/importers/icalendar-importer.c b/calendar/importers/icalendar-importer.c
index 77884da945..38db4cad92 100644
--- a/calendar/importers/icalendar-importer.c
+++ b/calendar/importers/icalendar-importer.c
@@ -319,9 +319,9 @@ ivcal_import_items(gpointer d)
}
static void
-ivcal_opened(ECal *ecal, ECalendarStatus status, ICalImporter *ici)
+ivcal_opened(ECal *ecal, const GError *error, ICalImporter *ici)
{
- if (!ici->cancelled && status == E_CALENDAR_STATUS_OK) {
+ if (!ici->cancelled && !error) {
e_import_status(ici->import, ici->target, _("Importing..."), 0);
ici->idle_id = g_idle_add(ivcal_import_items, ici);
} else
@@ -348,7 +348,7 @@ ivcal_import(EImport *ei, EImportTarget *target, icalcomponent *icalcomp)
ici->client = client;
ici->source_type = type;
e_import_status(ei, target, _("Opening calendar"), 0);
- g_signal_connect(client, "cal-opened", G_CALLBACK(ivcal_opened), ici);
+ g_signal_connect(client, "cal-opened-ex", G_CALLBACK(ivcal_opened), ici);
e_cal_open_async(client, TRUE);
return;
} else {