From a9da2aa5527a0449d8341d5f76ba6094e28568fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erick=20P=C3=A9rez=20Castellanos?= Date: Wed, 22 Aug 2012 01:04:36 -0400 Subject: [PATCH] Made simple-add event work. Fixed GcalEventOverlay handling of dates. Added initial code and methods to handle adding events to GcalManager. Fixed in GcalMonthView handling of dates passed to event-creation. Fixed gcal-utils sources for gcc warning. Fixed calling order in GcalWindow. --- src/gcal-event-overlay.c | 8 +++- src/gcal-manager.c | 91 ++++++++++++++++++++++++++++++++++++++++ src/gcal-manager.h | 6 +++ src/gcal-month-view.c | 3 ++ src/gcal-utils.c | 2 +- src/gcal-utils.h | 36 ++++++++-------- src/gcal-window.c | 15 +++++-- 7 files changed, 138 insertions(+), 23 deletions(-) diff --git a/src/gcal-event-overlay.c b/src/gcal-event-overlay.c index 51efa29e..ab1516f8 100644 --- a/src/gcal-event-overlay.c +++ b/src/gcal-event-overlay.c @@ -39,6 +39,7 @@ struct _GcalEventOverlayPrivate icaltimetype *start_span; icaltimetype *end_span; + gboolean one_day; }; enum @@ -342,7 +343,11 @@ gcal_event_overlay_gather_data (GcalEventOverlay *widget, -1); data->calendar_uid = uid; data->start_date = priv->start_span; - data->end_date = priv->end_span; + + if (! priv->one_day) + data->end_date = priv->end_span; + else + data->end_date = NULL; *new_data = data; return TRUE; @@ -507,6 +512,7 @@ gcal_event_overlay_set_span (GcalEventOverlay *widget, *(priv->start_span) = *start_date; real_end_date = end_date == NULL ? start_date : end_date; + priv->one_day = end_date == NULL; if (priv->end_span == NULL) priv->end_span = gcal_dup_icaltime (real_end_date); else diff --git a/src/gcal-manager.c b/src/gcal-manager.c index 69142013..3965c3dd 100644 --- a/src/gcal-manager.c +++ b/src/gcal-manager.c @@ -165,6 +165,10 @@ static void gcal_manager_send_fake_events_added (GcalManager *mana static void gcal_manager_send_fave_events_removed (GcalManager *manager, GcalManagerUnit *unit); +static void gcal_manager_on_event_created (GObject *source_object, + GAsyncResult *result, + gpointer user_data); + G_DEFINE_TYPE(GcalManager, gcal_manager, G_TYPE_OBJECT) static void @@ -891,6 +895,34 @@ gcal_manager_send_fave_events_removed (GcalManager *manager, g_slist_free_full (events_data, g_free); } +static void +gcal_manager_on_event_created (GObject *source_object, + GAsyncResult *result, + gpointer user_data) +{ + ECalClient *client; + gchar *new_uid; + GError *error; + + /* If* the view catch a signal of the newly created object the almost sure I + * have nothing to do here. */ + + client = E_CAL_CLIENT (source_object); + error = NULL; + if (e_cal_client_create_object_finish (client, result, &new_uid, &error)) + { + g_debug ("Telling event: %s was created", new_uid); + + g_free (new_uid); + } + else + { + /* Some error */ + g_warning ("Error creating object: %s", error->message); + g_error_free (error); + } +} + /* Public API */ /** * gcal_manager_new: @@ -1472,3 +1504,62 @@ gcal_manager_remove_event (GcalManager *manager, data); } } + +void +gcal_manager_create_event (GcalManager *manager, + const gchar *source_uid, + const gchar *summary, + const icaltimetype *initial_date, + const icaltimetype *final_date) +{ + GcalManagerPrivate *priv; + GcalManagerUnit *unit; + ECalComponent *event; + ECalComponentDateTime dt; + ECalComponentText summ; + icalcomponent *new_event_icalcomp; + icaltimetype *dt_start; + + g_return_if_fail (GCAL_IS_MANAGER (manager)); + priv = manager->priv; + + unit = g_hash_table_lookup (priv->clients, source_uid); + + event = e_cal_component_new (); + e_cal_component_set_new_vtype (event, E_CAL_COMPONENT_EVENT); + + dt_start = gcal_dup_icaltime (initial_date); + dt.value = dt_start; + dt.tzid = NULL; + e_cal_component_set_dtstart (event, &dt); + g_debug ("dt_start :%s", icaltime_as_ical_string (*dt_start)); + + if (final_date != NULL) + { + g_debug ("setting final_date"); + *dt.value = *final_date; + g_debug ("dt_end :%s", icaltime_as_ical_string (*final_date)); + e_cal_component_set_dtend (event, &dt); + } + else + { + icaltime_adjust (dt_start, 1, 0, 0, 0); + *dt.value = *dt_start; + e_cal_component_set_dtend (event, &dt); + } + + summ.altrep = NULL; + summ.value = summary; + e_cal_component_set_summary (event, &summ); + + e_cal_component_commit_sequence (event); + + new_event_icalcomp = e_cal_component_get_icalcomponent (event); + e_cal_client_create_object (unit->client, + new_event_icalcomp, + priv->async_ops, + gcal_manager_on_event_created, + manager); + + g_object_unref (event); +} diff --git a/src/gcal-manager.h b/src/gcal-manager.h index 554a3d53..df82b227 100644 --- a/src/gcal-manager.h +++ b/src/gcal-manager.h @@ -119,6 +119,12 @@ void gcal_manager_remove_event (GcalManager *manager const gchar *source_uid, const gchar *event_uid); +void gcal_manager_create_event (GcalManager *manager, + const gchar *source_uid, + const gchar *summary, + const icaltimetype *initial_date, + const icaltimetype *final_date); + G_END_DECLS #endif /* __GCAL_MANAGER_H__ */ diff --git a/src/gcal-month-view.c b/src/gcal-month-view.c index 91d93331..88f4a154 100644 --- a/src/gcal-month-view.c +++ b/src/gcal-month-view.c @@ -550,6 +550,7 @@ gcal_month_view_button_press (GtkWidget *widget, start_date = gcal_dup_icaltime (priv->date); start_date->day = priv->start_mark_cell + priv->days_delay; + start_date->is_date = 1; g_signal_emit_by_name (GCAL_VIEW (widget), "create-event", @@ -672,9 +673,11 @@ gcal_month_view_button_release (GtkWidget *widget, start_date = gcal_dup_icaltime (priv->date); start_date->day = priv->start_mark_cell + priv->days_delay; + start_date->is_date = 1; end_date = gcal_dup_icaltime (priv->date); end_date->day = priv->end_mark_cell + priv->days_delay; + end_date->is_date = 1; g_signal_emit_by_name (GCAL_VIEW (widget), "create-event", diff --git a/src/gcal-utils.c b/src/gcal-utils.c index 4b3afca4..151d9168 100644 --- a/src/gcal-utils.c +++ b/src/gcal-utils.c @@ -90,7 +90,7 @@ gcal_get_group_name (const gchar *base_uri) } icaltimetype* -gcal_dup_icaltime (icaltimetype *date) +gcal_dup_icaltime (const icaltimetype *date) { icaltimetype *new_date; diff --git a/src/gcal-utils.h b/src/gcal-utils.h index fe7ff5e9..12b8df72 100644 --- a/src/gcal-utils.h +++ b/src/gcal-utils.h @@ -47,35 +47,35 @@ typedef enum } GcalEditableMode; typedef -const gchar* (*GcalTranslateFunc) (GtkWidget *source_widget); +const gchar* (*GcalTranslateFunc) (GtkWidget *source_widget); GType icaltime_get_type (void) G_GNUC_CONST; -void gcal_gtk_tree_view_set_activate_on_single_click (GtkTreeView *tree_view, - gboolean should_activate); +void gcal_gtk_tree_view_set_activate_on_single_click (GtkTreeView *tree_view, + gboolean should_activate); -const gchar* gcal_get_group_name (const gchar *base_uri); +const gchar* gcal_get_group_name (const gchar *base_uri); -icaltimetype* gcal_dup_icaltime (icaltimetype *date); +icaltimetype* gcal_dup_icaltime (const icaltimetype *date); -gchar* gcal_get_source_name (GtkTreeModel *model, - const gchar *uid); +gchar* gcal_get_source_name (GtkTreeModel *model, + const gchar *uid); -gchar* gcal_get_source_uid (GtkTreeModel *model, - const gchar *name); +gchar* gcal_get_source_uid (GtkTreeModel *model, + const gchar *name); -const gchar* gcal_get_weekday (gint i); +const gchar* gcal_get_weekday (gint i); /* code brought from evolution */ -gsize e_strftime_fix_am_pm (gchar *str, - gsize max, - const gchar *fmt, - const struct tm *tm); -gsize e_utf8_strftime_fix_am_pm (gchar *str, +gsize e_strftime_fix_am_pm (gchar *str, + gsize max, + const gchar *fmt, + const struct tm *tm); +gsize e_utf8_strftime_fix_am_pm (gchar *str, - gsize max, - const gchar *fmt, - const struct tm *tm); + gsize max, + const gchar *fmt, + const struct tm *tm); #endif // __GCAL_UTILS_H__ diff --git a/src/gcal-window.c b/src/gcal-window.c index 22024794..4c9425b9 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -1117,17 +1117,26 @@ gcal_window_create_event (GcalEventOverlay *widget, gpointer user_data) { GcalWindowPrivate *priv; + GcalManager *manager; g_return_if_fail (user_data); priv = GCAL_WINDOW (user_data)->priv; - /* reset and hide */ - gcal_window_event_overlay_closed (widget, user_data); - /* create the event */ + manager = gcal_window_get_manager (GCAL_WINDOW (user_data)); + gcal_manager_create_event (manager, + new_data->calendar_uid, + new_data->summary, + new_data->start_date, + new_data->end_date); + g_debug ("NOW CREATE THE EVENT"); if (open_details) g_debug ("Opening details window NOW"); + + /* reset and hide */ + gcal_window_event_overlay_closed (widget, user_data); + } static void