if we have an alarm that can be represented on the pilot, set the

2001-12-08  JP Rosevear  <jpr@ximian.com>

  	* conduits/calendar/calendar-conduit.c (local_record_from_comp):
  	if we have an alarm that can be represented on the pilot, set the
  	appointment fields appropriately, if the duration has values for
  	minutes and/or hours and/or days, use the lowest common
  	denominator
  	(comp_from_remote_record): if the appointment on the pilot has an
  	alarm, find the first alarm an item currently had that is relative
  	to the start and with a negative duration and update it (or create
  	a new one if no valid ones exist)

 	* cal-util/cal-component.c (cal_component_get_alarm_uids): build
  	list in the order they appear in the component so we get
  	consisting order for the gui and for the pilot

svn path=/trunk/; revision=14943
This commit is contained in:
JP Rosevear
2001-12-08 23:18:37 +00:00
committed by JP Rosevear
parent 9cb9cf06c9
commit d1ddbc231d
3 changed files with 137 additions and 14 deletions

View File

@ -1,3 +1,19 @@
2001-12-08 JP Rosevear <jpr@ximian.com>
* conduits/calendar/calendar-conduit.c (local_record_from_comp):
if we have an alarm that can be represented on the pilot, set the
appointment fields appropriately, if the duration has values for
minutes and/or hours and/or days, use the lowest common
denominator
(comp_from_remote_record): if the appointment on the pilot has an
alarm, find the first alarm an item currently had that is relative
to the start and with a negative duration and update it (or create
a new one if no valid ones exist)
* cal-util/cal-component.c (cal_component_get_alarm_uids): build
list in the order they appear in the component so we get
consisting order for the gui and for the pilot
2001-12-08 Rodrigo Moya <rodrigo@ximian.com>
* gui/calendar-config.c (calendar_config_get_default_uri):

View File

