manager: update GcalManager::remove_event API
Move GcalManager::remove_event API to new style using ESource and ECalComponent instead of uuid Update GcalWindow uses of this API
This commit is contained in:
+60
-59
@@ -99,6 +99,10 @@ static void on_event_updated (GObject *sour
|
|||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
|
|
||||||
|
static void on_event_removed (GObject *source_object,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer user_data);
|
||||||
|
|
||||||
static void remove_source (GcalManager *manager,
|
static void remove_source (GcalManager *manager,
|
||||||
ESource *source);
|
ESource *source);
|
||||||
|
|
||||||
@@ -106,10 +110,6 @@ static void remove_source (GcalManager *mana
|
|||||||
|
|
||||||
static void gcal_manager_finalize (GObject *object);
|
static void gcal_manager_finalize (GObject *object);
|
||||||
|
|
||||||
static void gcal_manager_on_event_removed (GObject *source_object,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer user_data);
|
|
||||||
|
|
||||||
static void gcal_manager_on_event_created (GObject *source_object,
|
static void gcal_manager_on_event_created (GObject *source_object,
|
||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
gpointer user_data);
|
gpointer user_data);
|
||||||
@@ -337,6 +337,37 @@ on_event_updated (GObject *source_object,
|
|||||||
g_object_unref (E_CAL_COMPONENT (user_data));
|
g_object_unref (E_CAL_COMPONENT (user_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* on_event_removed:
|
||||||
|
* @source_object: {@link ECalClient} source
|
||||||
|
* @result: result of the operation
|
||||||
|
* @user_data: an {@link ECalComponent}
|
||||||
|
*
|
||||||
|
* Called when an component is removed. Currently, it only checks for
|
||||||
|
* error, but a more sophisticated implementation will come in no time.*
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
static void
|
||||||
|
on_event_removed (GObject *source_object,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
ECalClient *client;
|
||||||
|
GError *error;
|
||||||
|
|
||||||
|
client = E_CAL_CLIENT (source_object);
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
if (!e_cal_client_remove_object_finish (client, result, &error))
|
||||||
|
{
|
||||||
|
/* FIXME: Notify the user somehow */
|
||||||
|
g_warning ("Error removing event: %s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref (E_CAL_COMPONENT (user_data));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
remove_source (GcalManager *manager,
|
remove_source (GcalManager *manager,
|
||||||
ESource *source)
|
ESource *source)
|
||||||
@@ -447,35 +478,6 @@ gcal_manager_finalize (GObject *object)
|
|||||||
g_hash_table_destroy (priv->clients);
|
g_hash_table_destroy (priv->clients);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gcal_manager_on_event_removed (GObject *source_object,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
ECalClient *client;
|
|
||||||
DeleteEventData *data;
|
|
||||||
GError *error;
|
|
||||||
|
|
||||||
client = E_CAL_CLIENT (source_object);
|
|
||||||
data = (DeleteEventData*) user_data;
|
|
||||||
|
|
||||||
error = NULL;
|
|
||||||
if (e_cal_client_remove_object_finish (client, result, &error))
|
|
||||||
{
|
|
||||||
/* removing events from hash */
|
|
||||||
/* FIXME: add notification to UI */
|
|
||||||
g_debug ("Found and removed: %s", data->event_uid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//FIXME: do something when there was some error
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (data->event_uid);
|
|
||||||
g_free (data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gcal_manager_on_event_created (GObject *source_object,
|
gcal_manager_on_event_created (GObject *source_object,
|
||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
@@ -691,32 +693,6 @@ gcal_manager_is_client_writable (GcalManager *manager,
|
|||||||
return e_client_is_readonly (E_CLIENT (unit->client));
|
return e_client_is_readonly (E_CLIENT (unit->client));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gcal_manager_remove_event (GcalManager *manager,
|
|
||||||
const gchar *source_uid,
|
|
||||||
const gchar *event_uid)
|
|
||||||
{
|
|
||||||
GcalManagerPrivate *priv;
|
|
||||||
GcalManagerUnit *unit;
|
|
||||||
DeleteEventData *data;
|
|
||||||
|
|
||||||
priv = gcal_manager_get_instance_private (manager);
|
|
||||||
|
|
||||||
unit = g_hash_table_lookup (priv->clients, source_uid);
|
|
||||||
|
|
||||||
data = g_new0 (DeleteEventData, 1);
|
|
||||||
data->event_uid = g_strdup (event_uid);
|
|
||||||
data->unit = unit;
|
|
||||||
data->manager = manager;
|
|
||||||
e_cal_client_remove_object (unit->client,
|
|
||||||
event_uid,
|
|
||||||
NULL,
|
|
||||||
E_CAL_OBJ_MOD_ALL,
|
|
||||||
priv->async_ops,
|
|
||||||
gcal_manager_on_event_removed,
|
|
||||||
data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gcal_manager_create_event (GcalManager *manager,
|
gcal_manager_create_event (GcalManager *manager,
|
||||||
const gchar *source_uid,
|
const gchar *source_uid,
|
||||||
@@ -796,6 +772,31 @@ gcal_manager_update_event (GcalManager *manager,
|
|||||||
component);
|
component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gcal_manager_remove_event (GcalManager *manager,
|
||||||
|
ESource *source,
|
||||||
|
ECalComponent *component)
|
||||||
|
{
|
||||||
|
GcalManagerPrivate *priv;
|
||||||
|
GcalManagerUnit *unit;
|
||||||
|
ECalComponentId *id;
|
||||||
|
|
||||||
|
priv = gcal_manager_get_instance_private (manager);
|
||||||
|
|
||||||
|
unit = g_hash_table_lookup (priv->clients, source);
|
||||||
|
id = e_cal_component_get_id (component);
|
||||||
|
|
||||||
|
e_cal_client_remove_object (unit->client,
|
||||||
|
id->uid,
|
||||||
|
id->rid,
|
||||||
|
E_CAL_OBJ_MOD_THIS,
|
||||||
|
priv->async_ops,
|
||||||
|
on_event_removed,
|
||||||
|
component);
|
||||||
|
|
||||||
|
e_cal_component_free_id (id);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gcal_manager_move_event_to_source (GcalManager *manager,
|
gcal_manager_move_event_to_source (GcalManager *manager,
|
||||||
const gchar *source_uid,
|
const gchar *source_uid,
|
||||||
|
|||||||
+5
-4
@@ -91,10 +91,6 @@ void gcal_manager_refresh (GcalManager *manager
|
|||||||
gboolean gcal_manager_is_client_writable (GcalManager *manager,
|
gboolean gcal_manager_is_client_writable (GcalManager *manager,
|
||||||
ESource *source);
|
ESource *source);
|
||||||
|
|
||||||
void gcal_manager_remove_event (GcalManager *manager,
|
|
||||||
const gchar *source_uid,
|
|
||||||
const gchar *event_uid);
|
|
||||||
|
|
||||||
/* Create method */
|
/* Create method */
|
||||||
void gcal_manager_create_event (GcalManager *manager,
|
void gcal_manager_create_event (GcalManager *manager,
|
||||||
const gchar *source_uid,
|
const gchar *source_uid,
|
||||||
@@ -107,6 +103,11 @@ void gcal_manager_update_event (GcalManager *manager
|
|||||||
ESource *source,
|
ESource *source,
|
||||||
ECalComponent *component);
|
ECalComponent *component);
|
||||||
|
|
||||||
|
/* Remove method */
|
||||||
|
void gcal_manager_remove_event (GcalManager *manager,
|
||||||
|
ESource *source,
|
||||||
|
ECalComponent *component);
|
||||||
|
|
||||||
/* Set methods */
|
/* Set methods */
|
||||||
void gcal_manager_move_event_to_source (GcalManager *manager,
|
void gcal_manager_move_event_to_source (GcalManager *manager,
|
||||||
const gchar *source_uid,
|
const gchar *source_uid,
|
||||||
|
|||||||
+28
-18
@@ -92,9 +92,8 @@ typedef struct
|
|||||||
gboolean leaving_search_mode;
|
gboolean leaving_search_mode;
|
||||||
|
|
||||||
NewEventData *event_creation_data;
|
NewEventData *event_creation_data;
|
||||||
/* FIXME: Review to see if this are needed */
|
|
||||||
/* temp to keep the will_delete event uuid */
|
GcalEventData *event_to_delete;
|
||||||
gchar *event_to_delete;
|
|
||||||
|
|
||||||
/* temp to keep event_creation */
|
/* temp to keep event_creation */
|
||||||
gboolean open_edit_dialog;
|
gboolean open_edit_dialog;
|
||||||
@@ -764,6 +763,8 @@ edit_dialog_closed (GtkDialog *dialog,
|
|||||||
ECalComponent *component;
|
ECalComponent *component;
|
||||||
GcalView *view;
|
GcalView *view;
|
||||||
|
|
||||||
|
gchar *uuid;
|
||||||
|
|
||||||
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
||||||
|
|
||||||
gtk_widget_hide (GTK_WIDGET (dialog));
|
gtk_widget_hide (GTK_WIDGET (dialog));
|
||||||
@@ -791,13 +792,20 @@ edit_dialog_closed (GtkDialog *dialog,
|
|||||||
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->notification),
|
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->notification),
|
||||||
TRUE);
|
TRUE);
|
||||||
|
|
||||||
priv->event_to_delete =
|
/* FIXME: this will crash if the notification is still open */
|
||||||
gcal_edit_dialog_get_event_uuid (edit_dialog);
|
if (priv->event_to_delete != NULL)
|
||||||
|
g_free (priv->event_to_delete);
|
||||||
|
|
||||||
|
priv->event_to_delete = g_new0 (GcalEventData, 1);
|
||||||
|
priv->event_to_delete->source =
|
||||||
|
gcal_edit_dialog_get_source (edit_dialog);
|
||||||
|
priv->event_to_delete->event_component =
|
||||||
|
gcal_edit_dialog_get_component (edit_dialog);
|
||||||
|
|
||||||
|
uuid = gcal_edit_dialog_get_event_uuid (edit_dialog);
|
||||||
/* hide widget of the event */
|
/* hide widget of the event */
|
||||||
gtk_widget_hide (gcal_view_get_by_uuid (view,
|
gtk_widget_hide (gcal_view_get_by_uuid (view, uuid));
|
||||||
priv->event_to_delete));
|
g_free (uuid);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GTK_RESPONSE_CANCEL:
|
case GTK_RESPONSE_CANCEL:
|
||||||
@@ -896,7 +904,6 @@ remove_event (GtkWidget *notification,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
gchar **tokens;
|
|
||||||
|
|
||||||
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
||||||
|
|
||||||
@@ -905,13 +912,11 @@ remove_event (GtkWidget *notification,
|
|||||||
|
|
||||||
if (priv->event_to_delete != NULL)
|
if (priv->event_to_delete != NULL)
|
||||||
{
|
{
|
||||||
tokens = g_strsplit (priv->event_to_delete, ":", 2);
|
gcal_manager_remove_event (priv->manager,
|
||||||
|
priv->event_to_delete->source,
|
||||||
|
priv->event_to_delete->event_component);
|
||||||
|
|
||||||
gcal_manager_remove_event (priv->manager, tokens[0], tokens[1]);
|
g_clear_pointer (&(priv->event_to_delete), g_free);
|
||||||
|
|
||||||
g_strfreev (tokens);
|
|
||||||
g_free (priv->event_to_delete);
|
|
||||||
priv->event_to_delete = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -920,19 +925,24 @@ undo_remove_event (GtkButton *button,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
|
gchar *uuid;
|
||||||
GtkWidget *event_widget;
|
GtkWidget *event_widget;
|
||||||
|
|
||||||
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
||||||
|
|
||||||
if (priv->event_to_delete != NULL)
|
if (priv->event_to_delete != NULL)
|
||||||
{
|
{
|
||||||
|
uuid = get_uuid_from_component (
|
||||||
|
priv->event_to_delete->source,
|
||||||
|
priv->event_to_delete->event_component);
|
||||||
event_widget = gcal_view_get_by_uuid (
|
event_widget = gcal_view_get_by_uuid (
|
||||||
GCAL_VIEW (priv->views[priv->active_view]),
|
GCAL_VIEW (priv->views[priv->active_view]),
|
||||||
priv->event_to_delete);
|
uuid);
|
||||||
|
|
||||||
gtk_widget_show (event_widget);
|
gtk_widget_show (event_widget);
|
||||||
|
|
||||||
g_free (priv->event_to_delete);
|
g_clear_pointer (&(priv->event_to_delete), g_free);
|
||||||
priv->event_to_delete = NULL;
|
g_free (uuid);
|
||||||
|
|
||||||
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->notification),
|
gtk_revealer_set_reveal_child (GTK_REVEALER (priv->notification),
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|||||||
Reference in New Issue
Block a user