[evolution-data-server/email-factory-3-4: 2/13] Add some more skel and make things to compile
- From: Srinivasa Ragavan <sragavan src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/email-factory-3-4: 2/13] Add some more skel and make things to compile
- Date: Fri, 18 Nov 2011 04:13:32 +0000 (UTC)
commit d7a0b09530c02bf08ef9286ec943049f0f90d766
Author: Srinivasa Ragavan <sragavan gnome org>
Date: Mon Oct 3 16:21:05 2011 +0530
Add some more skel and make things to compile
mail/daemon/main.c | 136 +++++
mail/daemon/test-email-client.c | 1081 +++++++++++++++++++++++++++++++++++++++
2 files changed, 1217 insertions(+), 0 deletions(-)
---
diff --git a/mail/daemon/main.c b/mail/daemon/main.c
new file mode 100644
index 0000000..2df6eb5
--- /dev/null
+++ b/mail/daemon/main.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2011, Intel Corporation 2011.
+ *
+ * Author: Srinivasa Ragavan
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the Free
+ * Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#if 0
+#include <libedataserver/e-data-server-util.h>
+#include <libedataserverui/e-passwords.h>
+#include "mail-session.h"
+#include "e-mail-store.h"
+#include "mail-folder-cache.h"
+#include "mail-mt.h"
+#include "mail-config.h"
+#include "mail-ops.h"
+#include "e-dbus-manager.h"
+#include "mail-send-recv.h"
+#include "e-mail-connection-connman.h"
+
+#include "utils.h"
+
+/* Yeah, the daemon shouldn't be a gtk+ app. But this code shuffling ends this up as a Gtk daemon. But once we solve password and alert issues, this should be a simple mainloop */
+
+extern CamelSession *session;
+static gint mail_sync_in_progress = 0;
+
+static void
+mail_sync_store_done_cb (CamelStore *store,
+ gpointer user_data,
+ GError *error)
+{
+ mail_sync_in_progress--;
+}
+
+static void
+mail_sync_store_cb (CamelStore *store,
+ const gchar *display_name,
+ gpointer not_used)
+{
+ CamelService *service = (CamelService *)store;
+
+ /* Don't have to sync the local store. Only remote needs to be synced. */
+ if (strcmp(service->url->protocol, "mbox") == 0)
+ return;
+
+ mail_sync_in_progress++;
+
+ mail_sync_store (
+ store, FALSE,
+ mail_sync_store_done_cb,
+ NULL);
+}
+
+static gboolean
+mail_auto_sync ()
+{
+ /* If a sync is still in progress, skip this round. */
+ if (mail_sync_in_progress)
+ goto exit;
+
+ e_mail_store_foreach (
+ (GHFunc) mail_sync_store_cb,
+ NULL);
+
+exit:
+ return TRUE;
+}
+
+static gboolean
+start_mail_engine ()
+{
+ char *data_dir;
+
+ mail_debug_int ();
+ mail_session_start ();
+ mail_folder_cache_get_default ();
+ mail_config_init ();
+ mail_msg_init ();
+
+ data_dir = g_build_filename (e_get_user_data_dir(), "mail", NULL);
+ if (!g_file_test (data_dir, G_FILE_TEST_EXISTS|G_FILE_TEST_IS_DIR)) {
+ g_mkdir_with_parents (data_dir, 0700);
+ }
+
+ e_mail_store_init (data_dir);
+
+ g_free(data_dir);
+
+ e_mail_connection_connman_new();
+ mail_autoreceive_init (session);
+
+ e_dbus_manager_new ();
+
+ return FALSE;
+}
+#endif
+int
+main(int argc, char* argv[])
+{
+ gtk_init_with_args (
+ &argc, &argv,
+ _("- The Evolution Mail Data Server"),
+ NULL, (gchar *) GETTEXT_PACKAGE, NULL);
+
+ g_type_init ();
+ g_set_prgname ("evolution-mail-factory");
+ if (!g_thread_supported ()) g_thread_init (NULL);
+
+// e_passwords_init ();
+
+// g_idle_add ((GSourceFunc) start_mail_engine, NULL);
+ gtk_main ();
+
+ return 0;
+}
diff --git a/mail/daemon/test-email-client.c b/mail/daemon/test-email-client.c
new file mode 100644
index 0000000..1342007
--- /dev/null
+++ b/mail/daemon/test-email-client.c
@@ -0,0 +1,1081 @@
+
+#include <config.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib/gi18n.h>
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#if 0
+#include <libedataserver/e-data-server-util.h>
+#include <camel/camel.h>
+#include "e-account-utils.h"
+#include "e-gdbus-emailsession.h"
+#include "e-gdbus-emailstore.h"
+#include "e-gdbus-emailfolder.c"
+
+#define E_MAIL_DATA_FACTORY_SERVICE_NAME \
+ "org.gnome.evolution.dataserver.Mail"
+
+EGdbusSessionCS *session_proxy;
+
+static void
+message_info_dump (CamelMessageInfoBase *mi)
+{
+ CamelFlag *flag;
+ CamelTag *tag;
+
+ if (mi == NULL) {
+ printf("No message?\n");
+ return;
+ }
+
+ printf("Subject: %s\n", camel_message_info_subject(mi));
+ printf("To: %s\n", camel_message_info_to(mi));
+ printf("Cc: %s\n", camel_message_info_cc(mi));
+ printf("mailing list: %s\n", camel_message_info_mlist(mi));
+ printf("From: %s\n", camel_message_info_from(mi));
+ printf("UID: %s\n", camel_message_info_uid(mi));
+ printf("PREVIEW: %s\n", mi->preview);
+ printf("Flags: %04x\n", camel_message_info_flags(mi));
+
+ printf("User flags: \t");
+ flag = mi->user_flags;
+ while (flag) {
+ printf ("%s\t", flag->name);
+ flag = flag->next;
+ }
+ printf("\n");
+
+ printf("User tags: \t");
+ tag = mi->user_tags;
+ while (tag) {
+ printf ("%s:%s\t", tag->name, tag->value);
+ tag = tag->next;
+ }
+ printf("\n");
+
+}
+
+static void
+test_folder_basic (EGdbusFolderCF *folder_proxy, char *folder_path)
+{
+ char *data = NULL;
+
+ egdbus_folder_cf_call_get_name_sync (folder_proxy, &data, NULL, NULL);
+ printf("\n Folder Name: %s\n", data);
+
+ egdbus_folder_cf_call_get_full_name_sync (folder_proxy, &data, NULL, NULL);
+ printf("\n Full Name: %s\n", data);
+
+ egdbus_folder_cf_call_get_description_sync (folder_proxy, &data, NULL, NULL);
+ printf("\n Description %s\n", data);
+
+ printf("\n Prepare Summary %d\n", egdbus_folder_cf_call_prepare_summary_sync (folder_proxy, NULL, NULL));
+
+}
+
+
+static CamelMessageInfoBase *
+info_from_variant (CamelFolder *folder, GVariant *vinfo)
+{
+ CamelMessageInfoBase *info;
+ GVariantIter iter, aiter;
+ GVariant *item, *aitem;
+ int count, i;
+
+ info = (CamelMessageInfoBase *) camel_message_info_new (folder ? folder->summary : NULL);
+
+ /* Structure of CamelMessageInfoBase
+ ssssss - uid, sub, from, to, cc, mlist
+ uu - flags, size
+ tt - date_sent, date_received
+ t - message_id
+ iat - references
+ as - userflags
+ a(ss) - usertags
+ a(ss) - header
+ NOTE: We aren't now sending content_info*/
+
+ g_variant_iter_init (&iter, vinfo);
+
+ /* Uid, Subject, From, To, CC, mlist */
+ item = g_variant_iter_next_value (&iter);
+ info->uid = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->subject = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->from = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->to = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->cc = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->mlist = camel_pstring_strdup (g_variant_get_string(item, NULL));
+
+ item = g_variant_iter_next_value (&iter);
+ info->preview = g_strdup (g_variant_get_string(item, NULL));
+
+ /* Flags & size */
+ item = g_variant_iter_next_value (&iter);
+ info->flags = g_variant_get_uint32 (item);
+
+ item = g_variant_iter_next_value (&iter);
+ info->size = g_variant_get_uint32 (item);
+
+ /* Date: Sent/Received */
+ item = g_variant_iter_next_value (&iter);
+ info->date_sent = g_variant_get_uint64 (item);
+
+ item = g_variant_iter_next_value (&iter);
+ info->date_received = g_variant_get_uint64 (item);
+
+ /* Message Id */
+ item = g_variant_iter_next_value (&iter);
+ info->message_id.id.id = g_variant_get_uint64 (item);
+
+ /* References */
+ item = g_variant_iter_next_value (&iter);
+ count = g_variant_get_int32 (item);
+ if (count) {
+ item = g_variant_iter_next_value (&iter);
+ g_variant_iter_init (&aiter, item);
+
+ info->references = g_malloc(sizeof(*info->references) + ((count-1) * sizeof(info->references->references[0])));
+ i=0;
+ while ((aitem = g_variant_iter_next_value (&aiter))) {
+ info->references->references[i].id.id = g_variant_get_uint64 (aitem);
+ i++;
+ }
+ info->references->size = count;
+ } else {
+ item = g_variant_iter_next_value (&iter);
+ }
+
+ /* UserFlags */
+ item = g_variant_iter_next_value (&iter);
+ g_variant_iter_init (&aiter, item);
+
+ while ((aitem = g_variant_iter_next_value (&aiter))) {
+ char *str = g_variant_get_string (aitem, NULL);
+ if (str && *str)
+ camel_flag_set (&info->user_flags, str, TRUE);
+ else
+ printf("Empty User Flags\n");
+ }
+
+ /* User Tags */
+ item = g_variant_iter_next_value (&iter);
+ g_variant_iter_init (&aiter, item);
+
+ while ((aitem = g_variant_iter_next_value (&aiter))) {
+ GVariantIter siter;
+ GVariant *sitem;
+ char *tagname, *tagvalue;
+
+ g_variant_iter_init (&siter, aitem);
+ sitem = g_variant_iter_next_value (&siter);
+ tagname = g_strdup (g_variant_get_string (sitem, NULL));
+ sitem = g_variant_iter_next_value (&siter);
+ tagvalue = g_strdup (g_variant_get_string (sitem, NULL));
+ if (tagname && *tagname && tagvalue && *tagvalue)
+ camel_tag_set (&info->user_tags, tagname, tagvalue);
+ g_free (tagname);
+ g_free (tagvalue);
+ }
+
+ return info;
+}
+
+#define VALUE_OR_NULL(x) x?x:""
+static GVariant *
+variant_from_info (CamelMessageInfoBase *info)
+{
+ GVariant *v, *v1;
+ GVariantBuilder *builder, *b1, *b2;
+ int i;
+ CamelFlag *flags;
+ CamelTag *tags;
+
+ builder = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+
+ g_variant_builder_add (builder, "s", info->uid);
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->subject));
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->from));
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->to));
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->cc));
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->mlist));
+ g_variant_builder_add (builder, "s", VALUE_OR_NULL(info->preview));
+
+
+ g_variant_builder_add (builder, "u", info->flags);
+ g_variant_builder_add (builder, "u", info->size);
+
+ g_variant_builder_add (builder, "t", info->date_sent);
+ g_variant_builder_add (builder, "t", info->date_received);
+
+ g_variant_builder_add (builder, "t", info->message_id.id.id);
+
+
+
+ /* references */
+
+ if (info->references) {
+ g_variant_builder_add (builder, "i", info->references->size);
+
+ b1 = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+ for (i=0; i<info->references->size; i++) {
+ g_variant_builder_add (b1, "t", info->references->references[i].id.id);
+ }
+ v1 = g_variant_builder_end (b1);
+ g_variant_builder_unref (b1);
+
+ g_variant_builder_add_value (builder, v1);
+ g_variant_unref (v1);
+ } else {
+ g_variant_builder_add (builder, "i", 0);
+ b1 = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+ g_variant_builder_add (b1, "t", 0);
+ v1 = g_variant_builder_end (b1);
+ g_variant_builder_unref (b1);
+
+ g_variant_builder_add_value (builder, v1);
+
+
+ }
+
+ /* User Flags */
+ b1 = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+ flags = info->user_flags;
+ while (flags) {
+ g_variant_builder_add (b1, "s", flags->name);
+ flags = flags->next;
+ }
+ g_variant_builder_add (b1, "s", "");
+ v1 = g_variant_builder_end (b1);
+ g_variant_builder_unref (b1);
+
+ g_variant_builder_add_value (builder, v1);
+
+ /* User Tags */
+ b1 = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
+ tags = info->user_tags;
+ while (tags) {
+ b2 = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+ g_variant_builder_add (b2, "s", tags->name);
+ g_variant_builder_add (b2, "s", tags->value);
+
+ v1 = g_variant_builder_end (b2);
+ g_variant_builder_unref (b2);
+
+ /* FIXME: Should we handle empty tags? Can it be empty? If it potential crasher ahead*/
+ g_variant_builder_add_value (b1, v1);
+
+ tags = tags->next;
+ }
+
+ b2 = g_variant_builder_new (G_VARIANT_TYPE_TUPLE);
+ g_variant_builder_add (b2, "s", "");
+ g_variant_builder_add (b2, "s", "");
+ v1 = g_variant_builder_end (b2);
+ g_variant_builder_unref (b2);
+ g_variant_builder_add_value (b1, v1);
+
+ v1 = g_variant_builder_end (b1);
+ g_variant_builder_unref (b1);
+
+ g_variant_builder_add_value (builder, v1);
+
+ v = g_variant_builder_end (builder);
+ g_variant_builder_unref (builder);
+
+ return v;
+}
+
+
+static void
+test_message_basics (char *folder_path, EGdbusFolderCF *folder_proxy)
+{
+ char *data = NULL;
+ char **uids;
+ GError *error = NULL;
+ GVariant *variant=NULL;
+
+ egdbus_folder_cf_call_get_uids_sync (folder_proxy, &uids, NULL, &error);
+
+ if (error) {
+ printf("Error while getting uids: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ gboolean ret, fg;
+ int i=0;
+ guint32 flags=0;
+ char *msg = NULL;
+ char *name, *val=NULL;
+ CamelMessageInfoBase *info;
+
+ printf("UIDS received: \t");
+ while (uids[i]) {
+ printf("%s\t", uids[i]);
+ i++;
+ }
+ printf("\n");
+
+ ret = egdbus_folder_cf_call_get_message_info_sync (folder_proxy, uids[0], &variant, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting messageinfo: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Message info at beginning\n\n");
+ info = info_from_variant (NULL, variant);
+ message_info_dump (info);
+ camel_message_info_free (info);
+ printf("\n\n");
+ }
+
+ /* Message flags */
+ ret = egdbus_folder_cf_call_get_message_flags_sync(folder_proxy, uids[0], &flags, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message flags: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nFlags of the message : %u\n", flags);
+ }
+
+ ret = egdbus_folder_cf_call_set_message_flags_sync(folder_proxy, uids[0], CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED, CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while setting message flags: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Set the flags of the message : %u : success:%d\n", CAMEL_MESSAGE_SEEN | CAMEL_MESSAGE_DELETED, fg);
+ }
+
+
+ /* User flags */
+ ret = egdbus_folder_cf_call_get_message_user_flag_sync(folder_proxy, uids[0], "bold", &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message user flag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nUser Flags of the message for 'bold': %d\n", fg);
+ }
+
+ ret = egdbus_folder_cf_call_set_message_user_flag_sync(folder_proxy, uids[0], "bold", TRUE, NULL, &error);
+ if (!ret || error) {
+ printf("Error while setting message user flag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nSet UserFlags of the message to 'bold': success\n");
+ }
+
+ ret = egdbus_folder_cf_call_get_message_user_flag_sync(folder_proxy, uids[0], "bold", &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message user flag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nUser Flags of the message for 'bold' : %d\n", fg);
+ }
+
+ /* User Tag */
+ ret = egdbus_folder_cf_call_get_message_user_tag_sync(folder_proxy, uids[0], "", &val, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message user tag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("User Tag of the message : %s\n", val ? val : "<empty>");
+ }
+
+ ret = egdbus_folder_cf_call_set_message_user_tag_sync(folder_proxy, uids[0], "bold", "strong", NULL, &error);
+ if (!ret || error) {
+ printf("Error while setting message user tag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nSet UserTag of the message 'bold' to 'strong': success\n");
+ }
+
+ ret = egdbus_folder_cf_call_get_message_user_tag_sync(folder_proxy, uids[0], "bold", &val, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message user tag: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n User Tag of the message for 'bold' : %s\n", val ? val : "<empty>");
+ }
+
+
+ printf("\n\nMessage Info at the end\n");
+
+ ret = egdbus_folder_cf_call_get_message_info_sync (folder_proxy, uids[0], &variant, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting messageinfo: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+
+ info = info_from_variant (NULL, variant);
+ message_info_dump (info);
+ /* camel_message_info_free (info); */
+ }
+
+ /* Get Message */
+ ret = egdbus_folder_cf_call_get_message_sync (folder_proxy, uids[0], &msg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting message: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n\n%s\n\n", msg);
+ /* g_free(msg); */
+ }
+
+ /* Folder sync */
+ ret = egdbus_folder_cf_call_sync_sync (folder_proxy, FALSE, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while syncing folder: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nSyncing folder success: %d\n", fg);
+ }
+
+ /* getPermanentFlags */
+ ret = egdbus_folder_cf_call_get_permanent_flags_sync (folder_proxy, &flags, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting folder permanent flags : %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Permanent Flags: %u\n", flags);
+ }
+
+ /* hasSummaryCapability */
+ ret = egdbus_folder_cf_call_has_summary_capability_sync (folder_proxy, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while checking has summary capability: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Has summary capability : %d\n", fg);
+ }
+
+ /* hasSearchCapability */
+ ret = egdbus_folder_cf_call_has_search_capability_sync (folder_proxy, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while checking has search capability: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Has search capability : %d\n", fg);
+ }
+
+ /* Total count */
+ ret = egdbus_folder_cf_call_total_message_count_sync (folder_proxy, &i, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting total msg count: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Total message count : %d\n", i);
+ }
+
+ /* Unread count */
+ ret = egdbus_folder_cf_call_unread_message_count_sync (folder_proxy, &i, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting unread msg count: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Unread message count : %d\n", i);
+ }
+
+ /* Deleted count*/
+ ret = egdbus_folder_cf_call_deleted_message_count_sync (folder_proxy, &i, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting deleted msg count: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Deleted message count : %d\n", i);
+ }
+
+ /* Expunge */
+ ret = egdbus_folder_cf_call_expunge_sync (folder_proxy, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while expunging folder: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nExpunging folder success: %d\n", fg);
+ }
+
+ /* Refresh */
+ ret = egdbus_folder_cf_call_refresh_info_sync (folder_proxy, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while refreshing folder: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Refreshing folder success: %d\n", fg);
+ }
+
+ /* Get UIDS */
+ egdbus_folder_cf_call_get_uids_sync (folder_proxy, &uids, NULL, &error);
+ if (error) {
+ printf("Error while getting uids: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ int i=0;
+ guint32 flags=0;
+ char *name, *val=NULL;
+
+ printf("UIDS at END received: \t");
+ while (uids[i]) {
+ printf("%s\t", uids[i]);
+ i++;
+ }
+ printf("\n");
+ }
+
+ /* get parent store */
+ ret = egdbus_folder_cf_call_get_parent_store_sync (folder_proxy, &name, NULL, &error);
+ if (error) {
+ printf("Error while getting parent store: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Parent Store OBJ: %s\n", name);
+ g_free (name);
+ }
+
+ /* Local Store*/
+ EGdbusFolderCF *local_folder_proxy;
+ char *local_folder_proxy_path;
+ EGdbusStoreMS *local_store_proxy;
+ char *local_store;
+
+ ret = egdbus_session_cs_call_get_local_store_sync (session_proxy, &local_store, NULL, &error);
+ if (error) {
+ printf("Error while getting local store: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Local store path: %s\n", local_store);
+ local_store_proxy = egdbus_store_ms_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (session_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ local_store,
+ NULL, &error);
+ if (error)
+ printf("Failed to create Local store proxy %s\n", error->message);
+ else
+ printf("Created Local Store proxy\n");
+ }
+ /* Local Folder */
+ ret = egdbus_session_cs_call_get_local_folder_sync (session_proxy, "drafts", &local_folder_proxy_path, NULL, &error);
+ if (error) {
+ printf("Error while getting local folder: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\n Got Local Folder Drafts %s\n", local_folder_proxy_path);
+
+ local_folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (session_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ local_folder_proxy_path,
+ NULL, &error);
+ if (error)
+ printf("failed to get local folder drafts: %s\n", error->message);
+ else
+ printf("Got Local Folder Drafts\n");
+ }
+
+ /* append message */
+ char *retuid;
+ GVariant *gv = variant_from_info (info);
+ ret = egdbus_folder_cf_call_append_message_sync (local_folder_proxy, gv, msg, &retuid, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while getting appending msg: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Successfully appended msg: %s\n", retuid);
+ }
+
+ /* Sync */
+ ret = egdbus_folder_cf_call_sync_sync (local_folder_proxy , FALSE, &fg, NULL, &error);
+ if (!ret || error) {
+ printf("Error while syncing folder: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("\nSyncing folder success: %d\n", fg);
+ }
+
+ /* Search by expression */
+ /* serach by uids */
+
+ }
+}
+
+static void
+folder_changed_cb (EGdbusFolderCF *folder_proxy,
+ const gchar *const *added,
+ const gchar *const *removed,
+ const gchar *const *changed,
+ const gchar *const *recent)
+{
+ int i=0;
+
+ printf("Received FOLDER CHANGED event\n");
+
+ printf("Folder: Added uids:\t");
+ while (added[i]) {
+ printf("%s\t", added[i]);
+ i++;
+ }
+ printf("\n");
+
+ i=0;
+ printf("Folder: Removed uids:\t");
+ while (removed[i]) {
+ printf("%s\t", removed[i]);
+ i++;
+ }
+ printf("\n");
+
+ printf("Folder: changed uids:\t");
+ while (changed[i]) {
+ printf("%s\t", changed[i]);
+ i++;
+ }
+ printf("\n");
+
+ printf("Folder: recent uids:\t");
+ while (recent[i]) {
+ printf("%s\t", recent[i]);
+ i++;
+ }
+ printf("\n");
+
+
+}
+
+static GList *
+parse_infos (EGdbusStoreMS *store_proxy, GVariant *var_changes)
+{
+ GList *l = NULL;
+ GVariantIter iter;
+ guint32 u1;
+ gint32 i1, i2;
+ gchar *str1, *str2, *str3;
+ EGdbusFolderCF *inbox_proxy;
+ char *inbox_path;
+ EGdbusFolderCF *folder_proxy;
+ char *folder_proxy_path;
+ GError *error = NULL;
+ GVariant *cf_info;
+ gboolean success = FALSE;
+ char *new_folder_uri;
+
+ if (var_changes == NULL)
+ return NULL;
+
+ g_variant_iter_init (&iter, var_changes);
+ while (g_variant_iter_next (&iter, "(sssuii)", &str1, &str2, &str3, &u1, &i1, &i2)) {
+ printf("uri: %s Folder Name:%s Full Name:%s Flags:%u, UnreadCount%d TotalCount%d\n", str1, str2, str3, u1, i1, i2);
+ }
+
+ /* Get Inbox folder */
+ if (!egdbus_store_ms_call_get_folder_sync (
+ store_proxy,
+ "INBOX", /* Pass the full name */
+ &folder_proxy_path,
+ NULL,
+ &error))
+ printf("Error while getting folder INBOX: %s\n", error->message);
+
+ printf("Folder path for %s\n", folder_proxy_path);
+
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (store_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ folder_proxy_path,
+ NULL, &error);
+ g_signal_connect (folder_proxy , "folder-changed", G_CALLBACK (folder_changed_cb), NULL);
+
+ printf("Success in getting FolderProxy? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+ inbox_proxy = folder_proxy;
+ inbox_path = g_strdup (folder_proxy_path);
+
+#if 1
+ /* Get Inbox API */
+ /* Most providers don't implement Get Inbox */
+ if (!egdbus_store_ms_call_get_inbox_sync (
+ store_proxy,
+ &folder_proxy_path,
+ NULL,
+ &error))
+ printf("Error while getting GET INBOX: %s\n", error->message);
+
+ printf("INBOX path for %s\n", folder_proxy_path);
+ if (!error)
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (store_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ folder_proxy_path,
+ NULL, &error);
+ else
+ g_error_free (error);
+
+ error = NULL;
+ printf("Success in getting FolderProxy for INBOX ? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+# endif
+#if 1
+ /* Get Trash */
+ if (!egdbus_store_ms_call_get_trash_sync (
+ store_proxy,
+ &folder_proxy_path,
+ NULL,
+ &error))
+ printf("Error while getting GET Trash: %s\n", error->message);
+
+ printf("Trash path for %s\n", folder_proxy_path);
+
+ if (!error)
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (store_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ folder_proxy_path,
+ NULL, &error);
+ else
+ g_error_free (error);
+ error = NULL;
+ printf("Success in getting FolderProxy for TRASH ? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+
+ /* Get Junk*/
+ if (!egdbus_store_ms_call_get_junk_sync (
+ store_proxy,
+ &folder_proxy_path,
+ NULL,
+ &error))
+ printf("Error while getting GET Junk: %s\n", error->message);
+
+ printf("Junk path for %s\n", folder_proxy_path);
+
+ if (!error)
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (store_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ folder_proxy_path,
+ NULL, &error);
+ else
+ g_error_free (error);
+ error = NULL;
+ printf("Success in getting FolderProxy for JUNK ? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+
+# endif
+
+ /* Create Folder */
+ if (!egdbus_store_ms_call_create_folder_sync (store_proxy, "", "ATestEmailServer", &cf_info, NULL, &error))
+ printf("Failed to create folder: %s \n", error->message);
+
+ if (error && error->message)
+ g_error_free (error);
+ else {
+ g_variant_iter_init (&iter, cf_info);
+ while (g_variant_iter_next (&iter, "(sssuii)", &str1, &str2, &str3, &u1, &i1, &i2)) {
+ new_folder_uri = str1;
+ printf("NEW FOLDER: uri: %s Folder Name:%s Full Name:%s Flags:%u, UnreadCount%d TotalCount%d\n", str1, str2, str3, u1, i1, i2);
+ /* */
+ /* Get the folder */
+ if (!egdbus_store_ms_call_get_folder_sync (
+ store_proxy,
+ str3, /* Pass the full name */
+ &folder_proxy_path,
+ NULL,
+ &error))
+ printf("Error while getting folder : %s\n", error->message);
+
+ printf("Folder path for %s\n", folder_proxy_path);
+
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (store_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ folder_proxy_path,
+ NULL, &error);
+
+ printf("Success in getting FolderProxy? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+ test_folder_basic (folder_proxy, folder_proxy_path);
+ break;
+
+ }
+
+ }
+ error = NULL;
+
+ /* supports subscription ?*/
+ if (!egdbus_store_ms_call_supports_subscriptions_sync(store_proxy, &success, NULL, &error)) {
+ printf("Unable to check sub: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Store supports subscription: %d\n", success);
+ /* Subscribe Folder */
+ if (!egdbus_store_ms_call_subscribe_folder_sync (store_proxy, "ATestEmailServer", &success, NULL, &error)) {
+ printf("Unable to subscribe: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ /* Can Refresh Folder */
+ if (!egdbus_store_ms_call_can_refresh_folder_sync (store_proxy, cf_info, &success, NULL, &error)) {
+ printf("Unable to check if can refresh: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+
+ } else {
+ printf("Can Refresh Folder\n");
+ }
+
+ /* Transfer one msg */
+ char *uids[2], **retuids;
+ uids[0] = "13989";
+ uids[1] = "13942";
+ uids[2] = NULL;
+
+ if (!egdbus_folder_cf_call_transfer_messages_to_sync (inbox_proxy, &uids, folder_proxy_path, FALSE, &retuids, NULL, NULL))
+ printf("\n Unable to copy \n");
+ else
+ printf("\n COPIED %s\n", retuids[0] ? retuids[0] : "nil");
+
+ test_message_basics (folder_proxy_path, folder_proxy);
+
+#if 0
+ /* Unsubscribe Folder */
+ printf("Folder successfully subscribed: %d\n", success);
+ if (!egdbus_store_ms_call_unsubscribe_folder_sync (store_proxy, "ATestEmailServer", &success, NULL, &error)) {
+ printf("Unable to unsubscribe: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Folder successfully unsubscribed: %d\n", success);
+ }
+# endif
+ }
+ }
+
+
+
+
+ /* Rename Folder */
+ if (!egdbus_store_ms_call_rename_folder_sync (store_proxy, "ATestEmailServer", "ANOTHERTestEmailServer", &success, NULL, &error))
+ printf("Failed to rename folder: %s \n", error->message);
+
+ if (error && error->message)
+ g_error_free (error);
+ else {
+ printf("SUCCESS, renamed folder to ANOTHERTestEmailServer\n");
+ }
+ error = NULL;
+
+
+#if 1
+ /* Delete folder */
+ if (!egdbus_store_ms_call_delete_folder_sync (store_proxy, "ANOTHERTestEmailServer", &success, NULL, &error))
+ printf("Failed to delete folder: %s \n", error->message);
+
+ if (error && error->message)
+ g_error_free (error);
+ else {
+ printf("SUCCESS, delete folder to ANOTHERTestEmailServer\n");
+ }
+ error = NULL;
+# endif
+
+ /* Sync */
+ if (!egdbus_store_ms_call_sync_sync (store_proxy, FALSE, &success, NULL, &error)) {
+ printf("Unable to sync: %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Sync store success\n");
+ }
+
+ /* Noop */
+ if (!egdbus_store_ms_call_noop_sync (store_proxy, &success, NULL, &error)) {
+ printf("Unable to noop : %s\n", error->message);
+ g_error_free (error);
+ error = NULL;
+ } else {
+ printf("Noop store success\n");
+ }
+
+
+ return g_list_reverse (l);
+}
+
+static void
+print_info (GVariant *v, const char *operation)
+{
+ GVariantIter iter;
+ char *str1, *str2, *str3;
+ int i1, i2;
+ guint32 u1;
+
+ g_variant_iter_init (&iter, v);
+ while (g_variant_iter_next (&iter, "(sssuii)", &str1, &str2, &str3, &u1, &i1, &i2)) {
+ if (!str1 || !*str1|| !str2 || !*str2|| !str3 || !*str3) {
+ break;
+ }
+ printf("\n\nSIGNAL: \n%s::::::: uri: %s Folder Name:%s Full Name:%s Flags:%u, UnreadCount%d TotalCount%d\n\n\n", operation, str1, str2, str3, u1, i1, i2);
+ }
+
+}
+
+static void
+folder_opened_cb (EGdbusStoreMS *object, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder Opened");
+}
+static void
+folder_created_cb (EGdbusStoreMS *object, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder Created");
+}
+static void
+folder_deleted_cb (EGdbusStoreMS *object, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder Deleted");
+
+}
+static void
+folder_renamed_cb (EGdbusStoreMS *object, const char *oldname, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder Renamed");
+ printf("Old folder name: %s\n\n\n", oldname);
+
+}
+static void
+folder_subscribed_cb (EGdbusStoreMS *object, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder Subscribed");
+}
+static void
+folder_unsubscribed_cb (EGdbusStoreMS *object, GVariant *v, gpointer data)
+{
+ print_info (v, "Folder UnSubscribed");
+}
+
+static gboolean
+start_test_client (gpointer foo)
+{
+ EAccount *account = e_get_default_account ();
+ const char *uri = e_account_get_string (account, E_ACCOUNT_SOURCE_URL);
+ GError *error = NULL;
+ EGdbusStoreMS *store_proxy;
+ EGdbusFolderCF *folder_proxy;
+
+ char *path;
+ GVariant *infos = NULL;
+
+ /* Get Session */
+ session_proxy = egdbus_session_cs_proxy_new_for_bus_sync (
+ G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ "/org/gnome/evolution/dataserver/Mail/Session",
+ NULL,
+ &error);
+ if (error)
+ printf("ERROR %s\n", error->message);
+ else
+ printf("Success\n");
+
+ /* Get Store */
+ if (!egdbus_session_cs_call_get_store_sync (session_proxy, uri, &path, NULL, &error)) {
+ printf("Get store %s\n", error->message);
+ }
+
+ printf("PATH %s\n", path);
+
+ store_proxy = egdbus_store_ms_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (session_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ path,
+ NULL, &error);
+ if (error)
+ printf("Failed to create store proxy %s\n", error->message);
+
+ /* Get Folder Info */
+ if (!egdbus_store_ms_call_get_folder_info_sync(store_proxy, "", CAMEL_STORE_FOLDER_INFO_RECURSIVE|CAMEL_STORE_FOLDER_INFO_FAST | CAMEL_STORE_FOLDER_INFO_SUBSCRIBED, &infos, NULL, &error))
+ printf("Error %s\n", error->message);
+
+ printf("Registering signalhandlers\n\n");
+ g_signal_connect (store_proxy, "folder-opened", G_CALLBACK (folder_opened_cb), NULL);
+ g_signal_connect (store_proxy, "folder-created", G_CALLBACK (folder_created_cb), NULL);
+ g_signal_connect (store_proxy, "folder-deleted", G_CALLBACK (folder_deleted_cb), NULL);
+ g_signal_connect (store_proxy, "folder-renamed", G_CALLBACK (folder_renamed_cb), NULL);
+ g_signal_connect (store_proxy, "folder-subscribed", G_CALLBACK (folder_subscribed_cb), NULL);
+ g_signal_connect (store_proxy, "folder-unsubscribed", G_CALLBACK (folder_unsubscribed_cb), NULL);
+
+ /* Get SENT folder */
+ if (!egdbus_session_cs_call_get_folder_from_uri_sync (
+ session_proxy,
+ account->sent_folder_uri, /* Pass the full name */
+ &path,
+ NULL,
+ &error))
+ printf("Error while getting folder SENT: %s\n", error->message);
+
+ printf("Folder path for %s\n", path);
+
+ folder_proxy = egdbus_folder_cf_proxy_new_sync (g_dbus_proxy_get_connection (G_DBUS_PROXY (session_proxy)),
+ G_DBUS_PROXY_FLAGS_NONE,
+ E_MAIL_DATA_FACTORY_SERVICE_NAME,
+ path,
+ NULL, &error);
+ printf("Success in getting FolderProxy for SENT ? %p %s\n", folder_proxy, error ? error->message : "Yahoo");
+
+
+ parse_infos (store_proxy, infos);
+
+
+
+ return FALSE;
+}
+#endif
+
+int
+main(int argc, char* argv[])
+{
+ gtk_init_with_args (
+ &argc, &argv,
+ _("- The Evolution Mail Data Server Test Client"),
+ NULL, (gchar *) GETTEXT_PACKAGE, NULL);
+
+ g_type_init ();
+ g_set_prgname ("evolution-mail-test-client");
+ if (!g_thread_supported ()) g_thread_init (NULL);
+
+
+// g_idle_add ((GSourceFunc) start_test_client, NULL);
+ gtk_main ();
+
+ return 0;
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]