- if (!account) {
- g_printerr ("modest: failed to get tny account folder'\n", account_name);
- } else {
- gchar * from = modest_account_mgr_get_from_string (account_mgr,
- account_name);
- if (!from) {
- g_printerr ("modest: no from address for account '%s'\n", account_name);
- } else {
- const gchar *cc = NULL;
- const gchar *bcc = NULL;
- const gchar *subject = NULL;
- const gchar *body = NULL;
-
- /* Get the relevant items from the list: */
- GSList *list = list_names_and_values;
- while (list) {
- const gchar * name = (const gchar*)list->data;
- GSList *list_value = g_slist_next (list);
- const gchar * value = (const gchar*)list_value->data;
-
- if (strcmp (name, "cc") == 0) {
- cc = value;
- } else if (strcmp (name, "bcc") == 0) {
- bcc = value;
- } else if (strcmp (name, "subject") == 0) {
- subject = value;
- } else if (strcmp (name, "body") == 0) {
- body = value;
- }
-
- /* Go to the next pair: */
- if (list_value) {
- list = g_slist_next (list_value);
- } else
- list = NULL;
- }
-
- /* Create the message: */
- TnyMsg *msg = modest_tny_msg_new (to, from,
- cc, bcc, subject, body,
- NULL /* attachments */);
-
- if (!msg) {
- g_printerr ("modest: failed to create message\n");
- } else
- {
- /* Add the message to a folder and show its UI for editing: */
- TnyFolder *folder = modest_tny_account_get_special_folder (account,
- TNY_FOLDER_TYPE_DRAFTS);
- if (!folder) {
- g_printerr ("modest: failed to find Drafts folder\n");
- } else {
-
- tny_folder_add_msg (folder, msg, NULL); /* TODO: check err */
-
- ModestWindow *win = modest_msg_edit_window_new (msg, account_name);
- gtk_widget_show_all (GTK_WIDGET (win));
-
- g_object_unref (G_OBJECT(folder));
- }
-
- g_object_unref (G_OBJECT(msg));
- }
-
- g_object_unref (G_OBJECT(account));
+ return result;
+}
+
+static gboolean
+on_idle_mail_to(gpointer user_data)
+{
+ gchar *uri = (gchar*)user_data;
+ GSList *list_names_and_values = NULL;
+ gchar *to = NULL;
+ const gchar *cc = NULL;
+ const gchar *bcc = NULL;
+ const gchar *subject = NULL;
+ const gchar *body = NULL;
+
+ if (!check_and_offer_account_creation ()) {
+ g_idle_add (notify_error_in_dbus_callback, NULL);
+ goto cleanup;
+ }
+
+ /* Get the relevant items from the list: */
+ to = uri_parse_mailto (uri, &list_names_and_values);
+ GSList *list = list_names_and_values;
+ while (list) {
+ GSList *list_value = g_slist_next (list);
+ const gchar * name = (const gchar*)list->data;
+ const gchar * value = (const gchar*)list_value->data;
+
+ if (strcmp (name, "cc") == 0) {
+ cc = value;
+ } else if (strcmp (name, "bcc") == 0) {
+ bcc = value;
+ } else if (strcmp (name, "subject") == 0) {
+ subject = value;
+ } else if (strcmp (name, "body") == 0) {
+ body = value;