Revert "calendar-server: Port to libecal-2.0"

This reverts commit 71e469a59c.
This commit is contained in:
Florian Müllner 2019-05-17 22:23:43 +02:00
parent 71e469a59c
commit 785dd5c5f7
3 changed files with 104 additions and 125 deletions

View File

@ -14,7 +14,7 @@ cogl_pango_pc = 'mutter-cogl-pango-' + mutter_api_version
libmutter_pc = 'libmutter-' + mutter_api_version libmutter_pc = 'libmutter-' + mutter_api_version
croco_req = '>= 0.6.8' croco_req = '>= 0.6.8'
ecal_req = '>= 3.33.2' ecal_req = '>= 3.5.3'
eds_req = '>= 3.17.2' eds_req = '>= 3.17.2'
gcr_req = '>= 3.7.5' gcr_req = '>= 3.7.5'
gdesktop_req = '>= 3.7.90' gdesktop_req = '>= 3.7.90'
@ -73,7 +73,7 @@ else
endif endif
atk_bridge_dep = dependency('atk-bridge-2.0') atk_bridge_dep = dependency('atk-bridge-2.0')
ecal_dep = dependency('libecal-2.0', version: ecal_req) ecal_dep = dependency('libecal-1.2', version: ecal_req)
eds_dep = dependency('libedataserver-1.2', version: eds_req) eds_dep = dependency('libedataserver-1.2', version: eds_req)
gcr_dep = dependency('gcr-base-3', version: gcr_req) gcr_dep = dependency('gcr-base-3', version: gcr_req)
gdk_x11_dep = dependency('gdk-x11-3.0') gdk_x11_dep = dependency('gdk-x11-3.0')

View File

