use get_real_item (get_refresh_options): uncomment out (get_real_item):

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

 	* gui/e-itip-control.c (send_item): use get_real_item
 	(get_refresh_options): uncomment out
 	(get_real_item): obtain the real object which has the uid of the
 	item received
 	(show_current_todo): use get_refresh_options for refresh method
 	and provide the description and summary from the real component
 	since its not in the reply
 	(show_current_event): ditto
 	(send_item): use get_real_item

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

	* gui/itip-utils.c (comp_limit_attendees): can't remove properties
	in an iteration loop, so remove them outside the loop
	(comp_minimal): don't set a recurid if there isn't one, add the x
	properties to the clone
	(comp_compliant): unref the clone for DECLINECOUNTER

	* gui/e-itip-control.c (get_refresh_options): make function
	available again
	(show_current_event): use it here
	(ok_clicked_cb): can't remove properties in an iteration loop, so
	remove them outside the loop

	* cal-util/cal-component.c (free_icalcomponent): properly free the
	attendee list
	(cal_component_rescan): don't destroy the alarm hash

svn path=/trunk/; revision=15136
This commit is contained in:
JP Rosevear
2001-12-17 20:07:22 +00:00
committed by JP Rosevear
parent 4418d0b09a
commit 95e875ecf4
4 changed files with 151 additions and 41 deletions

View File

@ -1,3 +1,33 @@
2001-12-17 JP Rosevear <jpr@ximian.com>
* gui/e-itip-control.c (send_item): use get_real_item
(get_refresh_options): uncomment out
(get_real_item): obtain the real object which has the uid of the
item received
(show_current_todo): use get_refresh_options for refresh method
and provide the description and summary from the real component
since its not in the reply
(show_current_event): ditto
(send_item): use get_real_item
2001-12-17 JP Rosevear <jpr@ximian.com>
* gui/itip-utils.c (comp_limit_attendees): can't remove properties
in an iteration loop, so remove them outside the loop
(comp_minimal): don't set a recurid if there isn't one, add the x
properties to the clone
(comp_compliant): unref the clone for DECLINECOUNTER
* gui/e-itip-control.c (get_refresh_options): make function
available again
(show_current_event): use it here
(ok_clicked_cb): can't remove properties in an iteration loop, so
remove them outside the loop
* cal-util/cal-component.c (free_icalcomponent): properly free the
attendee list
(cal_component_rescan): don't destroy the alarm hash
2001-12-13 Damon Chaplin <damon@ximian.com>
* zones.h: new file to contain all timezone names for translation.

View File

@ -275,7 +275,8 @@ static void
free_icalcomponent (CalComponent *comp, gboolean free)
{
CalComponentPrivate *priv;
GSList *l;
priv = comp->priv;
if (!priv->icalcomp)
@ -294,6 +295,11 @@ free_icalcomponent (CalComponent *comp, gboolean free)
priv->status = NULL;
for (l = priv->attendee_list; l != NULL; l = l->next)
g_free (l->data);
g_slist_free (priv->attendee_list);
priv->attendee_list = NULL;
priv->categories = NULL;
priv->classification = NULL;
@ -1078,9 +1084,8 @@ cal_component_rescan (CalComponent *comp)
/* Clear everything out */
free_icalcomponent (comp, FALSE);
g_hash_table_destroy (priv->alarm_uid_hash);
priv->alarm_uid_hash = NULL;
/* Rescan */
scan_icalcomponent (comp);
ensure_mandatory_properties (comp);
}

View File

