evolution r36051 - branches/mail-dbus-remoting/mail



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]