evolution r36062 - branches/mail-dbus-remoting/mail
- From: sragavan svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution r36062 - branches/mail-dbus-remoting/mail
- Date: Tue, 26 Aug 2008 04:18:44 +0000 (UTC)
Author: sragavan
Date: Tue Aug 26 04:18:44 2008
New Revision: 36062
URL: http://svn.gnome.org/viewvc/evolution?rev=36062&view=rev
Log:
Merge Sankar's changes again ;-)
Modified:
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
branches/mail-dbus-remoting/mail/evo-dbus.h
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 Tue Aug 26 04:18:44 2008
@@ -4,6 +4,7 @@
* */
#include <glib.h>
+#include <glib/gi18n.h>
#include "mail-dbus.h"
#include <camel/camel.h>
@@ -16,78 +17,222 @@
GHashTable *folder_hash = NULL;
static DBusHandlerResult
-dbus_listener_message_handler (DBusConnection *connection,
- DBusMessage *message,
- void *user_data);
+dbus_listener_message_handler(DBusConnection * connection,
+ DBusMessage * message, void *user_data);
-static DBusHandlerResult
-dbus_listener_message_handler (DBusConnection *connection, DBusMessage *message, void *user_data)
+void camel_store_remote_impl_init(void);
+int camel_store_get_specific_folder_remote(DBusConnection * connection,
+ DBusMessage * message,
+ const char *method,
+ DBusMessage * reply);
+
+int camel_store_get_specific_folder_remote(DBusConnection * connection,
+ DBusMessage * message,
+ const char *method,
+ DBusMessage * reply)
{
- 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));
-
- 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;
+ CamelException *ex;
+ CamelFolder *folder;
+ CamelStore *store;
+ char *err, *folder_hash_key, *store_hash_key;
- int ret = dbus_message_get_args (message,
+ 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);
+ if (ret)
+ return ret;
- return DBUS_HANDLER_RESULT_HANDLED;
+ 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);
+ return -1;
+ }
+
+ camel_exception_init(ex);
+
+ if (g_str_has_suffix(method, "inbox"))
+ folder = camel_store_get_inbox(store, ex);
+ else if (g_str_has_suffix(method, "trash"))
+ folder = camel_store_get_trash(store, ex);
+ else if (g_str_has_suffix(method, "junk"))
+ folder = camel_store_get_junk(store, 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);
+ return 0;
+}
+
+static DBusHandlerResult
+dbus_listener_message_handler(DBusConnection * connection,
+ DBusMessage * message, void *user_data)
+{
+ 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));
+
+ reply = dbus_message_new_method_return(message);
+
+ if (g_strcmp0(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);
+
+ if (ret)
+ goto fail;
+
+ 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);
+
+ } else if (g_strcmp0(method, "camel_store_get_inbox") ||
+ g_strcmp0(method, "camel_store_get_trash") ||
+ g_strcmp0(method, "camel_store_get_junk")) {
+ camel_store_get_specific_folder_remote(connection, message,
+ method, reply);
+ } else if (g_strcmp0(method, "camel_store_delete_folder")) {
+ char *folder_name, *store_hash_key;
+ CamelStore *store;
+ CamelException *ex;
+ int ret = dbus_message_get_args(message,
+ NULL,
+ DBUS_TYPE_STRING,
+ &store_hash_key,
+ DBUS_TYPE_STRING, &folder_name,
+ DBUS_TYPE_INVALID);
+
+ if (ret) {
+ dbus_message_append_args(reply, DBUS_TYPE_STRING,
+ _("Arguments not parseable"),
+ DBUS_TYPE_INVALID);
+ goto fail;
+ }
+
+ store = g_hash_table_lookup(store_hash, store_hash_key);
+ if (!store) {
+ dbus_message_append_args(reply, DBUS_TYPE_STRING,
+ _("Store not found"),
+ DBUS_TYPE_INVALID);
+ goto fail;
+ }
+
+ camel_exception_init(ex);
+ /* FIXME: camel_store_delete_folder should have sane return values and the exception should be used properly */
+ camel_store_delete_folder(store, folder_name, ex);
+ camel_exception_free(ex);
+ } else if (g_strcmp0(method, "camel_store_rename_folder")) {
+ char *old_folder_name, *new_folder_name, *store_hash_key;
+ CamelStore *store;
+ CamelException *ex;
+
+ int ret = dbus_message_get_args(message,
+ NULL,
+ DBUS_TYPE_STRING,
+ &store_hash_key,
+ DBUS_TYPE_STRING,
+ &old_folder_name,
+ DBUS_TYPE_STRING,
+ &new_folder_name,
+ DBUS_TYPE_INVALID);
+
+ if (ret) {
+ dbus_message_append_args(reply, DBUS_TYPE_STRING,
+ _("Arguments not parseable"),
+ DBUS_TYPE_INVALID);
+ goto fail;
+ }
+
+ store = g_hash_table_lookup(store_hash, store_hash_key);
+ if (!store) {
+ dbus_message_append_args(reply, DBUS_TYPE_STRING,
+ _("Store not found"),
+ DBUS_TYPE_INVALID);
+ goto fail;
+ }
+
+ camel_exception_init(ex);
+ /* FIXME: camel_store_delete_folder should have sane return values and the exception should be used properly */
+ camel_store_rename_folder(store, old_folder_name,
+ new_folder_name, ex);
+ camel_exception_free(ex);
+ }
+ fail:
+ dbus_connection_send(connection, reply, NULL);
+ dbus_message_unref(reply);
+
+ return DBUS_HANDLER_RESULT_HANDLED;
}
-void
-camel_store_remote_impl_init ()
+void camel_store_remote_impl_init()
{
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);
+ 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 Tue Aug 26 04:18:44 2008
@@ -4,6 +4,7 @@
* */
#include <mail-dbus.h>
+#include <evo-dbus.h>
#include <dbind.h>
#include <camel/camel-folder.h>
#include "camel-store-remote.h"
@@ -13,30 +14,112 @@
#define CAMEL_STORE_INTERFACE "org.gnome.evolution.camel.store"
#define CAMEL_STORE_OBJECT_PATH "/org/gnome/evolution/camel/store"
+CamelFolder *camel_store_get_folder_remote(CamelStoreRemote * store,
+ const char *folder_name,
+ guint32 flags)
+{
+ DBusError error;
+ char *err;
+ char *shash;
+
+ dbus_error_init(&error);
+ /* Invoke the appropriate dbind call to CamelStoreGetFolder */
+ 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);
+
+ CamelFolder *folder = g_hash_table_lookup(folder_hash, shash);
+ return folder;
+}
+
+static CamelFolder *camel_store_get_specific_folder_remote(CamelStoreRemote *
+ store,
+ const char *method)
+{
+ gboolean ret;
+ DBusError error;
+ char *err;
+ char *fhash;
+
+ 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,
+ method,
+ &error,
+ "s=>ss", store->object_id, &fhash,
+ &err);
+
+ if (ret != DBUS_HANDLER_RESULT_HANDLED) {
+ return NULL;
+ } else {
+ CamelFolder *folder = g_hash_table_lookup(folder_hash, fhash);
+ return folder;
+ }
+}
+
+CamelFolder *camel_store_get_inbox_remote(CamelStoreRemote * store)
+{
+ return (camel_store_get_specific_folder_remote
+ (store, "camel_store_get_inbox"));
+}
+
+CamelFolder *camel_store_get_trash_remote(CamelStoreRemote * store)
+{
+ return (camel_store_get_specific_folder_remote
+ (store, "camel_store_get_trash"));
+}
+
+CamelFolder *camel_store_get_junk_remote(CamelStoreRemote * store)
+{
+ return (camel_store_get_specific_folder_remote
+ (store, "camel_store_get_junk"));
+}
+
+void
+camel_store_delete_folder_remote(CamelStoreRemote * store,
+ const char *folder_name)
+{
+ gboolean ret;
+ DBusError error;
+ char *err;
+
+ dbus_error_init(&error);
+
+ ret = dbind_context_method_call(evolution_dbus_peek_context(),
+ CAMEL_DBUS_NAME,
+ CAMEL_STORE_OBJECT_PATH,
+ CAMEL_STORE_INTERFACE,
+ "camel_store_create_folder",
+ &error,
+ "ss=>s", store->object_id, folder_name,
+ &err);
+}
-CamelFolder *
-camel_store_remote_get_folder (CamelStoreRemote *store, const char *folder_name, guint32 flags)
+void
+camel_store_rename_folder_remote(CamelStoreRemote * store,
+ const char *old_folder_name,
+ const char *new_folder_name)
{
- 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;
- }
+ gboolean ret;
+ DBusError error;
+ char *err;
+
+ dbus_error_init(&error);
+
+ ret = dbind_context_method_call(evolution_dbus_peek_context(),
+ CAMEL_DBUS_NAME,
+ CAMEL_STORE_OBJECT_PATH,
+ CAMEL_STORE_INTERFACE,
+ "camel_store_rename_folder",
+ &error,
+ "sss=>s", store->object_id,
+ old_folder_name, new_folder_name, &err);
}
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 Tue Aug 26 04:18:44 2008
@@ -3,6 +3,8 @@
*
* */
+#include <camel/camel.h>
+
typedef struct {
char *object_id;
} CamelFolderRemote;
@@ -10,3 +12,16 @@
typedef struct {
char *object_id;
} CamelStoreRemote;
+
+CamelFolder *camel_store_get_folder_remote(CamelStoreRemote * store,
+ const char *folder_name,
+ guint32 flags);
+CamelFolder *camel_store_get_inbox_remote(CamelStoreRemote * store);
+CamelFolder *camel_store_get_trash_remote(CamelStoreRemote * store);
+CamelFolder *camel_store_get_junk_remote(CamelStoreRemote * store);
+
+void camel_store_delete_folder_remote(CamelStoreRemote * store,
+ const char *folder_name);
+void camel_store_rename_folder_remote(CamelStoreRemote * store,
+ const char *old_folder_name,
+ const char *new_folder_name);
Modified: branches/mail-dbus-remoting/mail/evo-dbus.h
==============================================================================
--- branches/mail-dbus-remoting/mail/evo-dbus.h (original)
+++ branches/mail-dbus-remoting/mail/evo-dbus.h Tue Aug 26 04:18:44 2008
@@ -9,7 +9,7 @@
#include <string.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbind.h>
-#include <dbine-any.h>
+#include <dbind-any.h>
int evolution_dbus_init (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]