evolution r36051 - branches/mail-dbus-remoting/mail
- From: sragavan svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r36051 - branches/mail-dbus-remoting/mail
- Date: Mon, 25 Aug 2008 18:17:38 +0000 (UTC)
Author: sragavan
Date: Mon Aug 25 18:17:38 2008
New Revision: 36051
URL: http://svn.gnome.org/viewvc/evolution?rev=36051&view=rev
Log:
Merge Sankar's works.
Modified:
branches/mail-dbus-remoting/mail/camel-session-remote-impl.c
branches/mail-dbus-remoting/mail/camel-store-remote-impl.c
branches/mail-dbus-remoting/mail/camel-store-remote.c
branches/mail-dbus-remoting/mail/camel-store-remote.h
Modified: branches/mail-dbus-remoting/mail/camel-session-remote-impl.c
==============================================================================
--- branches/mail-dbus-remoting/mail/camel-session-remote-impl.c (original)
+++ branches/mail-dbus-remoting/mail/camel-session-remote-impl.c Mon Aug 25 18:17:38 2008
@@ -49,10 +49,6 @@
DBUS_TYPE_STRING, &session_str,
DBUS_TYPE_STRING, &storage_path,
DBUS_TYPE_INVALID);
- if (!ret) {
- g_warning ("Unable to get args\n");
- return DBUS_HANDLER_RESULT_HANDLED;
- }
camel_session_construct (session, storage_path);
dbus_message_append_args (return_val, DBUS_TYPE_INVALID);
Modified: branches/mail-dbus-remoting/mail/camel-store-remote-impl.c
==============================================================================
--- branches/mail-dbus-remoting/mail/camel-store-remote-impl.c (original)
+++ branches/mail-dbus-remoting/mail/camel-store-remote-impl.c Mon Aug 25 18:17:38 2008
@@ -5,35 +5,80 @@
#include <glib.h>
#include "mail-dbus.h"
+#include <camel/camel.h>
#define CAMEL_STORE_OBJECT_PATH "/org/gnome/evolution/camel/store"
+#define CAMEL_STORE_INTERFACE "org.gnome.evolution.camel.store"
static gboolean store_setup = FALSE;
+
GHashTable *store_hash = NULL;
+GHashTable *folder_hash = NULL;
static DBusHandlerResult
dbus_listener_message_handler (DBusConnection *connection,
DBusMessage *message,
void *user_data);
-
-
-
static DBusHandlerResult
-dbus_listener_message_handler (DBusConnection *connection,
- DBusMessage *message,
- void *user_data)
+dbus_listener_message_handler (DBusConnection *connection, DBusMessage *message, void *user_data)
{
- const char *method = dbus_message_get_member (message);
+ const char *method = dbus_message_get_member (message);
+ DBusMessage *reply;
- printf ("D-Bus message: obj_path = '%s' interface = '%s' method = '%s' destination = '%s'\n",
- dbus_message_get_path (message),
- dbus_message_get_interface (message),
- dbus_message_get_member (message),
- dbus_message_get_destination (message));
+ printf ("D-Bus message: obj_path = '%s' interface = '%s' method = '%s' destination = '%s'\n",
+ dbus_message_get_path (message),
+ dbus_message_get_interface (message),
+ dbus_message_get_member (message),
+ dbus_message_get_destination (message));
+
+ reply = dbus_message_new_method_return (message);
+
+ if (strcmp (method, "camel_store_get_folder")) {
+ guint32 flags;
+ CamelException *ex;
+ CamelFolder *folder;
+ CamelStore *store;
+ char *err, *folder_hash_key, *store_hash_key, *folder_name;
+
+ int ret = dbus_message_get_args (message,
+ NULL,
+ DBUS_TYPE_STRING, &store_hash_key,
+ DBUS_TYPE_STRING, &folder_name,
+ DBUS_TYPE_UINT32, &flags,
+ DBUS_TYPE_INVALID);
+
+ store = g_hash_table_lookup (store_hash, store_hash_key);
+ if (!store) {
+ dbus_message_append_args (reply, DBUS_TYPE_STRING, "", DBUS_TYPE_STRING, _("Store not found"), DBUS_TYPE_INVALID);
+ goto fail;
+ }
+
+ camel_exception_init (ex);
+ folder = camel_store_get_folder (store, folder_name, flags, ex);
+ if (!folder) {
+ err = g_strdup (camel_exception_get_description (ex));
+ } else {
+ err = g_strdup ("");
+ /* FIXME: Free all */
+ folder_hash_key = e_dbus_get_folder_hash (camel_service_get_url((CamelService *)folder->parent_store), folder->full_name);
+ g_hash_table_insert (folder_hash, folder_hash_key, folder);
+ g_free (folder_hash_key);
+ }
+ camel_exception_free (ex);
+
+ dbus_message_append_args (reply, DBUS_TYPE_STRING, folder_hash_key, DBUS_TYPE_STRING, err, DBUS_TYPE_INVALID);
+ g_free (folder_hash_key);
+ g_free (err);
+
+ }
+fail:
+ dbus_connection_send (connection, reply, NULL);
+ dbus_message_unref (reply);
return DBUS_HANDLER_RESULT_HANDLED;
+
}
void
@@ -41,6 +86,7 @@
{
store_setup = TRUE;
store_hash = g_hash_table_new (g_str_hash, g_str_equal);
+ folder_hash = g_hash_table_new (g_str_hash, g_str_equal);
e_dbus_register_handler (CAMEL_STORE_OBJECT_PATH, dbus_listener_message_handler, NULL);
}
Modified: branches/mail-dbus-remoting/mail/camel-store-remote.c
==============================================================================
--- branches/mail-dbus-remoting/mail/camel-store-remote.c (original)
+++ branches/mail-dbus-remoting/mail/camel-store-remote.c Mon Aug 25 18:17:38 2008
@@ -3,6 +3,40 @@
*
* */
-#define DBUS_SERVER_OBJECT_PATH "/org/gnome/evolution/camel/store"
-#define DBUS_BUS_NAME "org.gnome.evolution.camel"
+#include <mail-dbus.h>
+#include <dbind.h>
+#include <camel/camel-folder.h>
+#include "camel-store-remote.h"
+extern GHashTable *folder_hash;
+#define CAMEL_DBUS_NAME "org.gnome.evolution.camel"
+#define CAMEL_STORE_INTERFACE "org.gnome.evolution.camel.store"
+#define CAMEL_STORE_OBJECT_PATH "/org/gnome/evolution/camel/store"
+
+
+CamelFolder *
+camel_store_remote_get_folder (CamelStoreRemote *store, const char *folder_name, guint32 flags)
+{
+ gboolean ret;
+ DBusError error;
+ char *err;
+ char *shash;
+
+ dbus_error_init (&error);
+ /* Invoke the appropriate dbind call to CamelStoreGetFolder */
+ ret = dbind_context_method_call (evolution_dbus_peek_context(),
+ CAMEL_DBUS_NAME,
+ CAMEL_STORE_OBJECT_PATH,
+ CAMEL_STORE_INTERFACE,
+ "camel_store_get_folder",
+ &error,
+ "ssu=>ss", store->object_id, folder_name, flags, &shash, &err);
+
+
+ if (ret != DBUS_HANDLER_RESULT_HANDLED) {
+ return NULL;
+ } else {
+ CamelFolder *folder = g_hash_table_lookup (folder_hash, shash);
+ return folder;
+ }
+}
Modified: branches/mail-dbus-remoting/mail/camel-store-remote.h
==============================================================================
--- branches/mail-dbus-remoting/mail/camel-store-remote.h (original)
+++ branches/mail-dbus-remoting/mail/camel-store-remote.h Mon Aug 25 18:17:38 2008
@@ -5,4 +5,8 @@
typedef struct {
char *object_id;
+} CamelFolderRemote;
+
+typedef struct {
+ char *object_id;
} CamelStoreRemote;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]