@ -833,7 +833,6 @@ get_reply_options ()
U_("OK"));
}
#if 0
static char*
get_refresh_options ()
{
@ -846,7 +845,6 @@ get_refresh_options ()
U_("Send Latest Information"),
U_("OK"));
}
#endif
static char*
get_cancel_options ()
@ -861,10 +859,43 @@ get_cancel_options ()
U_("OK"));
}
static CalComponent *
get_real_item (EItipControl *itip)
{
EItipControlPrivate *priv;
CalComponent *comp;
CalComponentVType type;
CalClientGetStatus status;
const char *uid;
priv = itip->priv;
type = cal_component_get_vtype (priv->comp);
cal_component_get_uid (priv->comp, &uid);
switch (type) {
case CAL_COMPONENT_EVENT:
status = cal_client_get_object (priv->event_client, uid, &comp);
break;
case CAL_COMPONENT_TODO:
status = cal_client_get_object (priv->task_client, uid, &comp);
break;
default:
status = CAL_CLIENT_GET_NOT_FOUND;
}
if (status != CAL_CLIENT_GET_SUCCESS)
return NULL;
return comp;
}
static void
show_current_event (EItipControl *itip)
{
EItipControlPrivate *priv;
CalComponent *comp;
const gchar *itip_title, *itip_desc;
char *options;
@ -889,7 +920,26 @@ show_current_event (EItipControl *itip)
case ICAL_METHOD_REFRESH:
itip_desc = U_("<b>%s</b> wishes to receive the latest meeting information.");
itip_title = U_("Meeting Update Request");
options = get_publish_options ();
options = get_refresh_options ();
/* Provide extra info, since its not in the component */
comp = get_real_item (itip);
if (comp != NULL) {
CalComponentText text;
GSList *l;
cal_component_get_summary (comp, &text);
cal_component_set_summary (priv->comp, &text);
cal_component_get_description_list (comp, &l);
cal_component_set_description_list (priv->comp, l);
cal_component_free_text_list (l);
gtk_object_unref (GTK_OBJECT (comp));
} else {
CalComponentText text = {_("Unknown"), NULL};
cal_component_set_summary (priv->comp, &text);
}
break;
case ICAL_METHOD_REPLY:
itip_desc = U_("<b>%s</b> has replied to a meeting request.");
@ -915,6 +965,7 @@ static void
show_current_todo (EItipControl *itip)
{
EItipControlPrivate *priv;
CalComponent *comp;
const gchar *itip_title, *itip_desc;
char *options;
@ -939,7 +990,27 @@ show_current_todo (EItipControl *itip)
case ICAL_METHOD_REFRESH:
itip_desc = U_("<b>%s</b> wishes to receive the latest task information.");
itip_title = U_("Task Update Request");
options = get_publish_options ();
options = get_refresh_options ();
/* Provide extra info, since its not in the component */
comp = get_real_item (itip);
if (comp != NULL) {
CalComponentText text;
GSList *l;
cal_component_get_summary (comp, &text);
cal_component_set_summary (priv->comp, &text);
cal_component_get_description_list (comp, &l);
cal_component_set_description_list (priv->comp, l);
cal_component_free_text_list (l);
gtk_object_unref (GTK_OBJECT (comp));
} else {
CalComponentText text = {_("Unknown"), NULL};
cal_component_set_summary (priv->comp, &text);
}
break;
case ICAL_METHOD_REPLY:
itip_desc = U_("<b>%s</b> has replied to a task assignment.");
@ -1335,29 +1406,15 @@ send_item (EItipControl *itip)
{
EItipControlPrivate *priv;
CalComponent *comp;
CalComponentVType type;
const char *uid;
CalClientGetStatus status;
GtkWidget *dialog;
priv = itip->priv;
type = cal_component_get_vtype (priv->comp);
cal_component_get_uid (priv->comp, &uid);
comp = get_real_item (itip);
switch (type) {
case CAL_COMPONENT_EVENT:
status = cal_client_get_object (priv->event_client, uid, &comp);
break;
case CAL_COMPONENT_TODO:
status = cal_client_get_object (priv->task_client, uid, &comp);
break;
default:
status = CAL_CLIENT_GET_NOT_FOUND;
}
if (status == CAL_CLIENT_GET_SUCCESS) {
itip_send_comp (CAL_COMPONENT_METHOD_PUBLISH, comp);
if (comp != NULL) {
itip_send_comp (CAL_COMPONENT_METHOD_REQUEST, comp);
gtk_object_unref (GTK_OBJECT (comp));
dialog = gnome_ok_dialog (_("Item sent!\n"));
} else {
dialog = gnome_warning_dialog (_("The item could not be sent!\n"));
@ -1552,9 +1609,10 @@ ok_clicked_cb (GtkHTML *html, const gchar *method, const gchar *url, const gchar
if (priv->my_address != NULL) {
icalcomponent *ical_comp;
icalproperty *prop;
const char *attendee, *text;
icalvalue *value;
const char *attendee, *text;
GSList *l, *list = NULL;
ical_comp = cal_component_get_icalcomponent (comp);
for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY);
@ -1568,11 +1626,17 @@ ok_clicked_cb (GtkHTML *html, const gchar *method, const gchar *url, const gchar
attendee = icalvalue_get_string (value);
text = itip_strip_mailto (attendee);
if (!strstr (text, priv->my_address)) {
icalcomponent_remove_property (ical_comp, prop);
icalproperty_free (prop);
}
if (!strstr (text, priv->my_address))
list = g_slist_prepend (list, prop);
}
for (l = list; l; l = l->next) {
prop = l->data;
icalcomponent_remove_property (ical_comp, prop);
icalproperty_free (prop);
}
g_slist_free (list);
cal_component_rescan (comp);
itip_send_comp (CAL_COMPONENT_METHOD_REPLY, comp);
} else {

View File

@ -450,7 +450,8 @@ comp_limit_attendees (CalComponent *comp)
GList *addresses;
icalproperty *prop;
gboolean found = FALSE, match = FALSE;
GSList *l, *list = NULL;
icomp = cal_component_get_icalcomponent (comp);
addresses = itip_addresses_get ();
@ -464,8 +465,7 @@ comp_limit_attendees (CalComponent *comp)
/* If we've already found something, just erase the rest */
if (found) {
icalcomponent_remove_property (icomp, prop);
icalproperty_free (prop);
list = g_slist_prepend (list, prop);
continue;
}
@ -482,12 +482,20 @@ comp_limit_attendees (CalComponent *comp)
if (strstr (text, a->address))
found = match = TRUE;
}
if (!match) {
icalcomponent_remove_property (icomp, prop);
icalproperty_free (prop);
}
if (!match)
list = g_slist_prepend (list, prop);
match = FALSE;
}
for (l = list; l != NULL; l = l->next) {
prop = l->data;
icalcomponent_remove_property (icomp, prop);
icalproperty_free (prop);
}
g_slist_free (list);
itip_addresses_free (addresses);
return found;
@ -551,7 +559,7 @@ static CalComponent *
comp_minimal (CalComponent *comp, gboolean attendee)
{
CalComponent *clone;
icalcomponent *icomp;
icalcomponent *icomp, *icomp_clone;
icalproperty *prop;
CalComponentOrganizer organizer;
const char *uid;
@ -600,9 +608,11 @@ comp_minimal (CalComponent *comp, gboolean attendee)
cal_component_free_text_list (comments);
cal_component_get_recurid (comp, &recur_id);
cal_component_set_recurid (clone, recur_id);
if (recur_id->datetime->value != NULL)
cal_component_set_recurid (clone, recur_id);
icomp = cal_component_get_icalcomponent (comp);
icomp_clone = cal_component_get_icalcomponent (clone);
for (prop = icalcomponent_get_first_property (icomp, ICAL_X_PROPERTY);
prop != NULL;
prop = icalcomponent_get_next_property (icomp, ICAL_X_PROPERTY))
@ -610,7 +620,7 @@ comp_minimal (CalComponent *comp, gboolean attendee)
icalproperty *p;
p = icalproperty_new_clone (prop);
icalcomponent_add_property (icomp, p);
icalcomponent_add_property (icomp_clone, p);
}
cal_component_rescan (clone);
@ -659,6 +669,7 @@ comp_compliant (CalComponentItipMethod method, CalComponent *comp)
case CAL_COMPONENT_METHOD_DECLINECOUNTER:
/* Need to remove almost everything */
temp_clone = comp_minimal (clone, FALSE);
gtk_object_unref (GTK_OBJECT (clone));
clone = temp_clone;
break;
default: