[evolution-data-server/meego-eds: 13/47] Add API to get folder from URI.
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/meego-eds: 13/47] Add API to get folder from URI.
- Date: Wed, 15 Jun 2011 11:25:55 +0000 (UTC)
commit ae4386b03ad2a73fd4502fbe0057438aa61a74a6
Author: Srinivasa Ragavan <sragavan gnome org>
Date: Wed Apr 20 22:10:59 2011 +0530
Add API to get folder from URI.
mail/daemon/e-mail-data-session.c | 67 ++++++++++++++++
mail/daemon/e-mail-data-session.xml | 5 +
mail/libegdbus/e-gdbus-emailsession.c | 134 +++++++++++++++++++++++++++++++++
mail/libegdbus/e-gdbus-emailsession.h | 30 +++++++
4 files changed, 236 insertions(+), 0 deletions(-)
---
diff --git a/mail/daemon/e-mail-data-session.c b/mail/daemon/e-mail-data-session.c
index 7aa2875..6404ecb 100644
--- a/mail/daemon/e-mail-data-session.c
+++ b/mail/daemon/e-mail-data-session.c
@@ -268,6 +268,72 @@ impl_Mail_getLocalFolder (EGdbusSessionCS *object, GDBusMethodInvocation *invoca
}
static void
+get_folder_done (gchar *uri, CamelFolder *folder, gpointer d, GError *error)
+{
+ EMailGetStoreData *data = (EMailGetStoreData *)d;
+ EMailDataSessionPrivate *priv = DATA_SESSION_PRIVATE(data->msession);
+ CamelStore *store;
+ char *fpath, *spath;
+ char *url;
+ EMailDataStore *estore;
+ const gchar *sender;
+ GList *list;
+
+ if (folder == NULL) {
+ ipc(printf("Unable to get folder: %s\n", error->message));
+ g_dbus_method_invocation_return_gerror (data->invocation, error);
+ }
+
+ store = camel_folder_get_parent_store (folder);
+ g_mutex_lock (priv->datastores_lock);
+ estore = g_hash_table_lookup (priv->datastores, store);
+
+ if (estore == NULL) {
+ url = camel_url_to_string(((CamelService *)store)->url, CAMEL_URL_HIDE_ALL);
+ spath = construct_mail_session_path ();
+ estore = e_mail_data_store_new (store, url);
+
+ g_hash_table_insert (priv->datastores, store, estore);
+ e_mail_data_store_register_gdbus_object (estore, g_dbus_method_invocation_get_connection (data->invocation), spath, NULL);
+ g_free (url);
+ g_free (spath);
+ }
+
+ g_mutex_unlock (priv->datastores_lock);
+
+ g_mutex_lock (priv->connections_lock);
+ sender = g_dbus_method_invocation_get_sender (data->invocation);
+
+ list = g_hash_table_lookup (priv->connections, sender);
+ list = g_list_prepend (list, estore);
+ g_hash_table_insert (priv->connections, g_strdup (sender), list);
+ g_mutex_unlock (priv->connections_lock);
+
+ fpath = e_mail_data_store_get_folder_path (estore, g_dbus_method_invocation_get_connection (data->invocation), folder);
+
+ egdbus_session_cs_complete_get_folder_from_uri (data->object, data->invocation, fpath);
+
+ ipc (printf("EMailDataSession: Get Folder from URI : Success %s for sender: '%s'\n", fpath, sender));
+
+ g_free (data);
+}
+static gboolean
+impl_Mail_getFolderFromUri (EGdbusSessionCS *object, GDBusMethodInvocation *invocation, const char *uri, EMailDataSession *msession)
+{
+ EMailDataSessionPrivate *priv = DATA_SESSION_PRIVATE(msession);
+ EMailGetStoreData *data = g_new0(EMailGetStoreData, 1);
+
+ data->invocation = invocation;
+ data->msession = msession;
+ data->object = object;
+
+ mail_get_folder (uri, 0, get_folder_done, data, mail_msg_unordered_push);
+
+ return TRUE;
+}
+
+
+static void
e_mail_data_session_get_property (GObject *object, guint property_id,
GValue *value, GParamSpec *pspec)
{
@@ -323,6 +389,7 @@ e_mail_data_session_init (EMailDataSession *self)
g_signal_connect (priv->gdbus_object, "handle-get-store", G_CALLBACK (impl_Mail_getStore), self);
g_signal_connect (priv->gdbus_object, "handle-get-local-store", G_CALLBACK (impl_Mail_getLocalStore), self);
g_signal_connect (priv->gdbus_object, "handle-get-local-folder", G_CALLBACK (impl_Mail_getLocalFolder), self);
+ g_signal_connect (priv->gdbus_object, "handle-get-folder-from-uri", G_CALLBACK (impl_Mail_getFolderFromUri), self);
priv->stores_lock = g_mutex_new ();
priv->stores = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
diff --git a/mail/daemon/e-mail-data-session.xml b/mail/daemon/e-mail-data-session.xml
index a1f1f6b..67c62c8 100644
--- a/mail/daemon/e-mail-data-session.xml
+++ b/mail/daemon/e-mail-data-session.xml
@@ -28,6 +28,11 @@
<arg name="type" type="s" direction="in"/>
<arg name="folder" type="o" direction="out"/>
</method>
+ <method name="getFolderFromUri">
+ <arg name="uri" type="s" direction="in"/>
+ <arg name="folder" type="o" direction="out"/>
+ </method>
+
<signal name="GetPassword">
<arg name="title" type="s"/>
<arg name="prompt" type="s"/>
diff --git a/mail/libegdbus/e-gdbus-emailsession.c b/mail/libegdbus/e-gdbus-emailsession.c
index 2b8c8a0..a1079bb 100644
--- a/mail/libegdbus/e-gdbus-emailsession.c
+++ b/mail/libegdbus/e-gdbus-emailsession.c
@@ -451,11 +451,58 @@ static const _ExtendedGDBusMethodInfo _egdbus_session_cs_method_info_get_local_f
"handle-get-local-folder"
};
+static const _ExtendedGDBusArgInfo _egdbus_session_cs_method_info_get_folder_from_uri_IN_ARG_uri =
+{
+ {
+ -1,
+ "uri",
+ "s",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _egdbus_session_cs_method_info_get_folder_from_uri_IN_ARG_pointers[] =
+{
+ &_egdbus_session_cs_method_info_get_folder_from_uri_IN_ARG_uri,
+ NULL
+};
+
+static const _ExtendedGDBusArgInfo _egdbus_session_cs_method_info_get_folder_from_uri_OUT_ARG_folder =
+{
+ {
+ -1,
+ "folder",
+ "o",
+ NULL
+ },
+ FALSE
+};
+
+static const _ExtendedGDBusArgInfo * const _egdbus_session_cs_method_info_get_folder_from_uri_OUT_ARG_pointers[] =
+{
+ &_egdbus_session_cs_method_info_get_folder_from_uri_OUT_ARG_folder,
+ NULL
+};
+
+static const _ExtendedGDBusMethodInfo _egdbus_session_cs_method_info_get_folder_from_uri =
+{
+ {
+ -1,
+ "getFolderFromUri",
+ (GDBusArgInfo **) &_egdbus_session_cs_method_info_get_folder_from_uri_IN_ARG_pointers,
+ (GDBusArgInfo **) &_egdbus_session_cs_method_info_get_folder_from_uri_OUT_ARG_pointers,
+ NULL
+ },
+ "handle-get-folder-from-uri"
+};
+
static const _ExtendedGDBusMethodInfo * const _egdbus_session_cs_method_info_pointers[] =
{
&_egdbus_session_cs_method_info_get_store,
&_egdbus_session_cs_method_info_get_local_store,
&_egdbus_session_cs_method_info_get_local_folder,
+ &_egdbus_session_cs_method_info_get_folder_from_uri,
NULL
};
@@ -587,6 +634,17 @@ egdbus_session_cs_default_init (EGdbusSessionCSIface *iface)
2,
G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+ g_signal_new ("handle-get-folder-from-uri",
+ G_TYPE_FROM_INTERFACE (iface),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (EGdbusSessionCSIface, handle_get_folder_from_uri),
+ g_signal_accumulator_true_handled,
+ NULL,
+ _cclosure_marshal_generic,
+ G_TYPE_BOOLEAN,
+ 2,
+ G_TYPE_DBUS_METHOD_INVOCATION, G_TYPE_STRING);
+
/* GObject signals for received D-Bus signals: */
g_signal_new ("get-password",
G_TYPE_FROM_INTERFACE (iface),
@@ -807,6 +865,71 @@ _out:
}
void
+egdbus_session_cs_call_get_folder_from_uri (
+ EGdbusSessionCS *proxy,
+ const gchar *uri,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ g_dbus_proxy_call (G_DBUS_PROXY (proxy),
+ "getFolderFromUri",
+ g_variant_new ("(s)",
+ uri),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ callback,
+ user_data);
+}
+
+gboolean
+egdbus_session_cs_call_get_folder_from_uri_finish (
+ EGdbusSessionCS *proxy,
+ gchar **out_folder,
+ GAsyncResult *res,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_finish (G_DBUS_PROXY (proxy), res, error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(o)",
+ out_folder);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+gboolean
+egdbus_session_cs_call_get_folder_from_uri_sync (
+ EGdbusSessionCS *proxy,
+ const gchar *uri,
+ gchar **out_folder,
+ GCancellable *cancellable,
+ GError **error)
+{
+ GVariant *_ret;
+ _ret = g_dbus_proxy_call_sync (G_DBUS_PROXY (proxy),
+ "getFolderFromUri",
+ g_variant_new ("(s)",
+ uri),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ cancellable,
+ error);
+ if (_ret == NULL)
+ goto _out;
+ g_variant_get (_ret,
+ "(o)",
+ out_folder);
+ g_variant_unref (_ret);
+_out:
+ return _ret != NULL;
+}
+
+void
egdbus_session_cs_complete_get_store (
EGdbusSessionCS *object,
GDBusMethodInvocation *invocation,
@@ -839,6 +962,17 @@ egdbus_session_cs_complete_get_local_folder (
folder));
}
+void
+egdbus_session_cs_complete_get_folder_from_uri (
+ EGdbusSessionCS *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *folder)
+{
+ g_dbus_method_invocation_return_value (invocation,
+ g_variant_new ("(o)",
+ folder));
+}
+
/* ------------------------------------------------------------------------ */
static void
diff --git a/mail/libegdbus/e-gdbus-emailsession.h b/mail/libegdbus/e-gdbus-emailsession.h
index af92ec1..1eaae7a 100644
--- a/mail/libegdbus/e-gdbus-emailsession.h
+++ b/mail/libegdbus/e-gdbus-emailsession.h
@@ -47,6 +47,11 @@ struct _EGdbusSessionCSIface
GDBusMethodInvocation *invocation,
const gchar *type);
+ gboolean (*handle_get_folder_from_uri) (
+ EGdbusSessionCS *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *uri);
+
/* GObject signal class handlers for received D-Bus signals: */
void (*get_password) (
@@ -78,6 +83,11 @@ void egdbus_session_cs_complete_get_local_folder (
GDBusMethodInvocation *invocation,
const gchar *folder);
+void egdbus_session_cs_complete_get_folder_from_uri (
+ EGdbusSessionCS *object,
+ GDBusMethodInvocation *invocation,
+ const gchar *folder);
+
/* D-Bus signal emissions functions: */
@@ -148,6 +158,26 @@ gboolean egdbus_session_cs_call_get_local_folder_sync (
GCancellable *cancellable,
GError **error);
+void egdbus_session_cs_call_get_folder_from_uri (
+ EGdbusSessionCS *proxy,
+ const gchar *uri,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean egdbus_session_cs_call_get_folder_from_uri_finish (
+ EGdbusSessionCS *proxy,
+ gchar **out_folder,
+ GAsyncResult *res,
+ GError **error);
+
+gboolean egdbus_session_cs_call_get_folder_from_uri_sync (
+ EGdbusSessionCS *proxy,
+ const gchar *uri,
+ gchar **out_folder,
+ GCancellable *cancellable,
+ GError **error);
+
/* ---- */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]