diff options
author | Dan Winship <danw@src.gnome.org> | 2002-10-01 02:41:05 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2002-10-01 02:41:05 +0800 |
commit | 45fd1767502d711d72087cae76c3d1acd7f46066 (patch) | |
tree | 78efae6fd605a5e867fe7b0f24ae8fb9dbce9443 /shell/e-corba-storage.c | |
parent | b887e5c2f6fdb8e7437093c3bc49fd439155e346 (diff) | |
download | gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar.gz gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar.bz2 gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar.lz gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar.xz gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.tar.zst gsoc2013-evolution-45fd1767502d711d72087cae76c3d1acd7f46066.zip |
Calls e_shell_command_remove_shared_folder. (file_verbs): Set up
* e-shell-view-menu.c (command_remove_other_users_folder): Calls
e_shell_command_remove_shared_folder.
(file_verbs): Set up command_remove_other_users_folder.
* e-shell-folder-commands.c
(e_shell_command_remove_shared_folder): New. Calls
e_storage_set_async_remove_shared_folder with a callback to pop up
an error dialog if it fails.
* e-storage-set.c (e_storage_set_async_remove_shared_folder):
Implement. Mostly like async_remove_folder.
* e-storage.c (e_storage_supports_shared_folders,
e_storage_async_discover_shared_folder,
e_storage_async_remove_shared_folder): New methods. Default
implementations return FALSE, NOTIMPLEMENTED, and NOTIMPLEMENTED.
* e-corba-storage.c (supports_shared_folders,
async_discover_shared_folder, async_remove_shared_folder):
Implement using CORBA.
* Evolution-Storage.idl: add Storage_asyncRemoveSharedFolder
* e-shell-shared-folder-picker-dialog.c: Remove all the CORBA
stuff from here and use the new EStorage methods.
(setup_server_option_menu): Use e_storage_supports_shared_folders.
(discover_folder): Use e_storage_async_discover_shared_folder.
* evolution-storage.c (impl_Storage_asyncRemoveSharedFolder):
Implement this by emitting a REMOVE_SHARED_FOLDER signal.
(impl_Storage_asyncDiscoverSharedFolder): Make the
DISCOVER_SHARED_FOLDER signal put the Bonobo_Listener first like
all the other signals do.
(class_init): Set up REMOVE_SHARED_FOLDER signal.
svn path=/trunk/; revision=18265
Diffstat (limited to 'shell/e-corba-storage.c')
-rw-r--r-- | shell/e-corba-storage.c | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/shell/e-corba-storage.c b/shell/e-corba-storage.c index d50a01e921..b640ff22b9 100644 --- a/shell/e-corba-storage.c +++ b/shell/e-corba-storage.c @@ -474,6 +474,126 @@ async_open_folder (EStorage *storage, } +/* Shared folders. */ + +static gboolean +supports_shared_folders (EStorage *storage) +{ + GNOME_Evolution_Storage storage_iface; + CORBA_boolean has_shared_folders; + CORBA_Environment ev; + + CORBA_exception_init (&ev); + + storage_iface = e_corba_storage_get_corba_objref (E_CORBA_STORAGE (storage)); + g_assert (storage_iface != CORBA_OBJECT_NIL); + + has_shared_folders = GNOME_Evolution_Storage__get_hasSharedFolders (storage_iface, &ev); + if (BONOBO_EX (&ev)) + has_shared_folders = FALSE; + + CORBA_exception_free (&ev); + + return has_shared_folders; +} + +static void +async_folder_discovery_cb (BonoboListener *listener, char *event_name, + CORBA_any *any, CORBA_Environment *ev, + gpointer user_data) +{ + struct async_folder_closure *closure = user_data; + GNOME_Evolution_Storage_FolderResult *corba_result; + EStorageDiscoveryCallback callback; + EStorageResult result; + char *path; + + corba_result = any->_value; + result = e_corba_storage_corba_result_to_storage_result (corba_result->result); + if (result == E_STORAGE_OK) + path = corba_result->path; + else + path = NULL; + + callback = (EStorageDiscoveryCallback)closure->callback; + (* callback) (closure->storage, result, path, closure->data); + + bonobo_object_unref (BONOBO_OBJECT (listener)); + g_free (closure); +} + +static void +async_discover_shared_folder (EStorage *storage, + const char *owner, + const char *folder_name, + EStorageDiscoveryCallback callback, + void *data) +{ + ECorbaStorage *corba_storage; + ECorbaStoragePrivate *priv; + BonoboListener *listener; + Bonobo_Listener corba_listener; + CORBA_Environment ev; + struct async_folder_closure *closure; + + corba_storage = E_CORBA_STORAGE (storage); + priv = corba_storage->priv; + + closure = g_new (struct async_folder_closure, 1); + closure->callback = (EStorageResultCallback)callback; + closure->storage = storage; + closure->data = data; + listener = bonobo_listener_new (async_folder_discovery_cb, closure); + corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener)); + + CORBA_exception_init (&ev); + GNOME_Evolution_Storage_asyncDiscoverSharedFolder (priv->storage_interface, + owner, folder_name, + corba_listener, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + (* callback) (storage, E_STORAGE_GENERICERROR, NULL, data); + bonobo_object_unref (BONOBO_OBJECT (listener)); + g_free (closure); + } + CORBA_exception_free (&ev); +} + +static void +async_remove_shared_folder (EStorage *storage, + const char *path, + EStorageResultCallback callback, + void *data) +{ + ECorbaStorage *corba_storage; + ECorbaStoragePrivate *priv; + BonoboListener *listener; + Bonobo_Listener corba_listener; + CORBA_Environment ev; + struct async_folder_closure *closure; + + corba_storage = E_CORBA_STORAGE (storage); + priv = corba_storage->priv; + + closure = g_new (struct async_folder_closure, 1); + closure->callback = callback; + closure->storage = storage; + closure->data = data; + listener = bonobo_listener_new (async_folder_cb, closure); + corba_listener = bonobo_object_corba_objref (BONOBO_OBJECT (listener)); + + CORBA_exception_init (&ev); + GNOME_Evolution_Storage_asyncRemoveSharedFolder (priv->storage_interface, + path, corba_listener, + &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + (* callback) (storage, E_STORAGE_GENERICERROR, data); + bonobo_object_unref (BONOBO_OBJECT (listener)); + g_free (closure); + } + CORBA_exception_free (&ev); +} + + static void corba_class_init (void) { @@ -511,6 +631,9 @@ class_init (ECorbaStorageClass *klass) storage_class->async_remove_folder = async_remove_folder; storage_class->async_xfer_folder = async_xfer_folder; storage_class->async_open_folder = async_open_folder; + storage_class->supports_shared_folders = supports_shared_folders; + storage_class->async_discover_shared_folder = async_discover_shared_folder; + storage_class->async_remove_shared_folder = async_remove_shared_folder; corba_class_init (); |