aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog7
-rw-r--r--debian/patches/port-eds-3.5.patch248
-rw-r--r--debian/patches/series1
3 files changed, 256 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog
index 9b984da..c39a126 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+indicator-datetime (0.3.94-0ubuntu4) quantal-proposed; urgency=low
+
+ * debian/patches/port-eds-3.5.patch: update to build with the new EDS
+ 3.5 APIs.
+
+ -- Mathieu Trudel-Lapierre <mathieu-tl@ubuntu.com> Thu, 05 Jul 2012 17:11:31 -0400
+
indicator-datetime (0.3.94-0ubuntu3) quantal; urgency=low
* Rebuild against evolution-data-server 3.4
diff --git a/debian/patches/port-eds-3.5.patch b/debian/patches/port-eds-3.5.patch
new file mode 100644
index 0000000..805855f
--- /dev/null
+++ b/debian/patches/port-eds-3.5.patch
@@ -0,0 +1,248 @@
+From: Mathieu Trudel-Lapierre <mathieu.trudel-lapierre@canonical.com>
+Subject: Update to evolution-data-server 3.5 API.
+
+---
+ src/datetime-service.c | 176 +++++++++++++++++++++++--------------------------
+ 1 file changed, 84 insertions(+), 92 deletions(-)
+
+Index: b/src/datetime-service.c
+===================================================================
+--- a/src/datetime-service.c
++++ b/src/datetime-service.c
+@@ -40,11 +40,9 @@ with this program. If not, see <http://
+ #include <geoclue/geoclue-master-client.h>
+
+ #include <time.h>
+-#include <libecal/e-cal.h>
++#include <libecal/libecal.h>
+ #include <libical/ical.h>
+-#include <libecal/e-cal-time-util.h>
+-#include <libedataserver/e-source.h>
+-#include <libedataserverui/e-passwords.h>
++#include <libedataserver/libedataserver.h>
+ // Other users of ecal seem to also include these, not sure why they should be included by the above
+ #include <libical/icaltime.h>
+ #include <cairo/cairo.h>
+@@ -594,27 +592,6 @@ check_for_calendar (gpointer user_data)
+ return FALSE;
+ }
+
+-// Authentication function
+-static gchar *
+-auth_func (ECal *ecal,
+- const gchar *prompt,
+- const gchar *key,
+- gpointer user_data)
+-{
+- ESource *source = e_cal_get_source (ecal);
+- gchar *auth_domain = e_source_get_duped_property (source, "auth-domain");
+-
+- const gchar *component_name;
+- if (auth_domain) component_name = auth_domain;
+- else component_name = "Calendar";
+-
+- gchar *password = e_passwords_get_password (component_name, key);
+-
+- g_free (auth_domain);
+-
+- return password;
+-}
+-
+ static gint
+ compare_comp_instances (gconstpointer ga, gconstpointer gb)
+ {
+@@ -649,23 +626,53 @@ comp_instance_free (struct comp_instance
+ }
+
+ static gboolean
+-populate_appointment_instances (ECalComponent * comp,
++populate_appointment_instances (ECalClient * client,
+ time_t start,
+ time_t end,
+ gpointer data)
+ {
+- g_debug("Appending item %p", comp);
+-
+- ECalComponentVType vtype = e_cal_component_get_vtype (comp);
+- if (vtype != E_CAL_COMPONENT_EVENT && vtype != E_CAL_COMPONENT_TODO) return FALSE;
+-
+- icalproperty_status status;
+- e_cal_component_get_status (comp, &status);
+- if (status == ICAL_STATUS_COMPLETED || status == ICAL_STATUS_CANCELLED) return FALSE;
++ GSList *ecalcomps, *comp_item;
+
+- struct comp_instance *ci = comp_instance_new (comp, start, end, E_SOURCE(data));
+- comp_instances = g_list_append (comp_instances, ci);
+- return TRUE;
++ if (e_cal_client_get_object_list_as_comps_sync (client,
++ NULL,
++ &ecalcomps,
++ NULL, NULL)) {
++
++ for (comp_item = ecalcomps; comp_item; comp_item = g_slist_next(comp_item)) {
++ ECalComponent *comp = comp_item->data;
++
++ g_debug("Appending item %p", e_cal_component_get_as_string(comp));
++
++ ECalComponentVType vtype = e_cal_component_get_vtype (comp);
++ if (vtype != E_CAL_COMPONENT_EVENT && vtype != E_CAL_COMPONENT_TODO) return FALSE;
++
++ icalproperty_status status;
++ e_cal_component_get_status (comp, &status);
++ if (status == ICAL_STATUS_COMPLETED || status == ICAL_STATUS_CANCELLED) return FALSE;
++
++ g_object_ref(comp);
++
++ ECalComponentDateTime datetime;
++ icaltimezone *appointment_zone = NULL;
++ icaltimezone *current_zone = NULL;
++
++ if (vtype == E_CAL_COMPONENT_EVENT)
++ e_cal_component_get_dtstart (comp, &datetime);
++ else
++ e_cal_component_get_due (comp, &datetime);
++
++ appointment_zone = icaltimezone_get_builtin_timezone_from_tzid(datetime.tzid);
++ current_zone = icaltimezone_get_builtin_timezone_from_tzid(current_timezone);
++ if (!appointment_zone || datetime.value->is_date) { // If it's today put in the current timezone?
++ appointment_zone = current_zone;
++ }
++
++ struct comp_instance *ci = comp_instance_new (comp, start, end, E_SOURCE(data));
++ comp_instances = g_list_append (comp_instances, ci);
++ }
++ return TRUE;
++ }
++ return FALSE;
+ }
+
+ /* Populate the menu with todays, next 5 appointments.
+@@ -685,12 +692,12 @@ update_appointment_menu_items (gpointer
+ updating_appointments = TRUE;
+
+ time_t curtime = 0, t1 = 0, t2 = 0;
+- GList *l;
+- GSList *g;
++ GList *l, *s;
+ GError *gerror = NULL;
+ gint i;
+ gint width = 0, height = 0;
+- ESourceList * sources = NULL;
++ ESourceRegistry * src_registry = NULL;
++ GList * sources = NULL;
+
+ // Get today & work out query times
+ time(&curtime);
+@@ -730,67 +737,52 @@ update_appointment_menu_items (gpointer
+ highlightdays = highlightdays + 7; // Minimum of 7 days ahead
+ t2 = t1 + (time_t) (highlightdays * 24 * 60 * 60);
+
+- if (!e_cal_get_sources(&sources, E_CAL_SOURCE_TYPE_EVENT, &gerror)) {
+- g_debug("Failed to get ecal sources\n");
+- g_clear_error (&gerror);
+- return FALSE;
+- }
+-
+ // clear any previous comp_instances
+ g_list_free_full (comp_instances, (GDestroyNotify)comp_instance_free);
+ comp_instances = NULL;
+
+- GSList *cal_list = gconf_client_get_list(gconf, "/apps/evolution/calendar/display/selected_calendars", GCONF_VALUE_STRING, &gerror);
+- if (gerror) {
+- g_debug("Failed to get evolution preference for enabled calendars");
+- g_clear_error (&gerror);
+- cal_list = NULL;
+- }
+-
++ src_registry = e_source_registry_new_sync (NULL, &gerror);
++ if (!src_registry) {
++ g_debug("Failed to get access to source registry: %s\n", gerror->message);
++ return FALSE;
++ }
++
++ sources = e_source_registry_list_sources(src_registry, E_SOURCE_EXTENSION_CALENDAR);
++
+ // Generate instances for all sources
+- for (g = e_source_list_peek_groups (sources); g; g = g->next) {
+- ESourceGroup *group = E_SOURCE_GROUP (g->data);
+- GSList *s;
+-
+- for (s = e_source_group_peek_sources (group); s; s = s->next) {
+- ESource *source = E_SOURCE (s->data);
+- g_signal_connect (G_OBJECT(source), "changed", G_CALLBACK (update_appointment_menu_items), NULL);
+- ECal *ecal = e_cal_new(source, E_CAL_SOURCE_TYPE_EVENT);
+- e_cal_set_auth_func (ecal, (ECalAuthFunc) auth_func, NULL);
+-
+- icaltimezone* current_zone = icaltimezone_get_builtin_timezone(current_timezone);
+- if (!current_zone) {
+- // current_timezone may be a TZID?
+- current_zone = icaltimezone_get_builtin_timezone_from_tzid(current_timezone);
+- }
+- if (current_zone && !e_cal_set_default_timezone(ecal, current_zone, &gerror)) {
+- g_debug("Failed to set ecal default timezone %s", gerror->message);
+- g_clear_error (&gerror);
+- g_object_unref(ecal);
+- continue;
+- }
+-
+- if (!e_cal_open(ecal, FALSE, &gerror)) {
+- g_debug("Failed to get ecal sources %s", gerror->message);
+- g_clear_error (&gerror);
+- g_object_unref(ecal);
+- continue;
+- }
++ for (s = g_list_first (sources); s; s = g_list_next (s)) {
+
+- const gchar *ecal_uid = e_source_peek_uid(source);
+- g_debug("Checking ecal_uid is enabled: %s", ecal_uid);
+- const gboolean in_list = g_slist_find_custom (cal_list, ecal_uid, (GCompareFunc)g_strcmp0) != NULL;
+- if (!in_list) {
++ ESource *source = E_SOURCE (s->data);
++ g_signal_connect (G_OBJECT(source), "changed", G_CALLBACK (update_appointment_menu_items), NULL);
++ ECalClient *ecal = e_cal_client_new(source, E_CAL_CLIENT_SOURCE_TYPE_EVENTS, &gerror);
++
++ icaltimezone* current_zone = icaltimezone_get_builtin_timezone(current_timezone);
++ if (!current_zone) {
++ // current_timezone may be a TZID?
++ current_zone = icaltimezone_get_builtin_timezone_from_tzid(current_timezone);
++ }
++
++ e_cal_client_set_default_timezone (ecal, current_zone);
++
++ g_debug("Checking if source %s is enabled", e_source_get_uid(source));
++ if (e_source_get_enabled (source)) {
++ g_debug("source is enabled, generating instances");
++
++ if (!e_client_open_sync (E_CLIENT (ecal), TRUE, NULL, &gerror)) {
++ g_debug("Failed to open source: %s", gerror->message);
++ g_clear_error (&gerror);
+ g_object_unref(ecal);
+ continue;
+ }
+
+- g_debug("ecal_uid is enabled, generating instances");
+- e_cal_generate_instances (ecal, t1, t2, (ECalRecurInstanceFn) populate_appointment_instances, source);
+- g_object_unref(ecal);
+- }
+- }
+- g_slist_free_full (cal_list, g_free);
++ e_cal_client_generate_instances (ecal, t1, t2, NULL,
++ (ECalRecurInstanceFn) populate_appointment_instances,
++ (gpointer) source,
++ NULL);
++ }
++ g_object_unref(ecal);
++ }
++ g_list_free_full (sources, g_object_unref);
+
+ g_debug("Number of ECalComponents returned: %d", g_list_length(comp_instances));
+ GList *sorted_comp_instances = g_list_sort(comp_instances, compare_comp_instances);
+@@ -942,7 +934,7 @@ update_appointment_menu_items (gpointer
+ G_CALLBACK(activate_cb), cmd, (GClosureNotify)g_free, 0);
+ g_free (ad);
+
+- const gchar *color_spec = e_source_peek_color_spec(ci->source);
++ const gchar *color_spec = e_source_selectable_get_color (e_source_get_extension (ci->source, E_SOURCE_EXTENSION_CALENDAR));
+ g_debug("Colour to use: %s", color_spec);
+
+ // Draw the correct icon for the appointment type and then tint it using mask fill.
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..d8f16a3
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+port-eds-3.5.patch