aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/comp-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'calendar/gui/comp-util.c')
-rw-r--r--calendar/gui/comp-util.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/calendar/gui/comp-util.c b/calendar/gui/comp-util.c
index 808d9be910..71efec2573 100644
--- a/calendar/gui/comp-util.c
+++ b/calendar/gui/comp-util.c
@@ -24,6 +24,7 @@
#endif
#include "comp-util.h"
+#include "dialogs/delete-comp.h"
@@ -159,3 +160,74 @@ cal_comp_util_compare_event_timezones (CalComponent *comp,
return retval;
}
+
+/**
+ * cal_comp_confirm_delete_empty_comp:
+ * @comp: A calendar component.
+ * @client: Calendar client where the component purportedly lives.
+ * @widget: Widget to be used as the basis for UTF8 conversion.
+ *
+ * Assumming a calendar component with an empty SUMMARY property (as per
+ * string_is_empty()), asks whether the user wants to delete it based on
+ * whether the appointment is on the calendar server or not. If the
+ * component is on the server, this function will present a confirmation
+ * dialog and delete the component if the user tells it to. If the component
+ * is not on the server it will just return TRUE.
+ *
+ * Return value: A result code indicating whether the component
+ * was not on the server and is to be deleted locally, whether it
+ * was on the server and the user deleted it, or whether the
+ * user cancelled the deletion.
+ **/
+ConfirmDeleteEmptyCompResult
+cal_comp_confirm_delete_empty_comp (CalComponent *comp, CalClient *client, GtkWidget *widget)
+{
+ const char *uid;
+ CalClientGetStatus status;
+ CalComponent *server_comp;
+
+ g_return_val_if_fail (comp != NULL, EMPTY_COMP_DO_NOT_REMOVE);
+ g_return_val_if_fail (IS_CAL_COMPONENT (comp), EMPTY_COMP_DO_NOT_REMOVE);
+ g_return_val_if_fail (client != NULL, EMPTY_COMP_DO_NOT_REMOVE);
+ g_return_val_if_fail (IS_CAL_CLIENT (client), EMPTY_COMP_DO_NOT_REMOVE);
+ g_return_val_if_fail (widget != NULL, EMPTY_COMP_DO_NOT_REMOVE);
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), EMPTY_COMP_DO_NOT_REMOVE);
+
+ /* See if the component is on the server. If it is not, then it likely
+ * means that the appointment is new, only in the day view, and we
+ * haven't added it yet to the server. In that case, we don't need to
+ * confirm and we can just delete the event. Otherwise, we ask
+ * the user.
+ */
+ cal_component_get_uid (comp, &uid);
+
+ status = cal_client_get_object (client, uid, &server_comp);
+
+ switch (status) {
+ case CAL_CLIENT_GET_SUCCESS:
+ gtk_object_unref (GTK_OBJECT (server_comp));
+ /* Will handle confirmation below */
+ break;
+
+ case CAL_CLIENT_GET_SYNTAX_ERROR:
+ g_message ("confirm_delete_empty_appointment(): Syntax error when getting "
+ "object `%s'",
+ uid);
+ /* However, the object *is* in the server, so confirm */
+ break;
+
+ case CAL_CLIENT_GET_NOT_FOUND:
+ return EMPTY_COMP_REMOVE_LOCALLY;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ /* The event exists in the server, so confirm whether to delete it */
+
+ if (delete_component_dialog (comp, TRUE, 1, CAL_COMPONENT_EVENT, widget)) {
+ cal_client_remove_object (client, uid);
+ return EMPTY_COMP_REMOVED_FROM_SERVER;
+ } else
+ return EMPTY_COMP_DO_NOT_REMOVE;
+}