aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui
diff options
context:
space:
mode:
authorJP Rosevear <jpr@ximian.com>2003-12-22 01:05:24 +0800
committerJP Rosevear <jpr@src.gnome.org>2003-12-22 01:05:24 +0800
commit093937a09306fc4f6f2cfb730d5e58c8b7d39e25 (patch)
tree6459a5ed73bbe03e319500dbe3e0950c7386d152 /calendar/gui
parentffc6f6edaa26c5764bb91b780e7344440d3d22be (diff)
downloadgsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar.gz
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar.bz2
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar.lz
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar.xz
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.tar.zst
gsoc2013-evolution-093937a09306fc4f6f2cfb730d5e58c8b7d39e25.zip
rewrite for new ecal api, cache all ecal's by type and minimize loading.
2003-12-21 JP Rosevear <jpr@ximian.com> * gui/e-itip-control.[hc]: rewrite for new ecal api, cache all ecal's by type and minimize loading. Switch to using the source option menu * conduits/todo/todo-conduit.c (start_calendar_server): ditto * conduits/calendar/calendar-conduit.c (start_calendar_server): use ECalSourceType * importers/icalendar-importer.c (load_file_fn): ditto (vcal_load_file_fn): ditto (gnome_calendar_import_data_fn): ditto * gui/dialogs/task-page.c (source_changed_cb): ditto * gui/dialogs/event-page.c (source_changed_cb): ditto * gui/dialogs/copy-source-dialog.h: update proto * gui/dialogs/copy-source-dialog.c (copy_source_dialog): ditto * gui/alarm-notify/alarm-notify.c (alarm_notify_add_calendar): ditto * gui/tasks-component.c (copy_task_list_cb): ditto (setup_create_ecal): ditto * gui/gnome-cal.c (gnome_calendar_construct): ditto (gnome_calendar_add_event_uri): ditto * gui/e-tasks.c (e_tasks_add_todo_uri): ditto * gui/comp-editor-factory.c (open_client): ditto * gui/calendar-offline-handler.c (backend_go_offline): ditto (backend_go_online): ditto (calendar_offline_handler_init): ditto * gui/calendar-component.c (copy_calendar_cb): ditto (setup_create_ecal): ditto * gui/print.c (print_month_small): don't pass type to e_cal_generate_instances (print_day_details): ditto (print_week_summary): ditto * gui/tag-calendar.c (tag_calendar_by_client): ditto svn path=/trunk/; revision=23994
Diffstat (limited to 'calendar/gui')
-rw-r--r--calendar/gui/alarm-notify/alarm-notify.c2
-rw-r--r--calendar/gui/calendar-component.c6
-rw-r--r--calendar/gui/calendar-offline-handler.c13
-rw-r--r--calendar/gui/comp-editor-factory.c3
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.c8
-rw-r--r--calendar/gui/dialogs/copy-source-dialog.h2
-rw-r--r--calendar/gui/dialogs/event-page.c2
-rw-r--r--calendar/gui/dialogs/task-page.c2
-rw-r--r--calendar/gui/e-itip-control.c490
-rw-r--r--calendar/gui/e-itip-control.h15
-rw-r--r--calendar/gui/e-tasks.c2
-rw-r--r--calendar/gui/gnome-cal.c4
-rw-r--r--calendar/gui/print.c17
-rw-r--r--calendar/gui/tag-calendar.c5
-rw-r--r--calendar/gui/tasks-component.c6
15 files changed, 201 insertions, 376 deletions
diff --git a/calendar/gui/alarm-notify/alarm-notify.c b/calendar/gui/alarm-notify/alarm-notify.c
index 37addc4d9a..87b885ed6a 100644
--- a/calendar/gui/alarm-notify/alarm-notify.c
+++ b/calendar/gui/alarm-notify/alarm-notify.c
@@ -173,7 +173,7 @@ alarm_notify_add_calendar (AlarmNotify *an, const char *str_uri, gboolean load_a
if (g_hash_table_lookup (priv->uri_client_hash, str_uri))
return;
- client = e_cal_new_from_uri (str_uri, CALOBJ_TYPE_EVENT);
+ client = e_cal_new_from_uri (str_uri, E_CAL_SOURCE_TYPE_EVENT);
if (client) {
if (e_cal_open (client, FALSE, NULL)) {
diff --git a/calendar/gui/calendar-component.c b/calendar/gui/calendar-component.c
index bf29355b9d..6a5427bbf3 100644
--- a/calendar/gui/calendar-component.c
+++ b/calendar/gui/calendar-component.c
@@ -351,7 +351,7 @@ copy_calendar_cb (GtkWidget *widget, CalendarComponent *comp)
if (!selected_source)
return;
- copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, CALOBJ_TYPE_EVENT);
+ copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, E_CAL_SOURCE_TYPE_EVENT);
}
static void
@@ -693,14 +693,14 @@ setup_create_ecal (CalendarComponent *calendar_component)
source = e_source_list_peek_source_by_uid (priv->source_list, uid);
g_free (uid);
- priv->create_ecal = e_cal_new (source, CALOBJ_TYPE_EVENT);
+ priv->create_ecal = e_cal_new (source, E_CAL_SOURCE_TYPE_EVENT);
}
if (!priv->create_ecal) {
/* Try to create a default if there isn't one */
source = find_first_source (priv->source_list);
if (source)
- priv->create_ecal = e_cal_new (source, CALOBJ_TYPE_EVENT);
+ priv->create_ecal = e_cal_new (source, E_CAL_SOURCE_TYPE_EVENT);
}
if (priv->create_ecal) {
diff --git a/calendar/gui/calendar-offline-handler.c b/calendar/gui/calendar-offline-handler.c
index 89a7aab36e..4faf15bf7e 100644
--- a/calendar/gui/calendar-offline-handler.c
+++ b/calendar/gui/calendar-offline-handler.c
@@ -182,8 +182,9 @@ backend_go_offline (gpointer data, gpointer user_data)
ECal *client;
gboolean success;
GError *error = NULL;
-
- client = e_cal_new_from_uri (uri, CALOBJ_TYPE_ANY);
+
+ /* FIXME This should not use LAST */
+ client = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_LAST);
g_signal_connect (client, "cal_opened", G_CALLBACK (backend_cal_opened_offline), offline_handler);
success = e_cal_open (client, TRUE, &error);
if (!success) {
@@ -203,8 +204,9 @@ backend_go_online (gpointer data, gpointer user_data)
ECal *client;
gboolean success;
GError *error = NULL;
-
- client = e_cal_new_from_uri (uri, CALOBJ_TYPE_ANY);
+
+ /* FIXME This should not use LAST */
+ client = e_cal_new_from_uri (uri, E_CAL_SOURCE_TYPE_LAST);
g_signal_connect (G_OBJECT (client), "cal_opened",
G_CALLBACK (backend_cal_opened_online), offline_handler);
success = e_cal_open (client, TRUE, &error);
@@ -326,8 +328,9 @@ calendar_offline_handler_init (CalendarOfflineHandler *offline_handler)
priv = g_new (CalendarOfflineHandlerPrivate, 1);
offline_handler->priv = priv;
+ /* FIXME This should not use LAST */
/* FIXME: what URI to use? */
- priv->client = e_cal_new_from_uri ("", CALOBJ_TYPE_ANY);
+ priv->client = e_cal_new_from_uri ("", E_CAL_SOURCE_TYPE_LAST);
priv->listener_interface = CORBA_OBJECT_NIL;
priv->is_offline = FALSE;
}
diff --git a/calendar/gui/comp-editor-factory.c b/calendar/gui/comp-editor-factory.c
index e6075101c6..1bb14c00f9 100644
--- a/calendar/gui/comp-editor-factory.c
+++ b/calendar/gui/comp-editor-factory.c
@@ -495,7 +495,8 @@ open_client (CompEditorFactory *factory, const char *uristr)
priv = factory->priv;
- client = e_cal_new_from_uri (uristr, CALOBJ_TYPE_ANY);
+ /* FIXME get the type here */
+ client = e_cal_new_from_uri (uristr, E_CAL_SOURCE_TYPE_LAST);
if (!client)
return NULL;
diff --git a/calendar/gui/dialogs/copy-source-dialog.c b/calendar/gui/dialogs/copy-source-dialog.c
index 11b523a1f8..1dc440d0ec 100644
--- a/calendar/gui/dialogs/copy-source-dialog.c
+++ b/calendar/gui/dialogs/copy-source-dialog.c
@@ -32,7 +32,7 @@ typedef struct {
ESourceList *source_list;
GConfClient *conf_client;
ESource *orig_source;
- CalObjType obj_type;
+ ECalSourceType obj_type;
ESource *selected_source;
} CopySourceDialogData;
@@ -111,7 +111,7 @@ copy_source (CopySourceDialogData *csdd)
* source to copy to.
*/
gboolean
-copy_source_dialog (GtkWindow *parent, ESource *source, CalObjType obj_type)
+copy_source_dialog (GtkWindow *parent, ESource *source, ECalSourceType obj_type)
{
CopySourceDialogData csdd;
gboolean result = FALSE;
@@ -120,9 +120,9 @@ copy_source_dialog (GtkWindow *parent, ESource *source, CalObjType obj_type)
g_return_val_if_fail (E_IS_SOURCE (source), FALSE);
- if (obj_type == CALOBJ_TYPE_EVENT)
+ if (obj_type == E_CAL_SOURCE_TYPE_EVENT)
gconf_key = "/apps/evolution/calendar/sources";
- else if (obj_type == CALOBJ_TYPE_TODO)
+ else if (obj_type == E_CAL_SOURCE_TYPE_TODO)
gconf_key = "/apps/evolution/tasks/sources";
else
return FALSE;
diff --git a/calendar/gui/dialogs/copy-source-dialog.h b/calendar/gui/dialogs/copy-source-dialog.h
index e3c750d8a0..597b1f25fc 100644
--- a/calendar/gui/dialogs/copy-source-dialog.h
+++ b/calendar/gui/dialogs/copy-source-dialog.h
@@ -26,6 +26,6 @@
#include <libecal/e-cal.h>
#include <libecal/e-cal-util.h>
-gboolean copy_source_dialog (GtkWindow *parent, ESource *source, CalObjType obj_type);
+gboolean copy_source_dialog (GtkWindow *parent, ESource *source, ECalSourceType type);
#endif
diff --git a/calendar/gui/dialogs/event-page.c b/calendar/gui/dialogs/event-page.c
index c8b90f6d81..9a6b9c25ba 100644
--- a/calendar/gui/dialogs/event-page.c
+++ b/calendar/gui/dialogs/event-page.c
@@ -1212,7 +1212,7 @@ source_changed_cb (GtkWidget *widget, ESource *source, gpointer data)
if (!priv->updating) {
ECal *client;
- client = e_cal_new (source, CALOBJ_TYPE_EVENT);
+ client = e_cal_new (source, E_CAL_SOURCE_TYPE_EVENT);
if (!client || !e_cal_open (client, FALSE, NULL)) {
GtkWidget *dialog;
diff --git a/calendar/gui/dialogs/task-page.c b/calendar/gui/dialogs/task-page.c
index e2be632847..69bad550cc 100644
--- a/calendar/gui/dialogs/task-page.c
+++ b/calendar/gui/dialogs/task-page.c
@@ -794,7 +794,7 @@ source_changed_cb (GtkWidget *widget, ESource *source, gpointer data)
if (!priv->updating) {
ECal *client;
- client = e_cal_new (source, CALOBJ_TYPE_TODO);
+ client = e_cal_new (source, E_CAL_SOURCE_TYPE_TODO);
if (!client || !e_cal_open (client, FALSE, NULL)) {
GtkWidget *dialog;
diff --git a/calendar/gui/e-itip-control.c b/calendar/gui/e-itip-control.c
index 44f0a97c2c..40b5487e60 100644
--- a/calendar/gui/e-itip-control.c
+++ b/calendar/gui/e-itip-control.c
@@ -41,6 +41,7 @@
#include <bonobo/bonobo-exception.h>
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/gtkhtml-stream.h>
+#include <libedataserver/e-source-list.h>
#include <libical/ical.h>
#include <libecal/e-cal-component.h>
#include <libecal/e-cal-time-util.h>
@@ -48,6 +49,7 @@
#include <e-util/e-time-utils.h>
#include <e-util/e-dialog-widgets.h>
#include <camel/camel-mime-filter-tohtml.h>
+#include <widgets/misc/e-source-option-menu.h>
#include "dialogs/delete-error.h"
#include "calendar-config.h"
#include "itip-utils.h"
@@ -55,11 +57,12 @@
struct _EItipControlPrivate {
GtkWidget *html;
-
- GPtrArray *event_clients;
- ECal *event_client;
- GPtrArray *task_clients;
- ECal *task_client;
+
+ ESourceList *source_lists[E_CAL_SOURCE_TYPE_LAST];
+ GHashTable *ecals[E_CAL_SOURCE_TYPE_LAST];
+
+ ECal *current_ecal;
+ ECalSourceType type;
char *vcalendar;
ECalComponent *comp;
@@ -72,7 +75,7 @@ struct _EItipControlPrivate {
int current;
int total;
- gchar *calendar_uri;
+ gchar *calendar_uid;
EAccountList *accounts;
@@ -91,12 +94,6 @@ struct _EItipControlPrivate {
#define HTML_BODY_END "</body>"
#define HTML_FOOTER "</html>"
-/* We intentionally use "calendar" instead of "calendar / *" here. We
- * don't want public calendars.
- */
-static const char *calendar_types[] = { "calendar", NULL };
-static const char *tasks_types[] = { "tasks", NULL };
-
static void class_init (EItipControlClass *klass);
static void init (EItipControl *itip);
static void destroy (GtkObject *obj);
@@ -128,123 +125,78 @@ class_init (EItipControlClass *klass)
}
static ECal *
-start_calendar_server (EItipControl *itip, char *uri)
+start_calendar_server (EItipControl *itip, ESource *source, ECalSourceType type)
{
- ECal *client;
- GError *error = NULL;
-
- client = e_cal_new_from_uri (uri, CALOBJ_TYPE_EVENT);
+ EItipControlPrivate *priv;
+ ECal *ecal;
- if (!e_cal_open (client, TRUE, &error)) {
- g_warning (_("start_calendar_server(): %s"), error->message);
- g_error_free (error);
- g_object_unref (client);
+ priv = itip->priv;
+
+ ecal = g_hash_table_lookup (priv->ecals[type], e_source_peek_uid (source));
+ if (ecal)
+ return ecal;
+
+ ecal = e_cal_new (source, type);
+ if (!e_cal_open (ecal, TRUE, NULL))
return NULL;
- }
- return client;
-}
-
-static gboolean
-start_default_server (EItipControl *itip, ECal *client, gboolean tasks)
-{
-#if 0
- if (tasks)
- return e_cal_open_default_tasks (client, FALSE);
- else
- return e_cal_open_default_calendar (client, FALSE);
-#endif
- return FALSE;
+ g_hash_table_insert (priv->ecals[type], g_strdup (e_source_peek_uid (source)), ecal);
+
+ return ecal;
}
-#if 0 /* EPFIXME, rewrite this */
-static GPtrArray *
-get_servers (EItipControl *itip, EvolutionShellClient *shell_client, const char *possible_types[], gboolean tasks)
+static ECal *
+start_calendar_server_by_uid (EItipControl *itip, const char *uid, ECalSourceType type)
{
- GNOME_Evolution_StorageRegistry registry;
- GNOME_Evolution_StorageRegistry_StorageList *storage_list;
- GPtrArray *servers;
- int i, j, k;
- CORBA_Environment ev;
-
- servers = g_ptr_array_new ();
-
- g_object_ref (shell_client);
- registry = evolution_shell_client_get_storage_registry_interface (shell_client);
-
- CORBA_exception_init (&ev);
- storage_list = GNOME_Evolution_StorageRegistry_getStorageList (registry, &ev);
- if (BONOBO_EX (&ev)) {
- CORBA_exception_free (&ev);
- return servers;
- }
+ EItipControlPrivate *priv;
+ int i;
- for (i = 0; i < storage_list->_length; i++) {
- GNOME_Evolution_Storage storage;
- GNOME_Evolution_FolderList *folder_list;
-
- CORBA_exception_init (&ev);
-
- storage = storage_list->_buffer[i];
- folder_list = GNOME_Evolution_Storage__get_folderList (storage, &ev);
- if (BONOBO_EX (&ev)) {
- CORBA_exception_free (&ev);
- continue;
- }
-
- CORBA_exception_free (&ev);
-
- for (j = 0; j < folder_list->_length; j++) {
- GNOME_Evolution_Folder folder;
-
- folder = folder_list->_buffer[j];
- for (k = 0; possible_types[k] != NULL; k++) {
- ECal *client;
- char *uri;
-
- if (itip->priv->destroyed)
- continue;
-
- if (strcmp (possible_types[k], folder.type))
- continue;
-
- uri = e_cal_util_expand_uri (folder.physicalUri, tasks);
- client = start_calendar_server (itip, uri);
- if (client != NULL)
- g_ptr_array_add (servers, client);
- g_free (uri);
+ priv = itip->priv;
- break;
- }
- }
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++) {
+ ESource *source;
- CORBA_free (folder_list);
+ source = e_source_list_peek_source_by_uid (priv->source_lists[i], uid);
+ if (source)
+ return start_calendar_server (itip, source, type);
}
- g_object_unref (shell_client);
-
- return servers;
+ return NULL;
}
-#endif
static ECal *
-find_server (GPtrArray *servers, ECalComponent *comp)
+find_server (EItipControl *itip, ECalComponent *comp)
{
+ EItipControlPrivate *priv;
+ GSList *groups, *l;
const char *uid;
- int i;
- e_cal_component_get_uid (comp, &uid);
- for (i = 0; i < servers->len; i++) {
- ECal *client;
- icalcomponent *icalcomp;
-
- client = g_ptr_array_index (servers, i);
- if (e_cal_get_object (client, uid, NULL, &icalcomp, NULL)) {
- icalcomponent_free (icalcomp);
- g_object_ref (client);
+ priv = itip->priv;
+
+ e_cal_component_get_uid (comp, &uid);
- return client;
- }
+ groups = e_source_list_peek_groups (priv->source_lists[priv->type]);
+ for (l = groups; l; l = l->next) {
+ ESourceGroup *group;
+ GSList *sources, *m;
+
+ group = l->data;
+
+ sources = e_source_group_peek_sources (group);
+ for (m = sources; m; m = m->next) {
+ ESource *source;
+ ECal *ecal;
+ icalcomponent *icalcomp;
+
+ source = m->data;
+ ecal = start_calendar_server (itip, source, priv->type);
+
+ if (ecal && e_cal_get_object (ecal, uid, NULL, &icalcomp, NULL)) {
+ icalcomponent_free (icalcomp);
+
+ return ecal;
+ }
+ }
}
return NULL;
@@ -266,22 +218,28 @@ init (EItipControl *itip)
{
EItipControlPrivate *priv;
GtkWidget *scrolled_window;
+ int i;
priv = g_new0 (EItipControlPrivate, 1);
-
itip->priv = priv;
/* Addresses */
priv->accounts = itip_addresses_get ();
- /* Initialize the cal clients */
- priv->event_clients = NULL;
- priv->event_client = NULL;
- priv->task_clients = NULL;
- priv->task_client = NULL;
+ /* Source Lists */
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++)
+ priv->source_lists[i] = NULL;
+
+ priv->source_lists[E_CAL_SOURCE_TYPE_EVENT] = e_source_list_new_for_gconf_default ("/apps/evolution/calendar/sources");
+ priv->source_lists[E_CAL_SOURCE_TYPE_TODO] = e_source_list_new_for_gconf_default ("/apps/evolution/tasks/sources");
+
+ /* Initialize the ecal hashes */
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++)
+ priv->ecals[i] = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);;
+ priv->current_ecal = NULL;
/* Other fields to init */
- priv->calendar_uri = NULL;
+ priv->calendar_uid = NULL;
priv->from_address = NULL;
priv->delegator_address = NULL;
priv->delegator_name = NULL;
@@ -344,8 +302,8 @@ clean_up (EItipControl *itip)
priv->current = 0;
priv->total = 0;
- g_free (priv->calendar_uri);
- priv->calendar_uri = NULL;
+ g_free (priv->calendar_uid);
+ priv->calendar_uid = NULL;
g_free (priv->from_address);
priv->from_address = NULL;
@@ -385,23 +343,14 @@ finalize (GObject *obj)
gtk_object_weakunref (GTK_OBJECT (priv->html), html_destroyed, itip);
priv->accounts = NULL;
-
- if (priv->event_clients) {
- for (i = 0; i < priv->event_clients->len; i++)
- g_object_unref (g_ptr_array_index (priv->event_clients, i));
- g_ptr_array_free (priv->event_clients, TRUE);
- priv->event_client = NULL;
- priv->event_clients = NULL;
- }
-
- if (priv->task_clients) {
- for (i = 0; i < priv->task_clients->len; i++)
- g_object_unref (g_ptr_array_index (priv->task_clients, i));
- g_ptr_array_free (priv->task_clients, TRUE);
- priv->task_client = NULL;
- priv->task_clients = NULL;
+
+ for (i = 0; i < E_CAL_SOURCE_TYPE_LAST; i++) {
+ if (priv->ecals[i]) {
+ g_hash_table_destroy (priv->ecals[i]);
+ priv->ecals[i] = NULL;
+ }
}
-
+
g_free (priv);
itip->priv = NULL;
@@ -724,7 +673,7 @@ write_recurrence_piece (EItipControl *itip, ECalComponent *comp,
/* FIXME This should get the tzid id, not the whole zone */
dt.value = &r->until;
- dt.tzid = r->until.zone;
+ dt.tzid = icaltimezone_get_tzid ((icaltimezone *)r->until.zone);
write_label_piece (itip, &dt, buffer, size,
_(", ending on "), NULL, TRUE);
@@ -1180,28 +1129,14 @@ get_real_item (EItipControl *itip)
EItipControlPrivate *priv;
ECalComponent *comp;
icalcomponent *icalcomp;
- ECalComponentVType type;
gboolean found = FALSE;
const char *uid;
priv = itip->priv;
- type = e_cal_component_get_vtype (priv->comp);
e_cal_component_get_uid (priv->comp, &uid);
- switch (type) {
- case E_CAL_COMPONENT_EVENT:
- if (priv->event_client != NULL)
- found = e_cal_get_object (priv->event_client, uid, NULL, &icalcomp, NULL);
- break;
- case E_CAL_COMPONENT_TODO:
- if (priv->task_client != NULL)
- found = e_cal_get_object (priv->task_client, uid, NULL, &icalcomp, NULL);
- break;
- default:
- found = FALSE;
- }
-
+ found = e_cal_get_object (priv->current_ecal, uid, NULL, &icalcomp, NULL);
if (!found)
return NULL;
@@ -1251,16 +1186,17 @@ show_current_event (EItipControl *itip)
priv = itip->priv;
- if (priv->calendar_uri)
- priv->event_client = start_calendar_server (itip, priv->calendar_uri);
+ priv->type = E_CAL_SOURCE_TYPE_EVENT;
+ if (priv->calendar_uid)
+ priv->current_ecal = start_calendar_server_by_uid (itip, priv->calendar_uid, priv->type);
else
- priv->event_client = find_server (priv->event_clients, priv->comp);
+ priv->current_ecal = find_server (itip, priv->comp);
switch (priv->method) {
case ICAL_METHOD_PUBLISH:
itip_desc = _("<b>%s</b> has published meeting information.");
itip_title = _("Meeting Information");
- options = get_publish_options (priv->event_client ? FALSE : TRUE);
+ options = get_publish_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_REQUEST:
if (priv->delegator_address != NULL)
@@ -1268,12 +1204,12 @@ show_current_event (EItipControl *itip)
else
itip_desc = _("<b>%s</b> requests your presence at a meeting.");
itip_title = _("Meeting Proposal");
- options = get_request_options (priv->event_client ? FALSE : TRUE);
+ options = get_request_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_ADD:
itip_desc = _("<b>%s</b> wishes to add to an existing meeting.");
itip_title = _("Meeting Update");
- options = get_publish_options (priv->event_client ? FALSE : TRUE);
+ options = get_publish_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_REFRESH:
itip_desc = _("<b>%s</b> wishes to receive the latest meeting information.");
@@ -1318,16 +1254,17 @@ show_current_todo (EItipControl *itip)
priv = itip->priv;
- if (priv->calendar_uri)
- priv->task_client = start_calendar_server (itip, priv->calendar_uri);
+ priv->type = E_CAL_SOURCE_TYPE_TODO;
+ if (priv->calendar_uid)
+ priv->current_ecal = start_calendar_server_by_uid (itip, priv->calendar_uid, priv->type);
else
- priv->task_client = find_server (priv->task_clients, priv->comp);
+ priv->current_ecal = find_server (itip, priv->comp);
switch (priv->method) {
case ICAL_METHOD_PUBLISH:
itip_desc = _("<b>%s</b> has published task information.");
itip_title = _("Task Information");
- options = get_publish_options (priv->task_client ? FALSE : TRUE);
+ options = get_publish_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_REQUEST:
if (priv->delegator_address != NULL)
@@ -1335,12 +1272,12 @@ show_current_todo (EItipControl *itip)
else
itip_desc = _("<b>%s</b> requests you perform a task.");
itip_title = _("Task Proposal");
- options = get_request_options (priv->task_client ? FALSE : TRUE);
+ options = get_request_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_ADD:
itip_desc = _("<b>%s</b> wishes to add to an existing task.");
itip_title = _("Task Update");
- options = get_publish_options (priv->task_client ? FALSE : TRUE);
+ options = get_publish_options (priv->current_ecal ? FALSE : TRUE);
break;
case ICAL_METHOD_REFRESH:
itip_desc = _("<b>%s</b> wishes to receive the latest task information.");
@@ -1444,12 +1381,7 @@ show_current (EItipControl *itip)
if (priv->comp)
g_object_unref (priv->comp);
- if (priv->event_client != NULL)
- g_object_unref (priv->event_client);
- priv->event_client = NULL;
- if (priv->task_client != NULL)
- g_object_unref (priv->task_client);
- priv->task_client = NULL;
+ priv->current_ecal = NULL;
/* Determine any delegate sections */
prop = icalcomponent_get_first_property (priv->ical_comp, ICAL_X_PROPERTY);
@@ -1459,8 +1391,10 @@ show_current (EItipControl *itip)
x_name = icalproperty_get_x_name (prop);
x_val = icalproperty_get_x (prop);
- if (!strcmp (x_name, "X-EVOLUTION-DELEGATOR-CALENDAR-URI"))
- e_itip_control_set_calendar_uri (itip, x_val);
+ if (!strcmp (x_name, "X-EVOLUTION-DELEGATOR-CALENDAR-UID"))
+ e_itip_control_set_calendar_uid (itip, x_val);
+ else if (!strcmp (x_name, "X-EVOLUTION-DELEGATOR-CALENDAR-URI"))
+ g_warning (G_STRLOC ": X-EVOLUTION-DELEGATOR-CALENDAR-URI used");
else if (!strcmp (x_name, "X-EVOLUTION-DELEGATOR-ADDRESS"))
e_itip_control_set_delegator_address (itip, x_val);
else if (!strcmp (x_name, "X-EVOLUTION-DELEGATOR-NAME"))
@@ -1529,18 +1463,9 @@ show_current (EItipControl *itip)
switch (type) {
case E_CAL_COMPONENT_EVENT:
- if (!priv->event_clients) {
- priv->event_clients = g_ptr_array_new ();
- /* EPFIXME */
- /* priv->event_clients = get_servers (itip, global_shell_client, calendar_types, FALSE); */
- }
show_current_event (itip);
break;
case E_CAL_COMPONENT_TODO:
- if (!priv->task_clients) {
- /* EPFIXME */
- /* priv->task_clients = get_servers (itip, global_shell_client, tasks_types, TRUE); */
- }
show_current_todo (itip);
break;
case E_CAL_COMPONENT_FREEBUSY:
@@ -1740,26 +1665,26 @@ e_itip_control_get_delegator_name (EItipControl *itip)
}
void
-e_itip_control_set_calendar_uri (EItipControl *itip, const gchar *uri)
+e_itip_control_set_calendar_uid (EItipControl *itip, const gchar *uri)
{
EItipControlPrivate *priv;
priv = itip->priv;
- if (priv->calendar_uri)
- g_free (priv->calendar_uri);
+ if (priv->calendar_uid)
+ g_free (priv->calendar_uid);
- priv->calendar_uri = g_strdup (uri);
+ priv->calendar_uid = g_strdup (uri);
}
const gchar *
-e_itip_control_get_calendar_uri (EItipControl *itip)
+e_itip_control_get_calendar_uid (EItipControl *itip)
{
EItipControlPrivate *priv;
priv = itip->priv;
- return priv->calendar_uri;
+ return priv->calendar_uid;
}
@@ -1816,8 +1741,6 @@ update_item (EItipControl *itip)
struct icaltimetype stamp;
icalproperty *prop;
icalcomponent *clone;
- ECal *client;
- ECalComponentVType type;
GtkWidget *dialog;
priv = itip->priv;
@@ -1835,19 +1758,13 @@ update_item (EItipControl *itip)
prop = icalproperty_new_x (icaltime_as_ical_string (stamp));
icalproperty_set_x_name (prop, "X-MICROSOFT-CDO-REPLYTIME");
icalcomponent_add_property (priv->ical_comp, prop);
-
- type = e_cal_component_get_vtype (priv->comp);
- if (type == E_CAL_COMPONENT_TODO)
- client = priv->task_client;
- else
- client = priv->event_client;
clone = icalcomponent_new_clone (priv->ical_comp);
icalcomponent_add_component (priv->top_level, clone);
icalcomponent_set_method (priv->top_level, priv->method);
/* FIXME Better error dialog */
- if (!e_cal_receive_objects (client, priv->top_level, NULL)) {
+ if (!e_cal_receive_objects (priv->current_ecal, priv->top_level, NULL)) {
dialog = gnome_warning_dialog (_("Calendar file could not be updated!\n"));
} else {
dialog = gnome_ok_dialog (_("Update complete\n"));
@@ -1967,30 +1884,23 @@ static void
remove_item (EItipControl *itip)
{
EItipControlPrivate *priv;
- ECal *client;
- ECalComponentVType type;
const char *uid;
GtkWidget *dialog;
GError *error = NULL;
priv = itip->priv;
- type = e_cal_component_get_vtype (priv->comp);
- if (type == E_CAL_COMPONENT_TODO)
- client = priv->task_client;
- else
- client = priv->event_client;
-
- if (client == NULL)
+ /* FIXME Is this check necessary? */
+ if (!priv->current_ecal)
return;
e_cal_component_get_uid (priv->comp, &uid);
- e_cal_remove_object (client, uid, &error);
+ e_cal_remove_object (priv->current_ecal, uid, &error);
if (!error || error->code == E_CALENDAR_STATUS_OBJECT_NOT_FOUND) {
dialog = gnome_ok_dialog (_("Removal Complete"));
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
} else {
- delete_error_dialog (error, type);
+ delete_error_dialog (error, e_cal_component_get_vtype (priv->comp));
}
g_clear_error (&error);
@@ -2001,25 +1911,14 @@ send_item (EItipControl *itip)
{
EItipControlPrivate *priv;
ECalComponent *comp;
- ECalComponentVType vtype;
GtkWidget *dialog;
priv = itip->priv;
comp = get_real_item (itip);
- vtype = e_cal_component_get_vtype (comp);
if (comp != NULL) {
- switch (vtype) {
- case E_CAL_COMPONENT_EVENT:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, priv->event_client, NULL);
- break;
- case E_CAL_COMPONENT_TODO:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, priv->task_client, NULL);
- break;
- default:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, NULL, NULL);
- }
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, priv->current_ecal, NULL);
g_object_unref (comp);
dialog = gnome_ok_dialog (_("Item sent!\n"));
} else {
@@ -2060,12 +1959,12 @@ send_freebusy (EItipControl *itip)
end = icaltime_as_timet_with_zone (*datetime.value, zone);
e_cal_component_free_datetime (&datetime);
- if (e_cal_get_free_busy (priv->event_client, NULL, start, end, &comp_list, NULL)) {
+ if (e_cal_get_free_busy (priv->current_ecal, NULL, start, end, &comp_list, NULL)) {
GList *l;
for (l = comp_list; l; l = l->next) {
ECalComponent *comp = E_CAL_COMPONENT (l->data);
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->event_client, NULL);
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, NULL);
g_object_unref (comp);
}
@@ -2078,29 +1977,22 @@ send_freebusy (EItipControl *itip)
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
}
-#if 0 /* FIXME */
static void
-button_selected_cb (EvolutionFolderSelectorButton *button, GNOME_Evolution_Folder *folder, gpointer data)
+source_selected_cb (ESourceOptionMenu *esom, ESource *source, gpointer data)
{
- EItipControl *itip = E_ITIP_CONTROL (data);
+ EItipControl *itip = data;
EItipControlPrivate *priv;
- ECalComponentVType type;
- char *uri;
+ ECal *ecal = NULL;
priv = itip->priv;
-
- type = e_cal_component_get_vtype (priv->comp);
- if (type == E_CAL_COMPONENT_TODO)
- uri = e_cal_util_expand_uri (folder->physicalUri, TRUE);
- else
- uri = e_cal_util_expand_uri (folder->physicalUri, FALSE);
- g_object_unref (priv->event_client);
- priv->event_client = start_calendar_server (itip, uri);
+ ecal = start_calendar_server (itip, source, priv->type);
+ if (!ecal) {
+ /* FIXME Show error dialog */
+ }
- g_free (uri);
+ priv->current_ecal = ecal;
}
-#endif
static void
url_requested_cb (GtkHTML *html, const gchar *url, GtkHTMLStream *handle, gpointer data)
@@ -2133,104 +2025,50 @@ url_requested_cb (GtkHTML *html, const gchar *url, GtkHTMLStream *handle, gpoint
g_free (path);
}
-typedef struct
-{
- EItipControl *itip;
- GtkHTMLEmbedded *eb;
- ECal *client;
-}
-ObjectRequestContext;
-
-static void
-default_server_started_cb (ECal *client, ECalendarStatus status, gpointer data)
-{
- ObjectRequestContext *context = data;
- EItipControlPrivate *priv;
- GtkWidget *button;
- ECalComponentVType vtype;
-
- priv = context->itip->priv;
-
- if (status != E_CALENDAR_STATUS_OK ||
- context->itip->priv->destroyed ||
- context->itip->priv->html == NULL) {
- g_object_unref (context->client);
- g_object_unref (context->itip);
- g_free (context);
- return;
- }
-
- priv->event_client = client;
- vtype = e_cal_component_get_vtype (priv->comp);
-
- switch (vtype) {
-#if 0 /* EPFIXME */
- case E_CAL_COMPONENT_EVENT:
- button = evolution_folder_selector_button_new (
- global_shell_client, _("Select Calendar Folder"),
- calendar_config_default_calendar_folder (),
- calendar_types);
- break;
- case E_CAL_COMPONENT_TODO:
- button = evolution_folder_selector_button_new (
- global_shell_client, _("Select Tasks Folder"),
- calendar_config_default_tasks_folder (),
- tasks_types);
- break;
-#endif
- default:
- button = NULL;
- }
-
-#if 0
- g_signal_connect (button, "selected", G_CALLBACK (button_selected_cb), context->itip);
-#endif
-
- gtk_container_add (GTK_CONTAINER (context->eb), button);
- gtk_widget_show (button);
-
- g_object_unref (context->itip);
- g_free (context);
- return;
-}
-
static gboolean
object_requested_cb (GtkHTML *html, GtkHTMLEmbedded *eb, gpointer data)
{
EItipControl *itip = E_ITIP_CONTROL (data);
- ObjectRequestContext *context;
EItipControlPrivate *priv;
- ECalComponentVType vtype;
- gboolean success;
-
+ GtkWidget *esom;
+ ESource *source = NULL;
+ char *uid;
+
priv = itip->priv;
- vtype = e_cal_component_get_vtype (priv->comp);
-
- context = g_new0 (ObjectRequestContext, 1);
- context->itip = itip;
- context->eb = eb;
- switch (vtype) {
- case E_CAL_COMPONENT_EVENT:
- context->client = e_cal_new_from_uri ("", CALOBJ_TYPE_EVENT);
- success = start_default_server (itip, context->client, FALSE);
+ switch (priv->type) {
+ case E_CAL_SOURCE_TYPE_EVENT:
+ uid = calendar_config_get_primary_calendar ();
break;
- case E_CAL_COMPONENT_TODO:
- context->client = e_cal_new_from_uri ("", CALOBJ_TYPE_TODO);
- success = start_default_server (itip, context->client, TRUE);
+ case E_CAL_SOURCE_TYPE_TODO:
+ uid = calendar_config_get_primary_tasks ();
break;
default:
- g_free (context);
return FALSE;
+ }
+
+ if (uid) {
+ source = e_source_list_peek_source_by_uid (priv->source_lists[priv->type], uid);
+ g_free (uid);
}
-
- if (!success) {
- g_object_unref (context->client);
- g_free (context);
- return FALSE;
+ if (!source) {
+ ESource *source;
+
+ /* Try to create a default if there isn't one */
+ source = e_source_list_peek_source_any (priv->source_lists[priv->type]);
}
- g_object_ref (itip);
+ esom = e_source_option_menu_new (priv->source_lists[priv->type]);
+ g_signal_connect_object (esom, "source_selected",
+ G_CALLBACK (source_selected_cb),
+ itip, 0);
+
+ gtk_container_add (GTK_CONTAINER (eb), esom);
+ gtk_widget_show (esom);
+
+ /* FIXME What if there is no source? */
+ if (source)
+ e_source_option_menu_select (E_SOURCE_OPTION_MENU (esom), source);
return TRUE;
}
@@ -2356,18 +2194,8 @@ ok_clicked_cb (GtkHTML *html, const gchar *method, const gchar *url, const gchar
g_slist_free (list);
e_cal_component_rescan (comp);
- switch (vtype) {
- case E_CAL_COMPONENT_EVENT:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp,
- priv->event_client, priv->top_level);
- break;
- case E_CAL_COMPONENT_TODO:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp,
- priv->task_client, priv->top_level);
- break;
- default:
- itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, NULL, NULL);
- }
+ itip_send_comp (E_CAL_COMPONENT_METHOD_REPLY, comp, priv->current_ecal, priv->top_level);
+
g_object_unref (comp);
}
}
diff --git a/calendar/gui/e-itip-control.h b/calendar/gui/e-itip-control.h
index 12ddf7354e..1a1e3e6eb9 100644
--- a/calendar/gui/e-itip-control.h
+++ b/calendar/gui/e-itip-control.h
@@ -25,10 +25,7 @@
#include <gtk/gtk.h>
-#ifdef __cplusplus
-extern "C" {
-#pragma }
-#endif /* __cplusplus */
+G_BEGIN_DECLS
#define E_TYPE_ITIP_CONTROL (e_itip_control_get_type ())
#define E_ITIP_CONTROL(obj) (GTK_CHECK_CAST ((obj), E_TYPE_ITIP_CONTROL, EItipControl))
@@ -71,12 +68,10 @@ const gchar *e_itip_control_get_delegator_address (EItipControl *itip);
void e_itip_control_set_delegator_name (EItipControl *itip,
const gchar *name);
const gchar *e_itip_control_get_delegator_name (EItipControl *itip);
-void e_itip_control_set_calendar_uri (EItipControl *itip,
- const gchar *uri);
-const gchar *e_itip_control_get_calendar_uri (EItipControl *itip);
+void e_itip_control_set_calendar_uid (EItipControl *itip,
+ const gchar *uid);
+const gchar *e_itip_control_get_calendar_uid (EItipControl *itip);
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
#endif /* _E_ITIP_CONTROL_H_ */
diff --git a/calendar/gui/e-tasks.c b/calendar/gui/e-tasks.c
index 936344de43..66c51b9032 100644
--- a/calendar/gui/e-tasks.c
+++ b/calendar/gui/e-tasks.c
@@ -850,7 +850,7 @@ e_tasks_add_todo_uri (ETasks *tasks, const char *str_uri)
if (client)
return TRUE;
- client = e_cal_new_from_uri (str_uri, CALOBJ_TYPE_TODO);
+ client = e_cal_new_from_uri (str_uri, E_CAL_SOURCE_TYPE_TODO);
g_hash_table_insert (priv->clients, g_strdup (str_uri), client);
priv->clients_list = g_list_prepend (priv->clients_list, client);
diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c
index 44766bc958..852c103809 100644
--- a/calendar/gui/gnome-cal.c
+++ b/calendar/gui/gnome-cal.c
@@ -2031,7 +2031,7 @@ gnome_calendar_construct (GnomeCalendar *gcal)
/*
* TaskPad Folder Client.
*/
- priv->task_pad_client = e_cal_new_from_uri ("", CALOBJ_TYPE_TODO); /* FIXME: use default tasks */
+ priv->task_pad_client = e_cal_new_from_uri ("", E_CAL_SOURCE_TYPE_TODO); /* FIXME: use default tasks */
if (!priv->task_pad_client)
return NULL;
@@ -2160,7 +2160,7 @@ gnome_calendar_add_event_uri (GnomeCalendar *gcal, const char *str_uri)
if (client)
return TRUE;
- client = e_cal_new_from_uri (str_uri, CALOBJ_TYPE_EVENT);
+ client = e_cal_new_from_uri (str_uri, E_CAL_SOURCE_TYPE_EVENT);
if (!client)
return FALSE;
diff --git a/calendar/gui/print.c b/calendar/gui/print.c
index 1e647c096b..06aa854018 100644
--- a/calendar/gui/print.c
+++ b/calendar/gui/print.c
@@ -639,9 +639,9 @@ print_month_small (GnomePrintContext *pc, GnomeCalendar *gcal, time_t month,
sprintf (buf, "%d", day);
/* this is a slow messy way to do this ... but easy ... */
- e_cal_generate_instances (client, now, CALOBJ_TYPE_EVENT,
- time_day_end_with_zone (now, zone),
- instance_cb, &found);
+ e_cal_generate_instances (client, now,
+ time_day_end_with_zone (now, zone),
+ instance_cb, &found);
font = found ? font_bold : font_normal;
@@ -1151,8 +1151,7 @@ print_day_details (GnomePrintContext *pc, GnomeCalendar *gcal, time_t whence,
/* Get the events from the server. */
client = gnome_calendar_get_default_client (gcal);
- e_cal_generate_instances (client, CALOBJ_TYPE_EVENT, start, end,
- print_day_details_cb, &pdi);
+ e_cal_generate_instances (client, start, end, print_day_details_cb, &pdi);
qsort (pdi.long_events->data, pdi.long_events->len,
sizeof (EDayViewEvent), e_day_view_event_sort_func);
qsort (pdi.events[0]->data, pdi.events[0]->len,
@@ -1587,10 +1586,10 @@ print_week_summary (GnomePrintContext *pc, GnomeCalendar *gcal,
/* Get the events from the server. */
client = gnome_calendar_get_default_client (gcal);
- e_cal_generate_instances (client, CALOBJ_TYPE_EVENT,
- psi.day_starts[0],
- psi.day_starts[psi.days_shown],
- print_week_summary_cb, &psi);
+ e_cal_generate_instances (client,
+ psi.day_starts[0],
+ psi.day_starts[psi.days_shown],
+ print_week_summary_cb, &psi);
qsort (psi.events->data, psi.events->len,
sizeof (EWeekViewEvent), e_week_view_event_sort_func);
diff --git a/calendar/gui/tag-calendar.c b/calendar/gui/tag-calendar.c
index 8e6937d08a..f22055b685 100644
--- a/calendar/gui/tag-calendar.c
+++ b/calendar/gui/tag-calendar.c
@@ -149,9 +149,8 @@ tag_calendar_by_client (ECalendar *ecal, ECal *client)
#if 0
g_print ("DateNavigator generating instances\n");
#endif
- e_cal_generate_instances (client, CALOBJ_TYPE_EVENT,
- c.start_time, c.end_time,
- tag_calendar_cb, &c);
+ e_cal_generate_instances (client, c.start_time, c.end_time,
+ tag_calendar_cb, &c);
}
/* Resolves TZIDs for the recurrence generator, for when the comp is not on
diff --git a/calendar/gui/tasks-component.c b/calendar/gui/tasks-component.c
index 2f89ea31bb..3c8650afd1 100644
--- a/calendar/gui/tasks-component.c
+++ b/calendar/gui/tasks-component.c
@@ -324,7 +324,7 @@ copy_task_list_cb (GtkWidget *widget, TasksComponent *comp)
if (!selected_source)
return;
- copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, CALOBJ_TYPE_TODO);
+ copy_source_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)), selected_source, E_CAL_SOURCE_TYPE_TODO);
}
static void
@@ -643,14 +643,14 @@ setup_create_ecal (TasksComponent *component)
source = e_source_list_peek_source_by_uid (priv->source_list, uid);
g_free (uid);
- priv->create_ecal = e_cal_new (source, CALOBJ_TYPE_TODO);
+ priv->create_ecal = e_cal_new (source, E_CAL_SOURCE_TYPE_TODO);
}
if (!priv->create_ecal) {
/* Try to create a default if there isn't one */
source = find_first_source (priv->source_list);
if (source)
- priv->create_ecal = e_cal_new (source, CALOBJ_TYPE_TODO);
+ priv->create_ecal = e_cal_new (source, E_CAL_SOURCE_TYPE_TODO);
}
if (priv->create_ecal) {