@ -4462,19 +4462,6 @@ make_alarm (icalcomponent *subcomp)
return alarm;
}
/* Used from g_hash_table_foreach(); adds an alarm UID to a list */
static void
add_alarm_uid (gpointer key, gpointer value, gpointer data)
{
const char *auid;
GList **l;
auid = key;
l = data;
*l = g_list_prepend (*l, g_strdup (auid));
}
/**
* cal_component_get_alarm_uids:
* @comp: A calendar component.
@ -4489,6 +4476,7 @@ GList *
cal_component_get_alarm_uids (CalComponent *comp)
{
CalComponentPrivate *priv;
icalcompiter iter;
GList *l;
g_return_val_if_fail (comp != NULL, NULL);
@ -4498,7 +4486,29 @@ cal_component_get_alarm_uids (CalComponent *comp)
g_return_val_if_fail (priv->icalcomp != NULL, NULL);
l = NULL;
g_hash_table_foreach (priv->alarm_uid_hash, add_alarm_uid, &l);
for (iter = icalcomponent_begin_component (priv->icalcomp, ICAL_VALARM_COMPONENT);
icalcompiter_deref (&iter) != NULL;
icalcompiter_next (&iter)) {
icalcomponent *subcomp;
icalproperty *prop;
subcomp = icalcompiter_deref (&iter);
for (prop = icalcomponent_get_first_property (subcomp, ICAL_X_PROPERTY);
prop;
prop = icalcomponent_get_next_property (subcomp, ICAL_X_PROPERTY)) {
const char *xname;
xname = icalproperty_get_x_name (prop);
g_assert (xname != NULL);
if (strcmp (xname, EVOLUTION_ALARM_UID_PROPERTY) == 0) {
const char *auid;
auid = alarm_uid_from_prop (prop);
l = g_list_append (l, g_strdup (auid));
}
}
}
return l;
}

View File

@ -66,6 +66,8 @@ void conduit_destroy_gpilot_conduit (GnomePilotConduit*);
#define WARN(e...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, e)
#define INFO(e...) g_log (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, e)
#define PILOT_MAX_ADVANCE 99
/* Debug routines */
static char *
print_local (ECalLocalRecord *local)
@ -720,6 +722,54 @@ local_record_from_comp (ECalLocalRecord *local, CalComponent *comp, ECalConduitC
*local->appt->exception = icaltimetype_to_tm (dt->value);
}
cal_component_free_exdate_list (edl);
/* Alarm */
local->appt->alarm = 0;
if (cal_component_has_alarms (comp)) {
GList *uids, *l;
CalComponentAlarm *alarm;
CalAlarmTrigger trigger;
uids = cal_component_get_alarm_uids (comp);
for (l = uids; l != NULL; l = l->next) {
alarm = cal_component_get_alarm (comp, l->data);
cal_component_alarm_get_trigger (alarm, &trigger);
if ((trigger.type == CAL_ALARM_TRIGGER_RELATIVE_START
&& trigger.u.rel_duration.is_neg)) {
local->appt->advanceUnits = advMinutes;
local->appt->advance =
trigger.u.rel_duration.minutes
+ trigger.u.rel_duration.hours * 60
+ trigger.u.rel_duration.days * 60 * 24
+ trigger.u.rel_duration.weeks * 7 * 60 * 24;
if (local->appt->advance > PILOT_MAX_ADVANCE) {
local->appt->advanceUnits = advHours;
local->appt->advance =
trigger.u.rel_duration.minutes / 60
+ trigger.u.rel_duration.hours
+ trigger.u.rel_duration.days * 24
+ trigger.u.rel_duration.weeks * 7 * 24;
}
if (local->appt->advance > PILOT_MAX_ADVANCE) {
local->appt->advanceUnits = advDays;
local->appt->advance =
trigger.u.rel_duration.minutes / (60 * 24)
+ trigger.u.rel_duration.hours / 24
+ trigger.u.rel_duration.days
+ trigger.u.rel_duration.weeks * 7;
}
if (local->appt->advance > PILOT_MAX_ADVANCE)
local->appt->advance = PILOT_MAX_ADVANCE;
local->appt->alarm = 1;
break;
}
cal_component_alarm_free (alarm);
}
cal_obj_uid_list_free (uids);
}
cal_component_get_classification (comp, &classif);
@ -907,6 +957,53 @@ comp_from_remote_record (GnomePilotConduitSyncAbs *conduit,
}
cal_component_set_exdate_list (comp, edl);
cal_component_free_exdate_list (edl);
/* Alarm */
if (appt.alarm) {
CalComponentAlarm *alarm = NULL;
CalAlarmTrigger trigger;
gboolean found = FALSE;
if (cal_component_has_alarms (comp)) {
GList *uids, *l;
uids = cal_component_get_alarm_uids (comp);
for (l = uids; l != NULL; l = l->next) {
alarm = cal_component_get_alarm (comp, l->data);
cal_component_alarm_get_trigger (alarm, &trigger);
if ((trigger.type == CAL_ALARM_TRIGGER_RELATIVE_START
&& trigger.u.rel_duration.is_neg)) {
found = TRUE;
break;
}
cal_component_alarm_free (alarm);
}
cal_obj_uid_list_free (uids);
}
if (!found)
alarm = cal_component_alarm_new ();
memset (&trigger, 0, sizeof (CalAlarmTrigger));
trigger.type = CAL_ALARM_TRIGGER_RELATIVE_START;
trigger.u.rel_duration.is_neg = 1;
switch (appt.advanceUnits) {
case advMinutes:
trigger.u.rel_duration.minutes = appt.advance;
break;
case advHours:
trigger.u.rel_duration.hours = appt.advance;
break;
case advDays:
trigger.u.rel_duration.days = appt.advance;
break;
}
cal_component_alarm_set_trigger (alarm, trigger);
cal_component_alarm_set_action (alarm, CAL_ALARM_DISPLAY);
if (!found)
cal_component_add_alarm (comp, alarm);
cal_component_alarm_free (alarm);
}
cal_component_set_transparency (comp, CAL_COMPONENT_TRANSP_NONE);