diff options
author | Vibha Yadav <yvibha@novell.com> | 2011-05-04 20:04:48 +0800 |
---|---|---|
committer | Vibha Yadav <yvibha@novell.com> | 2011-05-04 20:04:48 +0800 |
commit | 218bd67a1e0ab29971d3bf7f1c111210b0d74e2d (patch) | |
tree | 2197d7861360e373ffb4835990fd35ced331b63e | |
parent | ac393ed4017fec025c3dd66d4edbee2bea11cb06 (diff) | |
download | gsoc2013-evolution-218bd67a1e0ab29971d3bf7f1c111210b0d74e2d.tar.gz gsoc2013-evolution-218bd67a1e0ab29971d3bf7f1c111210b0d74e2d.tar.zst gsoc2013-evolution-218bd67a1e0ab29971d3bf7f1c111210b0d74e2d.zip |
Bug 649365 - Creation of new repository evolution-groupwise
Removing groupwise plugin code from evolution.
38 files changed, 2 insertions, 10350 deletions
diff --git a/configure.ac b/configure.ac index f7f1270ecf..777d2166d2 100644 --- a/configure.ac +++ b/configure.ac @@ -250,7 +250,6 @@ PKG_CHECK_MODULES([EVOLUTION_DATA_SERVER], libecal-1.2 >= eds_minimum_version libedataserver-1.2 >= eds_minimum_version libedataserverui-3.0 >= eds_minimum_version - libegroupwise-1.2 >= eds_minimum_version libebackend-1.2 >= eds_minimum_version]) dnl ****************************** @@ -1175,7 +1174,7 @@ EVO_SET_COMPILE_FLAGS(CAMEL, camel-provider-1.2, $MANUAL_NSS_CFLAGS, $MOXILLA_NS AC_SUBST(CAMEL_CFLAGS) AC_SUBST(CAMEL_LIBS) -EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, camel-provider-1.2 libedataserver-1.2 libegroupwise-1.2) +EVO_SET_COMPILE_FLAGS(CAMEL_GROUPWISE, camel-provider-1.2 libedataserver-1.2) AC_SUBST(CAMEL_GROUPWISE_CFLAGS) AC_SUBST(CAMEL_GROUPWISE_LIBS) @@ -1402,7 +1401,7 @@ AC_ARG_ENABLE([plugins], [enable_plugins="$enableval"],[enable_plugins=all]) dnl Add any new plugins here -plugins_base_always="calendar-file calendar-http itip-formatter default-source addressbook-file mark-all-read groupwise-features publish-calendar caldav imap-features google-account-setup webdav-account-setup" +plugins_base_always="calendar-file calendar-http itip-formatter default-source addressbook-file mark-all-read publish-calendar caldav imap-features google-account-setup webdav-account-setup" plugins_base="$plugins_base_always $SA_JUNK_PLUGIN $BF_JUNK_PLUGIN" dist_plugins_base="$plugins_base_always calendar-weather sa-junk-plugin bogo-junk-plugin" @@ -1752,7 +1751,6 @@ plugins/email-custom-header/Makefile plugins/external-editor/Makefile plugins/face/Makefile plugins/google-account-setup/Makefile -plugins/groupwise-features/Makefile plugins/image-inline/Makefile plugins/imap-features/Makefile plugins/itip-formatter/Makefile diff --git a/plugins/groupwise-features/Makefile.am b/plugins/groupwise-features/Makefile.am deleted file mode 100644 index 848f5bfc09..0000000000 --- a/plugins/groupwise-features/Makefile.am +++ /dev/null @@ -1,97 +0,0 @@ -if OS_WIN32 -NO_UNDEFINED_REQUIRED_LIBS = $(top_builddir)/mail/libevolution-mail.la -endif - -@EVO_PLUGIN_RULE@ - -plugin_DATA = org-gnome-groupwise-features.eplug org-gnome-compose-send-options.xml - -plugin_LTLIBRARIES = liborg-gnome-groupwise-features.la - -liborg_gnome_groupwise_features_la_CPPFLAGS = \ - $(AM_CPPFLAGS) \ - -I$(top_srcdir) \ - -I$(top_srcdir)/widgets \ - -I$(top_srcdir)/widgets/misc \ - -I$(top_builddir)/composer \ - -I$(top_builddir)/mail \ - $(EVOLUTION_MAIL_CFLAGS) \ - $(EVOLUTION_CALENDAR_CFLAGS) \ - $(EVOLUTION_ADDRESSBOOK_CFLAGS) \ - $(CAMEL_GROUPWISE_CFLAGS) \ - $(GNOME_PLATFORM_CFLAGS) \ - -DEVOLUTION_UIDIR=\""$(uidir)"\" \ - -DEVOLUTION_IMAGESDIR=\""$(imagesdir)"\" - -liborg_gnome_groupwise_features_la_SOURCES = \ - gw-ui.h \ - gw-ui.c \ - share-folder-common.c \ - share-folder.c \ - share-folder.h \ - install-shared.c \ - send-options.c \ - mail-send-options.c \ - mail-send-options.h \ - status-track.c \ - addressbook-groupwise.c \ - junk-mail-settings.c \ - junk-settings.c \ - junk-settings.h \ - proxy.h \ - proxy.c \ - proxy-login.h \ - proxy-login.c \ - process-meeting.c \ - mail-retract.c \ - camel-gw-listener.c \ - camel-gw-listener.h \ - groupwise-account-setup.c - -liborg_gnome_groupwise_features_la_LIBADD= \ - $(top_builddir)/e-util/libeutil.la \ - $(top_builddir)/composer/libcomposer.la \ - $(top_builddir)/shell/libeshell.la \ - $(top_builddir)/calendar/gui/libevolution-calendar.la \ - $(top_builddir)/widgets/misc/libemiscwidgets.la \ - $(top_builddir)/filter/libfilter.la \ - $(top_builddir)/mail/libevolution-mail.la \ - $(EVOLUTION_CALENDAR_LIBS) \ - $(EVOLUTION_MAIL_LIBS) \ - $(CAMEL_GROUPWISE_LIBS) \ - $(GNOME_PLATFORM_LIBS) - -liborg_gnome_groupwise_features_la_LDFLAGS = -module -avoid-version $(NO_UNDEFINED) - -ui_DATA = \ - properties.ui \ - notification.ui \ - junk-settings.ui \ - proxy-add-dialog.ui \ - proxy-listing.ui \ - proxy-login-dialog.ui - -error_DATA = \ - org-gnome-shared-folder.error \ - org-gnome-proxy.error \ - org-gnome-proxy-login.error \ - org-gnome-process-meeting.error \ - org-gnome-mail-retract.error - -errordir = $(privdatadir)/errors - -BUILT_SOURCES = org-gnome-groupwise-features.eplug $(error_DATA) - -EXTRA_DIST = \ - $(ui_DATA) \ - org-gnome-compose-send-options.xml \ - org-gnome-groupwise-features.eplug.xml \ - org-gnome-shared-folder.error.xml \ - org-gnome-process-meeting.error.xml \ - org-gnome-proxy.error.xml \ - org-gnome-proxy-login.error.xml \ - org-gnome-mail-retract.error.xml - -CLEANFILES = $(BUILT_SOURCES) - --include $(top_srcdir)/git.mk diff --git a/plugins/groupwise-features/addressbook-groupwise.c b/plugins/groupwise-features/addressbook-groupwise.c deleted file mode 100644 index 8dda4dca40..0000000000 --- a/plugins/groupwise-features/addressbook-groupwise.c +++ /dev/null @@ -1,69 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <gtk/gtk.h> -#include <e-util/e-config.h> -#include <addressbook/gui/widgets/eab-config.h> -#include <libedataserver/e-source.h> -#include <libedataserver/e-source-group.h> -#include <glib/gi18n.h> -#include <string.h> - -void commit_groupwise_addressbook (EPlugin *epl, EConfigTarget *target); -GtkWidget *e_book_groupwise_dummy (EPlugin *epl, EConfigHookItemFactoryData *data); - -void -commit_groupwise_addressbook (EPlugin *epl, EConfigTarget *target) -{ - EABConfigTargetSource *t = (EABConfigTargetSource *) target; - ESource *source = t->source; - gchar *uri_text; - ESourceGroup *source_group; - gchar *relative_uri; - GSList *l; - - uri_text = e_source_get_uri (source); - if (strncmp (uri_text, "groupwise", 9)) { - g_free (uri_text); - - return; - } - e_source_set_property (source, "auth-domain", "Groupwise"); - relative_uri = g_strconcat (";", e_source_peek_name (source), NULL); - e_source_set_relative_uri (source, relative_uri); - g_free (relative_uri); - - source_group = e_source_peek_group (source); - l = e_source_group_peek_sources (source_group); - if (l && l->data ) { - e_source_set_property(source, "auth", e_source_get_property(l->data, "auth")); - e_source_set_property(source, "user", e_source_get_property(l->data, "user")); - e_source_set_property(source, "use_ssl", e_source_get_property(l->data, "use_ssl")); - e_source_set_property(source, "port", e_source_get_property(l->data, "port")); - } -} - -GtkWidget * -e_book_groupwise_dummy (EPlugin *epl, EConfigHookItemFactoryData *data) -{ - - return NULL; -} diff --git a/plugins/groupwise-features/camel-gw-listener.c b/plugins/groupwise-features/camel-gw-listener.c deleted file mode 100644 index ed73953098..0000000000 --- a/plugins/groupwise-features/camel-gw-listener.c +++ /dev/null @@ -1,1043 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Sivaiah Nallagatla <snallagatla@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "camel-gw-listener.h" -#include <string.h> -#include <glib/gi18n.h> -#include <camel/camel.h> -#include <e-gw-connection.h> -#include <libedataserverui/e-passwords.h> -#include "e-util/e-alert-dialog.h" -#include <libecal/e-cal.h> -#include <shell/e-shell.h> -#include <e-util/e-account-utils.h> - -/*stores some info about all currently existing groupwise accounts - list of GwAccountInfo structures */ - -static GList *groupwise_accounts = NULL; - -struct _CamelGwListenerPrivate { - GConfClient *gconf_client; - /* we get notification about mail account changes form this object */ - EAccountList *account_list; -}; - -struct _GwAccountInfo { - gchar *uid; - gchar *name; - gchar *source_url; - gboolean auto_check; - guint auto_check_time; -}; - -typedef struct _GwAccountInfo GwAccountInfo; - -#define GROUPWISE_URI_PREFIX "groupwise://" -#define GROUPWISE_PREFIX_LENGTH 12 - -#define PARENT_TYPE G_TYPE_OBJECT - -static GObjectClass *parent_class = NULL; - -static void dispose (GObject *object); -static void finalize (GObject *object); - -static void -camel_gw_listener_class_init (CamelGwListenerClass *class) -{ - GObjectClass *object_class; - - parent_class = g_type_class_ref (PARENT_TYPE); - object_class = G_OBJECT_CLASS (class); - - /* virtual method override */ - object_class->dispose = dispose; - object_class->finalize = finalize; -} - -static void -camel_gw_listener_init (CamelGwListener *config_listener, CamelGwListenerClass *class) -{ - config_listener->priv = g_new0 (CamelGwListenerPrivate, 1); -} - -static void -dispose (GObject *object) -{ - CamelGwListener *config_listener = CAMEL_GW_LISTENER (object); - - g_object_unref (config_listener->priv->gconf_client); - g_object_unref (config_listener->priv->account_list); - - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -finalize (GObject *object) -{ - CamelGwListener *config_listener = CAMEL_GW_LISTENER (object); - GList *list; - GwAccountInfo *info; - - if (config_listener->priv) { - g_free (config_listener->priv); - } - - for (list = g_list_first (groupwise_accounts); list; list = g_list_next (list)) { - - info = (GwAccountInfo *) (list->data); - - if (info) { - - g_free (info->uid); - g_free (info->name); - g_free (info->source_url); - g_free (info); - } - } - - g_list_free (groupwise_accounts); - - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -/*determines whehter the passed in account is groupwise or not by looking at source url */ - -static gboolean -is_groupwise_account (EAccount *account) -{ - if (account->source->url != NULL) { - return (strncmp (account->source->url, GROUPWISE_URI_PREFIX, GROUPWISE_PREFIX_LENGTH ) == 0); - } else { - return FALSE; - } -} - -/* looks up for an existing groupwise account info in the groupwise_accounts list based on uid */ - -static GwAccountInfo* -lookup_account_info (const gchar *key) -{ - GList *list; - GwAccountInfo *info; - gint found = 0; - - if (!key) - return NULL; - - info = NULL; - - for (list = g_list_first (groupwise_accounts); list; list = g_list_next (list)) { - info = (GwAccountInfo *) (list->data); - found = (strcmp (info->uid, key) == 0); - if (found) - break; - } - if (found) - return info; - return NULL; -} - -#define CALENDAR_SOURCES "/apps/evolution/calendar/sources" -#define TASKS_SOURCES "/apps/evolution/tasks/sources" -#define NOTES_SOURCES "/apps/evolution/memos/sources" -#define SELECTED_CALENDARS "/apps/evolution/calendar/display/selected_calendars" -#define SELECTED_TASKS "/apps/evolution/calendar/tasks/selected_tasks" -#define SELECTED_NOTES "/apps/evolution/calendar/memos/selected_memos" - -static void -add_esource (const gchar *conf_key, GwAccountInfo *info, const gchar *source_name, CamelURL *url, const gchar * parent_id_name, gboolean can_create) -{ - ESourceList *source_list; - ESourceGroup *group; - ESource *source; - GConfClient* client; - GSList *ids, *temp; - const gchar *source_selection_key; - gchar *relative_uri; - const gchar *soap_port; - const gchar * use_ssl; - const gchar *poa_address; - const gchar *offline_sync; - const gchar *group_name; - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - - group_name = info->name; - - soap_port = camel_url_get_param (url, "soap_port"); - - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - - use_ssl = camel_url_get_param (url, "use_ssl"); - - offline_sync = camel_url_get_param (url, "offline_sync"); - - client = gconf_client_get_default (); - source_list = e_source_list_new_for_gconf (client, conf_key); - group = e_source_group_new (group_name, GROUPWISE_URI_PREFIX); - - if (!e_source_list_add_group (source_list, group, -1)) - return; - - if (!can_create) - e_source_group_set_property (group, "create_source", "no"); - - relative_uri = g_strdup_printf ("%s@%s/", url->user, poa_address); - source = e_source_new (source_name, relative_uri); - e_source_set_property (source, "auth", "1"); - e_source_set_property (source, "username", url->user); - e_source_set_property (source, "port", soap_port); - e_source_set_property (source, "auth-domain", "Groupwise"); - e_source_set_property (source, "use_ssl", use_ssl); - - if (info->auto_check) { - gchar *str = g_strdup_printf ("%d", info->auto_check_time); - - e_source_set_property (source, "refresh", str); - g_free (str); - } else - e_source_set_property (source, "refresh", NULL); - - e_source_set_property (source, "offline_sync", offline_sync ? "1" : "0" ); - e_source_set_property (source, "delete", "no"); - if (parent_id_name) { - e_source_set_property (source, "parent_id_name", parent_id_name); - e_source_set_color_spec (source, camel_url_get_param (url, "color")); - } else - e_source_set_color_spec (source, "#EEBC60"); - e_source_group_add_source (group, source, -1); - e_source_list_sync (source_list, NULL); - - if (!strcmp (conf_key, CALENDAR_SOURCES)) - source_selection_key = SELECTED_CALENDARS; - else if (!strcmp (conf_key, TASKS_SOURCES)) - source_selection_key = SELECTED_TASKS; - else if (!strcmp (conf_key, NOTES_SOURCES)) - source_selection_key = SELECTED_NOTES; - else - source_selection_key = NULL; - - if (source_selection_key) { - ids = gconf_client_get_list (client, source_selection_key , GCONF_VALUE_STRING, NULL); - ids = g_slist_append (ids, g_strdup (e_source_peek_uid (source))); - gconf_client_set_list (client, source_selection_key, GCONF_VALUE_STRING, ids, NULL); - temp = ids; - - for (; temp != NULL; temp = g_slist_next (temp)) - g_free (temp->data); - - g_slist_free (ids); - } - - g_object_unref (source); - g_object_unref (group); - g_object_unref (source_list); - g_object_unref (client); - g_free (relative_uri); -} - -static void -remove_esource (const gchar *conf_key, const gchar *group_name, gchar * source_name, const gchar * relative_uri) -{ - ESourceList *list; - GSList *groups; - gboolean found_group; - GConfClient* client; - GSList *ids; - GSList *node_tobe_deleted; - const gchar *source_selection_key; - - client = gconf_client_get_default (); - list = e_source_list_new_for_gconf (client, conf_key); - groups = e_source_list_peek_groups (list); - - found_group = FALSE; - - for (; groups != NULL && !found_group; groups = g_slist_next (groups)) { - ESourceGroup *group = E_SOURCE_GROUP (groups->data); - - if (strcmp (e_source_group_peek_name (group), group_name) == 0 && - strcmp (e_source_group_peek_base_uri (group), GROUPWISE_URI_PREFIX ) == 0) { - GSList *sources = e_source_group_peek_sources (group); - - for (; sources != NULL; sources = g_slist_next (sources)) { - ESource *source = E_SOURCE (sources->data); - const gchar *source_relative_uri; - - source_relative_uri = e_source_peek_relative_uri (source); - if (source_relative_uri == NULL) - continue; - if (strcmp (source_relative_uri, relative_uri) == 0) { - - if (!strcmp (conf_key, CALENDAR_SOURCES)) - source_selection_key = SELECTED_CALENDARS; - else if (!strcmp (conf_key, TASKS_SOURCES)) - source_selection_key = SELECTED_TASKS; - else if (!strcmp (conf_key, NOTES_SOURCES)) - source_selection_key = SELECTED_NOTES; - else source_selection_key = NULL; - if (source_selection_key) { - ids = gconf_client_get_list (client, source_selection_key , - GCONF_VALUE_STRING, NULL); - node_tobe_deleted = g_slist_find_custom (ids, e_source_peek_uid (source), (GCompareFunc) strcmp); - if (node_tobe_deleted) { - g_free (node_tobe_deleted->data); - ids = g_slist_delete_link (ids, node_tobe_deleted); - } - gconf_client_set_list (client, source_selection_key, - GCONF_VALUE_STRING, ids, NULL); - - } - e_source_list_remove_group (list, group); - e_source_list_sync (list, NULL); - found_group = TRUE; - break; - - } - } - - if (found_group) - break; - - } - - } - - g_object_unref (list); - g_object_unref (client); - -} - -/* looks up for e-source with having same info as old_account_info and changes its values passed in new values */ - -static void -modify_esource (const gchar * conf_key, GwAccountInfo *old_account_info, EAccount *a, CamelURL *new_url) -{ - ESourceList *list; - GSList *groups; - gchar *old_relative_uri; - CamelURL *url; - gboolean found_group; - GConfClient* client; - const gchar *poa_address; - const gchar *new_poa_address; - const gchar * new_group_name = a->name; - - url = camel_url_new (old_account_info->source_url, NULL); - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - new_poa_address = new_url->host; - - old_relative_uri = g_strdup_printf ("%s@%s/", url->user, poa_address); - client = gconf_client_get_default (); - list = e_source_list_new_for_gconf (client, conf_key); - groups = e_source_list_peek_groups (list); - - found_group = FALSE; - - for (; groups != NULL && !found_group; groups = g_slist_next (groups)) { - ESourceGroup *group = E_SOURCE_GROUP (groups->data); - - if (strcmp (e_source_group_peek_name (group), old_account_info->name) == 0 && - strcmp (e_source_group_peek_base_uri (group), GROUPWISE_URI_PREFIX) == 0) { - GSList *sources = e_source_group_peek_sources (group); - - for (; sources != NULL; sources = g_slist_next (sources)) { - ESource *source = E_SOURCE (sources->data); - const gchar *source_relative_uri; - - source_relative_uri = e_source_peek_relative_uri (source); - if (source_relative_uri == NULL) - continue; - if (strcmp (source_relative_uri, old_relative_uri) == 0) { - gchar *new_relative_uri; - - new_relative_uri = g_strdup_printf ("%s@%s/", new_url->user, new_poa_address); - e_source_group_set_name (group, new_group_name); - e_source_set_relative_uri (source, new_relative_uri); - e_source_set_property (source, "username", new_url->user); - e_source_set_property (source, "port", camel_url_get_param (new_url,"soap_port")); - e_source_set_property (source, "use_ssl", camel_url_get_param (url, "use_ssl")); - e_source_set_property (source, "offline_sync", camel_url_get_param (url, "offline_sync") ? "1" : "0"); - - if (a->source->auto_check) { - gchar *str = g_strdup_printf ("%d", a->source->auto_check_time); - - e_source_set_property (source, "refresh", str); - g_free (str); - } else - e_source_set_property (source, "refresh", NULL); - - e_source_list_sync (list, NULL); - found_group = TRUE; - g_free (new_relative_uri); - break; - } - } - - if (found_group) - break; - } - } - - g_object_unref (list); - g_object_unref (client); - camel_url_free (url); - g_free (old_relative_uri); - -} -/* add sources for calendar and tasks if the account added is groupwise account - adds the new account info to groupwise_accounts list */ - -static void -add_calendar_tasks_sources (GwAccountInfo *info) -{ - CamelURL *url; - - url = camel_url_new (info->source_url, NULL); - add_esource ("/apps/evolution/calendar/sources", info, _("Calendar"), url, NULL, FALSE); - add_esource ("/apps/evolution/tasks/sources", info, _("Tasks"), url, NULL, FALSE); - add_esource ("/apps/evolution/memos/sources", info, _("Notes"), url, NULL, TRUE); - - camel_url_free (url); - -} - -/* removes calendar and tasks sources if the account removed is groupwise account - removes the the account info from groupwise_account list */ - -static void -remove_calendar_tasks_sources (GwAccountInfo *info) -{ - CamelURL *url; - gchar *relative_uri; - const gchar *poa_address; - - url = camel_url_new (info->source_url, NULL); - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - - relative_uri = g_strdup_printf ("%s@%s/", url->user, poa_address); - remove_esource ("/apps/evolution/calendar/sources", info->name, _("Calendar"), relative_uri); - remove_esource ("/apps/evolution/tasks/sources", info->name, _("Checklist"), relative_uri); - remove_esource ("/apps/evolution/memos/sources", info->name, _("Notes"), relative_uri); - - camel_url_free (url); - g_free (relative_uri); - -} - -static GList* -get_addressbook_names_from_server (gchar *source_url) -{ - gchar *key; - EGwConnection *cnc; - gchar *password; - GList *book_list = NULL; - gint status, count = 0; - const gchar *soap_port; - CamelURL *url; - gboolean remember; - gchar *failed_auth = NULL; - gchar *prompt; - gchar *password_prompt; - gchar *uri; - const gchar *use_ssl; - const gchar *poa_address; - guint32 flags = E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET; - - url = camel_url_new (source_url, NULL); - if (url == NULL) { - return NULL; - } - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return NULL; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); - - if (use_ssl && g_str_equal (use_ssl, "always")) - uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); - else - uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); - - cnc = NULL; - - do { - count++; - /*we have to uncache the password before prompting again*/ - if (failed_auth) { - e_passwords_forget_password ("Groupwise", key); - password = NULL; - } - - password = e_passwords_get_password ("Groupwise", key); - if (!password) { - /* Translators: First %s is the server name, second %s is user name */ - password_prompt = g_strdup_printf (_("Enter password for %s (user %s)"), - poa_address, url->user); - prompt = g_strconcat (failed_auth ? failed_auth : "", password_prompt, NULL); - g_free (password_prompt); - password = e_passwords_ask_password (prompt, "Groupwise", key, prompt, - flags, &remember, - NULL); - g_free (prompt); - - if (!password) - break; - } - - cnc = e_gw_connection_new (uri, url->user, password); - g_free (password); - if (!E_IS_GW_CONNECTION (cnc)) { - if (count == 3) - break; - } - - failed_auth = _("Failed to authenticate.\n"); - flags |= E_PASSWORDS_REPROMPT; - } while (cnc == NULL); - - g_free (key); - - if (E_IS_GW_CONNECTION (cnc)) { - book_list = NULL; - status = e_gw_connection_get_address_book_list (cnc, &book_list); - if (status == E_GW_CONNECTION_STATUS_OK) - return book_list; - } - - /*FIXME: This error message should be relocated to addressbook and should reflect - * that it actually failed to get the addressbooks*/ - e_alert_run_dialog_for_args (e_shell_get_active_window (NULL), - "mail:gw-accountsetup-error", poa_address, - NULL); - return NULL; -} - -static void -add_proxy_sources (GwAccountInfo *info, const gchar *parent_name) -{ - CamelURL *url; - gchar *color; - - url = camel_url_new (info->source_url, NULL); - - color = g_strdup_printf ("#%06X", g_random_int_range (0x100000, 0xffffaa)); - /* The above range is chosen so that the colors are neither too light nor too dark - and appealing in all the themes */ - - camel_url_set_param (url, "color", color); - - add_esource ("/apps/evolution/calendar/sources", info, _("Calendar"), url, parent_name, FALSE); - add_esource ("/apps/evolution/tasks/sources", info, _("Tasks"), url, parent_name, FALSE); - add_esource ("/apps/evolution/memos/sources", info, _("Notes"), url, parent_name, TRUE); - - g_free (color); - camel_url_free (url); -} - -static gboolean -add_addressbook_sources (EAccount *account) -{ - CamelURL *url; - ESourceList *list; - ESourceGroup *group; - ESource *source; - gchar *base_uri; - const gchar *soap_port; - GList *books_list, *temp_list; - GConfClient* client; - const gchar * use_ssl; - const gchar *poa_address; - gboolean is_frequent_contacts = FALSE, is_writable = FALSE; - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) { - return FALSE; - } - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return FALSE; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - base_uri = g_strdup_printf ("groupwise://%s@%s", url->user, poa_address); - client = gconf_client_get_default (); - list = e_source_list_new_for_gconf (client, "/apps/evolution/addressbook/sources" ); - group = e_source_group_new (account->name, base_uri); - books_list = get_addressbook_names_from_server (account->source->url); - temp_list = books_list; - if (!temp_list) - return FALSE; - for (; temp_list != NULL; temp_list = g_list_next (temp_list)) { - const gchar *book_name = e_gw_container_get_name (E_GW_CONTAINER (temp_list->data)); - /* is_writable is set to TRUE if the book has isPersonal property, - * by e_gw_connection_get_address_book_list() - */ - is_writable = e_gw_container_get_is_writable (E_GW_CONTAINER (temp_list->data)); - if (is_writable && - !g_ascii_strncasecmp (book_name, "Novell GroupWise Address Book", strlen (book_name))) { - /* This is a hack to not to show multiple groupwise system address books - * if they are the personal address books with the name of system address book - * See http://bugzilla.gnome.org/show_bug.cgi?id=320119 - * and http://bugzilla.gnome.org/show_bug.cgi?id=309511 - */ - continue; - } - - if (!is_frequent_contacts) - is_frequent_contacts = e_gw_container_get_is_frequent_contacts (E_GW_CONTAINER (temp_list->data)); - source = e_source_new (book_name, g_strconcat (";",book_name, NULL)); - e_source_set_property (source, "auth", "plain/password"); - e_source_set_property (source, "auth-domain", "Groupwise"); - e_source_set_property (source, "port", soap_port); - e_source_set_property(source, "user", url->user); - /* mark system address book for offline usage */ - /* FIXME: add isPersonal flag to container and use that isFrequentContact - * properties, instead of using writable to distinguish between the - * system address book and other address books. - */ - if (!is_writable) - e_source_set_property (source, "offline_sync", "1"); - else - e_source_set_property (source, "offline_sync", - camel_url_get_param (url, "offline_sync") ? "1" : "0"); - if (!is_writable) - e_source_set_property (source, "completion", "true"); - if (is_frequent_contacts) - e_source_set_property (source, "completion", "true"); - e_source_set_property (source, "use_ssl", use_ssl); - e_source_group_add_source (group, source, -1); - g_object_unref (source); - } - e_source_list_add_group (list, group, -1); - e_source_list_sync (list, NULL); - g_object_unref (group); - g_object_unref (list); - g_object_unref (client); - g_free (base_uri); - - if (!is_frequent_contacts) { - /* display warning message */ - e_alert_run_dialog_for_args (e_shell_get_active_window (NULL), - "addressbook:gw-book-list-init", NULL); - } - return TRUE; -} - -static void -modify_addressbook_sources ( EAccount *account, GwAccountInfo *existing_account_info ) -{ - CamelURL *url; - ESourceList *list; - ESourceGroup *group; - GSList *groups; - gboolean found_group; - gboolean delete_group; - gchar *old_base_uri; - gchar *new_base_uri; - const gchar *soap_port; - const gchar *use_ssl; - GSList *sources; - ESource *source; - GConfClient *client; - const gchar *poa_address; - - url = camel_url_new (existing_account_info->source_url, NULL); - if (url == NULL) { - return; - } - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - - old_base_uri = g_strdup_printf ("groupwise://%s@%s", url->user, poa_address); - camel_url_free (url); - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) - return; - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - new_base_uri = g_strdup_printf ("groupwise://%s@%s", url->user, poa_address); - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - client = gconf_client_get_default (); - list = e_source_list_new_for_gconf (client, "/apps/evolution/addressbook/sources" ); - groups = e_source_list_peek_groups (list); - delete_group = FALSE; - if (strcmp (old_base_uri, new_base_uri) != 0) - delete_group = TRUE; - group = NULL; - found_group = FALSE; - for (; groups != NULL && !found_group; groups = g_slist_next (groups)) { - - group = E_SOURCE_GROUP (groups->data); - if ( strcmp ( e_source_group_peek_base_uri (group), old_base_uri) == 0 && strcmp (e_source_group_peek_name (group), existing_account_info->name) == 0) { - found_group = TRUE; - if (!delete_group) { - e_source_group_set_name (group, account->name); - sources = e_source_group_peek_sources (group); - for (; sources != NULL; sources = g_slist_next (sources)) { - source = E_SOURCE (sources->data); - e_source_set_property (source, "port", soap_port); - e_source_set_property (source, "use_ssl", use_ssl); - } - - e_source_list_sync (list, NULL); - } - - } - } - if (found_group && delete_group) { - e_source_list_remove_group (list, group); - e_source_list_sync (list, NULL); - g_object_unref (list); - list = NULL; - add_addressbook_sources (account); - } - g_free (old_base_uri); - if (list) - g_object_unref (list); - camel_url_free (url); - g_object_unref (client); - -} - -static void -remove_addressbook_sources (GwAccountInfo *existing_account_info) -{ - ESourceList *list; - ESourceGroup *group; - GSList *groups; - CamelURL *url; - gchar *base_uri; - GConfClient *client; - const gchar *poa_address; - - url = camel_url_new (existing_account_info->source_url, NULL); - if (url == NULL) { - return; - } - - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return; - - base_uri = g_strdup_printf ("groupwise://%s@%s", url->user, poa_address); - client = gconf_client_get_default (); - list = e_source_list_new_for_gconf (client, "/apps/evolution/addressbook/sources" ); - groups = e_source_list_peek_groups (list); - - for (; groups != NULL; groups = g_slist_next (groups)) { - - group = E_SOURCE_GROUP (groups->data); - if ( strcmp ( e_source_group_peek_base_uri (group), base_uri) == 0 && strcmp (e_source_group_peek_name (group), existing_account_info->name) == 0) { - - e_source_list_remove_group (list, group); - e_source_list_sync (list, NULL); - break; - } - } - g_object_unref (list); - g_object_unref (client); - g_free (base_uri); - camel_url_free (url); - -} - -static void -account_added (EAccountList *account_listener, EAccount *account) -{ - - GwAccountInfo *info; - EAccount *parent; - gboolean status; - CamelURL *parent_url; - - if (!is_groupwise_account (account)) - return; - - info = g_new0 (GwAccountInfo, 1); - info->uid = g_strdup (account->uid); - info->name = g_strdup (account->name); - info->source_url = g_strdup (account->source->url); - info->auto_check = account->source->auto_check; - info->auto_check_time = account->source->auto_check_time; - if (account->parent_uid) { - parent = (EAccount *)e_account_list_find (account_listener, E_ACCOUNT_FIND_UID, account->parent_uid); - - if (!parent) - return; - - parent_url = camel_url_new (e_account_get_string (parent, E_ACCOUNT_SOURCE_URL), NULL); - add_proxy_sources (info, parent_url->user); - } else { - status = add_addressbook_sources (account); - - if (status) - add_calendar_tasks_sources (info); - } - groupwise_accounts = g_list_append (groupwise_accounts, info); -} - -static void -account_removed (EAccountList *account_listener, EAccount *account) -{ - GwAccountInfo *info; - - if (!is_groupwise_account (account)) - return; - - info = lookup_account_info (account->uid); - if (info == NULL) - return; - - remove_calendar_tasks_sources (info); - remove_addressbook_sources (info); - groupwise_accounts = g_list_remove (groupwise_accounts, info); - g_free (info->uid); - g_free (info->name); - g_free (info->source_url); - g_free (info); -} - -static void -account_changed (EAccountList *account_listener, EAccount *account) -{ - gboolean is_gw_account; - CamelURL *old_url, *new_url; - const gchar *old_soap_port, *new_soap_port; - GwAccountInfo *existing_account_info; - const gchar *old_use_ssl, *new_use_ssl; - const gchar *old_poa_address, *new_poa_address; - - is_gw_account = is_groupwise_account (account); - - existing_account_info = lookup_account_info (account->uid); - - if (existing_account_info == NULL && is_gw_account) { - - if (!account->enabled) - return; - - /* some account of other type is changed to Groupwise */ - account_added (account_listener, account); - - } else if ( existing_account_info != NULL && !is_gw_account) { - - /*Groupwise account is changed to some other type */ - remove_calendar_tasks_sources (existing_account_info); - remove_addressbook_sources (existing_account_info); - groupwise_accounts = g_list_remove (groupwise_accounts, existing_account_info); - g_free (existing_account_info->uid); - g_free (existing_account_info->name); - g_free (existing_account_info->source_url); - g_free (existing_account_info); - - } else if (existing_account_info != NULL && is_gw_account) { - - if (!account->enabled) { - account_removed (account_listener, account); - return; - } - - /* some info of groupwise account is changed . update the sources with new info if required */ - old_url = camel_url_new (existing_account_info->source_url, NULL); - old_poa_address = old_url->host; - old_soap_port = camel_url_get_param (old_url, "soap_port"); - old_use_ssl = camel_url_get_param (old_url, "use_ssl"); - new_url = camel_url_new (account->source->url, NULL); - new_poa_address = new_url->host; - - if (!new_poa_address || strlen (new_poa_address) ==0) - return; - - new_soap_port = camel_url_get_param (new_url, "soap_port"); - - if (!new_soap_port || strlen (new_soap_port) == 0) - new_soap_port = "7191"; - - new_use_ssl = camel_url_get_param (new_url, "use_ssl"); - - if ((old_poa_address && strcmp (old_poa_address, new_poa_address)) - || (old_soap_port && strcmp (old_soap_port, new_soap_port)) - || strcmp (old_url->user, new_url->user) - || (!old_use_ssl) - || strcmp (old_use_ssl, new_use_ssl)) { - - account_removed (account_listener, account); - account_added (account_listener, account); - } else if (strcmp (existing_account_info->name, account->name)) { - - modify_esource ("/apps/evolution/calendar/sources", existing_account_info, account, new_url); - modify_esource ("/apps/evolution/tasks/sources", existing_account_info, account, new_url); - modify_esource ("/apps/evolution/memos/sources", existing_account_info, account, new_url); - modify_addressbook_sources (account, existing_account_info); - - } - - g_free (existing_account_info->name); - g_free (existing_account_info->source_url); - existing_account_info->name = g_strdup (account->name); - existing_account_info->source_url = g_strdup (account->source->url); - camel_url_free (old_url); - camel_url_free (new_url); - } -} - -static void -prune_proxies (void) { - - EAccountList *account_list; - ESourceList *sources; - ESourceGroup *group; - GSList *groups, *e_sources, *l, *p; - ESource *source; - GError *err = NULL; - const gchar *parent_id_name = NULL; - gint i; - ECalSourceType types[] = { E_CAL_SOURCE_TYPE_EVENT, - E_CAL_SOURCE_TYPE_TODO, - E_CAL_SOURCE_TYPE_JOURNAL - }; - - account_list = e_get_account_list (); - e_account_list_prune_proxies (account_list); - - for (i=0; i<3; i++) { - if (e_cal_get_sources (&sources, types[i], &err)) { - /* peek groupwise id and prune for proxies. */ - groups = e_source_list_peek_groups (sources); - for (l = groups; l != NULL;) { - group = (ESourceGroup *) l->data; - l = l->next; - if (!strcmp (e_source_group_peek_base_uri (group), "groupwise://")) { - e_sources = e_source_group_peek_sources (group); - for (p = e_sources; p != NULL; p = p->next) { - source = (ESource *)p->data; - parent_id_name = e_source_get_property (source, "parent_id_name"); - if (parent_id_name) { - e_source_group_remove_source (group, source); - e_source_list_remove_group (sources, group); - break; - } - } - } - } - e_source_list_sync (sources, NULL); - } - } - -} -static void -camel_gw_listener_construct (CamelGwListener *config_listener) -{ - EIterator *iter; - EAccount *account; - GwAccountInfo *info; - - prune_proxies (); - - config_listener->priv->account_list = e_account_list_new (config_listener->priv->gconf_client); - - for (iter = e_list_get_iterator (E_LIST ( config_listener->priv->account_list) ); e_iterator_is_valid (iter); e_iterator_next (iter)) { - - account = E_ACCOUNT (e_iterator_get (iter)); - - if ( is_groupwise_account (account) && account->enabled) { - - info = g_new0 (GwAccountInfo, 1); - info->uid = g_strdup (account->uid); - info->name = g_strdup (account->name); - info->source_url = g_strdup (account->source->url); - groupwise_accounts = g_list_append (groupwise_accounts, info); - - } - - } - - g_signal_connect (config_listener->priv->account_list, "account_added", G_CALLBACK (account_added), NULL); - g_signal_connect (config_listener->priv->account_list, "account_changed", G_CALLBACK (account_changed), NULL); - g_signal_connect (config_listener->priv->account_list, "account_removed", G_CALLBACK (account_removed), NULL); -} - -GType -camel_gw_listener_get_type (void) -{ - static GType camel_gw_listener_type = 0; - - if (!camel_gw_listener_type) { - static GTypeInfo info = { - sizeof (CamelGwListenerClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) camel_gw_listener_class_init, - NULL, NULL, - sizeof (CamelGwListener), - 0, - (GInstanceInitFunc) camel_gw_listener_init - }; - camel_gw_listener_type = g_type_register_static (PARENT_TYPE, "CamelGwListener", &info, 0); - } - - return camel_gw_listener_type; -} - -CamelGwListener* -camel_gw_listener_new (void) -{ - CamelGwListener *config_listener; - - config_listener = g_object_new (CAMEL_TYPE_GW_LISTENER, NULL); - config_listener->priv->gconf_client = gconf_client_get_default (); - - camel_gw_listener_construct (config_listener); - - return config_listener; -} diff --git a/plugins/groupwise-features/camel-gw-listener.h b/plugins/groupwise-features/camel-gw-listener.h deleted file mode 100644 index cc545def61..0000000000 --- a/plugins/groupwise-features/camel-gw-listener.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Sivaiah Nallagatla <snallagatla@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef CAMEL_GW_LISTENER_H -#define CAMEL_GW_LISTENER_H - -#include <libedataserver/e-account-list.h> -#include<libedataserver/e-source.h> -#include<libedataserver/e-source-list.h> - -G_BEGIN_DECLS - -#define CAMEL_TYPE_GW_LISTENER (camel_gw_listener_get_type ()) -#define CAMEL_GW_LISTENER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CAMEL_TYPE_GW_LISTENER, CamelGwListener)) -#define CAMEL_GW_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CAMEL_TYPE_GW_LISTENER, CamelGWListenerClass)) -#define CAMEL_IS_GWLISTENER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CAMEL_TYPE_GW_LISTENER)) -#define CAMEL_IS_GW_LISTENER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), CAMEL_TYPE_GW_LISTENER)) - -typedef struct _CamelGwListener CamelGwListener; -typedef struct _CamelGwListenerClass CamelGwListenerClass; -typedef struct _CamelGwListenerPrivate CamelGwListenerPrivate; - -struct _CamelGwListener { - GObject parent; - - CamelGwListenerPrivate *priv; -}; - -struct _CamelGwListenerClass { - GObjectClass parent_class; -}; - -GType camel_gw_listener_get_type (void); -CamelGwListener *camel_gw_listener_new (void); - -G_END_DECLS - -#endif diff --git a/plugins/groupwise-features/groupwise-account-setup.c b/plugins/groupwise-features/groupwise-account-setup.c deleted file mode 100644 index f232bab055..0000000000 --- a/plugins/groupwise-features/groupwise-account-setup.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Sivaiah Nallagatla <snallagatla@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include "camel-gw-listener.h" -#include <gtk/gtk.h> -#include "mail/em-config.h" -#include <gconf/gconf-client.h> -#include "shell/es-event.h" -#include <string.h> -#include <e-util/e-account-utils.h> - -#define GROUPWISE_BASE_URI "groupwise://" - -static CamelGwListener *config_listener = NULL; - -gint e_plugin_lib_enable (EPlugin *ep, gint enable); -GtkWidget* org_gnome_gw_account_setup (struct _EPlugin *epl, struct _EConfigHookItemFactoryData *data); -void ensure_mandatory_esource_properties (EPlugin *ep, ESEventTargetUpgrade *target); - -static gboolean -is_groupwise_account (EAccount *account) -{ - if (account->source->url != NULL) { - return g_str_has_prefix (account->source->url, GROUPWISE_BASE_URI); - } else { - return FALSE; - } -} - -static void -set_esource_props (const gchar *path, EAccount *a, GConfClient *client, const gchar *name) -{ - ESourceList *list; - GSList *groups; - - list = e_source_list_new_for_gconf (client, path); - groups = e_source_list_peek_groups (list); - - for (; groups != NULL; groups = g_slist_next (groups)) { - ESourceGroup *group = E_SOURCE_GROUP (groups->data); - - if (strcmp (e_source_group_peek_name (group), name) == 0 && - strcmp (e_source_group_peek_base_uri (group), GROUPWISE_BASE_URI) == 0) { - GSList *sources = e_source_group_peek_sources (group); - - for (; sources != NULL; sources = g_slist_next (sources)) { - ESource *source = E_SOURCE (sources->data); - - if (a->source->auto_check) { - gchar *str = g_strdup_printf ("%d",a->source->auto_check_time); - - e_source_set_property (source, "refresh", str); - g_free (str); - } else - e_source_set_property (source, "refresh", NULL); - break; - } - } - } - e_source_list_sync (list, NULL); - - g_object_unref (list); -} - -void -ensure_mandatory_esource_properties (EPlugin *ep, ESEventTargetUpgrade *target) -{ - GConfClient* client; - EAccountList *al; - EIterator *it; - - al = e_get_account_list (); - client = gconf_client_get_default (); - - for (it = e_list_get_iterator ((EList *)al); - e_iterator_is_valid (it); - e_iterator_next (it)) { - EAccount *a; - - a = (EAccount *) e_iterator_get (it); - if (!a->enabled || !is_groupwise_account (a)) - continue; - set_esource_props ("/apps/evolution/calendar/sources", a, client, a->name); - set_esource_props ("/apps/evolution/tasks/sources", a, client, a->name); - set_esource_props ("/apps/evolution/memos/sources", a, client, a->name); - } - g_object_unref (client); -} - -static void -free_groupwise_listener ( void ) -{ - g_object_unref (config_listener); -} - -gint -e_plugin_lib_enable (EPlugin *ep, gint enable) -{ - if (!config_listener) { - config_listener = camel_gw_listener_new (); - g_atexit ( free_groupwise_listener ); - } - - return 0; -} - -GtkWidget * org_gnome_groupwise_account_setup (struct _EPlugin *epl, struct _EConfigHookItemFactoryData *data); - -GtkWidget * -org_gnome_groupwise_account_setup (struct _EPlugin *epl, struct _EConfigHookItemFactoryData *data) -{ - if (data->old) - return data->old; - /* FIXME, with new soap camel provider we don't need extra settings in receiving options page, Remove them - from camel-groupwise-provider.c once soap provider is ready and add any groupwise sepcific settings like "add contacts automatically to Frequent contacts folder" here*/ - - return NULL; -} diff --git a/plugins/groupwise-features/gw-ui.c b/plugins/groupwise-features/gw-ui.c deleted file mode 100644 index 08b9382838..0000000000 --- a/plugins/groupwise-features/gw-ui.c +++ /dev/null @@ -1,459 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <gtk/gtk.h> -#include <glib/gi18n.h> - -#include <e-util/e-account-utils.h> - -#include <shell/e-shell-view.h> -#include <shell/e-shell-window.h> - -#include <mail/e-mail-reader.h> -#include <mail/em-folder-tree.h> -#include <mail/em-folder-tree-model.h> -#include <mail/em-utils.h> -#include <mail/message-list.h> - -#include <calendar/gui/e-calendar-view.h> -#include <calendar/gui/gnome-cal.h> - -#include "gw-ui.h" - -gboolean gw_ui_mail_folder_popup (GtkUIManager *ui_manager, EShellView *shell_view); -gboolean gw_ui_mail_message_popup (GtkUIManager *ui_manager, EShellView *shell_view); -gboolean gw_ui_calendar_event_popup (GtkUIManager *ui_manager, EShellView *shell_view); - -static gboolean -is_in_gw_account (EShellView *shell_view, gboolean *is_on_store, gchar **folder_full_name) -{ - EShellSidebar *shell_sidebar; - EMFolderTree *folder_tree = NULL; - GtkTreeSelection *selection; - GtkTreeModel *model = NULL; - GtkTreeIter iter; - gboolean is_store = FALSE, res; - gchar *uri = NULL; - gchar *full_name = NULL; - - if (folder_full_name) - *folder_full_name = NULL; - - shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); - g_object_get (shell_sidebar, "folder-tree", &folder_tree, NULL); - g_return_val_if_fail (folder_tree != NULL, FALSE); - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree)); - g_return_val_if_fail (selection != NULL, FALSE); - - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) - return FALSE; - - gtk_tree_model_get (model, &iter, - COL_STRING_FULL_NAME, &full_name, - COL_STRING_URI, &uri, - COL_BOOL_IS_STORE, &is_store, - -1); - - res = uri && g_ascii_strncasecmp (uri, "groupwise://", 12) == 0; - - if (is_on_store) - *is_on_store = is_store; - - if (!is_store) { - if (folder_full_name) - *folder_full_name = full_name; - else - g_free (full_name); - - } else { - g_free (full_name); - } - - g_free (uri); - - return res; -} - -static void -visible_actions (GtkActionGroup *action_group, gboolean visible, const GtkActionEntry *entries, guint n_entries) -{ - gint i; - - g_return_if_fail (action_group != NULL); - g_return_if_fail (entries != NULL); - - for (i = 0; i < n_entries; i++) { - GtkAction *action = gtk_action_group_get_action (action_group, entries[i].name); - - g_return_if_fail (action != NULL); - - gtk_action_set_visible (action, visible); - } -} - -static GtkActionEntry mfp_entries[] = { - { "gw-new-shared-folder", - "folder-new", - N_("New _Shared Folder..."), - NULL, - NULL, - G_CALLBACK (gw_new_shared_folder_cb) }, - - { "gw-proxy-login", - NULL, - N_("_Proxy Login..."), - NULL, - NULL, - G_CALLBACK (gw_proxy_login_cb) } -}; - -static void -update_mfp_entries_cb (EShellView *shell_view, gpointer user_data) -{ - GtkActionGroup *action_group; - EShellWindow *shell_window; - gboolean is_on_store = FALSE, visible; - - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "mail"); - - visible = is_in_gw_account (shell_view, &is_on_store, NULL); - visible_actions (action_group, visible, mfp_entries, G_N_ELEMENTS (mfp_entries)); - - if (visible && !is_on_store) { - GtkAction *action = gtk_action_group_get_action (action_group, "gw-proxy-login"); - - g_return_if_fail (action != NULL); - - gtk_action_set_visible (action, FALSE); - } -} - -gboolean -gw_ui_mail_folder_popup (GtkUIManager *ui_manager, EShellView *shell_view) -{ - EShellWindow *shell_window; - GtkActionGroup *action_group; - - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "mail"); - - gtk_action_group_add_actions ( - action_group, mfp_entries, - G_N_ELEMENTS (mfp_entries), shell_view); - - g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_mfp_entries_cb), NULL); - - return TRUE; -} - -static GtkActionEntry mmp_entries[] = { - { "gw-junk-mail-settings", - NULL, - N_("Junk Mail Settings..."), - NULL, - NULL, - G_CALLBACK (gw_junk_mail_settings_cb) }, - - { "gw-track-message-status", - NULL, - N_("Track Message Status..."), - NULL, - NULL, - G_CALLBACK (gw_track_message_status_cb) }, - { "gw-retract-mail", - NULL, - N_("Retract Mail"), - NULL, - NULL, - G_CALLBACK (gw_retract_mail_cb) } -}; - -static void -update_mmp_entries_cb (EShellView *shell_view, gpointer user_data) -{ - EShellWindow *shell_window; - GtkActionGroup *action_group; - gboolean visible; - gchar *full_name = NULL, *uri = NULL; - guint n_selected = 0; - - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "mail"); - - visible = is_in_gw_account (shell_view, NULL, &full_name); - if (visible) { - EShellContent *shell_content; - EMailReader *reader; - GPtrArray *uids; - - shell_content = e_shell_view_get_shell_content (shell_view); - - reader = E_MAIL_READER (shell_content); - uids = e_mail_reader_get_selected_uids (reader); - - if (uids) - n_selected = uids->len; - - em_utils_uids_free (uids); - - visible = n_selected > 0; - } - - visible_actions (action_group, visible, mmp_entries, G_N_ELEMENTS (mmp_entries)); - - if (visible) { - GtkAction *action; - gboolean is_sent_items_folder = full_name && g_ascii_strncasecmp (full_name, "Sent Items", 10) == 0; - - action = gtk_action_group_get_action (action_group, "gw-track-message-status"); - g_return_if_fail (action != NULL); - gtk_action_set_visible (action, is_sent_items_folder && n_selected == 1); - - action = gtk_action_group_get_action (action_group, "gw-retract-mail"); - g_return_if_fail (action != NULL); - gtk_action_set_visible (action, is_sent_items_folder && n_selected == 1); - } - - g_free (full_name); - g_free (uri); -} - -gboolean -gw_ui_mail_message_popup (GtkUIManager *ui_manager, EShellView *shell_view) -{ - EShellWindow *shell_window; - GtkActionGroup *action_group; - - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "mail"); - - gtk_action_group_add_actions ( - action_group, mmp_entries, - G_N_ELEMENTS (mmp_entries), shell_view); - - g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_mmp_entries_cb), NULL); - - return TRUE; -} - -static icalproperty * -get_attendee_prop (icalcomponent *icalcomp, const gchar *address) -{ - icalproperty *prop; - - if (!(address && *address)) - return NULL; - - for (prop = icalcomponent_get_first_property (icalcomp, ICAL_ATTENDEE_PROPERTY); - prop; - prop = icalcomponent_get_next_property (icalcomp, ICAL_ATTENDEE_PROPERTY)) { - const gchar *attendee = icalproperty_get_attendee (prop); - - if (g_str_equal (itip_strip_mailto (attendee), address)) { - return prop; - } - } - - return NULL; -} - -static gboolean -needs_to_accept (icalcomponent *icalcomp, const gchar *user_email) -{ - icalproperty *prop; - icalparameter *param; - icalparameter_partstat status = ICAL_PARTSTAT_NONE; - - prop = get_attendee_prop (icalcomp, user_email); - - /* It might be a mailing list */ - if (!prop) - return TRUE; - param = icalproperty_get_first_parameter (prop, ICAL_PARTSTAT_PARAMETER); - if (param) - status = icalparameter_get_partstat (param); - - if (status == ICAL_PARTSTAT_ACCEPTED || status == ICAL_PARTSTAT_TENTATIVE) - return FALSE; - - return TRUE; -} - -static gboolean -is_meeting_owner (ECalComponent *comp, ECal *client) -{ - ECalComponentOrganizer org; - gchar *email = NULL; - const gchar *strip = NULL; - gboolean ret_val = FALSE; - - if (!(e_cal_component_has_attendees (comp) && - e_cal_get_save_schedules (client))) - return ret_val; - - e_cal_component_get_organizer (comp, &org); - strip = itip_strip_mailto (org.value); - - if (e_cal_get_cal_address (client, &email, NULL) && !g_ascii_strcasecmp (email, strip)) { - ret_val = TRUE; - } - - if (!ret_val) - ret_val = itip_address_is_user (strip); - - g_free (email); - return ret_val; -} - -static GtkActionEntry cal_entries[] = { - { "gw-meeting-accept", - GTK_STOCK_APPLY, - N_("Accept"), - NULL, - NULL, - G_CALLBACK (gw_meeting_accept_cb) }, - - { "gw-meeting-accept-tentative", - GTK_STOCK_DIALOG_QUESTION, - N_("Accept Tentatively"), - NULL, - NULL, - G_CALLBACK (gw_meeting_accept_tentative_cb) }, - - { "gw-meeting-decline", - GTK_STOCK_CANCEL, - N_("Decline"), - NULL, - NULL, - G_CALLBACK (gw_meeting_decline_cb) }, - - { "gw-resend-meeting", - GTK_STOCK_EDIT, - N_("Rese_nd Meeting..."), - NULL, - NULL, - G_CALLBACK (gw_resend_meeting_cb) } -}; - -static void -update_cal_entries_cb (EShellView *shell_view, gpointer user_data) -{ - EShellWindow *shell_window; - GtkActionGroup *action_group; - gboolean visible = FALSE, is_unaccepted = FALSE, is_mtg_owner = FALSE; - EShellContent *shell_content; - GnomeCalendar *gcal = NULL; - GnomeCalendarViewType view_type; - ECalendarView *view; - - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - shell_window = e_shell_view_get_shell_window (shell_view); - shell_content = e_shell_view_get_shell_content (shell_view); - - g_object_get (shell_content, "calendar", &gcal, NULL); - - view_type = gnome_calendar_get_view (gcal); - view = gnome_calendar_get_calendar_view (gcal, view_type); - - if (view) { - GList *selected; - - selected = e_calendar_view_get_selected_events (view); - if (selected && selected->data) { - ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; - const gchar *uri; - - uri = is_comp_data_valid (event) ? e_cal_get_uri (event->comp_data->client) : NULL; - - if (uri && g_ascii_strncasecmp (uri, "groupwise://", 12) == 0) { - visible = e_cal_util_component_has_attendee (event->comp_data->icalcomp); - if (visible) { - ECalComponent *comp; - - comp = e_cal_component_new (); - e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); - - if (e_cal_get_static_capability (event->comp_data->client, CAL_STATIC_CAPABILITY_HAS_UNACCEPTED_MEETING)) { - gchar *user_email; - - user_email = itip_get_comp_attendee (comp, event->comp_data->client); - - is_unaccepted = needs_to_accept (event->comp_data->icalcomp, user_email); - - g_free (user_email); - } - - is_mtg_owner = is_meeting_owner (comp, event->comp_data->client); - - g_object_unref (comp); - } - } - } - - g_list_free (selected); - } - - action_group = e_shell_window_get_action_group (shell_window, "calendar"); - visible_actions (action_group, visible, cal_entries, G_N_ELEMENTS (cal_entries)); - - if (visible && !is_unaccepted) { - GtkAction *action; - - action = gtk_action_group_get_action (action_group, "gw-meeting-accept"); - g_return_if_fail (action != NULL); - gtk_action_set_visible (action, FALSE); - - action = gtk_action_group_get_action (action_group, "gw-meeting-accept-tentative"); - g_return_if_fail (action != NULL); - gtk_action_set_visible (action, FALSE); - } - - if (visible && !is_mtg_owner) { - GtkAction *action; - - action = gtk_action_group_get_action (action_group, "gw-resend-meeting"); - g_return_if_fail (action != NULL); - gtk_action_set_visible (action, FALSE); - } -} - -gboolean -gw_ui_calendar_event_popup (GtkUIManager *ui_manager, EShellView *shell_view) -{ - EShellWindow *shell_window; - GtkActionGroup *action_group; - - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "calendar"); - - gtk_action_group_add_actions ( - action_group, cal_entries, - G_N_ELEMENTS (cal_entries), shell_view); - - g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_cal_entries_cb), NULL); - - return TRUE; -} diff --git a/plugins/groupwise-features/gw-ui.h b/plugins/groupwise-features/gw-ui.h deleted file mode 100644 index d8ed509e99..0000000000 --- a/plugins/groupwise-features/gw-ui.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef GW_UI_HEADER -#define GW_UI_HEADER - -#include <gtk/gtk.h> -#include <shell/e-shell-view.h> - -void gw_new_shared_folder_cb (GtkAction *action, EShellView *shell_view); -void gw_proxy_login_cb (GtkAction *action, EShellView *shell_view); - -void gw_junk_mail_settings_cb (GtkAction *action, EShellView *shell_view); -void gw_track_message_status_cb (GtkAction *action, EShellView *shell_view); -void gw_retract_mail_cb (GtkAction *action, EShellView *shell_view); - -void gw_meeting_accept_cb (GtkAction *action, EShellView *shell_view); -void gw_meeting_accept_tentative_cb (GtkAction *action, EShellView *shell_view); -void gw_meeting_decline_cb (GtkAction *action, EShellView *shell_view); -void gw_resend_meeting_cb (GtkAction *action, EShellView *shell_view); - -#endif diff --git a/plugins/groupwise-features/install-shared.c b/plugins/groupwise-features/install-shared.c deleted file mode 100644 index 6d290d0993..0000000000 --- a/plugins/groupwise-features/install-shared.c +++ /dev/null @@ -1,274 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> -#include <glib.h> -#include <gtk/gtk.h> -#include <glib/gi18n.h> -#include <gconf/gconf-client.h> -#include <e-util/e-config.h> -#include <e-util/e-account-utils.h> -#include <shell/e-shell.h> -#include <mail/e-mail-backend.h> -#include <mail/em-config.h> -#include <mail/em-event.h> -#include <mail/em-folder-tree.h> -#include <mail/em-folder-selector.h> -#include <e-gw-connection.h> -#include <share-folder.h> - -struct AcceptData { - CamelMimeMessage *msg; - EMFolderTreeModel *model; -}; - -void org_gnome_popup_wizard (EPlugin *ep, EMEventTargetMessage *target); - -static void -install_folder_response (EMFolderSelector *emfs, gint response, gpointer *data) -{ - struct AcceptData *accept_data = (struct AcceptData *)data; - EMFolderTreeModel *model; - const gchar *uri, *path; - gint parts = 0; - gchar **names; - gchar *folder_name; - gchar *parent_name; - gchar *container_id; - const gchar *item_id; - CamelService *service = NULL; - CamelFolder *folder; - EAccount *account; - CamelProvider *provider; - EGwConnection *cnc; - - if (response == GTK_RESPONSE_CANCEL) { - gtk_widget_destroy (GTK_WIDGET (emfs)); - } else { - CamelSession *session; - CamelURL *url; - EShell *shell; - - shell = e_shell_get_default (); - session = e_shell_settings_get_pointer (e_shell_get_shell_settings (shell), "mail-session"); - - model = accept_data->model; - item_id = camel_mime_message_get_message_id (accept_data->msg); - uri = em_folder_selector_get_selected_uri (emfs); - path = em_folder_selector_get_selected_path (emfs); - names = g_strsplit (path, "/", -1); - if (names == NULL) { - folder_name = (gchar *)path; - parent_name = NULL; - } else { - while (names[parts]) - parts++; - folder_name = names[parts -1]; - if (parts >= 2) - parent_name = names[parts -2]; - else - parent_name = NULL; - } - - url = camel_url_new (uri, NULL); - if (url != NULL) { - service = camel_session_get_service_by_url ( - session, url, CAMEL_PROVIDER_STORE); - camel_url_free (url); - } - - if (!CAMEL_IS_STORE (service)) { - g_strfreev (names); - return; - } - - cnc = get_cnc (CAMEL_STORE (service)); - if (E_IS_GW_CONNECTION (cnc)) { - container_id = get_container_id (cnc, parent_name); - - if (e_gw_connection_accept_shared_folder (cnc, folder_name, container_id, (gchar *)item_id, NULL) == E_GW_CONNECTION_STATUS_OK) { - const gchar *uid; - - /* FIXME Not passing a GCancellable or GError here. */ - folder = camel_store_get_folder_sync ( - CAMEL_STORE (service), - "Mailbox", 0, NULL, NULL); - /*changes = camel_folder_change_info_new (); - camel_folder_change_info_remove_uid (changes, (gchar *) item_id); - camel_folder_summary_remove_uid (folder->summary, item_id);*/ - /* camel_folder_delete_message (folder, item_id); */ - camel_folder_set_message_flags ( - folder, item_id, - CAMEL_MESSAGE_DELETED, - CAMEL_MESSAGE_DELETED); - camel_folder_summary_touch (folder->summary); - /* camel_object_trigger_event (CAMEL_OBJECT (folder), "folder_changed", changes); */ - uid = camel_service_get_uid (service); - account = e_get_account_by_uid (uid); - uri = account->source->url; - em_folder_tree_model_remove_store ( - model, CAMEL_STORE (service)); - provider = camel_provider_get (uri, NULL); - if (provider == NULL) { - g_strfreev (names); - return; - } - - /* make sure the new store belongs in the tree */ - if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) { - g_strfreev (names); - return; - } - - em_folder_tree_model_add_store ( - model, CAMEL_STORE (service), - account->name); - } - } - - g_strfreev (names); - gtk_widget_destroy ((GtkWidget *)emfs); - } - -} - -static void -accept_free (gpointer data) -{ - struct AcceptData *accept_data = data; - - g_object_unref (accept_data->msg); - g_free (accept_data); -} - -static void -apply_clicked (GtkAssistant *assistant, CamelMimeMessage *msg) -{ - EShell *shell; - EShellBackend *shell_backend; - EMailSession *session; - EMFolderTree *folder_tree; - GtkWidget *dialog; - struct AcceptData *accept_data; - gchar *uri; - gpointer parent; - - shell = e_shell_get_default (); - shell_backend = e_shell_get_backend_by_name (shell, "mail"); - session = e_mail_backend_get_session (E_MAIL_BACKEND (shell_backend)); - - parent = gtk_widget_get_toplevel (GTK_WIDGET (assistant)); - parent = gtk_widget_is_toplevel (parent) ? parent : NULL; - - accept_data = g_new0 (struct AcceptData, 1); - folder_tree = (EMFolderTree *) em_folder_tree_new (session); - - dialog = em_folder_selector_create_new (parent, folder_tree, 0, _("Create folder"), _("Specify where to create the folder:")); - uri = em_folder_tree_get_selected_uri (folder_tree); - em_folder_selector_set_selected ((EMFolderSelector *) dialog, uri); - g_free (uri); - accept_data->msg = msg; - g_object_ref (msg); - accept_data->model = EM_FOLDER_TREE_MODEL (gtk_tree_view_get_model (GTK_TREE_VIEW (folder_tree))); - g_object_set_data_full((GObject *)dialog, "accept-data", accept_data, accept_free); - g_signal_connect (dialog, "response", G_CALLBACK (install_folder_response), accept_data); - g_object_set_data_full((GObject *)dialog, "assistant", assistant, (GDestroyNotify)gtk_widget_destroy); - gtk_window_set_title (GTK_WINDOW (dialog), "Install Shared Folder"); - gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); - gtk_widget_show (dialog); -} - -void -org_gnome_popup_wizard (EPlugin *ep, EMEventTargetMessage *target) -{ - CamelInternetAddress *from_addr = NULL; - const gchar *name; - const gchar *email; - CamelMimeMessage *msg = (CamelMimeMessage *) target->message; - CamelStream *stream; - CamelDataWrapper *dw; - GByteArray *byte_array; - gchar *start_message; - - if (!msg) - return; - - if (((gchar *)camel_medium_get_header (CAMEL_MEDIUM(msg),"X-notification")) == NULL - || (from_addr = camel_mime_message_get_from ((CamelMimeMessage *)target->message)) == NULL - || !camel_internet_address_get (from_addr, 0, &name, &email) - || (dw = camel_medium_get_content (CAMEL_MEDIUM (msg))) == NULL) { - return; - } else { - if (CAMEL_IS_MULTIPART (dw)) { - dw = camel_medium_get_content ((CamelMedium *)camel_multipart_get_part ((CamelMultipart *)dw, 0)); - if (dw == NULL) - return; - } - - byte_array = g_byte_array_new (); - stream = camel_stream_mem_new_with_byte_array (byte_array); - camel_data_wrapper_write_to_stream_sync (dw, stream, NULL, NULL); - camel_stream_write (stream, "", 1, NULL, NULL); - - from_addr = camel_mime_message_get_from ((CamelMimeMessage *)target->message); - if (from_addr && camel_internet_address_get (from_addr, 0, &name, &email)) { - GtkWidget *page; - GtkAssistant *assistant = GTK_ASSISTANT (gtk_assistant_new ()); - - start_message = g_strdup_printf (_("The user '%s' has shared a folder with you\n\n" - "Message from '%s'\n\n\n" - "%s\n\n\n" - "Click 'Apply' to install the shared folder\n\n"), - name, name, byte_array->data); - - page = gtk_label_new (start_message); - gtk_label_set_line_wrap (GTK_LABEL (page), TRUE); - gtk_misc_set_alignment (GTK_MISC (page), 0.0, 0.0); - gtk_misc_set_padding (GTK_MISC (page), 10, 10); - - gtk_assistant_append_page (assistant, page); - gtk_assistant_set_page_title (assistant, page, _("Install the shared folder")); - gtk_assistant_set_page_type (assistant, page, GTK_ASSISTANT_PAGE_CONFIRM); - gtk_assistant_set_page_complete (assistant, page, TRUE); - - gtk_window_set_title (GTK_WINDOW (assistant), _("Shared Folder Installation")); - gtk_window_set_position (GTK_WINDOW (assistant) , GTK_WIN_POS_CENTER_ALWAYS); - - g_object_ref (msg); - g_object_set_data_full((GObject *)page, "msg", msg, g_object_unref); - - g_signal_connect (assistant, "apply", G_CALLBACK (apply_clicked), msg); - - gtk_widget_show_all (GTK_WIDGET (assistant)); - - g_free (start_message); - } else - g_warning ("Could not get the sender name"); - - g_object_unref (stream); - } -} - diff --git a/plugins/groupwise-features/junk-mail-settings.c b/plugins/groupwise-features/junk-mail-settings.c deleted file mode 100644 index a633f0bcc3..0000000000 --- a/plugins/groupwise-features/junk-mail-settings.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <glib/gi18n-lib.h> -#include <string.h> -#include <stdio.h> -#include <gtk/gtk.h> - -#include <mail/e-mail-reader.h> -#include <mail/message-list.h> - -#include <e-gw-connection.h> - -#include "gw-ui.h" -#include "share-folder.h" -#include "junk-settings.h" - -static void -abort_changes (JunkSettings *js) -{ - g_object_run_dispose ((GObject *)js); -} - -static void -junk_dialog_response (GtkWidget *dialog, gint response, JunkSettings *js) -{ - if (response == GTK_RESPONSE_ACCEPT) { - commit_changes (js); - abort_changes (js); - } - else - abort_changes (js); - - gtk_widget_destroy (dialog); - -} - -void -gw_junk_mail_settings_cb (GtkAction *action, EShellView *shell_view) -{ - GtkWidget *dialog ,*w, *notebook, *box; - GtkWidget *content_area; - JunkSettings *junk_tab; - gint page_count =0; - EGwConnection *cnc; - gchar *msg; - EShellContent *shell_content; - EMailReader *reader; - CamelFolder *folder; - - shell_content = e_shell_view_get_shell_content (shell_view); - - reader = E_MAIL_READER (shell_content); - folder = e_mail_reader_get_folder (reader); - g_return_if_fail (folder != NULL); - - cnc = get_cnc (camel_folder_get_parent_store (folder)); - - dialog = gtk_dialog_new_with_buttons (_("Junk Settings"), - NULL, - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_CANCEL, - GTK_RESPONSE_REJECT, - GTK_STOCK_OK, - GTK_RESPONSE_ACCEPT, - NULL); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - gtk_window_set_default_size ((GtkWindow *) dialog, 292, 260); - gtk_widget_ensure_style (dialog); - gtk_container_set_border_width (GTK_CONTAINER (content_area), 12); - box = gtk_vbox_new (FALSE, 6); - w = gtk_label_new (""); - msg = g_strdup_printf("<b>%s</b>", _("Junk Mail Settings")); - gtk_label_set_markup (GTK_LABEL (w), msg); - gtk_box_pack_start ((GtkBox *) box, w, FALSE, FALSE, 6); - g_free (msg); - - junk_tab = junk_settings_new (cnc); - w = (GtkWidget *)junk_tab->vbox; - gtk_box_pack_start ((GtkBox *) box, w, FALSE, FALSE, 6); - - /* We might have to add more options for settings i.e. more pages */ - while (page_count > 0 ) { - notebook = gtk_notebook_new (); - gtk_notebook_append_page ((GtkNotebook *)notebook, box, NULL); - gtk_box_pack_start ( - GTK_BOX (content_area), notebook, TRUE, TRUE, 0); - } - - if (page_count == 0) - gtk_box_pack_start ( - GTK_BOX (content_area), box, TRUE, TRUE, 0); - - g_signal_connect (dialog, "response", G_CALLBACK (junk_dialog_response), junk_tab); - gtk_widget_show_all (dialog); -} diff --git a/plugins/groupwise-features/junk-settings.c b/plugins/groupwise-features/junk-settings.c deleted file mode 100644 index 6b0233d2bc..0000000000 --- a/plugins/groupwise-features/junk-settings.c +++ /dev/null @@ -1,428 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif -#include "junk-settings.h" -#include <gtk/gtk.h> -#include <glib/gi18n.h> -#include <e-util/e-util.h> -#include <e-util/e-util-private.h> -#include <e-gw-connection.h> -#define ROOTNODE "vboxSettings" -#define d(x) - -struct _JunkEntry { - EGwJunkEntry *entry; - gint flag; -}; - -typedef struct _JunkEntry JunkEntry; - -static void junk_settings_class_init (JunkSettingsClass *class); -static void junk_settings_init (JunkSettings *js); -static void junk_settings_dispose (GObject *obj); -static void junk_settings_finalise (GObject *obj); -static void free_all (JunkSettings *js); -static void get_junk_list (JunkSettings *js); -static void disable_clicked (GtkRadioButton *button, JunkSettings *js); -static void enable_clicked (GtkRadioButton *button, JunkSettings *js); - -static GtkVBoxClass *parent_class = NULL; - -GType -junk_settings_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (JunkSettingsClass), - NULL, NULL, - (GClassInitFunc) junk_settings_class_init, - NULL, NULL, - sizeof (JunkSettings), - 0, - (GInstanceInitFunc) junk_settings_init - }; - - type = g_type_register_static (gtk_vbox_get_type (), "JunkSettings", &info, 0); - } - - return type; -} - -static void -junk_settings_class_init (JunkSettingsClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_ref (gtk_vbox_get_type ()); - object_class->dispose = junk_settings_dispose; - object_class->finalize = junk_settings_finalise; -} - -static void -junk_settings_finalise (GObject *obj) -{ - JunkSettings *js = (JunkSettings *) obj; - g_object_unref (js->builder); - free_all (js); - - G_OBJECT_CLASS (parent_class)->finalize (obj); -} - -static void -junk_settings_dispose (GObject *object) -{ - JunkSettings *js = (JunkSettings *) object; - free_all (js); - - /* Chain up to parent's dispose() method. */ - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -junk_settings_init (JunkSettings *js) -{ - js->users = 0; - js->flag_for_ok = 0; - js->enabled = FALSE; - js->junk_list = NULL; - js->entry_list = NULL; -} - -static void -free_entry_node (EGwJunkEntry *entry) -{ - if (entry) { - g_free (entry->match); - entry->match = NULL; - } - - return; -} - -static void -free_node (JunkEntry *nentry) -{ - EGwJunkEntry *junk_entry = nentry->entry; - - if (junk_entry) { - g_free (junk_entry->match); - junk_entry->match = NULL; - } - - return; -} - -static JunkEntry * -find_node (GList *list, gchar *match) -{ - JunkEntry *one_entry = NULL; - EGwJunkEntry *ent = NULL; - GList *tmp; - gint i; - - if (list) { - tmp = g_list_first (list); - for (i=0; tmp; i++) - { - one_entry = tmp->data; - ent = one_entry->entry; - if (!g_ascii_strcasecmp (ent->match, match)) { - return one_entry; - /*if found, it returns that user*/ - } - tmp= g_list_next (tmp); - } - } - - return NULL; -} - -static void -free_all (JunkSettings *js) -{ - if (js->junk_list) { - g_list_foreach (js->junk_list,(GFunc) free_node, NULL); - g_list_free (js->junk_list); - js->junk_list = NULL; - } -} - -static void -get_junk_list (JunkSettings *js) -{ - GList *list = NULL; - gchar *entry; - gchar *msg; - gint use_junk, use_block, use_pab, persistence; - - if (E_IS_GW_CONNECTION (js->cnc)) { - if (e_gw_connection_get_junk_settings (js->cnc, &use_junk, &use_block, &use_pab, &persistence) == E_GW_CONNECTION_STATUS_OK) { - if (use_junk) { - js->enabled = TRUE; - gtk_toggle_button_set_active ((GtkToggleButton *) js->enable, TRUE); - enable_clicked (js->enable , js); - gtk_widget_set_sensitive (GTK_WIDGET (js->table), TRUE); - } else { - gtk_toggle_button_set_active ((GtkToggleButton *) js->disable, TRUE); - disable_clicked (js->disable , js); - } - } - /* get list of containers */ - if (e_gw_connection_get_junk_entries (js->cnc, &(list)) == E_GW_CONNECTION_STATUS_OK) { - js->users = g_list_length (list); - if (js->users) { -/* I populate the list and set flags to 0 for the existing users*/ - while (list) { - JunkEntry *junk_entry = g_new0 (JunkEntry , 1); - junk_entry->entry = list->data; - junk_entry->flag = 0; - entry = g_strdup ((junk_entry->entry)->match); - msg = g_strdup_printf ("%s", entry); - gtk_list_store_append (GTK_LIST_STORE (js->model), &(js->iter)); - gtk_list_store_set (GTK_LIST_STORE (js->model), &(js->iter), 0, msg, -1); - js->junk_list = g_list_append (js->junk_list, junk_entry); - - g_free (msg); - g_free (entry); - msg = NULL; - entry = NULL; - list = list->next; - } - } - } - else - g_warning("Could not get the JUNK List"); - } -} - -void -commit_changes (JunkSettings *js) -{ - GList *new_list = NULL; - GList *remove_list = NULL; - GList *node = NULL; - JunkEntry *junk_entry = NULL; - EGwJunkEntry *entry; - gint use_junk, use_pab, use_block, persistence; - - for (node = js->junk_list; node; node = node->next) - { - junk_entry = node->data; - if (junk_entry->flag & 0x1) - new_list = g_list_append (new_list, junk_entry->entry); - else if (junk_entry->flag & 0x4) { - remove_list = g_list_append (remove_list, junk_entry->entry); - } - } - - if (E_IS_GW_CONNECTION (js->cnc)) { - if (js->flag_for_ok == 2 && js->enabled){ /* just turn off the bits*/ - use_junk = use_pab = use_block = persistence = 0; - if (e_gw_connection_modify_junk_settings (js->cnc, use_junk, use_pab, use_block, persistence) == E_GW_CONNECTION_STATUS_OK) { - ; - } - - } - if (js->flag_for_ok == 0 && !js->enabled) { - use_block = use_pab =0; - use_junk = 1; - persistence = 14; /* We are setting the default persistence*/ - if (e_gw_connection_modify_junk_settings (js->cnc, use_junk, use_pab, use_block, persistence) == E_GW_CONNECTION_STATUS_OK) { - ; - } - } - - while (new_list) { - entry = new_list->data; - if (e_gw_connection_create_junk_entry (js->cnc, entry->match, "email", "junk") == E_GW_CONNECTION_STATUS_OK) { - ; - } - new_list = new_list->next; - } - while (remove_list) { - entry = remove_list->data; - if (e_gw_connection_remove_junk_entry (js->cnc, entry->id) == E_GW_CONNECTION_STATUS_OK) { - ; - } - remove_list = remove_list->next; - } - - } - if (new_list) { - g_list_foreach (new_list, (GFunc) free_entry_node, NULL); - g_list_free (new_list); - } - new_list = NULL; - if (remove_list) { - g_list_foreach (remove_list,(GFunc) free_entry_node, NULL); - g_list_free (remove_list); - } - remove_list = NULL; -} - -static void -enable_clicked (GtkRadioButton *button, JunkSettings *js) -{ - js->flag_for_ok = 0; - gtk_widget_set_sensitive (GTK_WIDGET (js->table) ,TRUE); -} - -static void -disable_clicked (GtkRadioButton *button, JunkSettings *js) -{ - js->flag_for_ok = 2; - gtk_widget_set_sensitive (GTK_WIDGET (js->table), FALSE); -} - -static void -add_clicked (GtkButton *button, JunkSettings *js) -{ - const gchar *email = NULL; - const gchar *self_email = NULL; - JunkEntry *new_entry = NULL; - EGwJunkEntry *junk_entry = NULL; - gchar *msg = NULL; - - self_email = g_strdup (e_gw_connection_get_user_email (js->cnc)); - email = gtk_entry_get_text (js->entry); - /* You can't mark junk sender yourself*/ - if (g_strrstr (email, "@") == NULL || (!g_ascii_strcasecmp (email , self_email)) || !g_ascii_strcasecmp (email, "" )) - return; - else { - /*check whether already exists*/ - if (js->junk_list && email) { - new_entry = find_node (js->junk_list, (gchar *)email); - if (new_entry) - return; - - } - junk_entry = g_new0 (EGwJunkEntry, 1); - new_entry = g_new0 (JunkEntry, 1); - junk_entry->match = g_strdup (email); -/*XXX:populate more fields*/ - new_entry->entry = junk_entry; - new_entry->flag = 1; - msg = g_strdup (email); - gtk_list_store_append (GTK_LIST_STORE (js->model), &(js->iter)); - gtk_list_store_set (GTK_LIST_STORE (js->model), &(js->iter), 0, msg, -1); - g_free (msg); - js->junk_list = g_list_append (js->junk_list, new_entry); - js->flag_for_ok = 0; - } - gtk_entry_set_text (GTK_ENTRY(js->entry), ""); -} - -static void -remove_clicked (GtkButton *button, JunkSettings *js) -{ - JunkEntry *entry = NULL; - gchar *email; - - gtk_tree_model_get ((GtkTreeModel *) js->model, &(js->iter), 0, &email, -1); - entry = find_node (js->junk_list, email); - if (entry->flag & 0x1) { - js->junk_list = g_list_remove (js->junk_list, entry); - free_node (entry); - } else { - entry->flag = 0; - entry->flag |= 0x4; - } - g_free (email); - gtk_list_store_remove (GTK_LIST_STORE (js->model), &(js->iter)); -} - -static void -user_selected (GtkTreeSelection *selection, JunkSettings *js) -{ - GtkTreeModel *model; - - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - if (gtk_tree_selection_get_selected (selection, &model, &(js->iter))) { - gtk_widget_set_sensitive (GTK_WIDGET (js->remove), TRUE); - - } -} - -static void -junk_settings_construct (JunkSettings *js) -{ - js->builder = gtk_builder_new (); - e_load_ui_builder_definition (js->builder, "junk-settings.ui"); - - js->vbox = GTK_VBOX (e_builder_get_widget(js->builder, "vboxSettings")); - js->table = GTK_VBOX (e_builder_get_widget (js->builder, "vbox194")); - gtk_widget_set_sensitive (GTK_WIDGET (js->table), FALSE); - - js->enable = GTK_RADIO_BUTTON (e_builder_get_widget (js->builder, "radEnable")); - g_signal_connect ((gpointer) js->enable, "clicked", G_CALLBACK (enable_clicked), js); - - js->disable = GTK_RADIO_BUTTON (e_builder_get_widget (js->builder, "radDisable")); - g_signal_connect ((gpointer) js->disable, "clicked", G_CALLBACK (disable_clicked), js); - - js->add_button = GTK_BUTTON (e_builder_get_widget(js->builder, "Add")); - g_signal_connect((GtkWidget *) js->add_button, "clicked", G_CALLBACK (add_clicked), js); - - js->remove = GTK_BUTTON(e_builder_get_widget(js->builder, "Remove")); - g_signal_connect ((GtkWidget *) js->remove, "clicked", G_CALLBACK (remove_clicked), js); - gtk_widget_set_sensitive (GTK_WIDGET (js->remove), FALSE); - - js->entry = GTK_ENTRY (e_builder_get_widget (js->builder, "entry4")); - /*TODO:connect entry and label*/ - gtk_widget_show ((GtkWidget *) js->entry); - - js->scrolled_window = GTK_WIDGET (e_builder_get_widget (js->builder,"scrolledwindow4")); - - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (js->scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - js->model = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); - js->entry_list = (GtkTreeView *)gtk_tree_view_new (); - /*gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (js->scrolled_window), (GtkWidget *)js->entry_list);*/ - gtk_container_add (GTK_CONTAINER (js->scrolled_window), (GtkWidget *)js->entry_list); - gtk_tree_view_set_model (GTK_TREE_VIEW (js->entry_list), GTK_TREE_MODEL (js->model)); - gtk_widget_show (GTK_WIDGET (js->entry_list)); - - js->cell = gtk_cell_renderer_text_new (); - js->column = gtk_tree_view_column_new_with_attributes (_("Email"), js->cell, "text", 0, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (js->entry_list), - GTK_TREE_VIEW_COLUMN (js->column)); - - g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW (js->entry_list)), "changed", G_CALLBACK (user_selected), js); -} - -JunkSettings * -junk_settings_new (EGwConnection *ccnc) -{ - JunkSettings *new; - new = (JunkSettings *) g_object_new (junk_settings_get_type (), NULL); - junk_settings_construct (new); - new->cnc = ccnc; - if (new->cnc) - get_junk_list (new); - - return (JunkSettings *) new; -} - diff --git a/plugins/groupwise-features/junk-settings.h b/plugins/groupwise-features/junk-settings.h deleted file mode 100644 index 2e67b8cc8c..0000000000 --- a/plugins/groupwise-features/junk-settings.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef __JUNK_SETTINGS_H__ -#define __JUNK_SETTINGS_H__ - -#include <gtk/gtk.h> -#include <e-gw-connection.h> - -#define _JUNK_SETTINGS_TYPE (junk_settings_get_type ()) -#define JUNK_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), JUNK_SETTINGS, JunkSettings)) -#define JUNK_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), JUNK_SETTINGS_TYPE, JunkSettings)) -#define IS_JUNK_SETTINGS(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), JUNK_SETTINGS_TYPE)) -#define IS_JUNK_SETTINGS_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), JUNK_SETTINGS_TYPE)) - -G_BEGIN_DECLS - -typedef struct _JunkSettings JunkSettings; -typedef struct _JunkSettingsClass JunkSettingsClass; - -struct _JunkSettings { - GtkVBox parent_object; - - GtkBuilder *builder; - - /* General tab */ - - /* Default Behavior */ - GtkTreeView *entry_list; - GtkButton *add_button; - GtkButton *remove; - GtkEntry *entry; - GtkRadioButton *enable; - GtkRadioButton *disable; - GtkWidget *scrolled_window; - GtkListStore *model; - GtkCellRenderer *cell; - GtkTreeViewColumn *column; - GtkVBox *vbox; - GtkVBox *table; - GtkWidget *window; - - GList *junk_list; - gint users; - gint flag_for_ok; - gboolean enabled; - EGwConnection *cnc; - GtkTreeIter iter; -}; - -struct _JunkSettingsClass { - GtkVBoxClass parent_class; - -}; - -GType junk_settings_get_type (void); -JunkSettings * junk_settings_new (EGwConnection *ccnc); -void commit_changes (JunkSettings *js); - -G_END_DECLS - -#endif /* __JUNK_SETTINGS_H__ */ diff --git a/plugins/groupwise-features/junk-settings.ui b/plugins/groupwise-features/junk-settings.ui deleted file mode 100644 index b998c90920..0000000000 --- a/plugins/groupwise-features/junk-settings.ui +++ /dev/null @@ -1,458 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkWindow" id="main_page"> - <property name="title" translatable="yes">Junk Mail Settings</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <child> - <object class="GtkNotebook" id="sharing_props"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="show_tabs">True</property> - <property name="show_border">True</property> - <property name="tab_pos">GTK_POS_TOP</property> - <property name="scrollable">False</property> - <property name="enable_popup">False</property> - <child> - <object class="GtkVBox" id="vboxSettings"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkVBox" id="vboxSharingOptions"> - <property name="width_request">0</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkHBox" id="hbox186"> - <property name="width_request">0</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label539"> - <property name="visible">True</property> - <property name="label" translatable="yes"/> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox190"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkRadioButton" id="radDisable"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Disable</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="radEnable"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Enable</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">radDisable</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox194"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="hbox226"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkVBox" id="vbox195"> - <property name="width_request">234</property> - <property name="height_request">209</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="hbox227"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkLabel" id="label557"> - <property name="visible">True</property> - <property name="label" translatable="yes">Email:</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry4"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">2</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="users"> - <property name="visible">True</property> - <property name="label" translatable="yes">Junk List:</property> - <property name="use_underline">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow4"> - <property name="width_request">282</property> - <property name="height_request">150</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox196"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="Add"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox229"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label561"> - <property name="width_request">29</property> - <property name="visible">True</property> - <property name="label" translatable="yes">_Add</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="Remove"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment5"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox230"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="stock">gtk-remove</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label562"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Remove</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="lblJunkList"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Junk List</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - </object> - </child> - </object> -</interface> diff --git a/plugins/groupwise-features/mail-retract.c b/plugins/groupwise-features/mail-retract.c deleted file mode 100644 index 1213311e36..0000000000 --- a/plugins/groupwise-features/mail-retract.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Sankar P <psankar@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <glib/gi18n-lib.h> -#include <e-gw-connection.h> - -#include <e-util/e-alert-dialog.h> - -#include <mail/e-mail-reader.h> -#include <mail/em-utils.h> -#include <mail/message-list.h> - -#include "gw-ui.h" -#include "share-folder.h" - -static gboolean -get_selected_info (EShellView *shell_view, CamelFolder **folder, gchar **selected_uid) -{ - EShellContent *shell_content; - EMailReader *reader; - GPtrArray *uids; - - shell_content = e_shell_view_get_shell_content (shell_view); - - reader = E_MAIL_READER (shell_content); - uids = e_mail_reader_get_selected_uids (reader); - - if (uids && uids->len == 1) { - *folder = e_mail_reader_get_folder (reader); - *selected_uid = g_strdup (g_ptr_array_index (uids, 0)); - } - - em_utils_uids_free (uids); - - return *selected_uid != NULL; -} - -void -gw_retract_mail_cb (GtkAction *action, EShellView *shell_view) -{ - EGwConnection *cnc; - CamelFolder *folder; - CamelStore *parent_store; - gchar *id = NULL; - GtkWidget *confirm_dialog, *confirm_warning; - GtkWidget *content_area; - gint n; - - g_return_if_fail (get_selected_info (shell_view, &folder, &id)); - g_return_if_fail (folder != NULL); - - parent_store = camel_folder_get_parent_store (folder); - - cnc = get_cnc (parent_store); - - if (cnc && E_IS_GW_CONNECTION (cnc)) { - confirm_dialog = gtk_dialog_new_with_buttons ( - _("Message Retract"), - GTK_WINDOW (e_shell_view_get_shell_window (shell_view)), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_STOCK_YES, GTK_RESPONSE_YES, - GTK_STOCK_NO, GTK_RESPONSE_NO, NULL); - - content_area = gtk_dialog_get_content_area ( - GTK_DIALOG (confirm_dialog)); - - confirm_warning = gtk_label_new (_("Retracting a message may remove it from the recipient's mailbox. Are you sure you want to do this?")); - gtk_label_set_line_wrap (GTK_LABEL (confirm_warning), TRUE); - gtk_label_set_selectable (GTK_LABEL (confirm_warning), TRUE); - - gtk_container_add (GTK_CONTAINER (content_area), confirm_warning); - gtk_widget_set_size_request (confirm_dialog, 400, 100); - gtk_widget_show_all (confirm_dialog); - - n =gtk_dialog_run (GTK_DIALOG (confirm_dialog)); - - gtk_widget_destroy (confirm_warning); - gtk_widget_destroy (confirm_dialog); - - if (n == GTK_RESPONSE_YES) { - - if (e_gw_connection_retract_request (cnc, id, NULL, FALSE, FALSE) != E_GW_CONNECTION_STATUS_OK ) - e_alert_run_dialog_for_args (GTK_WINDOW (e_shell_view_get_shell_window (shell_view)), - "org.gnome.evolution.message.retract:retract-failure", - NULL); - else { - GtkWidget *dialog; - dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, _("Message retracted successfully")); - gtk_dialog_run (GTK_DIALOG (dialog)); - gtk_widget_destroy (dialog); - } - } - } - - g_free (id); -} diff --git a/plugins/groupwise-features/mail-send-options.c b/plugins/groupwise-features/mail-send-options.c deleted file mode 100644 index 7c31b6e585..0000000000 --- a/plugins/groupwise-features/mail-send-options.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Parthasarathi Susarla <sparthasarathi@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <string.h> -#include <stdio.h> - -#include <glib.h> -#include <glib/gi18n.h> - -#include "mail-send-options.h" - -#include "mail/em-utils.h" -#include "mail/em-event.h" - -#include "composer/e-msg-composer.h" -#include "composer/e-composer-from-header.h" -#include "libedataserver/e-account.h" - -#include "misc/e-send-options.h" - -static ESendOptionsDialog * dialog = NULL; - -gboolean gw_ui_composer_actions (GtkUIManager *manager, EMsgComposer *composer); -void org_gnome_composer_message_reply (EPlugin *ep, EMEventTargetMessage *t); - -static time_t -add_day_to_time (time_t time, gint days) -{ - struct tm *tm; - - tm = localtime (&time); - tm->tm_mday += days; - tm->tm_isdst = -1; - - return mktime (tm); -} - -static void -feed_input_data (ESendOptionsDialog * dialog, gint state, gpointer data) -{ - EMsgComposer *comp; - gchar value[100]; - gchar *temp = NULL; - - comp = (EMsgComposer *) data; - /* we are bothered only for ok response: other cases are handled generally*/ - if (state == GTK_RESPONSE_OK) { - if (dialog->data->gopts->reply_enabled) { - if (dialog->data->gopts->reply_convenient) - e_msg_composer_add_header (comp, X_REPLY_CONVENIENT ,"1" ); - else { - time_t t; - t = add_day_to_time (time (NULL), dialog->data->gopts->reply_within); - strftime (value, 17, "%Y%m%dT%H%M%SZ", gmtime (&t)); - e_msg_composer_add_header (comp, X_REPLY_WITHIN , value); - } - } - - if (dialog->data->gopts->expiration_enabled) { - if (dialog->data->gopts->expire_after != 0) { - time_t t; - t = add_day_to_time (time (NULL), dialog->data->gopts->expire_after); - strftime (value, 17, "%Y%m%dT%H%M%SZ", gmtime (&t)); - e_msg_composer_add_header (comp, X_EXPIRE_AFTER, value); - } - } - if (dialog->data->gopts->delay_enabled) { - strftime (value, 17, "%Y%m%dT%H%M%SZ", gmtime (&dialog->data->gopts->delay_until)); - e_msg_composer_add_header (comp, X_DELAY_UNTIL, value); - } - - /*Status Tracking Options*/ - if (dialog->data->sopts->tracking_enabled) { - temp = g_strdup_printf ("%d",dialog->data->sopts->track_when); - e_msg_composer_add_header (comp, X_TRACK_WHEN, temp); - g_free (temp); - } - - if (dialog->data->sopts->autodelete) { - e_msg_composer_add_header (comp, X_AUTODELETE, "1"); - } - if (dialog->data->sopts->opened) { - temp = g_strdup_printf ("%d",dialog->data->sopts->opened); - e_msg_composer_add_header (comp, X_RETURN_NOTIFY_OPEN, temp); - g_free (temp); - } - if (dialog->data->sopts->declined) { - temp = g_strdup_printf ("%d",dialog->data->sopts->declined); - e_msg_composer_add_header (comp, X_RETURN_NOTIFY_DELETE, temp); - g_free (temp); - } - - if (dialog->data->gopts->priority) { - temp = g_strdup_printf ("%d",dialog->data->gopts->priority); - e_msg_composer_add_header (comp, X_SEND_OPT_PRIORITY, temp); - g_free (temp); - } - - if (dialog->data->gopts->security) { - temp = g_strdup_printf ("%d",dialog->data->gopts->security); - e_msg_composer_add_header (comp, X_SEND_OPT_SECURITY, temp); - g_free (temp); - } - } -} - -static void -send_options_commit (EMsgComposer *comp, gpointer user_data) -{ - if (!user_data && !E_IS_SENDOPTIONS_DIALOG (user_data)) - return; - - if (dialog) { - g_object_unref (dialog); - dialog = NULL; - } -} - -static gboolean -account_is_groupwise (EAccount *account) -{ - const gchar *url; - - if (!account) - return FALSE; - - url = e_account_get_string (account, E_ACCOUNT_TRANSPORT_URL); - return url && g_str_has_prefix (url, "groupwise://"); -} - -static void -from_changed_cb (EComposerFromHeader *header, EMsgComposer *composer) -{ - GtkActionGroup *group; - GtkAction *action; - EAccount *account; - - g_return_if_fail (header != NULL); - g_return_if_fail (composer != NULL); - - group = gtkhtml_editor_get_action_group (GTKHTML_EDITOR (composer), "composer"); - g_return_if_fail (group != NULL); - - action = gtk_action_group_get_action (group, "gw-send-options"); - g_return_if_fail (action != NULL); - - account = e_composer_from_header_get_active (header); - gtk_action_set_visible (action, account_is_groupwise (account)); -} - -static void -action_send_options_cb (GtkAction *action, EMsgComposer *composer) -{ - g_return_if_fail (action != NULL); - g_return_if_fail (composer != NULL); - - /* display the send options dialog */ - if (!dialog) { - dialog = e_send_options_dialog_new (); - } - - e_send_options_dialog_run (dialog, GTK_WIDGET (composer), E_ITEM_MAIL); - - g_signal_connect (dialog, "sod_response", - G_CALLBACK (feed_input_data), composer); - - g_signal_connect (GTK_WIDGET (composer), "destroy", - G_CALLBACK (send_options_commit), dialog); -} - -gboolean -gw_ui_composer_actions (GtkUIManager *manager, EMsgComposer *composer) -{ - static GtkActionEntry entries[] = { - { "gw-send-options", - NULL, - N_("_Send Options"), - NULL, - N_("Insert Send options"), - G_CALLBACK (action_send_options_cb) } - }; - - GtkhtmlEditor *editor; - EComposerHeaderTable *headers; - EComposerHeader *header; - - editor = GTKHTML_EDITOR (composer); - - /* Add actions to the "composer" action group. */ - gtk_action_group_add_actions ( - gtkhtml_editor_get_action_group (editor, "composer"), - entries, G_N_ELEMENTS (entries), composer); - - headers = e_msg_composer_get_header_table (composer); - header = e_composer_header_table_get_header (headers, E_COMPOSER_HEADER_FROM); - - from_changed_cb (E_COMPOSER_FROM_HEADER (header), composer); - g_signal_connect ( - header, "changed", - G_CALLBACK (from_changed_cb), composer); - - return TRUE; -} - -void -org_gnome_composer_message_reply (EPlugin *ep, EMEventTargetMessage *t) -{ - EMsgComposer *comp = (struct _EMsgComposer *)t->composer; - EComposerHeaderTable *table; - EAccount *account = NULL; - gchar *temp = NULL; - - table = e_msg_composer_get_header_table (comp); - account = e_composer_header_table_get_account (table); - if (!account) - return; - - temp = strstr (account->transport->url, "groupwise"); - if (!temp) { - return; - } - e_msg_composer_add_header (comp, "X-GW-ORIG-ITEM-ID", t->uid); -} diff --git a/plugins/groupwise-features/mail-send-options.h b/plugins/groupwise-features/mail-send-options.h deleted file mode 100644 index 71cacbff01..0000000000 --- a/plugins/groupwise-features/mail-send-options.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Parthasarathi Susarla <sparthasarathi@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef __GW_SEND_OPTIONS__ -#define __GW_SEND_OPTIONS__ - -/*Headers for send options*/ -#define X_SEND_OPTIONS "X-gw-send-options" -/*General Options*/ -#define X_SEND_OPT_PRIORITY "X-gw-send-opt-priority" -#define X_SEND_OPT_SECURITY "X-gw-send-opt-security" -#define X_REPLY_CONVENIENT "X-reply-convenient" -#define X_REPLY_WITHIN "X-reply-within" -#define X_EXPIRE_AFTER "X-expire-after" -#define X_DELAY_UNTIL "X-delay-until" - -/*Status Tracking Options*/ -#define X_TRACK_WHEN "X-track-when" -#define X_AUTODELETE "X-auto-delete" -#define X_RETURN_NOTIFY_OPEN "X-return-notify-open" -#define X_RETURN_NOTIFY_DELETE "X-return-notify-delete" - -#endif /*__GW_SEND_OPTIONS__*/ diff --git a/plugins/groupwise-features/notification.ui b/plugins/groupwise-features/notification.ui deleted file mode 100644 index a3fc64b568..0000000000 --- a/plugins/groupwise-features/notification.ui +++ /dev/null @@ -1,216 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkVBox" id="vbox191"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label551"> - <property name="visible">True</property> - <property name="label" translatable="yes">The participants will receive the following notification. -</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.66</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">1</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox223"> - <property name="height_request">309</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkVBox" id="vbox193"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">5</property> - <child> - <object class="GtkLabel" id="label553"> - <property name="visible">True</property> - <property name="label" translatable="yes">Subject</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry3"> - <property name="width_request">158</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label554"> - <property name="visible">True</property> - <property name="label" translatable="yes">Message</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow3"> - <property name="border_width">0</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <object class="GtkTextView" id="textview1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_NONE</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox224"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkLabel" id="label555"> - <property name="visible">True</property> - <property name="label" translatable="yes"/> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.52</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkHButtonBox" id="hbuttonbox2"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="nCancel"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal handler="on_nCancel_clicked" last_modification_time="Tue, 23 Nov 2004 10:56:42 GMT" name="clicked"/> - </object> - </child> - <child> - <object class="GtkButton" id="nOK"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal handler="on_nOK_clicked" last_modification_time="Tue, 23 Nov 2004 10:57:50 GMT" name="clicked"/> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </object> -</interface> diff --git a/plugins/groupwise-features/org-gnome-compose-send-options.xml b/plugins/groupwise-features/org-gnome-compose-send-options.xml deleted file mode 100644 index 25ff89803e..0000000000 --- a/plugins/groupwise-features/org-gnome-compose-send-options.xml +++ /dev/null @@ -1,17 +0,0 @@ -<Root> - <commands> - <cmd name="EPSOSendOptions" _label="Send Options" - _tip="Add Send Options to GroupWise messages"/> - </commands> - - <menu> - <submenu name="Insert"> - <placeholder name="Component"> - <separator f="" name="sendoptions1"/> - <menuitem name="EPSOSendOptions" verb=""/> - <separator f="" name="sendoptions2"/> - </placeholder> - </submenu> - - </menu> -</Root> diff --git a/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml b/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml deleted file mode 100644 index 08001f97d8..0000000000 --- a/plugins/groupwise-features/org-gnome-groupwise-features.eplug.xml +++ /dev/null @@ -1,108 +0,0 @@ -<?xml version="1.0"?> -<e-plugin-list> - <e-plugin id="org.gnome.evolution.groupwise_features" type="shlib" _name="GroupWise Features" - location="@PLUGINDIR@/liborg-gnome-groupwise-features@SOEXT@" load-on-startup="true" system_plugin="true"> - - <author name="Sivaiah Nallagatla" email="snallagatla@novell.com" /> - <author name="Vivek Jain" email="jvivek@novell.com" /> - <author name="Chenthill Palanisamy" email="pchenthill@novell.com"/> - <author name="Parthasarathi Susarla" email="sparthasarathi@novell.com"/> - <author name="Sankar P" email="psankar@novell.com"/> - <author name="Shreyas Srinivasan" email="sshreyas@novell.com"/> - <author name="Raghavendran R" email="raghavguru7@gmail.com"/> - - <_description>Fine-tune your GroupWise accounts.</_description> - - <hook class="org.gnome.evolution.mail.config:1.0"> - <group id="org.gnome.evolution.mail.folderConfig" target="folder" check= "shared_folder_check" commit="shared_folder_commit" abort ="shared_folder_abort"> - <item type="page" path="10.shared" label="Shared" factory="org_gnome_shared_folder_factory"/> - </group> - <group id="org.gnome.evolution.mail.config.accountEditor" target="account" check = "send_options_changed" commit = "send_options_commit" abort = "send_options_abort"> - <item type="section" path="40.defaults/50.send_options" label="Send Options" factory="org_gnome_send_options" /> - </group> - <group id="org.gnome.evolution.mail.config.accountEditor" target="account" commit = "proxy_commit" abort="proxy_abort"> - <item type="page" path="60.proxy" factory="org_gnome_proxy"/> - </group> - - <group target="account" id="org.gnome.evolution.mail.config.accountAssistant"> - <item type="item_table" path="20.receive_options/30.soapport/50.dummy" factory="org_gnome_groupwise_account_setup"/> - </group> - <group target="account" id="org.gnome.evolution.mail.config.accountEditor"> - <item type="item_table" path="20.receive_options/30.soapport/50.dummy" factory="org_gnome_groupwise_account_setup"/> - </group> - <group target="account" id="org.gnome.evolution.mail.config.accountWizard"> - <item type="item_table" path="20.receive_options/30.soapport/50.dummy" factory="org_gnome_groupwise_account_setup"/> - </group> - </hook> - - <!-- cannot have one hook with two same ui-manager id-s, thus splitting here --> - <hook class="org.gnome.evolution.ui:1.0"> - <ui-manager id="org.gnome.evolution.mail" callback="gw_ui_mail_folder_popup"> - <popup name="mail-folder-popup"> - <placeholder name="mail-folder-popup-actions"> - <menuitem action="gw-new-shared-folder"/> - <menuitem action="gw-proxy-login"/> - </placeholder> - </popup> - </ui-manager> - </hook> - - <hook class="org.gnome.evolution.ui:1.0"> - <ui-manager id="org.gnome.evolution.mail" callback="gw_ui_mail_message_popup"> - <popup name="mail-message-popup"> - <placeholder name="mail-message-popup-actions"> - <separator /> - <menuitem action="gw-junk-mail-settings"/> - <menuitem action="gw-track-message-status"/> - <separator /> - <menuitem action="gw-retract-mail"/> - </placeholder> - </popup> - </ui-manager> - - <ui-manager id="org.gnome.evolution.calendars" callback="gw_ui_calendar_event_popup"> - <popup name="calendar-event-popup"> - <placeholder name="event-popup-actions"> - <menuitem action="gw-meeting-accept"/> - <menuitem action="gw-meeting-accept-tentative"/> - <menuitem action="gw-meeting-decline"/> - <menuitem action="gw-resend-meeting"/> - </placeholder> - </popup> - </ui-manager> - </hook> - - <hook class="org.gnome.evolution.ui:1.0"> - <ui-manager id="org.gnome.evolution.composer" callback="gw_ui_composer_actions"> - <menubar name="main-menu"> - <menu action="insert-menu"> - <placeholder name="insert-menu-top"> - <placeholder name="send-options"> - <menuitem action="gw-send-options"/> - </placeholder> - </placeholder> - </menu> - </menubar> - </ui-manager> - </hook> - - <hook class="org.gnome.evolution.mail.events:1.0"> - <event target="message" id="message.reading" type="pass" handle="org_gnome_popup_wizard"/> - <event id="message.replying" handle="org_gnome_composer_message_reply" target="message" enable="reply"/> - </hook> - - <hook class="org.gnome.evolution.addressbook.config:1.0"> - <group id="com.novell.evolution.addressbook.config.accountEditor" target="source" commit="commit_groupwise_addressbook"> - <item type="item" path="00.general/10.display/00.gw_dummy" factory="e_book_groupwise_dummy"/> - </group> - <group id="com.novell.evolution.addressbook.config.accountEditor" target="source" commit="commit_groupwise_addressbook"> - <item type="item" path="00.general/10.display/00.gw_dummy" factory="e_book_groupwise_dummy"/> - </group> - </hook> - - <hook class="org.gnome.evolution.shell.events:1.0"> - <event id="upgrade.done" handle="ensure_mandatory_esource_properties" target="upgrade"/> - </hook> - </e-plugin> - -</e-plugin-list> diff --git a/plugins/groupwise-features/org-gnome-mail-retract.error.xml b/plugins/groupwise-features/org-gnome-mail-retract.error.xml deleted file mode 100644 index 64e2ce2f1e..0000000000 --- a/plugins/groupwise-features/org-gnome-mail-retract.error.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<error-list domain="org.gnome.evolution.message.retract"> - <error id="retract-failure" type="error"> - <_primary>Message retract failed</_primary> - <_secondary>The server did not allow the selected message to be retracted.</_secondary> - </error> -</error-list> diff --git a/plugins/groupwise-features/org-gnome-process-meeting.error.xml b/plugins/groupwise-features/org-gnome-process-meeting.error.xml deleted file mode 100644 index 45fbc98103..0000000000 --- a/plugins/groupwise-features/org-gnome-process-meeting.error.xml +++ /dev/null @@ -1,44 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<error-list domain="org.gnome.evolution.process_meeting"> - -<error id="recurrence-accept" type="question" default="GTK_RESPONSE_YES"> -<_primary>This is a recurring meeting</_primary> -<!--Translators: "it" is a "recurring meeting" (string refers to "This is a recurring meeting") --> -<_secondary>Would you like to accept it?</_secondary> - <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/> - <button label="This instance" response="GTK_RESPONSE_NO"/> - <button label="All instances" response="GTK_RESPONSE_YES"/> -</error> - -<error id="recurrence-decline" type="question" default="GTK_RESPONSE_YES"> -<_primary>This is a recurring meeting</_primary> -<!--Translators: "it" is a "recurring meeting" (string refers to "This is a recurring meeting") --> -<_secondary>Would you like to decline it?</_secondary> - <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/> - <button label="This instance" response="GTK_RESPONSE_NO"/> - <button label="All instances" response="GTK_RESPONSE_YES"/> -</error> - -<error id="resend" type="question" default="GTK_RESPONSE_YES"> -<_primary>Do you want to resend the meeting?</_primary> -<_secondary>This will create a new meeting using the existing meeting details.</_secondary> - <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/> - <button stock="gtk-ok" response="GTK_RESPONSE_OK"/> -</error> - -<error id="resend-recurrence" type="question" default="GTK_RESPONSE_YES"> -<_primary>Do you want to resend the recurring meeting?</_primary> -<_secondary>This will create a new meeting with the existing meeting details. The recurrence rule needs to be re-entered.</_secondary> - <button stock="gtk-cancel" response="GTK_RESPONSE_CANCEL"/> - <button label="This instance" response="GTK_RESPONSE_NO"/> - <button label="All instances" response="GTK_RESPONSE_YES"/> -</error> - -<error id="resend-retract" type="question" default="GTK_RESPONSE_YES"> -<_primary>Do you want to retract the original item?</_primary> -<_secondary>The original will be removed from the recipient's mailbox.</_secondary> - <button stock="gtk-no" response="GTK_RESPONSE_NO"/> - <button stock="gtk-yes" response="GTK_RESPONSE_YES"/> -</error> - -</error-list> diff --git a/plugins/groupwise-features/org-gnome-proxy-login.error.xml b/plugins/groupwise-features/org-gnome-proxy-login.error.xml deleted file mode 100644 index fccddfd6c6..0000000000 --- a/plugins/groupwise-features/org-gnome-proxy-login.error.xml +++ /dev/null @@ -1,16 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<error-list domain="org.gnome.evolution.proxy-login"> -<error id="invalid-user" type="error"> -<_primary>Invalid user</_primary> -<_secondary> -<!--To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation--> -Proxy login as "{0}" was unsuccessful. Please check your email address and try again. -</_secondary> -</error> - -<error id="already-loggedin" type="error"> - <_primary>Account Already Exists</_primary> - <_secondary>Account "{0}" already exists. Please check your folder tree.</_secondary> -</error> - -</error-list> diff --git a/plugins/groupwise-features/org-gnome-proxy.error.xml b/plugins/groupwise-features/org-gnome-proxy.error.xml deleted file mode 100644 index dad6fbe8f1..0000000000 --- a/plugins/groupwise-features/org-gnome-proxy.error.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<error-list domain="org.gnome.evolution.proxy"> -<error id="invalid-user" type="error"> -<_primary>Invalid user</_primary> -<!--To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation --> -<_secondary> -Proxy access cannot be given to user "{0}" -</_secondary> -</error> - -<error id="no-user" type="error"> -<_primary>Specify User</_primary> -<!--To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation --> -<_secondary> -You have to specify a valid user name to give proxy rights. -</_secondary> -</error> - -<error id="user-is-proxy" type="error"> -<_primary>Specify User</_primary> -<!--To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation --> -<_secondary> -You have already given proxy permissions to this user. -</_secondary> -</error> - -</error-list> diff --git a/plugins/groupwise-features/org-gnome-shared-folder.error.xml b/plugins/groupwise-features/org-gnome-shared-folder.error.xml deleted file mode 100644 index 8ef056728b..0000000000 --- a/plugins/groupwise-features/org-gnome-shared-folder.error.xml +++ /dev/null @@ -1,19 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<error-list domain="org.gnome.evolution.mail_shared_folder"> - -<error id="invalid-user" type="error"> -<_primary>Invalid user</_primary> -<_secondary> -You cannot share this folder with the specified user "{0}" -</_secondary> -</error> - -<error id="no-user" type="error"> -<_primary>Specify User</_primary> -<_secondary> - You have to specify a user name which you want to add to the list -</_secondary> -</error> - -</error-list> - diff --git a/plugins/groupwise-features/process-meeting.c b/plugins/groupwise-features/process-meeting.c deleted file mode 100644 index 3eb8d59424..0000000000 --- a/plugins/groupwise-features/process-meeting.c +++ /dev/null @@ -1,442 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chenthill Palanisamy (pchenthill@novell.com) - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <libecal/e-cal.h> - -#include <e-util/e-alert-dialog.h> -#include <shell/e-shell-view.h> - -#include <calendar/gui/e-calendar-view.h> -#include <calendar/gui/itip-utils.h> -#include <calendar/gui/gnome-cal.h> - -#include "gw-ui.h" - -typedef struct { - ECal *ecal; - icalcomponent *icalcomp; -} ReceiveData; - -static void -finalize_receive_data (ReceiveData *r_data) -{ - if (r_data->ecal) { - g_object_unref (r_data->ecal); - r_data->ecal = NULL; - } - - if (r_data->ecal) { - icalcomponent_free (r_data->icalcomp); - r_data->icalcomp = NULL; - } - - g_free (r_data); -} - -static gboolean -receive_objects (gpointer data) -{ - GError *error = NULL; - ReceiveData *r_data = data; - - icalcomponent_set_method (r_data->icalcomp, ICAL_METHOD_REQUEST); - - if (!e_cal_receive_objects (r_data->ecal, r_data->icalcomp, &error)) { - /* FIXME show an error dialog */ - g_error_free (error); - } - - finalize_receive_data (r_data); - return TRUE; -} - -static icalproperty * -find_attendee (icalcomponent *ical_comp, const gchar *address) -{ - icalproperty *prop; - - if (address == NULL) - return NULL; - - for (prop = icalcomponent_get_first_property (ical_comp, ICAL_ATTENDEE_PROPERTY); - prop != NULL; - prop = icalcomponent_get_next_property (ical_comp, ICAL_ATTENDEE_PROPERTY)) { - icalvalue *value; - const gchar *attendee; - gchar *text; - - value = icalproperty_get_value (prop); - if (!value) - continue; - - attendee = icalvalue_get_string (value); - - text = g_strdup (itip_strip_mailto (attendee)); - text = g_strstrip (text); - if (!g_ascii_strcasecmp (address, text)) { - g_free (text); - break; - } - g_free (text); - } - - return prop; -} -static void -change_status (icalcomponent *ical_comp, const gchar *address, icalparameter_partstat status) -{ - icalproperty *prop; - - prop = find_attendee (ical_comp, address); - if (prop) { - icalparameter *param; - - icalproperty_remove_parameter (prop, ICAL_PARTSTAT_PARAMETER); - param = icalparameter_new_partstat (status); - icalproperty_add_parameter (prop, param); - } else { - icalparameter *param; - - prop = icalproperty_new_attendee (address); - icalcomponent_add_property (ical_comp, prop); - - param = icalparameter_new_role (ICAL_ROLE_OPTPARTICIPANT); - icalproperty_add_parameter (prop, param); - - param = icalparameter_new_partstat (status); - icalproperty_add_parameter (prop, param); - } -} - -static void -process_meeting (ECalendarView *cal_view, icalparameter_partstat status) -{ - GList *selected; - icalcomponent *clone; - - selected = e_calendar_view_get_selected_events (cal_view); - if (selected) { - ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; - ECalComponent *comp; - ReceiveData *r_data; - gboolean recurring = FALSE; - GThread *thread = NULL; - GError *error = NULL; - gchar *address = NULL; - - if (!is_comp_data_valid (event)) - return; - - comp = e_cal_component_new (); - r_data = g_new0 (ReceiveData, 1); - - e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); - address = itip_get_comp_attendee (comp, event->comp_data->client); - - if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) - recurring = TRUE; - - /* Free comp */ - g_object_unref (comp); - comp = NULL; - - clone = icalcomponent_new_clone (event->comp_data->icalcomp); - change_status (clone, address, status); - - r_data->ecal = g_object_ref (event->comp_data->client); - r_data->icalcomp = clone; - - if (recurring) { - gint response; - const gchar *msg; - - if (status == ICAL_PARTSTAT_ACCEPTED || status == ICAL_PARTSTAT_TENTATIVE) - msg = "org.gnome.evolution.process_meeting:recurrence-accept"; - else - msg = "org.gnome.evolution.process_meeting:recurrence-decline"; - - response = e_alert_run_dialog_for_args (GTK_WINDOW (gtk_widget_get_toplevel ((GtkWidget *)cal_view)), - msg, NULL); - if (response == GTK_RESPONSE_YES) { - icalproperty *prop; - const gchar *uid = icalcomponent_get_uid (r_data->icalcomp); - - prop = icalproperty_new_x ("All"); - icalproperty_set_x_name (prop, "X-GW-RECUR-INSTANCES-MOD-TYPE"); - icalcomponent_add_property (r_data->icalcomp, prop); - - prop = icalproperty_new_x (uid); - icalproperty_set_x_name (prop, "X-GW-RECURRENCE-KEY"); - icalcomponent_add_property (r_data->icalcomp, prop); - - } else if (response == GTK_RESPONSE_CANCEL) { - finalize_receive_data (r_data); - return; - } - } - - thread = g_thread_create ((GThreadFunc) receive_objects, r_data , FALSE, &error); - if (!thread) { - g_warning (G_STRLOC ": %s", error->message); - g_error_free (error); - } - } -} - -static ECalendarView * -get_calendar_view (EShellView *shell_view) -{ - EShellContent *shell_content; - GnomeCalendar *gcal = NULL; - GnomeCalendarViewType view_type; - - g_return_val_if_fail (shell_view != NULL, NULL); - - shell_content = e_shell_view_get_shell_content (shell_view); - - g_object_get (shell_content, "calendar", &gcal, NULL); - - view_type = gnome_calendar_get_view (gcal); - - return gnome_calendar_get_calendar_view (gcal, view_type); -} - -void -gw_meeting_accept_cb (GtkAction *action, EShellView *shell_view) -{ - ECalendarView *cal_view = get_calendar_view (shell_view); - g_return_if_fail (cal_view != NULL); - - process_meeting (cal_view, ICAL_PARTSTAT_ACCEPTED); -} - -void -gw_meeting_accept_tentative_cb (GtkAction *action, EShellView *shell_view) -{ - ECalendarView *cal_view = get_calendar_view (shell_view); - g_return_if_fail (cal_view != NULL); - - process_meeting (cal_view, ICAL_PARTSTAT_TENTATIVE); -} - -void -gw_meeting_decline_cb (GtkAction *action, EShellView *shell_view) -{ - ECalendarView *cal_view = get_calendar_view (shell_view); - g_return_if_fail (cal_view != NULL); - - process_meeting (cal_view, ICAL_PARTSTAT_DECLINED); -} - -typedef struct { - ECal *client; - ECalComponent *comp; - CalObjModType mod; -} ThreadData; - -static void -add_retract_data (ECalComponent *comp, const gchar *retract_comment, CalObjModType mod) -{ - icalcomponent *icalcomp = NULL; - icalproperty *icalprop = NULL; - - icalcomp = e_cal_component_get_icalcomponent (comp); - if (retract_comment && *retract_comment) - icalprop = icalproperty_new_x (retract_comment); - else - icalprop = icalproperty_new_x ("0"); - icalproperty_set_x_name (icalprop, "X-EVOLUTION-RETRACT-COMMENT"); - icalcomponent_add_property (icalcomp, icalprop); - - if (mod == CALOBJ_MOD_ALL) - icalprop = icalproperty_new_x ("All"); - else - icalprop = icalproperty_new_x ("This"); - icalproperty_set_x_name (icalprop, "X-EVOLUTION-RECUR-MOD"); - icalcomponent_add_property (icalcomp, icalprop); -} - -static void -free_thread_data (ThreadData *data) -{ - if (data == NULL) - return; - - if (data->client) - g_object_unref (data->client); - - if (data->comp) - g_object_unref (data->comp); - - g_free (data); -} - -static gpointer -retract_object (gpointer val) -{ - ThreadData *data = val; - icalcomponent *icalcomp = NULL, *mod_comp = NULL; - GList *users = NULL; - gchar *rid = NULL; - const gchar *uid; - GError *error = NULL; - - add_retract_data (data->comp, NULL, data->mod); - - icalcomp = e_cal_component_get_icalcomponent (data->comp); - icalcomponent_set_method (icalcomp, ICAL_METHOD_CANCEL); - - if (!e_cal_send_objects (data->client, icalcomp, &users, - &mod_comp, &error)) { - /* FIXME report error */ - g_warning ("Unable to retract the meeting \n"); - g_clear_error (&error); - return GINT_TO_POINTER (1); - } - - if (mod_comp) - icalcomponent_free (mod_comp); - - if (users) { - g_list_foreach (users, (GFunc) g_free, NULL); - g_list_free (users); - } - - rid = e_cal_component_get_recurid_as_string (data->comp); - e_cal_component_get_uid (data->comp, &uid); - - if (!e_cal_remove_object_with_mod (data->client, uid, - rid, data->mod, &error)) { - g_warning ("Unable to remove the item \n"); - g_clear_error (&error); - return GINT_TO_POINTER (1); - } - g_free (rid); - - free_thread_data (data); - return GINT_TO_POINTER (0); -} - -static void -object_created_cb (CompEditor *ce, gpointer data) -{ - GThread *thread = NULL; - gint response; - GError *error = NULL; - - gtk_widget_hide (GTK_WIDGET (ce)); - - response = e_alert_run_dialog_for_args (GTK_WINDOW (gtk_widget_get_toplevel ((GtkWidget *)ce)), - "org.gnome.evolution.process_meeting:resend-retract", - NULL); - if (response == GTK_RESPONSE_NO) { - free_thread_data (data); - return; - } - - thread = g_thread_create ((GThreadFunc) retract_object, data , FALSE, &error); - if (!thread) { - g_warning (G_STRLOC ": %s", error->message); - g_error_free (error); - } -} - -void -gw_resend_meeting_cb (GtkAction *action, EShellView *shell_view) -{ - GList *selected; - ECalendarView *cal_view = get_calendar_view (shell_view); - - g_return_if_fail (cal_view != NULL); - - selected = e_calendar_view_get_selected_events (cal_view); - if (selected) { - ECalendarViewEvent *event = (ECalendarViewEvent *) selected->data; - ECalComponent *comp; - ECalComponent *new_comp = NULL; - gboolean recurring = FALSE; - CalObjModType mod = CALOBJ_MOD_THIS; - ThreadData *data = NULL; - gint response; - const gchar *msg; - /* inserting the boolean to share the code between resend and retract */ - gboolean resend = TRUE; - - if (!is_comp_data_valid (event)) - return; - - comp = e_cal_component_new (); - e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp)); - if (e_cal_component_has_recurrences (comp) || e_cal_component_is_instance (comp)) - recurring = TRUE; - - if (recurring == TRUE) - msg = "org.gnome.evolution.process_meeting:resend-recurrence"; - else - msg = "org.gnome.evolution.process_meeting:resend"; - - response = e_alert_run_dialog_for_args (GTK_WINDOW (e_shell_view_get_shell_window (shell_view)), - msg, NULL); - if (response == GTK_RESPONSE_YES) { - mod = CALOBJ_MOD_ALL; - } else if (response == GTK_RESPONSE_CANCEL) { - g_object_unref (comp); - return; - } - - data = g_new0 (ThreadData, 1); - data->client = g_object_ref (event->comp_data->client); - data->comp = comp; - data->mod = mod; - - if (resend) - { - guint flags = 0; - gchar *new_uid = NULL; - CompEditor *ce; - icalcomponent *icalcomp; - - flags |= COMP_EDITOR_NEW_ITEM; - flags |= COMP_EDITOR_MEETING; - flags |= COMP_EDITOR_USER_ORG; - - new_comp = e_cal_component_clone (comp); - new_uid = e_cal_component_gen_uid (); - e_cal_component_set_recurid (new_comp, NULL); - e_cal_component_set_uid (new_comp, new_uid); - icalcomp = icalcomponent_new_clone (e_cal_component_get_icalcomponent (new_comp)); - ce = e_calendar_view_open_event_with_flags (cal_view, data->client, icalcomp, flags); - - g_signal_connect (ce, "object_created", G_CALLBACK (object_created_cb), data); - g_object_unref (new_comp); - g_free (new_uid); - } - } -} diff --git a/plugins/groupwise-features/properties.ui b/plugins/groupwise-features/properties.ui deleted file mode 100644 index 71cd3909ef..0000000000 --- a/plugins/groupwise-features/properties.ui +++ /dev/null @@ -1,756 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkVBox" id="vboxSharing"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkVBox" id="vboxSharingOptions"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkHBox" id="hbox186"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label539"> - <property name="visible">True</property> - <property name="label" translatable="yes"/> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox190"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkRadioButton" id="radNotShared"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Not Shared</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkRadioButton" id="radShared"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Shared With...</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <property name="group">radNotShared</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox194"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="hbox226"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkVBox" id="vbox195"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="hbox227"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkLabel" id="label557"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Name:</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry4"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="users"> - <property name="visible">True</property> - <property name="label" translatable="yes">Users:</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow4"> - <property name="width_request">282</property> - <property name="height_request">150</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox196"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="Address"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment6"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox232"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image5"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label563"> - <property name="visible">True</property> - <property name="label" translatable="yes">Con_tacts...</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="Add"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox229"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="stock">gtk-add</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label561"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Add</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="Remove"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment5"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox230"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image4"> - <property name="visible">True</property> - <property name="stock">gtk-remove</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label562"> - <property name="visible">True</property> - <property name="label" translatable="yes">_Remove</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <placeholder/> - </child> - <child> - <object class="GtkButton" id="Notification"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <child> - <object class="GtkAlignment" id="alignment7"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox233"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image6"> - <property name="visible">True</property> - <property name="stock">gnome-stock-mail-new</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label564"> - <property name="visible">True</property> - <property name="label" translatable="yes">C_ustomize notification message</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">11</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <!--<packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing>--> - </object> -</interface> -<!--<interface> - <object class="GtkWindow" id="window1"> - <property name="visible">True</property> - <property name="title" translatable="yes">Shared Folder Notification</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_CENTER</property> - <property name="modal">False</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <child> - <object class="GtkVBox" id="vbox191"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkLabel" id="label551"> - <property name="visible">True</property> - <property name="label" translatable="yes">The participants will receive the following notification. -</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.66</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">1</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox223"> - <property name="height_request">309</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">12</property> - <child> - <object class="GtkVBox" id="vbox193"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">5</property> - <child> - <object class="GtkLabel" id="label553"> - <property name="visible">True</property> - <property name="label" translatable="yes">Subject</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="entry3"> - <property name="width_request">158</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label554"> - <property name="visible">True</property> - <property name="label" translatable="yes">Message</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_CENTER</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow3"> - <property name="border_width">0</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_IN</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <object class="GtkTextView" id="textview1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="overwrite">False</property> - <property name="accepts_tab">True</property> - <property name="justification">GTK_JUSTIFY_LEFT</property> - <property name="wrap_mode">GTK_WRAP_NONE</property> - <property name="cursor_visible">True</property> - <property name="pixels_above_lines">0</property> - <property name="pixels_below_lines">0</property> - <property name="pixels_inside_wrap">0</property> - <property name="left_margin">0</property> - <property name="right_margin">0</property> - <property name="indent">0</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="hbox224"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkLabel" id="label555"> - <property name="visible">True</property> - <property name="label" translatable="yes"/> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.52</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkHButtonBox" id="hbuttonbox2"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="nCancel"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal handler="on_nCancel_clicked" last_modification_time="Tue, 23 Nov 2004 10:56:42 GMT" name="clicked"/> - </object> - </child> - <child> - <object class="GtkButton" id="nOK"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <signal handler="on_nOK_clicked" last_modification_time="Tue, 23 Nov 2004 10:57:50 GMT" name="clicked"/> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </object> - </child> - </object> -</interface>--> diff --git a/plugins/groupwise-features/proxy-add-dialog.ui b/plugins/groupwise-features/proxy-add-dialog.ui deleted file mode 100644 index 3aafc15ead..0000000000 --- a/plugins/groupwise-features/proxy-add-dialog.ui +++ /dev/null @@ -1,730 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkDialog" id="ProxyAccessRights"> - <property name="border_width">8</property> - <property name="visible">True</property> - <property name="title" translatable="yes">Add/Edit</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="resizable">False</property> - <property name="destroy_with_parent">True</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="hbuttonbox1"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <child> - <object class="GtkButton" id="proxy_help"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-help</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - <child> - <object class="GtkButton" id="proxy_cancel"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - <child> - <object class="GtkButton" id="proxy_button_ok"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox5"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkVBox" id="vbox6"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkFrame" id="frame3"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <child> - <object class="GtkAlignment" id="alignment2"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - <child> - <object class="GtkTable" id="table4"> - <property name="border_width">1</property> - <property name="visible">True</property> - <property name="n_rows">1</property> - <property name="n_columns">1</property> - <property name="homogeneous">False</property> - <property name="row_spacing">0</property> - <property name="column_spacing">0</property> - <child> - <object class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">27</property> - <child> - <object class="GtkEntry" id="proxy_account_name"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkHBox" id="proxy_name_box"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkButton" id="contacts"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <accelerator key="t" modifiers="GDK_MOD1_MASK" signal="clicked"/> - <accelerator key="T" modifiers="GDK_MOD1_MASK" signal="clicked"/> - <child> - <object class="GtkAlignment" id="alignment4"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">0</property> - <property name="yscale">0</property> - <property name="top_padding">0</property> - <property name="bottom_padding">0</property> - <property name="left_padding">0</property> - <property name="right_padding">0</property> - <child> - <object class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">2</property> - <child> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="stock">gtk-jump-to</property> - <property name="icon_size">4</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="label19"> - <property name="visible">True</property> - <property name="label" translatable="yes">Con_tacts</property> - <property name="use_underline">True</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - </packing> - </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label13"> - <property name="visible">True</property> - <property name="label" translatable="yes">Name</property> - <property name="use_underline">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame4"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_OUT</property> - <child> - <object class="GtkAlignment" id="alignment3"> - <property name="visible">True</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xscale">1</property> - <property name="yscale">1</property> - <property name="top_padding">2</property> - <property name="bottom_padding">7</property> - <property name="left_padding">12</property> - <property name="right_padding">0</property> - <child> - <object class="GtkVBox" id="vbox7"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">5</property> - <child> - <object class="GtkTable" id="table5"> - <property name="visible">True</property> - <property name="n_rows">4</property> - <property name="n_columns">3</property> - <property name="homogeneous">False</property> - <property name="row_spacing">8</property> - <property name="column_spacing">43</property> - <child> - <object class="GtkLabel" id="label15"> - <property name="visible">True</property> - <property name="label" translatable="yes">Mail</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="label16"> - <property name="visible">True</property> - <property name="label" translatable="yes">Appointments</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="label17"> - <property name="visible">True</property> - <property name="label" translatable="yes">Reminder Notes</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkLabel" id="label18"> - <property name="visible">True</property> - <property name="label" translatable="yes">Tasks</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="right_attach">1</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="mailRead"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property comments="To Translators: strip the part in front of the | and the | itself" context="yes" name="label" translatable="yes">permission to read|_Read</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="appRead"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property comments="To Translators: strip the part in front of the | and the | itself" context="yes" name="label" translatable="yes">permission to read|_Read</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="noteRead"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property comments="To Translators: strip the part in front of the | and the | itself" context="yes" name="label" translatable="yes">permission to read|_Read</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="taskRead"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property comments="To Translators: strip the part in front of the | and the | itself" context="yes" name="label" translatable="yes">permission to read|_Read</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">1</property> - <property name="right_attach">2</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="mailWrite"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Write</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">0</property> - <property name="bottom_attach">1</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="appWrite"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Write</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">1</property> - <property name="bottom_attach">2</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="noteWrite"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Write</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">2</property> - <property name="bottom_attach">3</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="taskWrite"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">_Write</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="w" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="W" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="left_attach">2</property> - <property name="right_attach">3</property> - <property name="top_attach">3</property> - <property name="bottom_attach">4</property> - <property name="x_options">fill</property> - <property name="y_options"/> - </packing> - </child> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox8"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">7</property> - <child> - <object class="GtkCheckButton" id="alarms"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Subscribe to my _alarms</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="a" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="A" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="notifications"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Subscribe to my _notifications</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="n" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="N" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="modify_rules"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Modify _folders/options/rules/</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="r" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="R" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="read_private"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label" translatable="yes">Read items marked _private</property> - <property name="use_underline">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="active">False</property> - <property name="inconsistent">False</property> - <property name="draw_indicator">True</property> - <accelerator key="p" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - <accelerator key="P" modifiers="GDK_MOD1_MASK" signal="grab_focus"/> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label14"> - <property name="visible">True</property> - <property name="label" translatable="yes">Access Rights</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - </object> - <packing> - <property name="padding">9</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-11">proxy_help</action-widget> - <action-widget response="-6">proxy_cancel</action-widget> - <action-widget response="-5">proxy_button_ok</action-widget> - </action-widgets> - </object> -</interface> diff --git a/plugins/groupwise-features/proxy-listing.ui b/plugins/groupwise-features/proxy-listing.ui deleted file mode 100644 index e0615cc658..0000000000 --- a/plugins/groupwise-features/proxy-listing.ui +++ /dev/null @@ -1,153 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkVBox" id="proxy_vbox"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkNotebook" id="notebook1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="show_tabs">True</property> - <property name="show_border">True</property> - <property name="tab_pos">GTK_POS_TOP</property> - <property name="scrollable">True</property> - <property name="enable_popup">False</property> - <child> - <object class="GtkVBox" id="proxy_vbox2"> - <property name="border_width">12</property> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkHBox" id="hbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <object class="GtkTreeView" id="proxy_access_list"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </object> - </child> - </object> - <packing> - <property name="padding">5</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - <child> - <object class="GtkVBox" id="vbox5"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkButton" id="add_proxy"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-add</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - <packing> - <property name="padding">6</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="edit_proxy"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-edit</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkButton" id="remove_proxy"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-remove</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - <packing> - <property name="padding">4</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="tab_expand">False</property> - <property name="tab_fill">True</property> - </packing> - </child> - <child type="tab"> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property comments="To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation" name="label" translatable="yes">Proxy</property> - <property name="use_underline">False</property> - <property name="use_markup">False</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> -</interface> diff --git a/plugins/groupwise-features/proxy-login-dialog.ui b/plugins/groupwise-features/proxy-login-dialog.ui deleted file mode 100644 index 341c63f832..0000000000 --- a/plugins/groupwise-features/proxy-login-dialog.ui +++ /dev/null @@ -1,191 +0,0 @@ -<?xml version="1.0"?> -<!--*- mode: xml -*--> -<interface> - <object class="GtkDialog" id="proxy_login_dialog"> - <property name="visible">True</property> - <property name="height_request">325</property> - <property comments="To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation" name="title" translatable="yes">Proxy Login</property> - <property name="type">GTK_WINDOW_TOPLEVEL</property> - <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">True</property> - <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> - <property name="decorated">True</property> - <property name="skip_taskbar_hint">False</property> - <property name="skip_pager_hint">False</property> - <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property> - <property name="gravity">GDK_GRAVITY_NORTH_WEST</property> - <property name="focus_on_map">True</property> - <child internal-child="vbox"> - <object class="GtkVBox" id="dialog-vbox2"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child internal-child="action_area"> - <object class="GtkHButtonBox" id="dialog-action_area2"> - <property name="visible">True</property> - <property name="layout_style">GTK_BUTTONBOX_END</property> - <child> - <object class="GtkButton" id="proxy_help"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-help</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - <child> - <object class="GtkButton" id="proxy_cancel"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - <child> - <object class="GtkButton" id="proxy_login"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-ok</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack_type">GTK_PACK_END</property> - </packing> - </child> - <child> - <object class="GtkFrame" id="frame3"> - <property name="visible">True</property> - <property name="label_xalign">0</property> - <property name="label_yalign">0.5</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <child> - <object class="GtkVBox" id="vd1"> - <property name="border_width">4</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="hbox1"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkHBox" id="auto_complete"> - <property name="visible">True</property> - <property name="homogeneous">False</property> - <property name="spacing">0</property> - <child> - <object class="GtkEntry" id="account_name"> - <property name="width_request">250</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"/> - <property name="has_frame">True</property> - <property name="activates_default">False</property> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - </object> - <packing> - <property name="padding">5</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> - <property name="shadow_type">GTK_SHADOW_NONE</property> - <property name="window_placement">GTK_CORNER_TOP_LEFT</property> - <child> - <object class="GtkTreeView" id="proxy_login_treeview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="headers_visible">False</property> - <property name="rules_hint">False</property> - <property name="reorderable">False</property> - <property name="enable_search">True</property> - <property name="fixed_height_mode">False</property> - <property name="hover_selection">False</property> - <property name="hover_expand">False</property> - </object> - </child> - </object> - <packing> - <property name="padding">0</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - </child> - <child type="label"> - <object class="GtkLabel" id="label2"> - <property name="visible">True</property> - <property name="label" translatable="yes">Account Name</property> - <property name="use_underline">False</property> - <property name="use_markup">True</property> - <property name="justify">GTK_JUSTIFY_LEFT</property> - <property name="wrap">False</property> - <property name="selectable">False</property> - <property name="xalign">0.5</property> - <property name="yalign">0.5</property> - <property name="xpad">0</property> - <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> - <property name="single_line_mode">False</property> - <property name="angle">0</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </object> - </child> - </object> - <packing> - <property name="padding">5</property> - <property name="expand">True</property> - <property name="fill">True</property> - </packing> - </child> - </object> - </child> - <action-widgets> - <action-widget response="-11">proxy_help</action-widget> - <action-widget response="-6">proxy_cancel</action-widget> - <action-widget response="-5">proxy_login</action-widget> - </action-widgets> - </object> -</interface> diff --git a/plugins/groupwise-features/proxy-login.c b/plugins/groupwise-features/proxy-login.c deleted file mode 100644 index 55d4ecff36..0000000000 --- a/plugins/groupwise-features/proxy-login.c +++ /dev/null @@ -1,563 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Shreyas Srinivasan <sshreyas@novell.com> - * Sankar P <psankar@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> -#include <glib/gi18n.h> - -#include <libedataserverui/e-passwords.h> -#include <mail/em-folder-tree.h> -#include <mail/e-mail-backend.h> -#include <mail/e-mail-store.h> -#include <mail/em-folder-selector.h> -#include <mail/em-account-editor.h> -#include <mail/mail-ops.h> -#include <libedataserver/e-account.h> -#include <e-util/e-util.h> -#include <e-util/e-alert-dialog.h> -#include <e-util/e-icon-factory.h> -#include <e-util/e-util-private.h> -#include <e-util/e-account-utils.h> -#include <shell/e-shell-view.h> -#include <calendar/gui/itip-utils.h> - -#include <e-gw-container.h> -#include <e-gw-connection.h> -#include <e-gw-message.h> -#include <libedataserverui/e-name-selector.h> - -#include "gw-ui.h" -#include "proxy-login.h" - -#define GW(name) e_builder_get_widget (priv->builder, name) - -#define ACCOUNT_PICTURE 0 -#define ACCOUNT_NAME 1 - -proxyLogin *pld = NULL; -static GObjectClass *parent_class = NULL; - -struct _proxyLoginPrivate { - /* UI data for the Add/Edit Proxy dialog*/ - GtkBuilder *builder; - /* Widgets */ - GtkWidget *main; - - /*Tree Store*/ - GtkTreeStore *store; - /*Tree View*/ - GtkTreeView *tree; - - gchar *help_section; -}; - -static void -proxy_login_finalize (GObject *object) -{ - proxyLogin *prd = (proxyLogin *) object; - proxyLoginPrivate *priv; - - g_return_if_fail (IS_PROXY_LOGIN (prd)); - priv = prd->priv; - g_list_foreach (prd->proxy_list, (GFunc)g_free, NULL); - g_list_free (prd->proxy_list); - prd->proxy_list = NULL; - g_object_unref (priv->builder); - g_free (priv->help_section); - - if (prd->priv) { - g_free (prd->priv); - prd->priv = NULL; - } - - if (parent_class->finalize) - (* parent_class->finalize) (object); -} - -static void -proxy_login_dispose (GObject *object) -{ - proxyLogin *prd = (proxyLogin *) object; - - g_return_if_fail (IS_PROXY_LOGIN (prd)); - - if (parent_class->dispose) - (* parent_class->dispose) (object); -} - -/* Class initialization function for the Send Options */ -static void -proxy_login_class_init (GObjectClass *object) -{ - proxyLoginClass *klass; - GObjectClass *object_class; - - klass = PROXY_LOGIN_CLASS (object); - parent_class = g_type_class_peek_parent (klass); - object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = proxy_login_finalize; - object_class->dispose = proxy_login_dispose; -} - -static void -proxy_login_init (GObject *object) -{ - proxyLogin *prd; - proxyLoginPrivate *priv; - - prd = PROXY_LOGIN (object); - priv = g_new0 (proxyLoginPrivate, 1); - prd->priv = priv; - - prd->proxy_list = NULL; - priv->builder = NULL; - priv->main = NULL; - priv->store = NULL; - priv->tree = NULL; -} - -GType -proxy_login_get_type (void) -{ - static GType type = 0; - - if (type == 0) { - static const GTypeInfo info = { - sizeof (proxyLoginClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) proxy_login_class_init, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (proxyLogin), - 0, /* n_preallocs */ - (GInstanceInitFunc) proxy_login_init, - NULL /* instance_init */ - }; - type = g_type_register_static (G_TYPE_OBJECT, - "proxyLoginType", - &info, 0); - } - - return type; -} - -proxyLogin * -proxy_login_new (void) -{ - proxyLogin *prd; - - prd = g_object_new (TYPE_PROXY_LOGIN, NULL); - - return prd; -} - -static gint -proxy_get_password (EAccount *account, gchar **user_name, gchar **password) -{ - const gchar *failed_auth; - gchar *uri, *key, *prompt; - CamelURL *url; - const gchar *poa_address, *use_ssl = NULL, *soap_port; - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) - return 0; - *user_name = g_strdup (url->user); - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return 0; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); - - if (use_ssl && !g_str_equal (use_ssl, "never")) - uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); - else - uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); - - failed_auth = ""; - - prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), - failed_auth, poa_address, url->user); - - *password = e_passwords_get_password ("Groupwise", key); - - g_free (key); - g_free (prompt); - g_free (uri); - camel_url_free (url); - - return 1; -} - -static EGwConnection * -proxy_login_get_cnc (EAccount *account, GtkWindow *password_dlg_parrent) -{ - EGwConnection *cnc; - CamelURL *url; - const gchar *failed_auth; - gchar *uri = NULL, *key = NULL, *prompt = NULL, *password = NULL; - const gchar *use_ssl = NULL, *soap_port; - gboolean remember; - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) - return NULL; - if (!url->host || strlen (url->host) ==0) - return NULL; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - key = g_strdup_printf ("groupwise://%s@%s/", url->user, url->host); - if (use_ssl && !g_str_equal (use_ssl, "never")) - uri = g_strdup_printf ("https://%s:%s/soap", url->host, soap_port); - else - uri = g_strdup_printf ("http://%s:%s/soap", url->host, soap_port); - - failed_auth = ""; - cnc = NULL; - - prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), - failed_auth, url->host, url->user); - - password = e_passwords_get_password ("Groupwise", key); - - if (!password) - password = e_passwords_ask_password (prompt, "Groupwise", key, prompt, - E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET, &remember, password_dlg_parrent); - - g_free (prompt); - cnc = e_gw_connection_new (uri, url->user, password); - if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { - gchar *http_uri = g_strconcat ("http://", uri + 8, NULL); - cnc = e_gw_connection_new (http_uri, url->user, password); - g_free (http_uri); - } - - g_free (key); - g_free (password); - g_free (uri); - camel_url_free (url); - - return cnc; -} - -static void -proxy_login_cb (GtkDialog *dialog, gint state, GtkWindow *parent) -{ - GtkWidget *account_name_tbox; - proxyLoginPrivate *priv; - gchar *proxy_name; - - priv = pld->priv; - account_name_tbox = e_builder_get_widget (priv->builder, "account_name"); - proxy_name = g_strdup ((gchar *) gtk_entry_get_text ((GtkEntry *) account_name_tbox)); - - switch (state) { - case GTK_RESPONSE_OK: - gtk_widget_destroy (priv->main); - proxy_soap_login (proxy_name, parent); - g_object_unref (pld); - break; - case GTK_RESPONSE_CANCEL: - gtk_widget_destroy (priv->main); - g_object_unref (pld); - break; - case GTK_RESPONSE_HELP: - break; - } - - g_free (proxy_name); -} - -static void -proxy_soap_login (gchar *email, GtkWindow *error_parent) -{ - EAccountList *accounts = e_get_account_list (); - EAccount *srcAccount; - EAccount *dstAccount; - EShell *shell; - EShellBackend *shell_backend; - EMailSession *session; - EGwConnection *proxy_cnc, *cnc; - CamelURL *uri = NULL, *parent = NULL; - gchar *password = NULL, *user_name = NULL; - gchar *proxy_source_url = NULL, *parent_source_url = NULL; - gchar *name; - gint i; - gint permissions = 0; - - shell = e_shell_get_default (); - shell_backend = e_shell_get_backend_by_name (shell, "mail"); - session = e_mail_backend_get_session (E_MAIL_BACKEND (shell_backend)); - - for (i=0; email[i]!='\0' && email[i]!='@' ; i++); - if (email[i]=='@') - name = g_strndup (email, i); - else { - e_alert_run_dialog_for_args (error_parent, - "org.gnome.evolution.proxy-login:invalid-user", - email, NULL); - return; - } - - /* README: There should not be the weird scenario of the proxy itself configured as an account. - If so, it is violating the (li)unix philosophy of User creation. So dont care about that scenario*/ - - if (itip_address_is_user (email)) { - e_alert_run_dialog_for_args (error_parent, - "org.gnome.evolution.proxy-login:already-loggedin", - email, NULL); - g_free (name); - return; - } - - srcAccount = pld->account; - cnc = proxy_login_get_cnc (srcAccount, NULL); - proxy_get_password (srcAccount, &user_name, &password); - - proxy_cnc = e_gw_connection_get_proxy_connection (cnc, user_name, password, email, &permissions); - - if (proxy_cnc) { - CamelService *service; - - parent = camel_url_new (e_account_get_string (srcAccount, E_ACCOUNT_SOURCE_URL), NULL); - parent_source_url = camel_url_to_string (parent, CAMEL_URL_HIDE_PASSWORD); - uri = camel_url_copy (parent); - camel_url_set_user (uri, name); - proxy_source_url = camel_url_to_string (uri, CAMEL_URL_HIDE_PASSWORD); - dstAccount = e_account_new (); - e_account_set_string (dstAccount, E_ACCOUNT_ID_ADDRESS, email); - dstAccount->enabled = TRUE; - e_account_set_string (dstAccount, E_ACCOUNT_SOURCE_URL, proxy_source_url); - e_account_set_string (dstAccount, E_ACCOUNT_TRANSPORT_URL, proxy_source_url); - e_account_set_string (dstAccount, E_ACCOUNT_NAME, email); - e_account_set_string (dstAccount, E_ACCOUNT_ID_NAME, name); - e_account_set_string (dstAccount, E_ACCOUNT_PROXY_PARENT_UID, srcAccount->uid); - e_account_list_add (accounts, dstAccount); - e_account_list_change (accounts, srcAccount); - e_account_list_save (accounts); - g_object_set_data ((GObject *)dstAccount, "permissions", GINT_TO_POINTER(permissions)); - - service = camel_session_get_service ( - CAMEL_SESSION (session), dstAccount->uid); - if (CAMEL_IS_STORE (service)) - proxy_login_add_new_store ( - CAMEL_STORE (service), dstAccount); - - g_free (proxy_source_url); - g_free (parent_source_url); - camel_url_free (parent); - } else { - e_alert_run_dialog_for_args (error_parent, - "org.gnome.evolution.proxy-login:invalid-user", - email, NULL); - return; - } - - g_object_unref (cnc); - g_free (name); - g_free (user_name); - g_free (password); -} - -static void -proxy_login_add_new_store (CamelStore *store, - EAccount *account) -{ - EShell *shell; - EShellBackend *shell_backend; - EMailSession *session; - gint permissions = GPOINTER_TO_INT(g_object_get_data ((GObject *)account, "permissions")); - - shell = e_shell_get_default (); - shell_backend = e_shell_get_backend_by_name (shell, "mail"); - session = e_mail_backend_get_session (E_MAIL_BACKEND (shell_backend)); - - if (store == NULL) - return; - - if (!(permissions & E_GW_PROXY_MAIL_WRITE)) - store->mode &= !CAMEL_STORE_WRITE; - - store->flags |= CAMEL_STORE_PROXY; - e_mail_store_add (session, store, account->name); -} - -static void -proxy_login_tree_view_changed_cb (GtkDialog *dialog) -{ - proxyLoginPrivate *priv = pld->priv; - GtkTreeSelection* account_select; - GtkTreeIter iter; - GtkWidget *account_name_tbox; - GtkTreeModel *model; - gchar *account_mailid; - - account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); - gtk_tree_selection_get_selected (account_select, &model, &iter); - /* FIXME Find a different way to check whatever this is checking. */ - /*if ((priv->store)->stamp != (&iter)->stamp) - return;*/ - gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); - account_mailid = g_strrstr (account_mailid, "\n") + 1; - account_name_tbox = e_builder_get_widget (priv->builder, "account_name"); - gtk_entry_set_text ((GtkEntry*) account_name_tbox,account_mailid); -} - -static void -proxy_login_setup_tree_view (void) -{ - proxyLoginPrivate *priv; - GtkTreeSelection *selection; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - priv = pld->priv; - renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, - "xpad", 4, - "ypad", 4, - NULL); - column = gtk_tree_view_column_new_with_attributes ("Picture", renderer, "pixbuf", ACCOUNT_PICTURE, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Name", renderer, "text", ACCOUNT_NAME, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); - gtk_tree_view_set_model (priv->tree, GTK_TREE_MODEL (priv->store)); - selection = gtk_tree_view_get_selection (priv->tree); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); - g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK(proxy_login_tree_view_changed_cb), NULL); -} - -static void -proxy_login_update_tree (void) -{ - GtkTreeIter iter; - gint i,n; - GdkPixbuf *broken_image = NULL; - GList *proxy_list = NULL; - gchar *proxy_name; - gchar *proxy_email; - EGwConnection *cnc; - proxyLoginPrivate *priv = pld->priv; - gchar *file_name = e_icon_factory_get_icon_filename ("avatar-default", GTK_ICON_SIZE_DIALOG); - broken_image = file_name ? gdk_pixbuf_new_from_file (file_name, NULL) : NULL; - - cnc = proxy_login_get_cnc (pld->account, priv->main ? (GTK_WINDOW (gtk_widget_get_toplevel (priv->main))) : NULL); - if (cnc) - e_gw_connection_get_proxy_list (cnc, &proxy_list); - - gtk_tree_store_clear (priv->store); - if (proxy_list != NULL) { - n = g_list_length (proxy_list); - for (i=0;i<n;i=i+2) { - proxy_name = g_list_nth_data (proxy_list,i); - proxy_email = g_list_nth_data (proxy_list,i+1); - gtk_tree_store_append (priv->store, &iter, NULL); - gtk_tree_store_set (priv->store, &iter, 0, broken_image, 1, g_strconcat(proxy_name, "\n", proxy_email, NULL), -1); - } - gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree),GTK_TREE_MODEL (priv->store)); - } - - g_free (file_name); - if (broken_image) - g_object_unref (broken_image); - - if (cnc) - g_object_unref (cnc); -} - -void -gw_proxy_login_cb (GtkAction *action, EShellView *shell_view) -{ - EShellSidebar *shell_sidebar; - EMFolderTree *folder_tree = NULL; - GtkTreeSelection *selection; - GtkTreeModel *model = NULL; - GtkTreeIter iter; - GtkWidget *tbox_account_name; - CamelStore *store; - EAccount *account; - gboolean is_store = FALSE; - proxyLoginPrivate *priv; - EGwConnection *cnc; - const gchar *uid; - - shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); - g_object_get (shell_sidebar, "folder-tree", &folder_tree, NULL); - g_return_if_fail (folder_tree != NULL); - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree)); - g_return_if_fail (selection != NULL); - - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) - return; - - gtk_tree_model_get ( - model, &iter, - COL_POINTER_CAMEL_STORE, &store, - COL_BOOL_IS_STORE, &is_store, -1); - - if (!is_store) - return; - - uid = camel_service_get_uid (CAMEL_SERVICE (store)); - account = e_get_account_by_uid (uid); - - /* This pops-up the password dialog in case the User has forgot-passwords explicitly */ - cnc = proxy_login_get_cnc (account, NULL); - if (cnc) - g_object_unref (cnc); - - pld = proxy_login_new (); - priv = pld->priv; - - priv->builder = gtk_builder_new (); - e_load_ui_builder_definition (priv->builder, "proxy-login-dialog.ui"); - - priv->main = e_builder_get_widget (priv->builder, "proxy_login_dialog"); - pld->account = account; - priv->tree = GTK_TREE_VIEW (e_builder_get_widget (priv->builder, "proxy_login_treeview")); - priv->store = gtk_tree_store_new (2, - GDK_TYPE_PIXBUF, - G_TYPE_STRING - ); - proxy_login_setup_tree_view (); - proxy_login_update_tree (); - tbox_account_name = e_builder_get_widget (priv->builder, "account_name"); - gtk_widget_grab_focus (tbox_account_name); - g_signal_connect (GTK_DIALOG (priv->main), "response", G_CALLBACK(proxy_login_cb), e_shell_view_get_shell_window (shell_view)); - gtk_widget_show (GTK_WIDGET (priv->main)); -} diff --git a/plugins/groupwise-features/proxy-login.h b/plugins/groupwise-features/proxy-login.h deleted file mode 100644 index 496e0cb1c1..0000000000 --- a/plugins/groupwise-features/proxy-login.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Shreyas Srinivasan <sshreyas@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <gtk/gtk.h> - -#define TYPE_PROXY_LOGIN (proxy_login_get_type ()) -#define PROXY_LOGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROXY_LOGIN, proxyLogin)) -#define PROXY_LOGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROXY_LOGIN, proxyLoginClass)) -#define IS_PROXY_LOGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROXY_LOGIN)) -#define IS_PROXY_LOGIN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROXY_LOGIN)) - -typedef struct _proxyLogin proxyLogin; -typedef struct _proxyLoginClass proxyLoginClass; -typedef struct _proxyLoginPrivate proxyLoginPrivate; - -struct _proxyLogin{ - GObject object; - - /*Account*/ - EAccount *account; - - /*List of proxies*/ - GList *proxy_list; - - /* Private Dialog Information*/ - proxyLoginPrivate *priv; -}; - -struct _proxyLoginClass { - GObjectClass parent_class; -}; - -GType proxy_login_get_type (void); -proxyLogin * proxy_login_new (void); -static void proxy_login_add_new_store (CamelStore *store, EAccount *account); -static void proxy_login_setup_tree_view (void); -proxyLogin* proxy_dialog_new (void); -static void proxy_soap_login (gchar *email, GtkWindow *error_parent); -gchar *parse_email_for_name (gchar *email); -static void proxy_login_update_tree (void); -static void proxy_login_tree_view_changed_cb (GtkDialog *dialog); -static gint proxy_get_password (EAccount *account, gchar **user_name, gchar **password); diff --git a/plugins/groupwise-features/proxy.c b/plugins/groupwise-features/proxy.c deleted file mode 100644 index 1db29531e6..0000000000 --- a/plugins/groupwise-features/proxy.c +++ /dev/null @@ -1,1034 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Shreyas Srinivasan <sshreyas@novell.com> - * Sankar P <psankar@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdlib.h> -#include <glib/gi18n.h> - -#include <libedataserverui/e-contact-store.h> - -#include <e-util/e-util.h> -#include <e-util/e-alert-dialog.h> -#include <e-util/e-util-private.h> -#include <e-gw-container.h> -#include <e-gw-connection.h> -#include <e-gw-message.h> - -#include <mail/em-account-editor.h> -#include <mail/em-config.h> -#include <mail/mail-ops.h> -#include <mail/e-mail-backend.h> -#include <shell/e-shell.h> -#include <libedataserver/e-account.h> -#include <libedataserver/e-account-list.h> -#include <e-util/e-icon-factory.h> - -#include <libedataserverui/e-passwords.h> -#include <libedataserverui/e-name-selector.h> -#include <proxy.h> -#include <string.h> - -#define GW(name) e_builder_get_widget (priv->builder, name) - -#define ACCOUNT_PICTURE 0 -#define ACCOUNT_NAME 1 -#define PROXY_ADD_DIALOG 2 -#define PROXY_EDIT_DIALOG 3 - -static GObjectClass *parent_class = NULL; - -static gboolean proxy_page_changed_cb (GtkNotebook *notebook, GtkWidget *page, gint num, EAccount *account); - -struct _proxyDialogPrivate { - /* UI data for the Add/Edit Proxy dialog*/ - GtkBuilder *builder; - /* UI data for Proxy Tab*/ - GtkBuilder *builder_tab; - - /* Widgets */ - GtkWidget *main; - - /*name selector dialog*/ - ENameSelector *proxy_name_selector; - - GtkTreeView *tree; - GtkTreeStore *store; - - /* Check Boxes for storing proxy priveleges*/ - GtkWidget *tab_dialog; - GtkWidget *account_name; - GtkWidget *mail_read; - GtkWidget *mail_write; - GtkWidget *app_read; - GtkWidget *app_write; - GtkWidget *note_read; - GtkWidget *note_write; - GtkWidget *task_read; - GtkWidget *task_write; - GtkWidget *alarms; - GtkWidget *notifications; - GtkWidget *options; - GtkWidget *private; - gchar *help_section; - - GList *proxy_list; -}; - -static void -proxy_dialog_dispose (GObject *object) -{ - proxyDialog *prd = (proxyDialog *) object; - - g_return_if_fail (IS_PROXY_DIALOG (prd)); - - if (parent_class->dispose) - (*parent_class->dispose) (object); -} - -static void -free_proxy_handler (proxyHandler *handler) -{ - if (handler->uniqueid) - g_free (handler->uniqueid); - - if (handler->proxy_name) - g_free (handler->proxy_name); - - if (handler->proxy_email) - g_free (handler->proxy_email); - - handler->uniqueid = NULL; - handler->proxy_name = NULL; - handler->proxy_email = NULL; -} - -void -free_proxy_list (GList *proxy_list) -{ - if (proxy_list) { - g_list_foreach (proxy_list, (GFunc) free_proxy_handler, NULL); - g_list_free (proxy_list); - proxy_list = NULL; - } -} - -static void -proxy_dialog_finalize (GObject *object) -{ - proxyDialog *prd = (proxyDialog *) object; - proxyDialogPrivate *priv; - - g_return_if_fail (IS_PROXY_DIALOG (prd)); - priv = prd->priv; - - if (priv->proxy_name_selector) - g_object_unref (priv->proxy_name_selector); - - if (priv) { - free_proxy_list (priv->proxy_list); - g_free (priv->help_section); - g_object_unref (priv->builder_tab); - g_free (prd->priv); - prd->priv = NULL; - } - - prd = NULL; - if (parent_class->finalize) - (* parent_class->finalize) (object); -} - -/* Class initialization function for the Proxy*/ -static void -proxy_dialog_class_init (GObjectClass *object) -{ - proxyDialogClass *klass; - GObjectClass *object_class; - - klass = PROXY_DIALOG_CLASS (object); - parent_class = g_type_class_peek_parent (klass); - object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = proxy_dialog_finalize; - object_class->dispose = proxy_dialog_dispose; -} - -static void -proxy_dialog_init (GObject *object) -{ - proxyDialog *prd; - proxyDialogPrivate *priv; - - prd = PROXY_DIALOG (object); - priv = g_new0 (proxyDialogPrivate, 1); - - prd->priv = priv; - - prd->cnc = NULL; - priv->tab_dialog = NULL; - priv->builder = NULL; - priv->builder_tab = NULL; - priv->main = NULL; - priv->tree = NULL; - priv->store = NULL; - priv->proxy_name_selector = NULL; - priv->account_name = NULL; - priv->mail_read = NULL; - priv->mail_write = NULL; - priv->app_read = NULL; - priv->app_write = NULL; - priv->note_read = NULL; - priv->note_write = NULL; - priv->task_read = NULL; - priv->task_write = NULL; - priv->alarms = NULL; - priv->notifications = NULL; - priv->options = NULL; - priv->private = NULL; - priv->help_section = NULL; - - priv->proxy_list = NULL; -} - -GType -proxy_dialog_get_type (void) -{ - static GType type = 0; - - if (type == 0) { - static const GTypeInfo info = { - sizeof (proxyDialogClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) proxy_dialog_class_init, /* class_init */ - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (proxyDialog), - 0, /* n_preallocs */ - (GInstanceInitFunc) proxy_dialog_init, - NULL /* instance_init */ - }; - - type = g_type_register_static (G_TYPE_OBJECT, - "proxyDialogType", - &info, 0); - } - - return type; -} - -proxyDialog * -proxy_dialog_new (void) -{ - proxyDialog *prd; - - prd = g_object_new (TYPE_PROXY_DIALOG, NULL); - - return prd; -} - -static gint -proxy_get_permissions_from_dialog (EAccount *account) -{ - gint permissions; - proxyDialogPrivate *priv; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - permissions = 0; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mail_read))) - permissions |= E_GW_PROXY_MAIL_READ; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->mail_write))) - permissions |= E_GW_PROXY_MAIL_WRITE; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->app_read))) - permissions |= E_GW_PROXY_APPOINTMENT_READ; - - if (gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (priv->app_write))) - permissions |= E_GW_PROXY_APPOINTMENT_WRITE; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->task_read))) - permissions |= E_GW_PROXY_TASK_READ; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->task_write))) - permissions |= E_GW_PROXY_TASK_WRITE; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->note_read))) - permissions |= E_GW_PROXY_NOTES_READ; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->note_write))) - permissions |= E_GW_PROXY_NOTES_WRITE; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->alarms))) - permissions |= E_GW_PROXY_GET_ALARMS; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->notifications))) - permissions |= E_GW_PROXY_GET_NOTIFICATIONS; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->options))) - permissions |= E_GW_PROXY_MODIFY_FOLDERS; - - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->private))) - permissions |= E_GW_PROXY_READ_PRIVATE; - - return permissions; -} - -static gint -proxy_dialog_store_widgets_data (EAccount *account, gint32 dialog, GtkWindow *parent) -{ - GtkTreeIter iter; - GtkTreeSelection* account_select; - GtkTreeModel *model; - proxyHandler *new_proxy = NULL; - proxyDialogPrivate *priv; - gchar *account_mailid; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - - switch (dialog) - { - case PROXY_ADD_DIALOG: - { - ENameSelectorEntry *name_selector_entry; - EDestinationStore *destination_store; - GList *destinations, *tmp; - gchar *name, *email; - GList *existing_list; - name_selector_entry = e_name_selector_peek_section_entry (priv->proxy_name_selector, "Add User"); - destination_store = e_name_selector_entry_peek_destination_store (E_NAME_SELECTOR_ENTRY ( - name_selector_entry)); - destinations = e_destination_store_list_destinations (destination_store); - tmp = destinations; - - if (!tmp) { - e_alert_run_dialog_for_args (parent, - "org.gnome.evolution.proxy:no-user", - NULL, NULL); - return -1; - } - - for (; tmp != NULL; tmp = g_list_next (tmp)) { - email = NULL; - email = (gchar *)e_destination_get_email (tmp->data); - - if (g_str_equal(email, "")) - continue; - - if (g_strrstr (email, "@") == NULL) { - e_alert_run_dialog_for_args (parent, - "org.gnome.evolution.proxy:invalid-user", - email, NULL); - return -1; - } - if (!g_ascii_strcasecmp (e_gw_connection_get_user_email (prd->cnc), email)) { - e_alert_run_dialog_for_args (parent, - "org.gnome.evolution.proxy:invalid-user", - email, NULL); - return -1; - } - - /*check whether already exists*/ - existing_list = priv->proxy_list; - - for (;existing_list; existing_list = g_list_next (existing_list)) { - new_proxy = (proxyHandler *) existing_list->data; - if (!g_ascii_strcasecmp (new_proxy->proxy_email, email)) { - if (new_proxy->flags & E_GW_PROXY_DELETED) { - new_proxy->permissions = proxy_get_permissions_from_dialog (account); - if (new_proxy->flags & E_GW_PROXY_NEW) - new_proxy->flags = E_GW_PROXY_NEW; - else - new_proxy->flags = E_GW_PROXY_EDITED; - return 0; - } - - e_alert_run_dialog_for_args (parent, - "org.gnome.evolution.proxy:user-is-proxy", - email, NULL); - return -1; - } - } - } - tmp = destinations; - - for (; tmp != NULL; tmp = g_list_next (tmp)) { - name = NULL; email = NULL; - email = (gchar *) e_destination_get_email (tmp->data); - - if (g_str_equal(email, "")) - continue; - - name = (gchar *) e_destination_get_name (tmp->data); - new_proxy = (proxyHandler *) g_malloc0 (sizeof (proxyHandler)); - - if (name) - new_proxy->proxy_name = g_strdup (name); - else - new_proxy->proxy_name = g_strdup (email); - - new_proxy->proxy_email = g_strdup (email); - new_proxy->uniqueid = NULL; - new_proxy->flags = E_GW_PROXY_NEW; - new_proxy->permissions = proxy_get_permissions_from_dialog (account); - - priv->proxy_list = g_list_append (priv->proxy_list, new_proxy); - } - } - break; - case PROXY_EDIT_DIALOG: - account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); - gtk_tree_selection_get_selected (account_select, &model, &iter); - gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); - account_mailid = g_strrstr (account_mailid, "\n") + 1; - new_proxy = proxy_get_item_from_list (account, account_mailid); - - if (!new_proxy->flags & E_GW_PROXY_NEW) - new_proxy->flags = E_GW_PROXY_EDITED; - - new_proxy->permissions = proxy_get_permissions_from_dialog (account); - break; - default: - return -1; - } - - return 0; -} - -static gboolean -proxy_dialog_initialize_widgets (EAccount *account) -{ - proxyDialogPrivate *priv; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - priv->account_name = GW ("proxy_account_name"); - priv->mail_read = GW ("mailRead"); - priv->mail_write = GW ("mailWrite"); - priv->app_read = GW ("appRead"); - priv->app_write = GW ("appWrite"); - priv->note_read = GW ("noteRead"); - priv->note_write = GW ("noteWrite"); - priv->task_read = GW ("taskRead"); - priv->task_write = GW ("taskWrite"); - priv->alarms = GW ("alarms"); - priv->notifications = GW ("notifications"); - priv->options = GW ("modify_rules"); - priv->private = GW ("read_private"); - - return (priv->account_name - && priv->mail_read - && priv->mail_write - && priv->app_read - && priv->app_write - && priv->note_read - && priv->note_write - && priv->task_read - && priv->task_write - && priv->alarms - && priv->notifications - && priv->options - && priv->private); -} - -static EGwConnection * -proxy_get_cnc (EAccount *account, GtkWindow *parent_window) -{ - EGwConnection *cnc; - const gchar *failed_auth; - gchar *uri, *key, *prompt, *password = NULL; - CamelURL *url; - const gchar *poa_address, *use_ssl, *soap_port; - gboolean remember; - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) - return NULL; - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return NULL; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); - - if (use_ssl && !g_str_equal (use_ssl, "never")) - uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); - else - uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); - - failed_auth = ""; - cnc = NULL; - - prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), - failed_auth, poa_address, url->user); - - password = e_passwords_get_password ("Groupwise", key); - if (!password) - password = e_passwords_ask_password (prompt, "Groupwise", key, prompt, - E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET, &remember, parent_window); - g_free (prompt); - - cnc = e_gw_connection_new (uri, url->user, password); - if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { - gchar *http_uri = g_strconcat ("http://", uri + 8, NULL); - cnc = e_gw_connection_new (http_uri, url->user, password); - g_free (http_uri); - } - - camel_url_free (url); - return cnc; -} - -void -proxy_abort (GtkWidget *button, EConfigHookItemFactoryData *data) -{ - EMConfigTargetAccount *target_account; - EAccount *account; - proxyDialog *prd = NULL; - - target_account = (EMConfigTargetAccount *)data->config->target; - account = target_account->modified_account; - prd = g_object_get_data ((GObject *)account, "prd"); - - if (!prd || !prd->priv || !prd->priv->proxy_list) - return; - - g_object_unref (prd); - prd = NULL; -} - -void -proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data) -{ - EAccount *account; - EMConfigTargetAccount *target_account; - proxyDialogPrivate *priv; - GList *list_iter; - proxyHandler *aclInstance; - proxyDialog *prd = NULL; - - target_account = (EMConfigTargetAccount *)data->config->target; - account = target_account->modified_account; - prd = g_object_get_data ((GObject *)account, "prd"); - - /* In case of non-GroupWise preferences edit, "prd" will be NULL. */ - if (!prd || !prd->priv || !prd->priv->proxy_list) - return; - - priv = prd->priv; - list_iter = priv->proxy_list; - for (;list_iter; list_iter = g_list_next (list_iter)) { - aclInstance = (proxyHandler *) list_iter->data; - - /* Handle case where the structure is new and deleted*/ - if ( !((aclInstance->flags & E_GW_PROXY_NEW) && (aclInstance->flags & E_GW_PROXY_DELETED))) { - - if ( !E_IS_GW_CONNECTION (prd->cnc)) /* Add check in case the connection request fails*/ - prd->cnc = proxy_get_cnc (account, GTK_WINDOW (gtk_widget_get_toplevel (button))); - - if (aclInstance->flags & E_GW_PROXY_NEW ) - e_gw_connection_add_proxy (prd->cnc, aclInstance); - - if ((aclInstance->flags & E_GW_PROXY_DELETED) && !(aclInstance->flags & E_GW_PROXY_NEW)) - e_gw_connection_remove_proxy (prd->cnc, aclInstance); - - if (aclInstance->flags & E_GW_PROXY_EDITED) - e_gw_connection_modify_proxy (prd->cnc, aclInstance); - } - } - - g_object_unref (prd); - prd = NULL; -} - -static void -proxy_setup_meta_tree_view (EAccount *account) -{ - proxyDialog *prd = NULL; - proxyDialogPrivate *priv; - GtkTreeSelection *selection; - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - renderer = g_object_new (GTK_TYPE_CELL_RENDERER_PIXBUF, - "xpad", 4, - "ypad", 4, - NULL); - column = gtk_tree_view_column_new_with_attributes ("Picture", renderer, "pixbuf", ACCOUNT_PICTURE, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes ("Name", renderer, "text", ACCOUNT_NAME, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (priv->tree), column); - - gtk_tree_view_set_model (priv->tree, GTK_TREE_MODEL (priv->store)); - selection = gtk_tree_view_get_selection (priv->tree); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); -} - -static void -proxy_update_tree_view (EAccount *account) -{ - proxyDialog *prd = NULL; - GtkTreeIter iter; - GdkPixbuf *broken_image = NULL; - GList *list_iter; - proxyHandler *aclInstance; - gchar *file_name = e_icon_factory_get_icon_filename ("avatar-default", GTK_ICON_SIZE_DIALOG); - proxyDialogPrivate *priv; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - broken_image = gdk_pixbuf_new_from_file (file_name, NULL); - - gtk_tree_store_clear (priv->store); - list_iter = priv->proxy_list; - - for (;list_iter; list_iter = g_list_next (list_iter)) { - aclInstance = (proxyHandler *) list_iter->data; - - if (!(aclInstance->flags & E_GW_PROXY_DELETED )) { - gtk_tree_store_append (priv->store, &iter, NULL); - gtk_tree_store_set (priv->store, &iter, 0, broken_image, 1, g_strconcat(aclInstance->proxy_name,"\n",aclInstance->proxy_email, NULL), -1); - } - } - - g_free (file_name); - if (broken_image) - g_object_unref (broken_image); - - /*Fixme : Desensitize buttons if the list is Null*/ - gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree), GTK_TREE_MODEL (priv->store)); -} - -GtkWidget* -org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data) -{ - EMConfigTargetAccount *target_account; - EShell *shell; - EShellBackend *shell_backend; - EMailSession *session; - EAccount *account; - GtkButton *addProxy, *removeProxy, *editProxy; - proxyDialog *prd; - proxyDialogPrivate *priv; - CamelOfflineStore *store; - gint pag_num; - - shell = e_shell_get_default (); - shell_backend = e_shell_get_backend_by_name (shell, "mail"); - session = e_mail_backend_get_session (E_MAIL_BACKEND (shell_backend)); - - target_account = (EMConfigTargetAccount *)data->config->target; - account = target_account->modified_account; - /* We are using some g_object_set on this. We shuold also avoid double-free later. So reffing */ - g_object_ref (account); - - store = (CamelOfflineStore *) camel_session_get_service ( - CAMEL_SESSION (session), account->uid); - if (store == NULL) - return NULL; - - if (g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://")) - { - prd = proxy_dialog_new (); - g_object_set_data_full ((GObject *) account, "prd", prd, (GDestroyNotify) g_object_unref); - priv = prd->priv; - - priv->builder_tab = gtk_builder_new (); - e_load_ui_builder_definition (priv->builder_tab, "proxy-listing.ui"); - - if (account->enabled && camel_offline_store_get_online (store)) { - priv->tab_dialog = GTK_WIDGET (e_builder_get_widget (priv->builder_tab, "proxy_vbox")); - priv->tree = GTK_TREE_VIEW (e_builder_get_widget (priv->builder_tab, "proxy_access_list")); - priv->store = gtk_tree_store_new (2, - GDK_TYPE_PIXBUF, - G_TYPE_STRING - ); - proxy_setup_meta_tree_view (account); - - addProxy = (GtkButton *) e_builder_get_widget (priv->builder_tab, "add_proxy"); - removeProxy = (GtkButton *) e_builder_get_widget (priv->builder_tab, "remove_proxy"); - editProxy = (GtkButton *) e_builder_get_widget (priv->builder_tab, "edit_proxy"); - - g_signal_connect (addProxy, "clicked", G_CALLBACK(proxy_add_account), account); - g_signal_connect (removeProxy, "clicked", G_CALLBACK(proxy_remove_account), account); - g_signal_connect (editProxy, "clicked", G_CALLBACK(proxy_edit_account), account); - - priv->proxy_list = NULL; - } else if (account->enabled) { - GtkWidget *label; - priv->tab_dialog = gtk_vbox_new (TRUE, 10); - /*To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation*/ - label = gtk_label_new (_("The Proxy tab will be available only when the account is online.")); - gtk_box_pack_start ((GtkBox *)priv->tab_dialog, label, TRUE, TRUE, 10); - } else { - GtkWidget *label; - priv->tab_dialog = gtk_vbox_new (TRUE, 10); - /*To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation*/ - label = gtk_label_new (_("The Proxy tab will be available only when the account is enabled.")); - gtk_box_pack_start ((GtkBox *)priv->tab_dialog, label, TRUE, TRUE, 10); - } - - /*To Translators: In this case, Proxy does not mean something like 'HTTP Proxy', but a GroupWise feature by which one person can send/read mails/appointments using another person's identity without knowing his password, for example if that other person is on vacation*/ - gtk_notebook_append_page ((GtkNotebook *)(data->parent), (GtkWidget *)priv->tab_dialog, gtk_label_new (C_("GW", "Proxy"))); - g_signal_connect ((GtkNotebook *)(data->parent), "switch-page", G_CALLBACK (proxy_page_changed_cb), account); - pag_num = gtk_notebook_page_num ((GtkNotebook *)(data->parent), (GtkWidget *)priv->tab_dialog); - g_object_set_data ((GObject *) account, "proxy_tab_num", GINT_TO_POINTER (pag_num)); - gtk_widget_show_all (priv->tab_dialog); - } else if (!g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://")) { - prd = g_object_get_data ((GObject *) account, "prd"); - - if (prd) { - priv = prd->priv; - - if (priv) { - pag_num = gtk_notebook_page_num ( (GtkNotebook *)(data->parent), (GtkWidget *) priv->tab_dialog); - gtk_notebook_remove_page ( (GtkNotebook *)(data->parent), pag_num); - } - } - } - - return NULL; -} - -static gboolean -proxy_page_changed_cb (GtkNotebook *notebook, GtkWidget *page, gint num, EAccount *account) -{ - proxyDialog *prd; - proxyDialogPrivate *priv; - gpointer val; - gint pg_num; - GList *list_iter; - proxyHandler *aclInstance; - - if (g_strrstr (e_account_get_string(account, E_ACCOUNT_SOURCE_URL), "groupwise://")) { - - prd = g_object_get_data ((GObject *) account, "prd"); - - if (!prd || !prd->priv) - return TRUE; - - val = g_object_get_data ((GObject *) account, "proxy_tab_num"); - - if (!val) - return FALSE; - - pg_num = GPOINTER_TO_INT (val); - - if ((pg_num == num) && account->enabled) { - if (!prd->cnc) - prd->cnc = proxy_get_cnc (account, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (notebook)))); - priv = prd->priv; - - if (e_gw_connection_get_proxy_access_list (prd->cnc, &priv->proxy_list)!= E_GW_CONNECTION_STATUS_OK) - return FALSE; - - list_iter = priv->proxy_list; - - for (;list_iter; list_iter = g_list_next (list_iter)) { - aclInstance = (proxyHandler *) list_iter->data; - - /* NOTE: All User Access is not supported */ - if (!g_ascii_strcasecmp (aclInstance->proxy_name, "<All User Access>")) { - priv->proxy_list = g_list_delete_link (priv->proxy_list, list_iter); - break; - } - } - - proxy_update_tree_view (account); - return TRUE; - } - } - - return FALSE; -} - -static void -proxy_cancel (GtkWidget *button, EAccount *account) -{ - proxyDialog *prd = NULL; - proxyDialogPrivate *priv; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - gtk_widget_destroy (priv->main); - g_object_unref (priv->builder); -} - -static void -proxy_add_ok (GtkWidget *button, EAccount *account) -{ - proxyDialog *prd = NULL; - proxyDialogPrivate *priv; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - - if (proxy_dialog_store_widgets_data (account, PROXY_ADD_DIALOG, GTK_WINDOW (gtk_widget_get_toplevel (button))) < 0) - return; - - proxy_update_tree_view (account); - gtk_widget_destroy (priv->main); - g_object_unref (priv->builder); -} - -static void -proxy_edit_ok (GtkWidget *button, EAccount *account) -{ - proxyDialog *prd = NULL; - proxyDialogPrivate *priv; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - - if ( proxy_dialog_store_widgets_data (account, PROXY_EDIT_DIALOG, GTK_WINDOW (gtk_widget_get_toplevel (button))) < 0) - return; - - proxy_update_tree_view (account); - gtk_widget_destroy (priv->main); - g_object_unref (priv->builder); -} - -static proxyHandler * -proxy_get_item_from_list (EAccount *account, gchar *account_name) -{ - proxyDialogPrivate *priv; - proxyDialog *prd = NULL; - GList *list_iter; - proxyHandler *iter; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - list_iter = priv->proxy_list; - - for (;list_iter; list_iter = g_list_next (list_iter)) { - iter = (proxyHandler *) list_iter->data; - - if ( g_str_equal (iter->proxy_email,account_name)) - return iter; - } - - return NULL; -} - -static void -proxy_remove_account (GtkWidget *button, EAccount *account) -{ - GtkTreeIter iter; - GtkTreeModel *model; - proxyDialogPrivate *priv; - proxyHandler *deleted; - GtkTreeSelection* account_select; - gchar *account_mailid; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); - - if (gtk_tree_selection_get_selected (account_select, &model, &iter)) { - gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); - account_mailid = g_strrstr (account_mailid, "\n") + 1; - deleted = proxy_get_item_from_list (account, account_mailid); - - if (deleted != NULL) - deleted->flags |= E_GW_PROXY_DELETED; - - proxy_update_tree_view (account); - } -} - -static void -addressbook_dialog_response (ENameSelectorDialog *name_selector_dialog, gint response, gpointer user_data) -{ - gtk_widget_hide (GTK_WIDGET (name_selector_dialog)); -} - -static void -addressbook_entry_changed (GtkWidget *entry, gpointer user_data) -{ -} - -static void -address_button_clicked (GtkButton *button, EAccount *account) -{ - proxyDialog *prd; - proxyDialogPrivate *priv; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - e_name_selector_show_dialog (priv->proxy_name_selector, priv->main); -} - -static void -proxy_add_account (GtkWidget *button, EAccount *account) -{ - GtkButton *contacts, *cancel; - proxyDialogPrivate *priv; - GtkButton *okButton; - ENameSelectorDialog *name_selector_dialog; - ENameSelectorModel *name_selector_model; - ENameSelectorEntry *name_selector_entry; - GtkWidget *proxy_name, *name_box; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - - priv->builder = gtk_builder_new (); - e_load_ui_builder_definition (priv->builder, "proxy-add-dialog.ui"); - - proxy_dialog_initialize_widgets (account); - priv->main = e_builder_get_widget (priv->builder, "ProxyAccessRights"); - okButton = (GtkButton *) e_builder_get_widget (priv->builder,"proxy_button_ok"); - contacts = (GtkButton *) e_builder_get_widget (priv->builder,"contacts"); - cancel = (GtkButton *) e_builder_get_widget (priv->builder,"proxy_cancel"); - - priv->proxy_name_selector = e_name_selector_new (); - name_selector_dialog = e_name_selector_peek_dialog (priv->proxy_name_selector); - - g_signal_connect ((GtkWidget *)okButton, "clicked", G_CALLBACK (proxy_add_ok), account); - g_signal_connect ((GtkWidget *)cancel, "clicked", G_CALLBACK (proxy_cancel), account); - g_signal_connect ((GtkWidget *)contacts, "clicked", G_CALLBACK (address_button_clicked), account); - g_signal_connect (name_selector_dialog, "response", G_CALLBACK (addressbook_dialog_response), account); - gtk_widget_show (GTK_WIDGET (priv->main)); - - name_selector_model = e_name_selector_peek_model (priv->proxy_name_selector); - e_name_selector_model_add_section (name_selector_model, "Add User", _("Add User"), NULL); - - name_selector_entry = e_name_selector_peek_section_entry (priv->proxy_name_selector, "Add User"); - g_signal_connect (name_selector_entry, "changed", - G_CALLBACK (addressbook_entry_changed), prd); - - proxy_name = e_builder_get_widget (priv->builder, "proxy_account_name"); - name_box = e_builder_get_widget (priv->builder, "proxy_name_box"); - gtk_widget_hide (proxy_name); - gtk_container_add ((GtkContainer *)name_box, (GtkWidget *)name_selector_entry); - gtk_widget_show ((GtkWidget *) name_selector_entry); - gtk_widget_grab_focus ((GtkWidget *) name_selector_entry); -} - -static void -proxy_load_edit_dialog (EAccount *account, proxyHandler *edited) -{ - proxyDialogPrivate *priv; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - gtk_entry_set_text ((GtkEntry *) priv->account_name, edited->proxy_email); - gtk_widget_set_sensitive (priv->account_name, FALSE); - - if (edited->permissions & E_GW_PROXY_MAIL_READ) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->mail_read), TRUE); - - if (edited->permissions & E_GW_PROXY_MAIL_WRITE) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->mail_write), TRUE); - - if (edited->permissions & E_GW_PROXY_APPOINTMENT_READ) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->app_read), TRUE); - - if (edited->permissions & E_GW_PROXY_APPOINTMENT_WRITE) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->app_write), TRUE); - - if (edited->permissions & E_GW_PROXY_NOTES_READ) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->note_read), TRUE); - - if (edited->permissions & E_GW_PROXY_NOTES_WRITE) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->note_write), TRUE); - - if (edited->permissions & E_GW_PROXY_TASK_READ) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->task_read), TRUE); - - if (edited->permissions & E_GW_PROXY_TASK_WRITE) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->task_write), TRUE); - - if (edited->permissions & E_GW_PROXY_GET_ALARMS) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->alarms), TRUE); - - if (edited->permissions & E_GW_PROXY_GET_NOTIFICATIONS) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->notifications), TRUE); - - if (edited->permissions & E_GW_PROXY_MODIFY_FOLDERS) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->options), TRUE); - - if (edited->permissions & E_GW_PROXY_READ_PRIVATE) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->private), TRUE); -} - -static void -proxy_edit_account (GtkWidget *button, EAccount *account) -{ - GtkTreeIter iter; - GtkTreeModel *model; - proxyDialogPrivate *priv; - GtkTreeSelection* account_select; - proxyHandler *edited; - GtkButton *okButton, *proxyCancel; - gchar *account_mailid; - GtkWidget *contacts; - proxyDialog *prd = NULL; - - prd = g_object_get_data ((GObject *)account, "prd"); - priv = prd->priv; - - /*FIXME: If multiple properties dialogs are launched then the widgets lose data*/ - - account_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree)); - - if (gtk_tree_selection_get_selected (account_select, &model, &iter)) { - gtk_tree_model_get (model, &iter, ACCOUNT_NAME, &account_mailid, -1); - account_mailid = g_strrstr (account_mailid, "\n") + 1; - edited = proxy_get_item_from_list (account, account_mailid); - if (edited) { - priv->builder = gtk_builder_new (); - e_load_ui_builder_definition (priv->builder, "proxy-add-dialog.ui"); - - priv->main = e_builder_get_widget (priv->builder, "ProxyAccessRights"); - proxy_dialog_initialize_widgets (account); - okButton = (GtkButton *) e_builder_get_widget (priv->builder,"proxy_button_ok"); - proxyCancel = (GtkButton *) e_builder_get_widget (priv->builder,"proxy_cancel"); - contacts = e_builder_get_widget (priv->builder, "contacts"); - - g_signal_connect ((GtkWidget *)okButton, "clicked", G_CALLBACK (proxy_edit_ok), account); - g_signal_connect ((GtkWidget *)proxyCancel, "clicked", G_CALLBACK (proxy_cancel), account); - proxy_load_edit_dialog (account, edited); - gtk_widget_hide (contacts); - gtk_widget_show (GTK_WIDGET (priv->main)); - } - } -} diff --git a/plugins/groupwise-features/proxy.h b/plugins/groupwise-features/proxy.h deleted file mode 100644 index 5dc1bb47e6..0000000000 --- a/plugins/groupwise-features/proxy.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Shreyas Srinivasan <sshreyas@novell.com> - * Sankar P <psankar@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#include <libedataserver/e-account.h> -#include <gtk/gtk.h> - -#define TYPE_PROXY_DIALOG (proxy_dialog_get_type ()) -#define PROXY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_PROXY_DIALOG, proxyDialog)) -#define PROXY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_PROXY_DIALOG, proxyDialogClass)) -#define IS_PROXY_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_PROXY_DIALOG)) -#define IS_PROXY_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_PROXY_DIALOG)) - -typedef struct _proxyDialog proxyDialog; -typedef struct _proxyDialogClass proxyDialogClass; -typedef struct _proxyDialogPrivate proxyDialogPrivate; - -struct _proxyDialog{ - GObject object; - - /*Connection */ - EGwConnection *cnc; - - /* Private Dialog Information*/ - proxyDialogPrivate *priv; -}; - -struct _proxyDialogClass { - GObjectClass parent_class; -}; - -GType proxy_dialog_get_type (void); -proxyDialog *proxy_dialog_new (void); -GtkWidget * org_gnome_proxy (EPlugin *epl, EConfigHookItemFactoryData *data); -static void proxy_add_account (GtkWidget *button, EAccount *account); -static void proxy_remove_account (GtkWidget *button, EAccount *account); -static void proxy_update_tree_view (EAccount *account); -static void proxy_cancel (GtkWidget *button, EAccount *account); -static void proxy_edit_account (GtkWidget *button, EAccount *account); -void proxy_abort (GtkWidget *button, EConfigHookItemFactoryData *data); -void proxy_commit (GtkWidget *button, EConfigHookItemFactoryData *data); -static void proxy_setup_meta_tree_view (EAccount *account); -static proxyHandler *proxy_get_item_from_list (EAccount *account, gchar *account_name); -static void proxy_load_edit_dialog (EAccount *account, proxyHandler *edited); -void free_proxy_list (GList *proxy_list); diff --git a/plugins/groupwise-features/send-options.c b/plugins/groupwise-features/send-options.c deleted file mode 100644 index 1e6ef396c3..0000000000 --- a/plugins/groupwise-features/send-options.c +++ /dev/null @@ -1,567 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chenthill Palanisamy <pchenthill@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include "mail/em-account-editor.h" -#include "mail/em-config.h" -#include "libedataserver/e-account.h" -#include <misc/e-send-options.h> -#include <mail/em-config.h> -#include <e-gw-connection.h> -#include <libecal/e-cal-time-util.h> -#include <libedataserver/e-source-list.h> -#include <libedataserverui/e-passwords.h> - -ESendOptionsDialog *sod = NULL; -GtkWidget *parent; -EGwConnection *n_cnc; -EGwSendOptions *opts = NULL; -gboolean changed = FALSE; -EAccount *account; - -GtkWidget* org_gnome_send_options (EPlugin *epl, EConfigHookItemFactoryData *data); -void send_options_commit (EPlugin *epl, EConfigHookItemFactoryData *data); -void send_options_changed (EPlugin *epl, EConfigHookItemFactoryData *data); -void send_options_abort (EPlugin *epl, EConfigHookItemFactoryData *data); - -static EGwConnection * -get_cnc (GtkWindow *parent_window) -{ - EGwConnection *cnc; - const gchar *failed_auth; - gchar *uri, *key, *prompt, *password = NULL; - CamelURL *url; - const gchar *poa_address, *use_ssl, *soap_port; - gboolean remember; - - url = camel_url_new (account->source->url, NULL); - if (url == NULL) - return NULL; - poa_address = url->host; - if (!poa_address || strlen (poa_address) ==0) - return NULL; - - soap_port = camel_url_get_param (url, "soap_port"); - if (!soap_port || strlen (soap_port) == 0) - soap_port = "7191"; - use_ssl = camel_url_get_param (url, "use_ssl"); - - key = g_strdup_printf ("groupwise://%s@%s/", url->user, poa_address); - - if (use_ssl && !g_str_equal (use_ssl, "never")) - uri = g_strdup_printf ("https://%s:%s/soap", poa_address, soap_port); - else - uri = g_strdup_printf ("http://%s:%s/soap", poa_address, soap_port); - - failed_auth = ""; - cnc = NULL; - - prompt = g_strdup_printf (_("%sEnter password for %s (user %s)"), - failed_auth, poa_address, url->user); - - password = e_passwords_get_password ("Groupwise", key); - if (!password) - password = e_passwords_ask_password (prompt, "Groupwise", key, prompt, - E_PASSWORDS_REMEMBER_FOREVER|E_PASSWORDS_SECRET, &remember, parent_window); - g_free (prompt); - - cnc = e_gw_connection_new (uri, url->user, password); - if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { - gchar *http_uri = g_strconcat ("http://", uri + 8, NULL); - cnc = e_gw_connection_new (http_uri, url->user, password); - g_free (http_uri); - } - - camel_url_free (url); - return cnc; -} - -static void -e_send_options_load_general_opts (ESendOptionsGeneral *gopts, - EGwSendOptionsGeneral *ggopts) -{ - time_t temp; - - temp = time (NULL); - - gopts->priority = ggopts->priority; - - gopts->reply_enabled = ggopts->reply_enabled; - gopts->reply_convenient = ggopts->reply_convenient; - gopts->reply_within = ggopts->reply_within; - - gopts->expiration_enabled = ggopts->expiration_enabled; - gopts->expire_after = ggopts->expire_after; - - gopts->delay_enabled = ggopts->delay_enabled; - - /* TODO convert gint to timet comparing the current day */ - if (ggopts->delay_until) { - gopts->delay_until = time_add_day_with_zone (temp, ggopts->delay_until, NULL); - } else - gopts->delay_until = 0; -} - -static void -e_send_options_load_status_options (ESendOptionsStatusTracking *sopts, - EGwSendOptionsStatusTracking *gsopts) -{ - sopts->tracking_enabled = gsopts->tracking_enabled; - sopts->track_when = gsopts->track_when; - - sopts->autodelete = gsopts->autodelete; - - sopts->opened = gsopts->opened; - sopts->accepted = gsopts->accepted; - sopts->declined = gsopts->declined; - sopts->completed = gsopts->completed; -} - -static void -e_send_options_load_default_data (EGwSendOptions *opts, ESendOptionsDialog *sod) -{ - EGwSendOptionsGeneral *ggopts; - EGwSendOptionsStatusTracking *gmopts; - EGwSendOptionsStatusTracking *gcopts; - EGwSendOptionsStatusTracking *gtopts; - - ggopts = e_gw_sendoptions_get_general_options (opts); - gmopts = e_gw_sendoptions_get_status_tracking_options (opts, "mail"); - gcopts = e_gw_sendoptions_get_status_tracking_options (opts, "calendar"); - gtopts = e_gw_sendoptions_get_status_tracking_options (opts, "task"); - - e_send_options_load_general_opts (sod->data->gopts, ggopts); - e_send_options_load_status_options (sod->data->mopts, gmopts); - e_send_options_load_status_options (sod->data->copts, gcopts); - e_send_options_load_status_options (sod->data->topts, gtopts); -} - -static void -e_send_options_clicked_cb (GtkWidget *button, gpointer data) -{ - EGwConnectionStatus status; - account = (EAccount *) data; - if (!sod) { - sod = e_send_options_dialog_new (); - e_send_options_set_global (sod, TRUE); - if (!n_cnc) - n_cnc = get_cnc (GTK_WINDOW (gtk_widget_get_toplevel (button))); - - if (!n_cnc) { - g_warning ("Send Options: Could not get the connection to the server \n"); - return; - } - - status = e_gw_connection_get_settings (n_cnc, &opts); - if (status == E_GW_CONNECTION_STATUS_INVALID_CONNECTION) - status = e_gw_connection_get_settings (n_cnc, &opts); - if (status != E_GW_CONNECTION_STATUS_OK) { - g_warning ("Send Options: Could not get the settings from the server"); - return; - } - e_send_options_load_default_data (opts, sod); - } - - if (n_cnc) - e_send_options_dialog_run (sod, parent ? parent : NULL, E_ITEM_NONE); - else - return; -} - -GtkWidget * -org_gnome_send_options (EPlugin *epl, EConfigHookItemFactoryData *data) -{ - EMConfigTargetAccount *target_account; - GtkWidget *frame, *button, *label, *vbox; - gchar *markup; - - target_account = (EMConfigTargetAccount *)data->config->target; - account = target_account->modified_account; - - if (!g_strrstr (account->source->url, "groupwise://")) - return NULL; - - vbox = gtk_vbox_new (FALSE, 0); - frame = gtk_frame_new (""); - label = gtk_frame_get_label_widget (GTK_FRAME (frame)); - markup = g_strdup_printf("<b>%s</b>", _("Send Options")); - gtk_label_set_markup (GTK_LABEL (label), markup); - button = gtk_button_new_with_label (_("Advanced send options")); - gtk_widget_show (button); - g_free (markup); - - g_signal_connect(button, "clicked", - G_CALLBACK (e_send_options_clicked_cb), account); - - parent = gtk_widget_get_toplevel (GTK_WIDGET (data->parent)); - if (!gtk_widget_is_toplevel (parent)) - parent = NULL; - - gtk_widget_set_size_request (button, 10, -1); - gtk_box_pack_start (GTK_BOX (vbox), frame, 0, 0, 0); - gtk_container_add (GTK_CONTAINER (frame), button); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_NONE); - gtk_widget_show (frame); - gtk_box_set_spacing (GTK_BOX (data->parent), 12); - gtk_box_pack_start (GTK_BOX (data->parent), vbox, FALSE, FALSE, 0); - - return vbox; -} - -static void -send_options_finalize (void) -{ - if (n_cnc) { - g_object_unref (n_cnc); - n_cnc = NULL; - } - - if (sod) { - g_object_unref (sod); - sod = NULL; - } - - if (opts) { - g_object_unref (opts); - opts = NULL; - } -} - -static void -e_send_options_copy_general_opts (ESendOptionsGeneral *gopts, - EGwSendOptionsGeneral *ggopts) -{ - ggopts->priority = gopts->priority; - - ggopts->reply_enabled = gopts->reply_enabled; - ggopts->reply_convenient = gopts->reply_convenient; - ggopts->reply_within = gopts->reply_within; - - ggopts->expire_after = gopts->expire_after; - - if (gopts->expire_after == 0) { - ggopts->expiration_enabled = FALSE; - gopts->expiration_enabled = FALSE; - } else - ggopts->expiration_enabled = gopts->expiration_enabled; - - ggopts->delay_enabled = gopts->delay_enabled; - - if (gopts->delay_until) { - gint diff; - icaltimetype temp, current; - - temp = icaltime_from_timet (gopts->delay_until, 0); - current = icaltime_today (); - diff = temp.day - current.day; - ggopts->delay_until = diff; - } else - ggopts->delay_until = 0; -} - -static void -e_send_options_copy_status_options (ESendOptionsStatusTracking *sopts, - EGwSendOptionsStatusTracking *gsopts) -{ - gsopts->tracking_enabled = sopts->tracking_enabled; - gsopts->track_when = sopts->track_when; - - gsopts->autodelete = sopts->autodelete; - - gsopts->opened = sopts->opened; - gsopts->accepted = sopts->accepted; - gsopts->declined = sopts->declined; - gsopts->completed = sopts->completed; -} - -static gboolean -check_status_options_changed (EGwSendOptionsStatusTracking *n_sopts, - EGwSendOptionsStatusTracking *o_sopts) -{ - return (!(n_sopts->tracking_enabled == o_sopts->tracking_enabled - && n_sopts->track_when == o_sopts->track_when - && n_sopts->autodelete == o_sopts->autodelete - && n_sopts->opened == o_sopts->opened - && n_sopts->declined == o_sopts->declined - && n_sopts->accepted == o_sopts->accepted - && n_sopts->completed == o_sopts->completed)); - -} - -static gboolean -check_general_changed (EGwSendOptionsGeneral *n_gopts, - EGwSendOptionsGeneral *o_gopts) -{ - return (!(n_gopts->priority == o_gopts->priority - && n_gopts->delay_enabled == o_gopts->delay_enabled - && n_gopts->delay_until == o_gopts->delay_until - && n_gopts->reply_enabled == o_gopts->reply_enabled - && n_gopts->reply_convenient == o_gopts->reply_convenient - && n_gopts->reply_within == o_gopts->reply_within - && n_gopts->expiration_enabled == o_gopts->expiration_enabled - && n_gopts->expire_after == o_gopts->expire_after)); -} - -static void -send_options_copy_check_changed (EGwSendOptions *n_opts) -{ - EGwSendOptionsGeneral *ggopts, *o_gopts; - EGwSendOptionsStatusTracking *gmopts, *o_gmopts; - EGwSendOptionsStatusTracking *gcopts, *o_gcopts; - EGwSendOptionsStatusTracking *gtopts, *o_gtopts; - - ggopts = e_gw_sendoptions_get_general_options (n_opts); - gmopts = e_gw_sendoptions_get_status_tracking_options (n_opts, "mail"); - gcopts = e_gw_sendoptions_get_status_tracking_options (n_opts, "calendar"); - gtopts = e_gw_sendoptions_get_status_tracking_options (n_opts, "task"); - - o_gopts = e_gw_sendoptions_get_general_options (opts); - o_gmopts = e_gw_sendoptions_get_status_tracking_options (opts, "mail"); - o_gcopts = e_gw_sendoptions_get_status_tracking_options (opts, "calendar"); - o_gtopts = e_gw_sendoptions_get_status_tracking_options (opts, "task"); - - e_send_options_copy_general_opts (sod->data->gopts, ggopts); - e_send_options_copy_status_options (sod->data->mopts, gmopts); - e_send_options_copy_status_options (sod->data->copts, gcopts); - e_send_options_copy_status_options (sod->data->topts, gtopts); - - if (check_general_changed (ggopts, o_gopts)) - changed = TRUE; - if (check_status_options_changed (gmopts, o_gmopts)) - changed = TRUE; - if (check_status_options_changed (gcopts, o_gcopts)) - changed = TRUE; - if (check_status_options_changed (gtopts, o_gtopts)) - changed = TRUE; -} - -static ESource * -get_source (ESourceList *list) -{ - GSList *p, *l; - gchar **temp = g_strsplit (account->source->url, ";", -1); - gchar *uri = temp[0]; - - l = e_source_list_peek_groups (list); - - for (p = l; p != NULL; p = p->next) { - gchar *so_uri; - GSList *r, *s; - ESourceGroup *group = E_SOURCE_GROUP (p->data); - - s = e_source_group_peek_sources (group); - for (r = s; r != NULL; r = r->next) { - ESource *so = E_SOURCE (r->data); - so_uri = e_source_get_uri (so); - - if (so_uri) { - if (!strcmp (so_uri, uri)) { - g_free (so_uri), so_uri = NULL; - g_strfreev (temp); - return E_SOURCE (r->data); - } - g_free (so_uri), so_uri = NULL; - } - } - } - - g_strfreev (temp); - - return NULL; -} - -static void -add_return_value (EGwSendOptionsReturnNotify track, - ESource *source, - const gchar *notify) -{ - gchar *value; - - switch (track) { - case E_GW_RETURN_NOTIFY_MAIL: - value = g_strdup ("mail"); - break; - default: - value = g_strdup ("none"); - } - - e_source_set_property (source, notify, value); - g_free (value), value = NULL; -} - -static void -put_options_in_source (ESource *source, - EGwSendOptionsGeneral *gopts, - EGwSendOptionsStatusTracking *sopts) -{ - gchar *value; - const gchar *val; - icaltimetype tt; - CamelURL *url; - - url = camel_url_new (account->source->url, NULL); - - if (gopts) { - /* priority */ - switch (gopts->priority) { - case E_GW_PRIORITY_HIGH: - value = g_strdup ("high"); - break; - case E_GW_PRIORITY_STANDARD: - value = g_strdup ("standard"); - break; - case E_GW_PRIORITY_LOW: - value = g_strdup ("low"); - break; - default: - value = g_strdup ("undefined"); - } - e_source_set_property (source, "priority", value); - camel_url_set_param (url, "priority", value); - g_free (value), value = NULL; - - /* Reply Requested */ - /*TODO Fill the value if it is not "convinient" */ - if (gopts->reply_enabled) { - if (gopts->reply_convenient) - value = g_strdup ("convinient"); - else - value = g_strdup_printf ("%d",gopts->reply_within); - } else - value = g_strdup ("none"); - e_source_set_property (source, "reply-requested", value); - g_free (value), value = NULL; - - /* Delay delivery */ - if (gopts->delay_enabled) { - tt = icaltime_today (); - icaltime_adjust (&tt, gopts->delay_until, 0, 0, 0); - val = icaltime_as_ical_string_r (tt); - } else - val = "none"; - e_source_set_property (source, "delay-delivery", val); - - /* Expiration date */ - if (gopts->expiration_enabled) - value = g_strdup_printf ("%d", gopts->expire_after); - else - value = g_strdup ("none"); - e_source_set_property (source, "expiration", value); - g_free (value), value = NULL; - } - - if (sopts) { - /* status tracking */ - if (sopts->tracking_enabled) { - switch (sopts->track_when) { - case E_GW_DELIVERED : - value = g_strdup ("delivered"); - break; - case E_GW_DELIVERED_OPENED: - value = g_strdup ("delivered-opened"); - break; - default: - value = g_strdup ("all"); - } - } else - value = g_strdup ("none"); - e_source_set_property (source, "status-tracking", value); - g_free (value), value = NULL; - - add_return_value (sopts->opened, source, "return-open"); - add_return_value (sopts->accepted, source, "return-accept"); - add_return_value (sopts->declined, source, "return-decline"); - add_return_value (sopts->completed, source, "return-complete"); - } -} - -static void -add_send_options_to_source (EGwSendOptions *n_opts) -{ - GConfClient *gconf = gconf_client_get_default (); - ESource *csource, *tsource; - ESourceList *list; - EGwSendOptionsGeneral *gopts; - EGwSendOptionsStatusTracking *topts, *copts; - - list = e_source_list_new_for_gconf (gconf, "/apps/evolution/calendar/sources"); - csource = get_source (list); - - list = e_source_list_new_for_gconf (gconf, "/apps/evolution/tasks/sources"); - tsource = get_source (list); - - gopts = e_gw_sendoptions_get_general_options (n_opts); - copts = e_gw_sendoptions_get_status_tracking_options (n_opts, "calendar"); - topts = e_gw_sendoptions_get_status_tracking_options (n_opts, "task"); - - if (csource) - put_options_in_source (csource, gopts, copts); - - if (tsource) - put_options_in_source (tsource, gopts, topts); - - g_object_unref (gconf); -} - -void -send_options_commit (EPlugin *epl, EConfigHookItemFactoryData *data) -{ - EGwSendOptions *n_opts; - EGwConnectionStatus status = E_GW_CONNECTION_STATUS_OK; - - if (sod) { - n_opts = e_gw_sendoptions_new (); - send_options_copy_check_changed (n_opts); - - if (changed) - status = e_gw_connection_modify_settings (n_cnc, n_opts); - - if (!changed || status != E_GW_CONNECTION_STATUS_OK) { - g_warning ( - G_STRLOC "Cannot modify Send Options: %s", - e_gw_connection_get_error_message (status)); - g_object_unref (n_opts); - n_opts = NULL; - } else - add_send_options_to_source (n_opts); - } - - send_options_finalize (); -} - -void -send_options_changed (EPlugin *epl, EConfigHookItemFactoryData *data) -{ -} - -void -send_options_abort (EPlugin *epl, EConfigHookItemFactoryData *data) -{ - send_options_finalize (); -} - diff --git a/plugins/groupwise-features/share-folder-common.c b/plugins/groupwise-features/share-folder-common.c deleted file mode 100644 index 20720e916c..0000000000 --- a/plugins/groupwise-features/share-folder-common.c +++ /dev/null @@ -1,519 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <string.h> -#include <glib.h> -#include <gtk/gtk.h> -#include <glib/gi18n.h> -#include <e-util/e-config.h> -#include <e-util/e-account-utils.h> -#include <mail/e-mail-backend.h> -#include <mail/em-config.h> -#include <mail/em-folder-properties.h> -#include <mail/em-folder-tree.h> -#include <mail/em-folder-selector.h> -#include <mail/mail-mt.h> -#include <mail/mail-vfolder.h> -#include <mail/em-utils.h> -#include <mail/em-vfolder-rule.h> -#include <filter/e-filter-rule.h> -#include <e-gw-container.h> -#include <e-gw-connection.h> -#include <shell/e-shell-sidebar.h> -#include "share-folder.h" -#include "gw-ui.h" - -#define d(x) - -ShareFolder *common = NULL; -CamelSession *session; -struct ShareInfo { - GtkWidget *d; - ShareFolder *sf; - EMFolderTreeModel *model; - EMFolderSelector *emfs; -}; - -GtkWidget * org_gnome_shared_folder_factory (EPlugin *ep, EConfigHookItemFactoryData *hook_data); -void shared_folder_commit (EPlugin *ep, EConfigTarget *tget); -void shared_folder_abort (EPlugin *ep, EConfigTarget *target); - -static void refresh_folder_tree (EMFolderTreeModel *model, CamelStore *store); - -static void -refresh_folder_tree (EMFolderTreeModel *model, CamelStore *store) -{ - EAccount *account; - CamelProvider *provider; - const gchar *uid; - gchar *uri; - - uid = camel_service_get_uid (CAMEL_SERVICE (store)); - account = e_get_account_by_uid (uid); - - if (account == NULL) - return; - - uri = account->source->url; - em_folder_tree_model_remove_store (model, store); - - provider = camel_provider_get (uri, NULL); - if (provider == NULL) - return; - - if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) - return; - em_folder_tree_model_add_store (model, store, account->name); -} - -void -shared_folder_commit (EPlugin *ep, EConfigTarget *tget) -{ - EMConfigTargetFolder *target = (EMConfigTargetFolder *)tget->config->target; - CamelStore *parent_store; - EMFolderTreeModel *model = em_folder_tree_model_new (); /*mail_component_peek_tree_model (mail_component_peek ());*/ - - parent_store = camel_folder_get_parent_store (target->folder); - - if (common) { - share_folder (common); - refresh_folder_tree (model, parent_store); - g_object_run_dispose ((GObject *)common); - common = NULL; - } -} - -void -shared_folder_abort (EPlugin *ep, EConfigTarget *target) -{ - if (common) { - g_object_run_dispose ((GObject *)common); - common = NULL; - } -} - -struct _EMCreateFolder { - MailMsg base; - - /* input data */ - CamelStore *store; - gchar *full_name; - gchar *parent; - gchar *name; - - /* output data */ - CamelFolderInfo *fi; - - /* callback data */ - void (* done) (struct _EMCreateFolder *m, gpointer user_data); - gpointer user_data; -}; - -static gchar * -create_folder_desc (struct _EMCreateFolder *m) -{ - return g_strdup_printf (_("Creating folder '%s'"), m->full_name); -} - -static void -create_folder_exec (struct _EMCreateFolder *m, - GCancellable *cancellable, - GError **error) -{ - d(printf ("creating folder parent='%s' name='%s' full_name='%s'\n", m->parent, m->name, m->full_name)); - - if ((m->fi = camel_store_create_folder_sync ( - m->store, m->parent, m->name, cancellable, error))) { - - if (camel_store_supports_subscriptions (m->store)) - camel_store_subscribe_folder_sync ( - m->store, m->full_name, - cancellable, error); - } -} - -static void -create_folder_done (struct _EMCreateFolder *m) -{ - struct ShareInfo *ssi = (struct ShareInfo *) m->user_data; - CamelStore *store = CAMEL_STORE (m->store); - EGwConnection *ccnc; - - if (m->done) { - ccnc = get_cnc (store); - if (E_IS_GW_CONNECTION (ccnc)) { - (ssi->sf)->cnc = ccnc; - - (ssi->sf)->container_id = g_strdup (get_container_id ((ssi->sf)->cnc, m->full_name)); - share_folder (ssi->sf); - } - - m->done (m, m->user_data); - } -} - -static void -create_folder_free (struct _EMCreateFolder *m) -{ - camel_store_free_folder_info (m->store, m->fi); - g_object_unref (m->store); - g_free (m->full_name); - g_free (m->parent); - g_free (m->name); -} - -static MailMsgInfo create_folder_info = { - sizeof (struct _EMCreateFolder), - (MailMsgDescFunc) create_folder_desc, - (MailMsgExecFunc) create_folder_exec, - (MailMsgDoneFunc) create_folder_done, - (MailMsgFreeFunc) create_folder_free -}; - -static void -new_folder_created_cb (struct _EMCreateFolder *m, gpointer user_data) -{ - struct ShareInfo *ssi = (struct ShareInfo *) user_data; - EMFolderSelector *emfs = ssi->emfs; - if (m->fi) { - refresh_folder_tree (ssi->model, m->store); - gtk_widget_destroy ((GtkWidget *) emfs); - gtk_widget_destroy ((GtkWidget *) ssi->d); - } - - g_object_unref (emfs); -} - -static gint -create_folder (CamelStore *store, const gchar *full_name, void (* done) (struct _EMCreateFolder *m, gpointer user_data), gpointer user_data) -{ - gchar *name, *namebuf = NULL; - struct _EMCreateFolder *m; - const gchar *parent; - gint id; - - namebuf = g_strdup (full_name); - if (!(name = strrchr (namebuf, '/'))) { - name = namebuf; - parent = ""; - } else { - *name++ = '\0'; - parent = namebuf; - } - - m = mail_msg_new (&create_folder_info); - g_object_ref (store); - m->store = store; - m->full_name = g_strdup (full_name); - m->parent = g_strdup (parent); - m->name = g_strdup (name); - m->user_data = (struct ShareInfo *) user_data; - m->done = done; - g_free (namebuf); - id = m->base.seq; - mail_msg_unordered_push (m); - - return id; -} - -static void -users_dialog_response (GtkWidget *dialog, gint response, struct ShareInfo *ssi) -{ - struct _EMFolderTreeModelStoreInfo *si; - EMFolderSelector *emfs = ssi->emfs; - const gchar *uri, *path; - EMailSession *session; - CamelService *service = NULL; - CamelURL *url; - - if (response != GTK_RESPONSE_OK) { - gtk_widget_destroy ((GtkWidget *) emfs); - gtk_widget_destroy (dialog); - return; - } - - uri = em_folder_selector_get_selected_uri (emfs); - path = em_folder_selector_get_selected_path (emfs); - session = em_folder_tree_get_session (emfs->emft); - - d(printf ("Creating new folder: %s (%s)\n", path, uri)); - - url = camel_url_new (uri, NULL); - if (url != NULL) { - service = camel_session_get_service_by_url ( - CAMEL_SESSION (session), url, CAMEL_PROVIDER_STORE); - camel_url_free (url); - } - - if (!CAMEL_IS_STORE (service)) - return; - - si = em_folder_tree_model_lookup_store_info ( - ssi->model, CAMEL_STORE (service)); - if (si == NULL) { - g_assert_not_reached (); - return; - } - - if (CAMEL_IS_VEE_STORE (service)) { - EFilterRule *rule; - - rule = em_vfolder_rule_new (session); - e_filter_rule_set_name (rule, path); - vfolder_gui_add_rule (EM_VFOLDER_RULE (rule)); - gtk_widget_destroy ((GtkWidget *)emfs); - } else { - g_object_ref (emfs); - ssi->d = dialog; - create_folder (si->store, path, new_folder_created_cb, ssi); - - } -} - -static void -new_folder_response (EMFolderSelector *emfs, gint response, EMFolderTreeModel *model) -{ - GtkWidget *users_dialog; - GtkWidget *content_area; - GtkWidget *w; - struct ShareInfo *ssi; - const gchar *uri; - EGwConnection *cnc; - CamelService *service = NULL; - CamelURL *url; - - ssi = g_new0 (struct ShareInfo, 1); - if (response != GTK_RESPONSE_OK) { - gtk_widget_destroy ((GtkWidget *) emfs); - return; - } - - /* i want store at this point to get cnc not sure proper or not*/ - uri = em_folder_selector_get_selected_uri (emfs); - - url = camel_url_new (uri, NULL); - if (url != NULL) { - service = camel_session_get_service_by_url ( - session, url, CAMEL_PROVIDER_STORE); - camel_url_free (url); - } - - if (!CAMEL_IS_STORE (service)) - return; - - cnc = get_cnc (CAMEL_STORE (service)); - users_dialog = gtk_dialog_new_with_buttons ( - _("Users"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); - w = gtk_label_new_with_mnemonic (_("Enter the users and set permissions")); - gtk_widget_show (w); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (users_dialog)); - gtk_box_pack_start (GTK_BOX (content_area), (GtkWidget *) w, TRUE, TRUE, 6); - ssi->sf = share_folder_new (cnc, NULL); - gtk_widget_set_sensitive (GTK_WIDGET ((ssi->sf)->table), TRUE); - ssi->model = model; - ssi->emfs = emfs; - gtk_widget_reparent (GTK_WIDGET ((ssi->sf)->table), content_area); - gtk_widget_hide ((GtkWidget*) emfs); - gtk_window_resize (GTK_WINDOW (users_dialog), 350, 300); - gtk_widget_show (users_dialog); - g_signal_connect (users_dialog, "response", G_CALLBACK (users_dialog_response), ssi); -} - -void -gw_new_shared_folder_cb (GtkAction *action, EShellView *shell_view) -{ - EMFolderTree *folder_tree; - EShellBackend *shell_backend; - EMailSession *session; - GtkWidget *dialog; - gchar *uri; - gpointer parent; - - parent = e_shell_view_get_shell_window (shell_view); - shell_backend = e_shell_view_get_shell_backend (shell_view); - session = e_mail_backend_get_session (E_MAIL_BACKEND (shell_backend)); - - folder_tree = (EMFolderTree *) em_folder_tree_new (session); - emu_restore_folder_tree_state (folder_tree); - - dialog = em_folder_selector_create_new (parent, folder_tree, 0, _("Create folder"), _("Specify where to create the folder:")); - uri = em_folder_tree_get_selected_uri (folder_tree); - if (uri != NULL) - em_folder_selector_set_selected ((EMFolderSelector *) dialog, uri); - g_free (uri); - - g_signal_connect (dialog, "response", G_CALLBACK (new_folder_response), gtk_tree_view_get_model (GTK_TREE_VIEW (folder_tree))); - gtk_window_set_title (GTK_WINDOW (dialog), "New Shared Folder" ); - gtk_widget_show (dialog); -} - -GtkWidget * -org_gnome_shared_folder_factory (EPlugin *ep, EConfigHookItemFactoryData *hook_data) -{ - - gchar *folderuri = NULL; - gchar *account = NULL; - gchar *id = NULL; - gchar *folder_name = NULL; - EGwConnection *cnc; - ShareFolder *sharing_tab; - EMConfigTargetFolder *target= (EMConfigTargetFolder *)hook_data->config->target; - CamelFolder *folder = target->folder; - - folder_name = g_strdup (camel_folder_get_full_name (folder)); - folderuri = g_strdup (target->uri); - if (folderuri && folder_name) - account = g_strrstr(folderuri, "groupwise"); - else - return NULL; - - /* This is kind of bad..but we don't have types for all these folders.*/ - - if ( !( strcmp (folder_name, "Mailbox") - && strcmp (folder_name, "Calendar") - && strcmp (folder_name, "Contacts") - && strcmp (folder_name, "Documents") - && strcmp (folder_name, "Authored") - && strcmp (folder_name, "Default Library") - && strcmp (folder_name, "Work In Progress") - && strcmp (folder_name, "Cabinet") - && strcmp (folder_name, "Sent Items") - && strcmp (folder_name, "Trash") - && strcmp (folder_name, "Checklist"))) { - - g_free (folderuri); - return NULL; - } - - if (account) { - CamelStore *parent_store; - - parent_store = camel_folder_get_parent_store (folder); - cnc = get_cnc (parent_store); - - if (E_IS_GW_CONNECTION (cnc)) - id = get_container_id (cnc, folder_name); - else - g_warning("Could not Connnect\n"); - - if (cnc && id) - sharing_tab = share_folder_new (cnc, id); - else - return NULL; - - gtk_notebook_append_page((GtkNotebook *) hook_data->parent, (GtkWidget *) sharing_tab->vbox, gtk_label_new_with_mnemonic N_("Sharing")); - common = sharing_tab; - g_free (folderuri); - return GTK_WIDGET (sharing_tab); - } else - return NULL; -} - -EGwConnection * -get_cnc (CamelStore *store) -{ - EGwConnection *cnc; - const gchar *uri, *property_value, *server_name, *user, *port; - gchar *use_ssl; - CamelService *service; - CamelURL *url; - - if (!store) - return NULL; - - service = CAMEL_SERVICE (store); - url = camel_service_get_camel_url (service); - server_name = g_strdup (url->host); - user = g_strdup (url->user); - property_value = camel_url_get_param (url, "soap_port"); - use_ssl = g_strdup (camel_url_get_param (url, "use_ssl")); - if (property_value == NULL) - port = g_strdup ("7191"); - else if (strlen (property_value) == 0) - port = g_strdup ("7191"); - else - port = g_strdup (property_value); - - if (use_ssl && !g_str_equal (use_ssl, "never")) - uri = g_strconcat ("https://", server_name, ":", port, "/soap", NULL); - else - uri = g_strconcat ("http://", server_name, ":", port, "/soap", NULL); - - cnc = e_gw_connection_new (uri, user, url->passwd); - if (!E_IS_GW_CONNECTION(cnc) && use_ssl && g_str_equal (use_ssl, "when-possible")) { - gchar *http_uri = g_strconcat ("http://", uri + 8, NULL); - cnc = e_gw_connection_new (http_uri, user, url->passwd); - g_free (http_uri); - } - g_free (use_ssl); - use_ssl = NULL; - - return cnc; - -} - -gchar * -get_container_id (EGwConnection *cnc, const gchar *fname) -{ - GList *container_list = NULL; - gchar *id = NULL; - gchar *name; - gchar **names; - gint i = 0, parts = 0; - - names = g_strsplit (fname, "/", -1); - if (names) { - while (names[parts]) - parts++; - fname = names[i]; - } - - /* get list of containers */ - if (e_gw_connection_get_container_list (cnc, "folders", &(container_list)) == E_GW_CONNECTION_STATUS_OK) { - GList *container = NULL; - - for (container = container_list; container != NULL; container = container->next) { - name = g_strdup (e_gw_container_get_name (container->data)); - /* if Null is passed as name then we return top lavel id*/ - if (fname == NULL) { - id = g_strdup (e_gw_container_get_id (container->data)); - break; - } else if (!strcmp (name, fname)) { - if (i == parts - 1) { - id = g_strdup (e_gw_container_get_id (container->data)); - break; - } else - fname = names[++i]; - } - g_free (name); - } - e_gw_connection_free_container_list (container_list); - } - - if (names) - g_strfreev (names); - return id; -} diff --git a/plugins/groupwise-features/share-folder.c b/plugins/groupwise-features/share-folder.c deleted file mode 100644 index ea42265b4f..0000000000 --- a/plugins/groupwise-features/share-folder.c +++ /dev/null @@ -1,767 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -# include <config.h> -#endif -#include "share-folder.h" -#include <glib/gi18n-lib.h> -#include <libedataserverui/e-contact-store.h> -#include <e-util/e-util.h> -#include <e-util/e-alert-dialog.h> -#include <e-util/e-util-private.h> -#include <e-gw-container.h> -#include <e-gw-connection.h> -#define ROOTNODE "vboxSharing" -#define NROOTNODE "vbox191" -#define d(x) - -struct _SharedUser { - EShUsers *user_node; - gint flag; -}; -typedef struct _SharedUser SharedUser; - -static void share_folder_class_init (ShareFolderClass *class); -static void share_folder_init (ShareFolder *sf); -static void share_folder_dispose (GObject *obj); -static void share_folder_finalise (GObject *obj); -static void free_user_node (EShUsers *user); -static void free_node (SharedUser *user); -static void free_all (ShareFolder *sf); -static SharedUser * find_node (GList *list, gchar *email); -static void get_container_list (ShareFolder *sf); -static void user_selected (GtkTreeSelection *selection, ShareFolder *sf); -static void not_shared_clicked (GtkRadioButton *button, ShareFolder *sf); -static void shared_clicked (GtkRadioButton *button, ShareFolder *sf); -static void add_clicked (GtkButton *button, ShareFolder *sf); -static void remove_clicked (GtkButton *button, ShareFolder *sf); -static void not_ok_clicked (GtkButton *button, ShareFolder *sf); -static void not_cancel_clicked (GtkButton *button, GtkWidget *window); -static void share_folder_construct (ShareFolder *sf); -GType share_folder_get_type (void); - -static GtkVBoxClass *parent_class = NULL; - -GType -share_folder_get_type (void) -{ - static GType type = 0; - - if (!type) { - static const GTypeInfo info = { - sizeof (ShareFolderClass), - NULL, NULL, - (GClassInitFunc) share_folder_class_init, - NULL, NULL, - sizeof (ShareFolder), - 0, - (GInstanceInitFunc) share_folder_init - }; - - type = g_type_register_static (gtk_vbox_get_type (), "ShareFolder", &info, 0); - } - - return type; -} - -static void -share_folder_class_init (ShareFolderClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - parent_class = g_type_class_ref (gtk_vbox_get_type ()); - object_class->dispose = share_folder_dispose; - object_class->finalize = share_folder_finalise; -} - -static void -share_folder_finalise (GObject *object) -{ - ShareFolder *sf = (ShareFolder *) object; - g_object_unref (sf->builder); - free_all (sf); - - /* Chain up to parent's finalize() method. */ - G_OBJECT_CLASS (parent_class)->finalize (object); -} - -static void -share_folder_dispose (GObject *object) -{ - - ShareFolder *sf = (ShareFolder *) object; - free_all (sf); - - /* Chain up to parent's dispose() method. */ - G_OBJECT_CLASS (parent_class)->dispose (object); -} - -static void -share_folder_init (ShareFolder *sf) -{ - sf->gcontainer = NULL; - sf->users = 0; - sf->flag_for_ok = 0; - sf->shared = FALSE; - sf->container_list = NULL; - sf->users_list = NULL; - sf->sub = "Shared Folder notification"; - sf->message = NULL; -} - -static void -free_user_node (EShUsers *user) -{ - if (user) { - g_free (user->email); - user->email = NULL; - } - return; -} - -static void -free_node (SharedUser *usr) -{ - EShUsers *user = usr->user_node; - if (user) { - g_free (user->email); - user->email = NULL; - } - return; -} - -static SharedUser * -find_node (GList *list, gchar *email) -{ - SharedUser *user = NULL; - EShUsers *usr = NULL; - GList *tmp; - gint i; - - if (list) { - tmp = g_list_first (list); - for (i=0; tmp; i++) - { - user = tmp->data; - usr = user->user_node; - if (!g_ascii_strcasecmp (usr->email, email)) { - return user; /*if found, it returns that user*/ - } - tmp= g_list_next (tmp); - } - } - return NULL; -} - -static void -free_all (ShareFolder *sf) -{ - if (sf->users_list) { - g_list_foreach (sf->users_list,(GFunc) free_node, NULL); - g_list_free (sf->users_list); - sf->users_list = NULL; - } - - /* e_gw_connection_free_container_list (sf->container_list); */ -} - -static void -display_container (EGwContainer *container , ShareFolder *sf) -{ - gboolean byme = FALSE; - gboolean tome = FALSE; - gchar *email = NULL; - gchar *msg; - GList *user_list = NULL; - EShUsers *user = NULL; - - sf->gcontainer = container; - if (!(byme = e_gw_container_get_is_shared_by_me (container))) - tome = e_gw_container_get_is_shared_to_me (container); - if (byme || tome) { - e_gw_container_get_user_list (sf->gcontainer, &user_list); - sf->users = g_list_length (user_list); - if (sf->users != 0) { - sf->is_shared = TRUE; - gtk_toggle_button_set_active ((GtkToggleButton *) sf->shared, TRUE); - shared_clicked (sf->shared , sf); - if (tome) { - g_print ("Entered: inside too\n"); - - gtk_widget_set_sensitive (GTK_WIDGET (sf->not_shared), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sf->add_button), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sf->remove), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sf->add_book), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sf->notification), FALSE); - gtk_widget_set_sensitive (GTK_WIDGET (sf->user_list), FALSE); - email = g_strdup (e_gw_container_get_owner (sf->gcontainer)); - msg = g_strconcat (email, " (Owner)", NULL); - gtk_list_store_append (GTK_LIST_STORE (sf->model), &(sf->iter)); - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 0, msg, -1); - g_free (msg); - g_free (email); - - } else - gtk_widget_set_sensitive (GTK_WIDGET (sf->table), TRUE); - /* I populate the list and set flags to 0 for the existing users*/ - while (user_list) { - SharedUser *shared_user = g_new0 (SharedUser , 1); - gboolean add, edit, delete; - add = edit = delete = FALSE; - user = user_list->data; - shared_user->user_node = user; - shared_user->flag = 0; - email = g_strdup (user->email); - if (user->rights & 0x1) - add = TRUE; - if (user->rights & 0x2) - edit = TRUE; - if (user->rights & 0x4) - delete = TRUE; - - msg = g_strdup_printf ("%s", email); - gtk_list_store_append (GTK_LIST_STORE (sf->model), &(sf->iter)); - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 0, msg, 1, add, 2, edit, 3, delete, -1); - sf->users_list = g_list_append (sf->users_list, shared_user); - g_free (msg); - g_free (email); - msg = NULL; - email = NULL; - user_list = user_list->next; - } - /* i also need to display status*/ - } else { - - gtk_toggle_button_set_active ((GtkToggleButton *) sf->not_shared, TRUE); - not_shared_clicked (sf->not_shared , sf); - } - } - -} - -static void -get_container_list (ShareFolder *sf) -{ - sf->container_list = NULL; - if (E_IS_GW_CONNECTION (sf->cnc)) { - /* get list of containers */ - if (e_gw_connection_get_container_list (sf->cnc, "folders", &(sf->container_list)) == E_GW_CONNECTION_STATUS_OK) { - GList *container = NULL; - - for (container = sf->container_list; container != NULL; container = container->next) { - gchar **tail; - gchar *id_shared = NULL; - gchar *id_unshared = NULL; - - id_shared = g_strdup (e_gw_container_get_id (container->data)); - - /* this has to be done since id changes after the folder is shared*/ - if ( g_str_has_suffix (id_shared, "35")) { - tail = g_strsplit(id_shared, "@", 2); - id_unshared = g_strconcat(tail[0], "@", "13", NULL); - g_strfreev (tail); - } - - if ((id_shared && !g_ascii_strcasecmp (id_shared, sf->container_id)) ||(id_unshared && !g_ascii_strcasecmp (id_unshared, sf->container_id))) { - - display_container (E_GW_CONTAINER (container->data), sf); - g_free (id_shared); - g_free (id_unshared); - break; - } - - g_free (id_shared); - g_free (id_unshared); - } - - } else - g_warning("Could not get the Container List"); - } -} - -static void -shared_clicked (GtkRadioButton *button, ShareFolder *sf) -{ - - gtk_widget_set_sensitive (GTK_WIDGET (sf->table) ,TRUE); - sf->flag_for_ok = 0; -} - -static void -not_shared_clicked (GtkRadioButton *button, ShareFolder *sf) -{ - if (!sf->is_shared) { - sf->flag_for_ok = 0; - } else { - sf->flag_for_ok = 2; - } - gtk_widget_set_sensitive (GTK_WIDGET (sf->table), FALSE); - -} - -static void -add_clicked (GtkButton *button, ShareFolder *sf) -{ - const gchar *email = NULL; - const gchar *self_email = NULL; - SharedUser *new_user = NULL; - EShUsers *usr = NULL; - gint rights = 0; - gchar *msg = NULL; - EDestinationStore *destination_store; - GList *destinations, *tmp; - ENameSelectorEntry *name_selector_entry; - - name_selector_entry = e_name_selector_peek_section_entry (sf->name_selector, "Add User"); - destination_store = e_name_selector_entry_peek_destination_store (E_NAME_SELECTOR_ENTRY ( - name_selector_entry)); - destinations = e_destination_store_list_destinations (destination_store); - tmp = destinations; - self_email = g_strdup (e_gw_connection_get_user_email (sf->cnc)); - for (; tmp != NULL; tmp = g_list_next (tmp)) { - email = e_destination_get_email (tmp->data); - /* You can't share a folder with yourself*/ - if (g_strrstr (email, "@") == NULL || (!g_ascii_strcasecmp (email , self_email))) - e_alert_run_dialog_for_args (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))), - "org.gnome.evolution.mail_shared_folder:invalid-user", - email, NULL); - else { - if (!g_ascii_strcasecmp (email, "" )) { - e_alert_run_dialog_for_args (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button))), - "org.gnome.evolution.mail_shared_folder:no-user", NULL); - - return; - } - - /*check whether already exists*/ - if (sf->users_list && email) { - new_user = find_node (sf->users_list, (gchar *)email); - if (new_user) - return; - - } - usr = g_new0 (EShUsers, 1); - new_user = g_new0 (SharedUser, 1); - usr->email = g_strdup (email); - usr->rights = rights; - new_user->user_node = usr; - new_user->flag = 1; - msg = g_strdup (email); - gtk_list_store_append (GTK_LIST_STORE (sf->model), &(sf->iter)); - - /* have to add code for rights*/ - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 0, msg, -1); - g_free (msg); - sf->users_list = g_list_append (sf->users_list, new_user); - sf->flag_for_ok = 0; - } - } - gtk_entry_set_text (GTK_ENTRY(name_selector_entry), ""); - -} - -static void -remove_clicked (GtkButton *button, ShareFolder *sf) -{ - - SharedUser *usr = NULL; - gchar *email; - - gtk_tree_model_get ((GtkTreeModel *) sf->model, &(sf->iter), 0, &email, -1); - usr = find_node (sf->users_list, email); - if (usr->flag & 0x1) { - sf->users_list = g_list_remove (sf->users_list, usr); - free_node (usr); - } else { - usr->flag = 0; - usr->flag |= 0x4; - } - g_free (email); - if (!gtk_list_store_remove (GTK_LIST_STORE (sf->model), &(sf->iter))) - gtk_widget_set_sensitive (GTK_WIDGET (sf->remove), FALSE); - sf->flag_for_ok = 1; -} - -void -share_folder (ShareFolder *sf) -{ - - GList *new_list = NULL; - GList *update_list = NULL; - GList *remove_list = NULL; - GList *node = NULL; - SharedUser *user = NULL; - - for (node = sf->users_list; node; node = node->next) - { - user = node->data; - if (user->flag & 0x1) - new_list = g_list_append (new_list, user->user_node); - else if (user->flag & 0x2) - update_list = g_list_append (update_list, user->user_node); - else if (user->flag & 0x4) { - remove_list = g_list_append (remove_list, user->user_node); - } - } - - if (E_IS_GW_CONNECTION (sf->cnc)) { - if (sf->flag_for_ok == 2){ /* you have to remove all the users*/ - GList *list = NULL; - - if (new_list) { - g_list_foreach (new_list, (GFunc) free_user_node, NULL); - g_list_free (new_list); - } - if (update_list) { - g_list_foreach (update_list, (GFunc) free_user_node, NULL); - g_list_free (update_list); - } - - new_list = NULL; - if (remove_list) { - g_list_foreach (remove_list,(GFunc) free_user_node, NULL); - g_list_free (remove_list); - } - remove_list = NULL; - if (sf->gcontainer) { - e_gw_container_get_user_list (sf->gcontainer, &list); - remove_list = g_list_copy (list); - - } else { - g_warning("Container is Null"); - } - - } else { - if (new_list) { - if (e_gw_connection_share_folder (sf->cnc, sf->container_id, new_list, sf->sub, sf->mesg, 0) == E_GW_CONNECTION_STATUS_OK) { - ; - } - } - - if (update_list) { - sf->sub = "Shared Folder rights updated"; - - if (e_gw_connection_share_folder (sf->cnc, sf->container_id, update_list, sf->sub, sf->mesg, 2) == E_GW_CONNECTION_STATUS_OK) { - ; - } - } - } - if (remove_list) { - sf->sub = "Shared Folder removed"; - if (e_gw_connection_share_folder (sf->cnc, sf->container_id, remove_list, sf->sub, sf->mesg, 1) == E_GW_CONNECTION_STATUS_OK) { - ; - } - } - - } -} - -static void -not_ok_clicked (GtkButton *button, ShareFolder *sf) -{ - - gchar *subj = NULL; - gchar *msg = NULL; - GtkTextIter *start, *end; - GtkTextBuffer *buffer; - - start = g_new0 (GtkTextIter, 1); - end = g_new0 (GtkTextIter, 1); - subj = g_strdup (gtk_entry_get_text (sf->subject)); - if (subj) - sf->sub = subj; - buffer = gtk_text_view_get_buffer (sf->message); - gtk_text_buffer_get_start_iter (buffer, start); - gtk_text_buffer_get_end_iter (buffer, end); - msg = gtk_text_buffer_get_text (buffer, start, end, FALSE); - if (msg) - sf->mesg = msg; - gtk_widget_destroy (GTK_WIDGET (sf->window)); - -} - -static void -not_cancel_clicked (GtkButton *button, GtkWidget *window) -{ - gtk_widget_destroy (window); -} - -static void -notification_clicked (GtkButton *button, ShareFolder *sf) -{ - static GtkBuilder *builder; - GtkButton *not_ok; - GtkButton *not_cancel; - GtkWidget *vbox; - - sf->window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_type_hint (GTK_WINDOW (sf->window), GDK_WINDOW_TYPE_HINT_DIALOG); - - builder = gtk_builder_new (); - e_load_ui_builder_definition (builder, "notification.ui"); - - vbox = GTK_WIDGET (e_builder_get_widget (builder, "vbox191")); - gtk_container_add (GTK_CONTAINER (sf->window), vbox); - sf->subject = GTK_ENTRY (e_builder_get_widget (builder, "entry3")); - gtk_entry_set_text (GTK_ENTRY (sf->subject) , sf->sub); - sf->message = GTK_TEXT_VIEW (e_builder_get_widget (builder, "textview1")); - not_ok = GTK_BUTTON (e_builder_get_widget (builder, "nOK")); - g_signal_connect ((gpointer) not_ok, "clicked", G_CALLBACK (not_ok_clicked), sf); - not_cancel = GTK_BUTTON (e_builder_get_widget (builder, "nCancel")); - g_signal_connect ((gpointer) not_cancel, "clicked", G_CALLBACK (not_cancel_clicked), sf->window); - gtk_window_set_title (GTK_WINDOW (sf->window), _("Custom Notification")); - gtk_window_set_position (GTK_WINDOW (sf->window) , GTK_WIN_POS_CENTER_ALWAYS); - gtk_window_set_default_size (GTK_WINDOW (sf->window), 100, 200); - gtk_window_set_transient_for ((GtkWindow *)sf->window, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sf->table)))); - gtk_window_set_modal ((GtkWindow *)sf->window, TRUE); - gtk_widget_show_all (sf->window); - gtk_window_present ((GtkWindow *)sf->window); -} - -static void -addressbook_entry_changed (GtkWidget *entry, gpointer user_data) -{ - -} - -static void -address_button_clicked_cb (GtkButton *button, ShareFolder *sf) -{ - e_name_selector_show_dialog (sf->name_selector, sf->window); -} - -static void -user_selected (GtkTreeSelection *selection, ShareFolder *sf) -{ - GtkTreeModel *model; - - gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE); - if (gtk_tree_selection_get_selected (selection, &model, &sf->iter)) - gtk_widget_set_sensitive (GTK_WIDGET (sf->remove), TRUE); -} - -static void -add_right_clicked (GtkCellRenderer *renderer, gchar *arg1, ShareFolder *sf ) -{ - gboolean right = FALSE; - SharedUser *usr = NULL; - EShUsers *user = NULL; - gchar *email = NULL; - GtkTreePath *path = NULL; - - path = gtk_tree_path_new_from_string (arg1); - if (!gtk_tree_model_get_iter ((GtkTreeModel *) sf->model, &(sf->iter), path)) { - gtk_tree_path_free (path); - return; - } - gtk_tree_model_get ((GtkTreeModel *) sf->model, &(sf->iter), 0, &email, 1, &right , -1); - usr = find_node (sf->users_list, email); - if (!usr) { - gtk_tree_path_free (path); - return; - } - if (!usr->flag) /* if user was already existing one change the flag to update*/ - usr->flag = usr->flag | 0x2; - user = usr->user_node; - if (!right) { - user->rights |= 0x1; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 1, TRUE, -1); - } else { - user->rights &= 0x6; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 1, FALSE, -1); - } - gtk_tree_path_free (path); -} - -static void -edit_right_clicked (GtkCellRenderer *renderer, gchar *arg1, ShareFolder *sf ) -{ - gboolean right = FALSE; - SharedUser *usr = NULL; - EShUsers *user = NULL; - gchar *email = NULL; - GtkTreePath *path = NULL; - - path = gtk_tree_path_new_from_string (arg1); - if (!gtk_tree_model_get_iter ((GtkTreeModel *) sf->model, &(sf->iter), path)) { - gtk_tree_path_free (path); - return; - } - gtk_tree_model_get ((GtkTreeModel *) sf->model, &(sf->iter), 0, &email, 2, &right , -1); - usr = find_node (sf->users_list, email); - if (!usr) { - gtk_tree_path_free (path); - return; - } - if (!usr->flag) /* if user was already existing one change the flag to update*/ - usr->flag = usr->flag | 0x2; - user = usr->user_node; - - if (!right) { - user->rights |= 0x2; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 2, TRUE, -1); - } else { - user->rights &= 0x5; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 2, FALSE, -1); - } - gtk_tree_path_free (path); -} - -static void -delete_right_clicked (GtkCellRenderer *renderer, gchar *arg1, ShareFolder *sf ) -{ - gboolean right = FALSE; - SharedUser *usr = NULL; - EShUsers *user = NULL; - gchar *email = NULL; - GtkTreePath *path = NULL; - - path = gtk_tree_path_new_from_string (arg1); - if (!gtk_tree_model_get_iter ((GtkTreeModel *) sf->model, &(sf->iter), path)) { - gtk_tree_path_free (path); - return; - } - gtk_tree_model_get ((GtkTreeModel *) sf->model, &(sf->iter), 0, &email, 3, &right , -1); - usr = find_node (sf->users_list, email); - if (!usr) { - gtk_tree_path_free (path); - return; - } - if (!usr->flag) /* if user was already existing one change the flag to update*/ - usr->flag = usr->flag | 0x2; - user = usr->user_node; - if (!right) { - user->rights |= 0x4; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 3, TRUE, -1); - } else { - user->rights &= 0x3; - gtk_list_store_set (GTK_LIST_STORE (sf->model), &(sf->iter), 3, FALSE, -1); - } - gtk_tree_path_free (path); -} - -static void -share_folder_construct (ShareFolder *sf) -{ - ENameSelectorDialog *name_selector_dialog; - ENameSelectorModel *name_selector_model; - ENameSelectorEntry *name_selector_entry; - GtkWidget *box; - - sf->builder = gtk_builder_new (); - e_load_ui_builder_definition (sf->builder, "properties.ui"); - - sf->vbox = GTK_VBOX (e_builder_get_widget(sf->builder, "vboxSharing")); - sf->table = GTK_VBOX (e_builder_get_widget (sf->builder, "vbox194")); - gtk_widget_set_sensitive (GTK_WIDGET (sf->table), FALSE); - - sf->shared = GTK_RADIO_BUTTON (e_builder_get_widget (sf->builder, "radShared")); - g_signal_connect ((gpointer) sf->shared, "clicked", G_CALLBACK (shared_clicked), sf); - - sf->not_shared = GTK_RADIO_BUTTON (e_builder_get_widget (sf->builder, "radNotShared")); - g_signal_connect ((gpointer) sf->not_shared, "clicked", G_CALLBACK (not_shared_clicked), sf); - - sf->add_book = GTK_BUTTON (e_builder_get_widget (sf->builder, "Address")); - gtk_widget_set_sensitive (GTK_WIDGET (sf->add_book), TRUE); - g_signal_connect((GtkWidget *) sf->add_book, "clicked", G_CALLBACK (address_button_clicked_cb), sf); - - sf->name_selector = e_name_selector_new (); - name_selector_dialog = e_name_selector_peek_dialog (sf->name_selector); - g_signal_connect (name_selector_dialog, "response", - G_CALLBACK (gtk_widget_hide), sf); - - name_selector_model = e_name_selector_peek_model (sf->name_selector); - e_name_selector_model_add_section (name_selector_model, "Add User", _("Add User"), NULL); - - name_selector_entry = e_name_selector_peek_section_entry (sf->name_selector, "Add User"); - g_signal_connect (name_selector_entry, "changed", - G_CALLBACK (addressbook_entry_changed), sf); - gtk_label_set_mnemonic_widget (GTK_LABEL (e_builder_get_widget (sf->builder, "label557")), GTK_WIDGET (name_selector_entry)); - - sf->add_button = GTK_BUTTON (e_builder_get_widget(sf->builder, "Add")); - g_signal_connect((GtkWidget *) sf->add_button, "clicked", G_CALLBACK (add_clicked), sf); - - sf->remove = GTK_BUTTON(e_builder_get_widget(sf->builder, "Remove")); - g_signal_connect ((GtkWidget *) sf->remove, "clicked", G_CALLBACK (remove_clicked), sf); - gtk_widget_set_sensitive (GTK_WIDGET (sf->remove), FALSE); - - sf->notification = GTK_BUTTON (e_builder_get_widget (sf->builder, "Notification")); - g_signal_connect((GtkWidget *) sf->notification, "clicked", G_CALLBACK (notification_clicked), sf); - - sf->name = GTK_ENTRY (e_builder_get_widget (sf->builder, "entry4")); - /*TODO:connect name and label*/ - gtk_widget_hide (GTK_WIDGET (sf->name)); - box = GTK_WIDGET (e_builder_get_widget (sf->builder, "hbox227")); - gtk_box_pack_start (GTK_BOX (box), (GtkWidget *) name_selector_entry, TRUE, TRUE, 0); - gtk_widget_show ((GtkWidget *) name_selector_entry); - - sf->scrolled_window = GTK_WIDGET (e_builder_get_widget (sf->builder,"scrolledwindow4")); - - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sf->scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - sf->model = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); - sf->user_list = (GtkTreeView *)gtk_tree_view_new (); - gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (sf->scrolled_window), (GtkWidget *)sf->user_list); - gtk_tree_view_set_model (GTK_TREE_VIEW (sf->user_list), GTK_TREE_MODEL (sf->model)); - gtk_widget_show (GTK_WIDGET (sf->user_list)); - - sf->cell = gtk_cell_renderer_text_new (); - sf->column = gtk_tree_view_column_new_with_attributes (_("Users"), sf->cell, "text", 0, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (sf->user_list), - GTK_TREE_VIEW_COLUMN (sf->column)); - - sf->cell = gtk_cell_renderer_toggle_new (); - sf->column = gtk_tree_view_column_new_with_attributes (_("Add "), sf->cell, "active" , 1, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (sf->user_list), - GTK_TREE_VIEW_COLUMN (sf->column)); - g_signal_connect (sf->cell, "toggled", G_CALLBACK (add_right_clicked), sf); - - sf->cell = gtk_cell_renderer_toggle_new (); - sf->column = gtk_tree_view_column_new_with_attributes (_("Modify"), sf->cell, "active", 2, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (sf->user_list), - GTK_TREE_VIEW_COLUMN (sf->column)); - g_signal_connect (sf->cell, "toggled", G_CALLBACK (edit_right_clicked), sf); - - sf->cell = gtk_cell_renderer_toggle_new (); - sf->column = gtk_tree_view_column_new_with_attributes (_("Delete"), sf->cell, "active", 3, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (sf->user_list), - GTK_TREE_VIEW_COLUMN (sf->column)); - g_signal_connect (sf->cell, "toggled", G_CALLBACK (delete_right_clicked), sf); - - g_signal_connect(gtk_tree_view_get_selection(GTK_TREE_VIEW (sf->user_list)), "changed", G_CALLBACK (user_selected), sf); -} - -ShareFolder * -share_folder_new (EGwConnection *ccnc, gchar *id) -{ - ShareFolder *new; - new = (ShareFolder *) g_object_new (share_folder_get_type (), NULL); - share_folder_construct (new); - new->cnc = ccnc; - new->container_id = id; - if (ccnc && id) - get_container_list (new); - - return (ShareFolder *) new; -} - diff --git a/plugins/groupwise-features/share-folder.h b/plugins/groupwise-features/share-folder.h deleted file mode 100644 index 2f4bf0c9f1..0000000000 --- a/plugins/groupwise-features/share-folder.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Vivek Jain <jvivek@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifndef __SHARE_FOLDER_H__ -#define __SHARE_FOLDER_H__ - -#include <gtk/gtk.h> -#include <camel/camel.h> -#include <e-gw-connection.h> -#include <libedataserverui/e-name-selector.h> - -#define _SHARE_FOLDER_TYPE (share_folder_get_type ()) -#define SHARE_FOLDER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), SHARE_FOLDER, ShareFolder)) -#define SHARE_FOLDER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), SHARE_FOLDER_TYPE, ShareFolder)) -#define IS_SHARE_FOLDER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), SHARE_FOLDER_TYPE)) -#define IS_SHARE_FOLDER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), SHARE_FOLDER_TYPE)) - -G_BEGIN_DECLS - -typedef struct _ShareFolder ShareFolder; -typedef struct _ShareFolderClass ShareFolderClass; - -struct _ShareFolder { - GtkVBox parent_object; - - GtkBuilder *builder; - - /* General tab */ - - /* Default Behavior */ - GtkTreeView *user_list; - GtkTextView *message; - GtkButton *add_button; - GtkButton *remove; - GtkButton *add_book; - GtkButton *notification; - GtkEntry *name; - GtkEntry *subject; - GtkRadioButton *shared; - GtkRadioButton *not_shared; - GtkWidget *scrolled_window; - GtkListStore *model; - GtkCellRenderer *cell; - GtkTreeViewColumn *column; - GtkVBox *vbox; - GtkVBox *table; - GtkWidget *window; - - GList *users_list; - EGwContainer *gcontainer; - gint users; - gboolean byme; - gboolean tome; - gint flag_for_ok; - gchar *email; - gboolean is_shared; - EGwConnection *cnc; - gchar *container_id; - const gchar *sub; - gchar *mesg; - GList *container_list; - GtkTreeIter iter; - ENameSelector *name_selector; - -}; - -struct _ShareFolderClass { - GtkVBoxClass parent_class; - -}; - -GType share_folderget_type (void); -struct _ShareFolder * share_folder_new (EGwConnection *ccnc, gchar *id); -void share_folder (struct _ShareFolder *sf); -gchar * get_container_id (EGwConnection *cnc, const gchar *fname); -EGwConnection * get_cnc (CamelStore *store); - -G_END_DECLS - -#endif /* __SHARE_FOLDER_H__ */ diff --git a/plugins/groupwise-features/status-track.c b/plugins/groupwise-features/status-track.c deleted file mode 100644 index 26bcb90337..0000000000 --- a/plugins/groupwise-features/status-track.c +++ /dev/null @@ -1,271 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with the program; if not, see <http://www.gnu.org/licenses/> - * - * - * Authors: - * Chenthill Palanisamy <pchenthill@novell.com> - * Parthasarathi Susarla <sparthasarathi@novell.com> - * Sankar P <psankar@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <glib/gi18n-lib.h> -#include <string.h> -#include <stdio.h> -#include <time.h> -#include <gtk/gtk.h> - -#include <mail/e-mail-reader.h> -#include <mail/em-utils.h> -#include <mail/message-list.h> - -#include <e-gw-connection.h> - -#include "gw-ui.h" -#include "share-folder.h" - -static gchar * -format_date (const gchar * value) -{ - time_t time; - gchar *str; - - time = e_gw_connection_get_date_from_string (value); - str = ctime (&time); - - str[strlen (str)-1] = '\0'; - return str; -} - -static CamelMimeMessage * -get_selected_message (EShellView *shell_view, - CamelFolder **folder, - gchar **selected_uid) -{ - CamelMimeMessage *msg = NULL; - EShellContent *shell_content; - EMailReader *reader; - GPtrArray *uids; - - shell_content = e_shell_view_get_shell_content (shell_view); - - reader = E_MAIL_READER (shell_content); - uids = e_mail_reader_get_selected_uids (reader); - - if (uids && uids->len == 1) { - *folder = e_mail_reader_get_folder (reader); - *selected_uid = g_strdup (g_ptr_array_index (uids, 0)); - - /* FIXME Not passing a GCancellable or GError here. */ - msg = camel_folder_get_message_sync ( - *folder, *selected_uid, NULL, NULL); - } - - em_utils_uids_free (uids); - - return msg; -} - -void -gw_track_message_status_cb (GtkAction *action, - EShellView *shell_view) -{ - CamelMimeMessage *msg = NULL; - CamelFolder *folder = NULL; - gchar *selected_uid = NULL; - CamelInternetAddress *from; - const gchar *namep, *addp; - - GtkDialog *d; - GtkTable *table; - GtkWidget *widget; - GtkWidget *content_area; - GtkScrolledWindow *win; - GtkVBox *vbox; - - time_t time; - gchar *time_str; - - gchar *boldmsg; - - gint row = 0; - - EGwConnection *cnc; - EGwItem *gwitem; - - /* Get message */ - msg = get_selected_message (shell_view, &folder, &selected_uid); - if (!msg) { - g_print ("Error!! No message\n"); - g_free (selected_uid); - return; - } - - /* Create the dialog */ - d = (GtkDialog *) gtk_dialog_new (); - content_area = gtk_dialog_get_content_area (d); - gtk_dialog_add_button (d, GTK_STOCK_OK, GTK_RESPONSE_OK); - gtk_window_set_title (GTK_WINDOW (d), _("Message Status")); - - table = (GtkTable *) gtk_table_new (1, 2, FALSE); - win = (GtkScrolledWindow *) gtk_scrolled_window_new (NULL, NULL); - gtk_container_add (GTK_CONTAINER (content_area), GTK_WIDGET (win)); - vbox = (GtkVBox *) gtk_vbox_new (FALSE, 12); - gtk_scrolled_window_add_with_viewport (win, GTK_WIDGET (vbox)); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (table), FALSE, TRUE, 0); - gtk_scrolled_window_set_policy (win, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - - gtk_table_set_col_spacings (table ,12); - gtk_table_set_row_spacings (table, 6); - - /* Subject */ - boldmsg = g_strdup_printf ("<b>%s</b>", _("Subject:")); - widget = gtk_label_new (boldmsg); - g_free (boldmsg); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); - gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - widget = gtk_label_new (camel_mime_message_get_subject (msg)); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0); - row++; - - /* From */ - from = camel_mime_message_get_from (msg); - camel_internet_address_get (from, 0, &namep, &addp); - boldmsg = g_strdup_printf ("<b>%s</b>", _("From:")); - widget = gtk_label_new (boldmsg); - g_free (boldmsg); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); - gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - widget = gtk_label_new (namep); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0); - row++; - - /* creation date */ - time = camel_mime_message_get_date (msg, NULL); - time_str = ctime (&time); - time_str[strlen (time_str)-1] = '\0' ; - boldmsg = g_strdup_printf ("<b>%s</b>", _("Creation date:")); - widget = gtk_label_new (boldmsg); - g_free (boldmsg); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_label_set_use_markup (GTK_LABEL (widget), TRUE); - gtk_table_attach (table, widget , 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - widget = gtk_label_new (time_str); - gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5); - gtk_table_attach (table, widget , 1, 2, row, row + 1, GTK_FILL, 0, 0, 0); - row++; - - /* spacing */ - widget = gtk_label_new (""); - gtk_table_attach (table, widget, 0, 1, row, row + 1, GTK_FILL, 0, 0, 0); - - /* Table headers */ - row = 0; - table = (GtkTable *) gtk_table_new (1, 3, FALSE); - gtk_table_set_col_spacings (table ,12); - gtk_table_set_row_spacings (table, 6); - gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (table), FALSE, TRUE, 0); - cnc = get_cnc (camel_folder_get_parent_store (folder)); - - if (E_IS_GW_CONNECTION (cnc)) { - GSList *recipient_list; - e_gw_connection_get_item ( - cnc, get_container_id (cnc, "Sent Items"), - selected_uid, "distribution recipientStatus", &gwitem); - recipient_list = e_gw_item_get_recipient_list (gwitem); - for (;recipient_list != NULL; recipient_list = recipient_list->next) - { - EGwItemRecipient *recipient; - GString *label = NULL; - GtkLabel *detail; - - label = g_string_new(""); - recipient = recipient_list->data; - - if (recipient->display_name) { - label = g_string_append (label, "<b>"); - label = g_string_append (label, _("Recipient: ")); - label = g_string_append (label, recipient->display_name); - label = g_string_append (label, "</b>"); - label = g_string_append_c (label, '\n'); - } - - if (recipient->delivered_date) { - label = g_string_append (label, _("Delivered: ")); - label = g_string_append (label, format_date (recipient->delivered_date)); - label = g_string_append_c (label, '\n'); - } - - if (recipient->opened_date) { - label = g_string_append (label, _("Opened: ")); - label = g_string_append (label, format_date (recipient->opened_date)); - label = g_string_append_c (label, '\n'); - } - if (recipient->accepted_date) { - label = g_string_append (label, _("Accepted: ")); - label = g_string_append (label, format_date (recipient->accepted_date)); - label = g_string_append_c (label, '\n'); - } - if (recipient->deleted_date) { - label = g_string_append (label, _("Deleted: ")); - label = g_string_append (label, format_date (recipient->deleted_date)); - label = g_string_append_c (label, '\n'); - } - if (recipient->declined_date) { - label = g_string_append (label, _("Declined: ")); - label = g_string_append (label, format_date (recipient->declined_date)); - label = g_string_append_c (label, '\n'); - } - if (recipient->completed_date) { - label = g_string_append (label, _("Completed: ")); - label = g_string_append (label, format_date (recipient->completed_date)); - label = g_string_append_c (label, '\n'); - } - if (recipient->undelivered_date) { - label = g_string_append (label, _("Undelivered: ")); - label = g_string_append (label, format_date (recipient->undelivered_date)); - label = g_string_append_c (label, '\n'); - } - - detail = GTK_LABEL (gtk_label_new (label->str)); - g_string_free (label, TRUE); - gtk_label_set_selectable (detail, TRUE); - gtk_label_set_use_markup (detail, TRUE); - gtk_table_attach ( - table, GTK_WIDGET (detail), - 1, 2, row, row + 1, GTK_FILL, 0, 0, 0); - row++; - } - } - - /* set size and display the dialog */ - gtk_widget_set_size_request (GTK_WIDGET (win), 400, 300); - gtk_widget_show_all (GTK_WIDGET (d)); - if (gtk_dialog_run (d) == GTK_RESPONSE_OK) - gtk_widget_destroy (GTK_WIDGET (d)); - else - gtk_widget_destroy (GTK_WIDGET (d)); - - g_free (selected_uid); -} |