diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/shared-folder/ChangeLog | 38 | ||||
-rw-r--r-- | plugins/shared-folder/install-shared.c | 226 |
2 files changed, 264 insertions, 0 deletions
diff --git a/plugins/shared-folder/ChangeLog b/plugins/shared-folder/ChangeLog new file mode 100644 index 0000000000..d5deb26d3a --- /dev/null +++ b/plugins/shared-folder/ChangeLog @@ -0,0 +1,38 @@ + +2005-01-10 Vivek Jain <jvivek@novell.com> Included + +* install-shared.c : opens up a wizard on reading a shared folder +notification and installs shared folder at the recepient end. +* share-folder-common.c : added +(refresh_folder_tree) : to refresh the folder tree when a folder is shared or +a shared folder is created so that different icons are displayed +(get_cnc): to get a connection +(get_container_id):to get the container id of the folder user selects +* share-folder.c : minor changes to fix the crash +* Makefile.am : including install-shared.c in sources + +2004-12-15 Vivek Jain <jvivek@novell.com> + +Added (Create a shared folder) functionality in the plugin +* org-gnome-shared-folder.eplug.in : added a plugin in the plugin list +* share-folder-common.c : included functions to create a shared folder + +2004-12-15 Vivek Jain <jvivek@novell.com> + +* shared-folder-common.c : (org_gnome_shared_folder_factory) +* shared-folder.c : some whitespace changes, typecasting widgets, +in (on_add_clicked) removed assigning the rights portion + +2004-12-08 Vivek Jain <jvivek@novell.com> + +The following files are added as an initial check in for the plugin that +implements shared-folder functionality in the groupwise folders +* share-folder.c +* share-folder.h +* share-folder-common.c +* properties.glade +* Makefile.am +* org-gnome-shared-folder.eplug.in + + + diff --git a/plugins/shared-folder/install-shared.c b/plugins/shared-folder/install-shared.c new file mode 100644 index 0000000000..b25b1953a0 --- /dev/null +++ b/plugins/shared-folder/install-shared.c @@ -0,0 +1,226 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +/* + * Authors: Vivek Jain <jvivek@novell.com> + * + * Copyright 2004 Novell, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Street #330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <string.h> +#include <glib.h> +#include <gnome.h> +#include <gtk/gtk.h> +#include <libgnomeui/libgnomeui.h> +#include <libgnome/gnome-i18n.h> +#include <gconf/gconf-client.h> +#include <e-util/e-config.h> +#include <mail/em-config.h> +#include <mail/em-event.h> +#include <camel/camel-mime-message.h> +#include <camel/camel-stream.h> +#include <camel/camel-stream-mem.h> +#include <camel/camel-data-wrapper.h> +#include <mail/em-folder-tree.h> +#include <mail/em-folder-selector.h> +#include <camel/camel-medium.h> +#include <e-gw-connection.h> +#include <share-folder.h> +#include <glade/glade.h> + +static GladeXML *xml; + +extern CamelSession *session; +struct AcceptData { + gchar *item_id; + EMFolderTreeModel *model; +}; + + +static void +install_folder_response (EMFolderSelector *emfs, int response, gpointer *data) +{ + struct AcceptData *accept_data = (struct AcceptData *)data; + EMFolderTreeModel *model; + const char *uri, *path; + int parts = 0; + gchar **names; + gchar *folder_name; + gchar *parent_name; + gchar *container_id,*item_id; + CamelException ex; + CamelStore *store; + EAccount *account; + CamelProvider *provider; + EGwConnection *cnc; + + if (response == GTK_RESPONSE_CANCEL){ + gtk_widget_destroy (emfs); + } else { + model = accept_data->model; + item_id = accept_data->item_id; + g_print("\n\nitem_id :%s\n\n", item_id); + + uri = em_folder_selector_get_selected_uri (emfs); + path = em_folder_selector_get_selected_path (emfs); + printf ("Creating new folder: %s (%s)\n", path, uri); + names = g_strsplit (path, "/", -1); + if(names == NULL){ + folder_name = path; + parent_name = NULL; + } else { + while (names [parts]) + parts++; + folder_name = names[parts -1]; + parent_name = names[parts -2]; + } + camel_exception_init (&ex); + if (!(store = (CamelStore *) camel_session_get_service (session, uri, CAMEL_PROVIDER_STORE, &ex))) { + camel_exception_clear (&ex); + return; + } + + cnc = get_cnc (store); + if(!cnc) + g_print ("cnc was null"); + container_id = get_container_id (cnc, parent_name); + + if(e_gw_connection_accept_shared_folder (cnc, folder_name, container_id, item_id, NULL) == E_GW_CONNECTION_STATUS_OK) { + + uri = camel_url_to_string (((CamelService *) store)->url, CAMEL_URL_HIDE_ALL); + account = mail_config_get_account_by_source_url (uri); + uri = account->source->url; + em_folder_tree_model_remove_store (model, store); + camel_exception_init (&ex); + if (!(provider = camel_provider_get(uri, &ex))) { + camel_exception_clear (&ex); + return; + } + + /* make sure the new store belongs in the tree */ + if (!(provider->flags & CAMEL_PROVIDER_IS_STORAGE)) + return; + + em_folder_tree_model_add_store (model, store, account->name); + camel_object_unref (store); + //camel_folder_set_message_flags (folder, item_id, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN, CAMEL_MESSAGE_DELETED|CAMEL_MESSAGE_SEEN ) + } + + gtk_widget_destroy ((GtkWidget *)emfs); + } + +} + +static void +accept_clicked(GnomeDruidPage *page, GtkWidget *druid, gchar *id) +{ + g_print("\n\naccepting\n\n"); + EMFolderTreeModel *model; + EMFolderTree *folder_tree; + GtkWidget *dialog ; + struct AcceptData *accept_data; + char *uri; + accept_data = g_new0(struct AcceptData, 1); + model = mail_component_peek_tree_model (mail_component_peek ()); + folder_tree = (EMFolderTree *) em_folder_tree_new_with_model (model); + dialog = em_folder_selector_create_new (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->item_id = id; + accept_data->model = model; + g_signal_connect (dialog, "response", G_CALLBACK (install_folder_response), accept_data); + gtk_window_set_title (GTK_WINDOW (dialog), "Install Shared Folder"); + gtk_widget_destroy (druid); + gtk_widget_show (dialog); + //gnome_druid_page_next (page); + +} + +void +org_gnome_popup_wizard (EPlugin *ep, EMEventTargetMessage *target) +{ + CamelInternetAddress *from_addr = NULL; + const char *name, *item_id; + const char *email; + const char *subject; + GtkWidget *window; + GnomeDruid *wizard; + GnomeDruidPageEdge *title_page, *finish_page; + GnomeDruidPageStandard *middle_page; + CamelMimeMessage *msg = (CamelMimeMessage *) target->message ; + CamelStreamMem *content ; + CamelDataWrapper *dw ; + CamelMimePart *mime_part = CAMEL_MIME_PART(msg) ; + char *notification; + char *start_message; + char *buffer = NULL; + EMFolderTreeModel *model; + EMFolderTree *folder_tree; + GtkWidget *selector_dialog ; + char *uri; + struct AcceptData *accept_data; + + notification = (char *)camel_medium_get_header (CAMEL_MEDIUM(msg),"X-notification") ; + if (!notification) { + return ; + } + + else { + g_print ("shared folder notification\n") ; + dw = camel_medium_get_content_object (CAMEL_MEDIUM (mime_part)); + content = (CamelStreamMem *)camel_stream_mem_new(); + camel_data_wrapper_decode_to_stream(dw, (CamelStream *)content); + buffer = g_malloc0 (content->buffer->len+1) ; + buffer = memcpy (buffer, content->buffer->data, content->buffer->len) ; + g_print ("\nThe mesg is :%s", buffer); + from_addr = camel_mime_message_get_from ((CamelMimeMessage *)target->message); + if (camel_internet_address_get (from_addr,0, &name, &email)) + g_print ("\ncomes :%s", name); + subject = camel_mime_message_get_subject (target->message) ; + + start_message = g_strconcat (" The User ", "'", name, "'" ," has shared a folder with you\n\n", " Message from ", "'" , name, "'\n", buffer, "Click 'Forward' to install the shared folder\n\n",NULL); + + title_page = GNOME_DRUID_PAGE_EDGE (gnome_druid_page_edge_new_with_vals(GNOME_EDGE_START, TRUE, "Install the shared folder", start_message, NULL, NULL, NULL)); + middle_page = g_object_new (GNOME_TYPE_DRUID_PAGE_STANDARD, "title", "vivek", NULL); + finish_page = GNOME_DRUID_PAGE_EDGE (gnome_druid_page_edge_new_with_vals(GNOME_EDGE_FINISH, TRUE, "finished Install the shared folder", "said", NULL,NULL, NULL)); + wizard = GNOME_DRUID (gnome_druid_new_with_window ("Wizard check", NULL, TRUE, (GtkWidget**)(&window))); + gnome_druid_append_page(wizard, GNOME_DRUID_PAGE(title_page)); + gtk_widget_show_all (GTK_WIDGET (title_page)); + gnome_druid_append_page(wizard, GNOME_DRUID_PAGE(middle_page)); + gtk_widget_show_all (GTK_WIDGET (middle_page)); + gnome_druid_append_page(wizard, GNOME_DRUID_PAGE(finish_page)); + gtk_widget_show_all (GTK_WIDGET (finish_page)); + model = mail_component_peek_tree_model (mail_component_peek ()); + folder_tree = (EMFolderTree *) em_folder_tree_new_with_model (model); + selector_dialog = em_folder_selector_create_new (folder_tree, 0, _("Create folder"), _("Specify where to postion the folder:")); + uri = em_folder_tree_get_selected_uri(folder_tree); + g_print("\nselected uri:%s\n",uri); + gtk_widget_destroy (GTK_DIALOG (selector_dialog)->action_area); + gtk_widget_show_all (GTK_WIDGET (middle_page)); + item_id = camel_mime_message_get_message_id (msg); + accept_data = g_new0(struct AcceptData, 1); + accept_data->item_id = item_id; + accept_data->model = model; + g_print ("\n\nitem_id :%s\n\n",item_id); + g_signal_connect (title_page, "next", G_CALLBACK(accept_clicked), item_id); + + } +} + |