Fixes NB#113634, show progress information in Viewer when opening large attachments
[modest] / libmodest-dbus-client / libmodest-dbus-client.c
index 85d9447..35041ac 100644 (file)
@@ -61,60 +61,19 @@ static gchar* get_attachments_string (GSList *attachments)
        
        return attachments_str;
 }
-
-/* TODO: Is this actually used by anything?
- * I guess that everything uses *_compose_mail() instead. murrayc.
- */
+       
 /**
- * libmodest_dbus_client_send_mail:
+ * libmodest_dbus_client_mail_to:
  * @osso_context: a valid #osso_context_t object.
- * @to: The Recipients (From: line)
- * @cc: Recipients for carbon copies
- * @bcc: Recipients for blind carbon copies
- * @subject: Subject line
- * @body: The actual body of the mail to send
- * @attachments: Additional list of attachments
+ * @mailto_uri: A mailto URI.
  * 
  * This function will try to do a remote procedure call (rpc)
- * into modest (or start it if necessary) and send a new 
- * email with the supplied parameters.
+ * into modest (or start it if necessary) and open a composer
+ * window with the supplied parameters prefilled.
  *
  * Return value: Whether or not the rpc call to modest
  * was successfull
  **/
-gboolean
-libmodest_dbus_client_send_mail (osso_context_t *osso_context, const gchar *to, const gchar *cc, 
-       const gchar *bcc, const gchar* subject, const gchar* body, GSList *attachments)
-{
-       gchar *attachments_str = get_attachments_string(attachments);
-       
-       osso_rpc_t retval;
-       const osso_return_t ret = osso_rpc_run_with_defaults(osso_context, 
-                  MODEST_DBUS_NAME, 
-                  MODEST_DBUS_METHOD_SEND_MAIL, &retval, 
-                  DBUS_TYPE_STRING, to, 
-                  DBUS_TYPE_STRING, cc, 
-                  DBUS_TYPE_STRING, bcc, 
-                  DBUS_TYPE_STRING, subject, 
-                  DBUS_TYPE_STRING, body, 
-                  DBUS_TYPE_STRING, attachments_str,
-                  DBUS_TYPE_INVALID);
-               
-       if (ret != OSSO_OK) {
-               printf("debug: %s: osso_rpc_run() failed.\n", __FUNCTION__);
-               return FALSE;
-       } else {
-               printf("debug: %s: osso_rpc_run() succeeded.\n", __FUNCTION__);
-       }
-       
-       osso_rpc_free_val(&retval);
-       
-       g_free (attachments_str);
-       
-       return TRUE;
-}
-       
 gboolean 
 libmodest_dbus_client_mail_to (osso_context_t *osso_context, const gchar *mailto_uri)
 {
@@ -144,8 +103,8 @@ libmodest_dbus_client_mail_to (osso_context_t *osso_context, const gchar *mailto
  * @cc: Recipients for carbon copies
  * @bcc: Recipients for blind carbon copies
  * @subject: Subject line
- * @body: The actual body of the mail to send
- * @attachments: Additional list of attachments
+ * @body: The actual body of the mail to compose.
+ * @attachments: Additional list of attachments. A list of URI strings.
  * 
  * This function will try to do a remote procedure call (rpc)
  * into modest (or start it if necessary) and open a composer
@@ -159,10 +118,10 @@ libmodest_dbus_client_compose_mail (osso_context_t *osso_context, const gchar *t
        const gchar *bcc, const gchar* subject, const gchar* body, GSList *attachments)
 {
        osso_rpc_t retval;
-       
+
        gchar *attachments_str = get_attachments_string(attachments);
 
-       const osso_return_t ret = osso_rpc_run_with_defaults(osso_context, 
+       const osso_return_t ret = osso_rpc_run_with_defaults(osso_context,
                   MODEST_DBUS_NAME, 
                   MODEST_DBUS_METHOD_COMPOSE_MAIL, &retval, 
                   DBUS_TYPE_STRING, to, 
@@ -172,18 +131,19 @@ libmodest_dbus_client_compose_mail (osso_context_t *osso_context, const gchar *t
                   DBUS_TYPE_STRING, body,
                   DBUS_TYPE_STRING, attachments_str,
                   DBUS_TYPE_INVALID);
-               
+
+       g_free (attachments_str);
+
        if (ret != OSSO_OK) {
                printf("debug: %s: osso_rpc_run() failed.\n", __FUNCTION__);
                return FALSE;
        } else {
                printf("debug: %s: osso_rpc_run() succeeded.\n", __FUNCTION__);
        }
-       
+
        osso_rpc_free_val(&retval);
 
-       g_free (attachments_str);
-       
+
        return TRUE;
 }
 
@@ -263,6 +223,30 @@ libmodest_dbus_client_open_default_inbox (osso_context_t *osso_context)
        return TRUE;
 }
 
+gboolean
+libmodest_dbus_client_open_account (osso_context_t *osso_context,
+                                   const gchar *account_id)
+{
+       osso_rpc_t retval;
+       const osso_return_t ret =
+               osso_rpc_run_with_defaults(osso_context,
+                                          MODEST_DBUS_NAME,
+                                          MODEST_DBUS_METHOD_OPEN_ACCOUNT, &retval,
+                                          DBUS_TYPE_STRING, account_id,
+                                          DBUS_TYPE_INVALID);
+
+       if (ret != OSSO_OK) {
+               printf("debug: %s: osso_rpc_run() failed.\n", __FUNCTION__);
+               return FALSE;
+       } else {
+               printf("debug: %s: osso_rpc_run() succeeded.\n", __FUNCTION__);
+       }
+
+       osso_rpc_free_val(&retval);
+
+       return TRUE;
+}
+
 /**
  * libmodest_dbus_client_delete_message:
  * @osso_context: a valid #osso_context_t object.
@@ -617,7 +601,6 @@ libmodest_dbus_client_search (osso_context_t          *osso_ctx,
 
        DBusMessage *msg;
        dbus_bool_t res;
-       DBusError err;
        DBusConnection *con;
        DBusMessageIter iter;
        DBusMessageIter child;
@@ -656,8 +639,8 @@ libmodest_dbus_client_search (osso_context_t          *osso_ctx,
                folder = "";
        }
 
-       sd_v = start_date;
-       ed_v = end_date;
+       sd_v = (dbus_int64_t) start_date;
+       ed_v = (dbus_int64_t) end_date;
        flags_v = (dbus_int32_t) flags;
        size_v = (dbus_uint32_t) min_size;
 
@@ -672,24 +655,30 @@ libmodest_dbus_client_search (osso_context_t          *osso_ctx,
 
        dbus_message_set_auto_start (msg, TRUE);
 
-       dbus_error_init (&err);
-
-       timeout = 1000; //XXX
-       osso_rpc_get_timeout (osso_ctx, &timeout);
+       /* Use a long timeout (2 minutes) because the search currently 
+        * gets folders and messages from the servers. */
+       timeout = 120000; //milliseconds.
+       //osso_rpc_get_timeout (osso_ctx, &timeout);
 
+    /*printf("DEBUG: %s: Before dbus_connection_send_with_reply_and_block().\n", 
+               __FUNCTION__); */
+       /* TODO: Detect the timeout somehow. */
+       DBusError err;
+       dbus_error_init (&err);
        reply = dbus_connection_send_with_reply_and_block (con,
                                                           msg, 
                                                           timeout,
                                                           &err);
+       /* printf("DEBUG: %s: dbus_connection_send_with_reply_and_block() finished.\n", 
+               __FUNCTION__); */
 
        dbus_message_unref (msg);
 
-
-       if (reply == NULL) {
-            //ULOG_ERR_F("dbus_connection_send_with_reply_and_block error: %s", err.message);
-           //XXX to GError?! 
-            return FALSE;
-        }
+       if (!reply) {
+               g_warning("%s: dbus_connection_send_with_reply_and_block() error: %s", 
+                       __FUNCTION__, err.message);
+               return FALSE;
+       }
 
        switch (dbus_message_get_type (reply)) {
 
@@ -895,8 +884,10 @@ libmodest_dbus_client_get_folders (osso_context_t          *osso_ctx,
 
        dbus_message_set_auto_start (msg, TRUE);
 
-       gint timeout = 1000; //XXX
-       osso_rpc_get_timeout (osso_ctx, &timeout);
+       /* Use a long timeout (2 minutes) because the search currently 
+        * gets folders from the servers. */
+       gint timeout = 120000;
+       //osso_rpc_get_timeout (osso_ctx, &timeout);
 
        DBusError err;
        dbus_error_init (&err);
@@ -909,8 +900,8 @@ libmodest_dbus_client_get_folders (osso_context_t          *osso_ctx,
        msg = NULL;
 
        if (reply == NULL) {
-               //ULOG_ERR_F("dbus_connection_send_with_reply_and_block error: %s", err.message);
-               //XXX to GError?! 
+               g_warning("%s: dbus_connection_send_with_reply_and_block() error:\n   %s", 
+                       __FUNCTION__, err.message);
                return FALSE;
        }