diff options
Bug #456240 - Move exchange plugin to exchange package
Also added gtkhtml-editor and libgnomecanvas-2.0 to evolution-plugin.pc
Diffstat (limited to 'plugins/exchange-operations/exchange-folder-permission.c')
-rw-r--r-- | plugins/exchange-operations/exchange-folder-permission.c | 527 |
1 files changed, 0 insertions, 527 deletions
diff --git a/plugins/exchange-operations/exchange-folder-permission.c b/plugins/exchange-operations/exchange-folder-permission.c deleted file mode 100644 index 200eea8cdb..0000000000 --- a/plugins/exchange-operations/exchange-folder-permission.c +++ /dev/null @@ -1,527 +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: - * Shakti Sen <shprasad@novell.com> - * - * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com) - * - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include <glib/gi18n.h> -#include <gtk/gtk.h> -#include <gconf/gconf-client.h> - -#include <libedataserverui/e-source-selector.h> -#include <libebook/e-book.h> -#include <camel/camel-url.h> - -#include <exchange-account.h> - -#include <e-util/e-dialog-utils.h> -#include <calendar/gui/e-cal-model.h> - -#include <shell/e-shell-view.h> -#include <shell/e-shell-window.h> - -#include <mail/em-folder-tree.h> -#include <mail/em-folder-tree-model.h> - -#include "exchange-config-listener.h" -#include "exchange-folder-subscription.h" -#include "exchange-operations.h" -#include "exchange-permissions-dialog.h" - -#define d(x) - -gboolean eex_ui_mail_init (GtkUIManager *ui_manager, EShellView *shell_view); -gboolean eex_ui_calendar_permissions (GtkUIManager *ui_manager, EShellView *shell_view); -gboolean eex_ui_tasks_permissions (GtkUIManager *ui_manager, EShellView *shell_view); -gboolean eex_ui_addressbook_permissions (GtkUIManager *ui_manager, EShellView *shell_view); - -static gboolean -is_subscribed_folder (const gchar *uri) -{ - const gchar *path; - ExchangeAccount *account; - gint offset; - - g_return_val_if_fail (uri != NULL, FALSE); - - account = exchange_operations_get_exchange_account (); - g_return_val_if_fail (account != NULL, FALSE); - g_return_val_if_fail (account->account_filename != NULL, FALSE); - - offset = strlen ("exchange://") + strlen (account->account_filename) + strlen ("/;"); - g_return_val_if_fail (strlen (uri) >= offset, FALSE); - - path = uri + offset; - - return strchr (path, '@') != NULL; -} - -static void -call_folder_permissions (const gchar *uri) -{ - ExchangeAccount *account = NULL; - EFolder *folder = NULL; - - g_return_if_fail (uri != NULL); - - account = exchange_operations_get_exchange_account (); - if (!account) - return; - - folder = exchange_account_get_folder (account, uri); - if (folder) - exchange_permissions_dialog_new (account, folder, NULL); -} - -static gboolean -is_eex_folder_selected (EShellView *shell_view, gchar **puri) -{ - ExchangeAccount *account = NULL; - gint mode; - EShellSidebar *shell_sidebar; - EMFolderTree *folder_tree = NULL; - GtkTreeSelection *selection; - GtkTreeModel *model = NULL; - GtkTreeIter iter; - gboolean is_store = FALSE, res; - gchar *uri = NULL; - - g_return_val_if_fail (shell_view != NULL, FALSE); - - account = exchange_operations_get_exchange_account (); - if (!account) - return FALSE; - - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) - return FALSE; - - 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_URI, &uri, - COL_BOOL_IS_STORE, &is_store, - -1); - - res = !is_store && uri && g_ascii_strncasecmp (uri, "exchange://", 11) == 0; - - if (res) { - const gchar *path; - - path = uri + strlen ("exchange://") + strlen (account->account_filename); - res = path && *path; - - if (res) { - if (puri) - *puri = g_strdup (uri); - } - } - - g_free (uri); - - return res; -} - -static void -eex_mail_folder_permissions_cb (GtkAction *action, EShellView *shell_view) -{ - gchar *uri = NULL; - - if (is_eex_folder_selected (shell_view, &uri)) - call_folder_permissions (uri); - - g_free (uri); -} - -static void -eex_folder_subscribe_cb (GtkAction *action, EShellView *shell_view) -{ - const gchar *name; - - name = gtk_action_get_name (action); - g_return_if_fail (name != NULL); - - name = strrchr (name, '-'); - g_return_if_fail (name != NULL && *name == '-'); - - call_folder_subscribe (name + 1); -} - -static void -eex_mail_folder_inbox_unsubscribe_cb (GtkAction *action, EShellView *shell_view) -{ - gchar *uri = NULL; - - if (is_eex_folder_selected (shell_view, &uri)) - call_folder_unsubscribe ("Inbox", uri, NULL); - - g_free (uri); -} - -/* Beware, depends on the order */ -static GtkActionEntry mail_entries[] = { - { "eex-mail-folder-permissions", - "folder-new", - N_("Permissions..."), - NULL, - N_("Check folder permissions"), - G_CALLBACK (eex_mail_folder_permissions_cb) }, - - { "eex-folder-subscribe-Inbox", - NULL, - N_("Subscribe to Other User's Folder..."), - NULL, - N_("Subscribe to Other User's Folder"), - G_CALLBACK (eex_folder_subscribe_cb) }, - - { "eex-mail-folder-inbox-unsubscribe", - "folder-new", - N_("Unsubscribe Folder..."), - NULL, - NULL, - G_CALLBACK (eex_mail_folder_inbox_unsubscribe_cb) } -}; - -static void -update_mail_entries_cb (EShellView *shell_view, gpointer user_data) -{ - GtkActionGroup *action_group; - EShellWindow *shell_window; - GtkAction *action; - gboolean is_eex; - gchar *uri = NULL; - gint i; - - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - - is_eex = is_eex_folder_selected (shell_view, &uri); - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, "mail"); - - for (i = 0; i < G_N_ELEMENTS (mail_entries); i++) { - gboolean visible = is_eex; - - action = gtk_action_group_get_action (action_group, mail_entries[i].name); - g_return_if_fail (action != NULL); - - if (visible && i == 2) { - /* it's an unsubscribe, check if this is public and show/hide based on that */ - visible = uri && is_subscribed_folder (uri); - } - - gtk_action_set_visible (action, visible); - } - - g_free (uri); -} - -gboolean -eex_ui_mail_init (GtkUIManager *ui_manager, EShellView *shell_view) -{ - EShellWindow *shell_window; - - shell_window = e_shell_view_get_shell_window (shell_view); - - gtk_action_group_add_actions ( - e_shell_window_get_action_group (shell_window, "mail"), - mail_entries, G_N_ELEMENTS (mail_entries), shell_view); - - g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_mail_entries_cb), NULL); - - return TRUE; -} - -static gboolean -is_eex_source_selected (EShellView *shell_view, gchar **puri) -{ - gint mode; - ExchangeAccount *account = NULL; - ESource *source = NULL; - gchar *uri = NULL; - EShellSidebar *shell_sidebar; - ESourceSelector *selector = NULL; - - shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); - g_return_val_if_fail (shell_sidebar != NULL, FALSE); - - g_object_get (shell_sidebar, "selector", &selector, NULL); - g_return_val_if_fail (selector != NULL, FALSE); - - source = e_source_selector_peek_primary_selection (selector); - uri = e_source_get_uri (source); - - g_object_unref (selector); - - if (uri && !g_strrstr (uri, "exchange://")) { - g_free (uri); - return FALSE; - } - - account = exchange_operations_get_exchange_account (); - if (!account) { - g_free (uri); - return FALSE; - } - - exchange_account_is_offline (account, &mode); - if (mode == OFFLINE_MODE) { - g_free (uri); - return FALSE; - } - - if (!exchange_account_get_folder (account, uri)) { - g_free (uri); - return FALSE; - } - - if (puri) - *puri = uri; - else - g_free (uri); - - return TRUE; -} - -#define NUM_ENTRIES 3 - -static void -update_source_entries_cb (EShellView *shell_view, GtkActionEntry *entries) -{ - GtkActionGroup *action_group; - EShellWindow *shell_window; - GtkAction *action; - const gchar *group; - gchar *uri = NULL; - gboolean is_eex; - gint i; - - g_return_if_fail (E_IS_SHELL_VIEW (shell_view)); - g_return_if_fail (entries != NULL); - - if (strstr (entries->name, "calendar")) - group = "calendar"; - else if (strstr (entries->name, "tasks")) - group = "tasks"; - else - group = "addressbook"; - - is_eex = is_eex_source_selected (shell_view, &uri); - shell_window = e_shell_view_get_shell_window (shell_view); - action_group = e_shell_window_get_action_group (shell_window, group); - - for (i = 0; i < NUM_ENTRIES; i++) { - gboolean visible = is_eex; - - action = gtk_action_group_get_action (action_group, entries->name); - g_return_if_fail (action != NULL); - - if (visible && i == 2) { - /* it's an unsubscribe, check if this is public and show/hide based on that */ - visible = uri && is_subscribed_folder (uri); - } - - gtk_action_set_visible (action, visible); - - } - - g_free (uri); -} - -static void -setup_source_actions (EShellView *shell_view, GtkActionEntry *entries) -{ - EShellWindow *shell_window; - const gchar *group; - - g_return_if_fail (shell_view != NULL); - g_return_if_fail (entries != NULL); - - if (strstr (entries->name, "calendar")) - group = "calendar"; - else if (strstr (entries->name, "tasks")) - group = "tasks"; - else - group = "addressbook"; - - shell_window = e_shell_view_get_shell_window (shell_view); - - gtk_action_group_add_actions ( - e_shell_window_get_action_group (shell_window, group), - entries, NUM_ENTRIES, shell_view); - - g_signal_connect (shell_view, "update-actions", G_CALLBACK (update_source_entries_cb), entries); -} - -static void -source_permissions_cb (GtkAction *action, EShellView *shell_view) -{ - gchar *uri = NULL; - - g_return_if_fail (shell_view != NULL); - - if (is_eex_source_selected (shell_view, &uri)) - call_folder_permissions (uri); - - g_free (uri); -} - -static void -eex_folder_unsubscribe_cb (GtkAction *action, EShellView *shell_view) -{ - gchar *uri = NULL; - const gchar *name; - - g_return_if_fail (shell_view != NULL); - - name = gtk_action_get_name (action); - g_return_if_fail (name != NULL); - - name = strrchr (name, '-'); - g_return_if_fail (name != NULL && *name == '-'); - - if (is_eex_source_selected (shell_view, &uri)) { - EShellSidebar *shell_sidebar; - ESourceSelector *selector = NULL; - - shell_sidebar = e_shell_view_get_shell_sidebar (shell_view); - g_return_if_fail (shell_sidebar != NULL); - - g_object_get (shell_sidebar, "selector", &selector, NULL); - g_return_if_fail (selector != NULL); - - call_folder_unsubscribe (name + 1, uri, e_source_selector_peek_primary_selection (selector)); - } - - g_free (uri); -} - -/* Beware, depends on count and order */ -static GtkActionEntry calendar_entries[] = { - { "eex-calendar-permissions", - "folder-new", - N_("Permissions..."), - NULL, - N_("Check calendar permissions"), - G_CALLBACK (source_permissions_cb) }, - - { "eex-folder-subscribe-Calendar", - NULL, - N_("Subscribe to Other User's Folder..."), - NULL, - N_("Subscribe to Other User's Folder"), - G_CALLBACK (eex_folder_subscribe_cb) }, - - { "eex-folder-unsubscribe-Calendar", - "folder-new", - N_("Unsubscribe Folder..."), - NULL, - NULL, - G_CALLBACK (eex_folder_unsubscribe_cb) } -}; - -gboolean -eex_ui_calendar_permissions (GtkUIManager *ui_manager, EShellView *shell_view) -{ - g_return_val_if_fail (G_N_ELEMENTS (calendar_entries) != NUM_ENTRIES, FALSE); - - setup_source_actions (shell_view, calendar_entries); - - return TRUE; -} - -/* Beware, depends on count and order */ -static GtkActionEntry tasks_entries[] = { - { "eex-tasks-permissions", - "folder-new", - N_("Permissions..."), - NULL, - N_("Check tasks permissions"), - G_CALLBACK (source_permissions_cb) }, - - { "eex-folder-subscribe-Tasks", - NULL, - N_("Subscribe to Other User's Folder..."), - NULL, - N_("Subscribe to Other User's Folder"), - G_CALLBACK (eex_folder_subscribe_cb) }, - - { "eex-folder-unsubscribe-Tasks", - "folder-new", - N_("Unsubscribe Folder..."), - NULL, - NULL, - G_CALLBACK (eex_folder_unsubscribe_cb) } -}; - -gboolean -eex_ui_tasks_permissions (GtkUIManager *ui_manager, EShellView *shell_view) -{ - g_return_val_if_fail (G_N_ELEMENTS (tasks_entries) != NUM_ENTRIES, FALSE); - - setup_source_actions (shell_view, tasks_entries); - - return TRUE; -} - -/* Beware, depends on count and order */ -static GtkActionEntry addressbook_entries[] = { - { "eex-addressbook-permissions", - "folder-new", - N_("Permissions..."), - NULL, - N_("Check addressbook permissions"), - G_CALLBACK (source_permissions_cb) }, - - { "eex-folder-subscribe-Contacts", - NULL, - N_("Subscribe to Other User's Folder..."), - NULL, - N_("Subscribe to Other User's Folder"), - G_CALLBACK (eex_folder_subscribe_cb) }, - - { "eex-folder-unsubscribe-Contacts", - "folder-new", - N_("Unsubscribe Folder..."), - NULL, - NULL, - G_CALLBACK (eex_folder_unsubscribe_cb) } -}; - -gboolean -eex_ui_addressbook_permissions (GtkUIManager *ui_manager, EShellView *shell_view) -{ - g_return_val_if_fail (G_N_ELEMENTS (addressbook_entries) != NUM_ENTRIES, FALSE); - - setup_source_actions (shell_view, addressbook_entries); - - return TRUE; -} |