@ -295,13 +295,13 @@ create_client_for_source (ESource *source,
CalendarSourceData *source_data) CalendarSourceData *source_data)
{ {
ClientData *data; ClientData *data;
EClient *client; ECalClient *client;
GError *error = NULL; GError *error = NULL;
client = g_hash_table_lookup (source_data->clients, source); client = g_hash_table_lookup (source_data->clients, source);
g_return_if_fail (client == NULL); g_return_if_fail (client == NULL);
client = e_cal_client_connect_sync (source, source_type, -1, NULL, &error); client = e_cal_client_new (source, source_type, &error);
if (!client) if (!client)
{ {
g_warning ("Could not load source '%s': %s", g_warning ("Could not load source '%s': %s",
@ -312,7 +312,7 @@ create_client_for_source (ESource *source,
} }
data = g_slice_new0 (ClientData); data = g_slice_new0 (ClientData);
data->client = E_CAL_CLIENT (client); /* takes ownership */ data->client = client; /* takes ownership */
data->backend_died_id = g_signal_connect (client, data->backend_died_id = g_signal_connect (client,
"backend-died", "backend-died",
G_CALLBACK (backend_died_cb), G_CALLBACK (backend_died_cb),

View File

@ -102,120 +102,97 @@ typedef struct
} CollectAppointmentsData; } CollectAppointmentsData;
static time_t static time_t
get_time_from_property (ICalComponent *icomp, get_time_from_property (icalcomponent *ical,
ICalPropertyKind prop_kind, icalproperty_kind prop_kind,
ICalTime * (* get_prop_func) (ICalProperty *prop), struct icaltimetype (* get_prop_func) (const icalproperty *prop),
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
ICalProperty *prop; icalproperty *prop;
ICalTime *itt; struct icaltimetype ical_time;
ICalParameter *param; icalparameter *param;
ICalTimezone *timezone = NULL; icaltimezone *timezone = NULL;
time_t retval;
prop = i_cal_component_get_first_property (icomp, prop_kind); prop = icalcomponent_get_first_property (ical, prop_kind);
if (!prop) if (!prop)
return 0; return 0;
itt = get_prop_func (prop); ical_time = get_prop_func (prop);
param = i_cal_property_get_first_parameter (prop, I_CAL_TZID_PARAMETER); param = icalproperty_get_first_parameter (prop, ICAL_TZID_PARAMETER);
if (param) if (param)
timezone = i_cal_timezone_get_builtin_timezone_from_tzid (i_cal_parameter_get_tzid (param)); timezone = icaltimezone_get_builtin_timezone_from_tzid (icalparameter_get_tzid (param));
else if (i_cal_time_is_utc (itt)) else if (icaltime_is_utc (ical_time))
timezone = i_cal_timezone_get_utc_timezone (); timezone = icaltimezone_get_utc_timezone ();
else else
timezone = default_zone; timezone = default_zone;
retval = i_cal_time_as_timet_with_zone (itt, timezone); return icaltime_as_timet_with_zone (ical_time, timezone);
g_clear_object (&param);
g_clear_object (&prop);
g_clear_object (&itt);
return retval;
} }
static char * static char *
get_ical_uid (ICalComponent *icomp) get_ical_uid (icalcomponent *ical)
{ {
return g_strdup (i_cal_component_get_uid (icomp)); return g_strdup (icalcomponent_get_uid (ical));
} }
static char * static char *
get_ical_summary (ICalComponent *icomp) get_ical_summary (icalcomponent *ical)
{ {
ICalProperty *prop; icalproperty *prop;
char *retval;
prop = i_cal_component_get_first_property (icomp, I_CAL_SUMMARY_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_SUMMARY_PROPERTY);
if (!prop) if (!prop)
return NULL; return NULL;
retval = g_strdup (i_cal_property_get_summary (prop)); return g_strdup (icalproperty_get_summary (prop));
g_object_unref (prop);
return retval;
} }
static char * static char *
get_ical_description (ICalComponent *icomp) get_ical_description (icalcomponent *ical)
{ {
ICalProperty *prop; icalproperty *prop;
char *retval;
prop = i_cal_component_get_first_property (icomp, I_CAL_DESCRIPTION_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_DESCRIPTION_PROPERTY);
if (!prop) if (!prop)
return NULL; return NULL;
retval = g_strdup (i_cal_property_get_description (prop)); return g_strdup (icalproperty_get_description (prop));
g_object_unref (prop);
return retval;
} }
static inline time_t static inline time_t
get_ical_start_time (ICalComponent *icomp, get_ical_start_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DTSTART_PROPERTY, ICAL_DTSTART_PROPERTY,
i_cal_property_get_dtstart, icalproperty_get_dtstart,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_end_time (ICalComponent *icomp, get_ical_end_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DTEND_PROPERTY, ICAL_DTEND_PROPERTY,
i_cal_property_get_dtend, icalproperty_get_dtend,
default_zone); default_zone);
} }
static gboolean static gboolean
get_ical_is_all_day (ICalComponent *icomp, get_ical_is_all_day (icalcomponent *ical,
time_t start_time, time_t start_time,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
ICalProperty *prop; icalproperty *prop;
ICalDuration *duration;
ICalTime *dtstart;
struct tm *start_tm; struct tm *start_tm;
time_t end_time; time_t end_time;
gboolean retval; struct icaldurationtype duration;
struct icaltimetype start_icaltime;
dtstart = i_cal_component_get_dtstart (icomp); start_icaltime = icalcomponent_get_dtstart (ical);
if (dtstart && i_cal_time_is_date (dtstart)) if (start_icaltime.is_date)
{
g_clear_object (&dtstart);
return TRUE; return TRUE;
}
g_clear_object (&dtstart);
start_tm = gmtime (&start_time); start_tm = gmtime (&start_time);
if (start_tm->tm_sec != 0 || if (start_tm->tm_sec != 0 ||
@ -223,40 +200,35 @@ get_ical_is_all_day (ICalComponent *icomp,
start_tm->tm_hour != 0) start_tm->tm_hour != 0)
return FALSE; return FALSE;
if ((end_time = get_ical_end_time (icomp, default_zone))) if ((end_time = get_ical_end_time (ical, default_zone)))
return (end_time - start_time) % 86400 == 0; return (end_time - start_time) % 86400 == 0;
prop = i_cal_component_get_first_property (icomp, I_CAL_DURATION_PROPERTY); prop = icalcomponent_get_first_property (ical, ICAL_DURATION_PROPERTY);
if (!prop) if (!prop)
return FALSE; return FALSE;
duration = i_cal_property_get_duration (prop); duration = icalproperty_get_duration (prop);
retval = duration && (i_cal_duration_as_int (duration) % 86400) == 0; return icaldurationtype_as_int (duration) % 86400 == 0;
g_clear_object (&duration);
g_clear_object (&prop);
return retval;
} }
static inline time_t static inline time_t
get_ical_due_time (ICalComponent *icomp, get_ical_due_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_DUE_PROPERTY, ICAL_DUE_PROPERTY,
i_cal_property_get_due, icalproperty_get_due,
default_zone); default_zone);
} }
static inline time_t static inline time_t
get_ical_completed_time (ICalComponent *icomp, get_ical_completed_time (icalcomponent *ical,
ICalTimezone *default_zone) icaltimezone *default_zone)
{ {
return get_time_from_property (icomp, return get_time_from_property (ical,
I_CAL_COMPLETED_PROPERTY, ICAL_COMPLETED_PROPERTY,
i_cal_property_get_completed, icalproperty_get_completed,
default_zone); default_zone);
} }
@ -393,69 +365,67 @@ calendar_appointment_free (CalendarAppointment *appointment)
static void static void
calendar_appointment_init (CalendarAppointment *appointment, calendar_appointment_init (CalendarAppointment *appointment,
ICalComponent *icomp, icalcomponent *ical,
ECalClient *cal) ECalClient *cal)
{ {
ICalTimezone *default_zone; icaltimezone *default_zone;
const char *source_id; const char *source_id;
source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal))); source_id = e_source_get_uid (e_client_get_source (E_CLIENT (cal)));
default_zone = e_cal_client_get_default_timezone (cal); default_zone = e_cal_client_get_default_timezone (cal);
appointment->uid = get_ical_uid (icomp); appointment->uid = get_ical_uid (ical);
appointment->source_id = g_strdup (source_id); appointment->source_id = g_strdup (source_id);
appointment->backend_name = get_source_backend_name (cal); appointment->backend_name = get_source_backend_name (cal);
appointment->summary = get_ical_summary (icomp); appointment->summary = get_ical_summary (ical);
appointment->description = get_ical_description (icomp); appointment->description = get_ical_description (ical);
appointment->color_string = get_source_color (cal); appointment->color_string = get_source_color (cal);
appointment->start_time = get_ical_start_time (icomp, default_zone); appointment->start_time = get_ical_start_time (ical, default_zone);
appointment->end_time = get_ical_end_time (icomp, default_zone); appointment->end_time = get_ical_end_time (ical, default_zone);
appointment->is_all_day = get_ical_is_all_day (icomp, appointment->is_all_day = get_ical_is_all_day (ical,
appointment->start_time, appointment->start_time,
default_zone); default_zone);
} }
static CalendarAppointment * static CalendarAppointment *
calendar_appointment_new (ICalComponent *icomp, calendar_appointment_new (icalcomponent *ical,
ECalClient *cal) ECalClient *cal)
{ {
CalendarAppointment *appointment; CalendarAppointment *appointment;
appointment = g_new0 (CalendarAppointment, 1); appointment = g_new0 (CalendarAppointment, 1);
calendar_appointment_init (appointment, icomp, cal); calendar_appointment_init (appointment, ical, cal);
return appointment; return appointment;
} }
static gboolean static gboolean
generate_instances_cb (ICalComponent *icomp, generate_instances_cb (ECalComponent *comp,
ICalTime *instance_start, time_t start,
ICalTime *instance_end, time_t end,
gpointer user_data, gpointer data)
GCancellable *cancellable,
GError **error)
{ {
ECalClient *cal = ((CollectAppointmentsData *)user_data)->client; ECalClient *cal = ((CollectAppointmentsData *)data)->client;
GHashTable *appointments = ((CollectAppointmentsData *)user_data)->appointments; GHashTable *appointments = ((CollectAppointmentsData *)data)->appointments;
CalendarAppointment *appointment; CalendarAppointment *appointment;
CalendarOccurrence *occurrence; CalendarOccurrence *occurrence;
ICalTimezone *default_zone; const char *uid;
const gchar *uid;
default_zone = e_cal_client_get_default_timezone (cal); e_cal_component_get_uid (comp, &uid);
uid = i_cal_component_get_uid (icomp);
appointment = g_hash_table_lookup (appointments, uid); appointment = g_hash_table_lookup (appointments, uid);
if (appointment == NULL) if (appointment == NULL)
{ {
appointment = calendar_appointment_new (icomp, cal); icalcomponent *ical = e_cal_component_get_icalcomponent (comp);
appointment = calendar_appointment_new (ical, cal);
g_hash_table_insert (appointments, g_strdup (uid), appointment); g_hash_table_insert (appointments, g_strdup (uid), appointment);
} }
occurrence = g_new0 (CalendarOccurrence, 1); occurrence = g_new0 (CalendarOccurrence, 1);
occurrence->start_time = i_cal_time_as_timet_with_zone (instance_start, default_zone); occurrence->start_time = start;
occurrence->end_time = i_cal_time_as_timet_with_zone (instance_end, default_zone); occurrence->end_time = end;
occurrence->rid = e_cal_util_component_get_recurid_as_string (icomp); occurrence->rid = e_cal_component_get_recurid_as_string (comp);
appointment->occurrences = g_slist_append (appointment->occurrences, occurrence); appointment->occurrences = g_slist_append (appointment->occurrences, occurrence);
@ -472,7 +442,7 @@ struct _App
time_t since; time_t since;
time_t until; time_t until;
ICalTimezone *zone; icaltimezone *zone;
CalendarSources *sources; CalendarSources *sources;
gulong sources_signal_id; gulong sources_signal_id;
@ -498,9 +468,9 @@ app_update_timezone (App *app)
if (g_strcmp0 (location, app->timezone_location) != 0) if (g_strcmp0 (location, app->timezone_location) != 0)
{ {
if (location == NULL) if (location == NULL)
app->zone = i_cal_timezone_get_utc_timezone (); app->zone = icaltimezone_get_utc_timezone ();
else else
app->zone = i_cal_timezone_get_builtin_timezone (location); app->zone = icaltimezone_get_builtin_timezone (location);
g_free (app->timezone_location); g_free (app->timezone_location);
app->timezone_location = location; app->timezone_location = location;
print_debug ("Using timezone %s", app->timezone_location); print_debug ("Using timezone %s", app->timezone_location);
@ -558,10 +528,10 @@ on_objects_added (ECalClientView *view,
for (l = objects; l != NULL; l = l->next) for (l = objects; l != NULL; l = l->next)
{ {
ICalComponent *icomp = l->data; icalcomponent *ical = l->data;
const char *uid; const char *uid;
uid = i_cal_component_get_uid (icomp); uid = icalcomponent_get_uid (ical);
if (g_hash_table_lookup (app->appointments, uid) == NULL) if (g_hash_table_lookup (app->appointments, uid) == NULL)
{ {
@ -630,7 +600,7 @@ app_load_events (App *app)
since_iso8601 = isodate_from_time_t (app->since); since_iso8601 = isodate_from_time_t (app->since);
until_iso8601 = isodate_from_time_t (app->until); until_iso8601 = isodate_from_time_t (app->until);
tz_location = i_cal_timezone_get_location (app->zone); tz_location = icaltimezone_get_location (app->zone);
print_debug ("Loading events since %s until %s", print_debug ("Loading events since %s until %s",
since_iso8601, since_iso8601,
@ -652,12 +622,21 @@ app_load_events (App *app)
e_cal_client_set_default_timezone (cal, app->zone); e_cal_client_set_default_timezone (cal, app->zone);
error = NULL;
if (!e_client_open_sync (E_CLIENT (cal), TRUE, NULL, &error))
{
ESource *source = e_client_get_source (E_CLIENT (cal));
g_warning ("Error opening calendar %s: %s\n",
e_source_get_uid (source), error->message);
g_error_free (error);
continue;
}
data.client = cal; data.client = cal;
data.appointments = app->appointments; data.appointments = app->appointments;
e_cal_client_generate_instances_sync (cal, e_cal_client_generate_instances_sync (cal,
app->since, app->since,
app->until, app->until,
NULL,
generate_instances_cb, generate_instances_cb,
&data); &data);