Converted libmodest-dbus-client into a new library package. Modest will
[modest] / src / modest-utils.c
index aac37ef..8df81af 100644 (file)
@@ -36,6 +36,7 @@
 #include <tny-fs-stream.h>
 #include <tny-camel-account.h>
 #include <tny-status.h>
+#include <tny-camel-send-queue.h>
 #include <tny-camel-transport-account.h>
 #include <tny-camel-imap-store-account.h>
 #include <tny-camel-pop-store-account.h>
@@ -70,7 +71,7 @@ modest_utils_folder_writable (const gchar *filename)
        if (!filename)
                return FALSE;
 
-       if (g_strncasecmp (filename, "obex", 4) != 0) {
+       if (g_ascii_strncasecmp (filename, "obex", 4) != 0) {
                GnomeVFSFileInfo *folder_info = NULL;
                GnomeVFSResult result = GNOME_VFS_OK;
                GnomeVFSURI *uri = NULL;
@@ -105,16 +106,20 @@ modest_utils_folder_writable (const gchar *filename)
 gboolean
 modest_utils_file_exists (const gchar *filename)
 {
-       GnomeVFSURI *uri = NULL;
        gboolean result = FALSE;
+       gchar *path;
 
        g_return_val_if_fail (filename, FALSE);
 
-       uri = gnome_vfs_uri_new (filename);
-       if (uri) {
-               result = gnome_vfs_uri_exists (uri);
-               gnome_vfs_uri_unref (uri);
-       }
+       path = strstr (filename, "file://");
+       if (!path)
+               path = (gchar *) filename;
+       else
+               path = (gchar *) filename + strlen ("file://");
+
+       if (g_access (path, F_OK) == 0)
+               result = TRUE;
+
        return result;
 }
 
@@ -123,19 +128,23 @@ modest_utils_create_temp_stream (const gchar *orig_name, const gchar *hash_base,
 {
        gint fd;
        gchar *filepath = NULL;
-       gchar *tmpdir;
+       gchar *tmpdir, *tmp;
        guint hash_number;
 
        /* hmmm... maybe we need a modest_text_utils_validate_file_name? */
        g_return_val_if_fail (orig_name && strlen(orig_name) != 0, NULL);
 
-       if (strlen(orig_name) > 200) {
+       tmp = g_uri_escape_string (orig_name, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH_ELEMENT, FALSE);
+
+       if (strlen(tmp) > 200) {
+               g_free (tmp);
                g_warning ("%s: filename too long ('%s')",
                           __FUNCTION__, orig_name);
                return NULL;
        }
 
-       if (g_strstr_len (orig_name, strlen(orig_name), "/") != NULL) {
+       if (g_strstr_len (tmp, strlen (tmp), "/") != NULL) {
+               g_free (tmp);
                g_warning ("%s: filename contains '/' character(s) (%s)",
                           __FUNCTION__, orig_name);
                return NULL;
@@ -155,15 +164,15 @@ modest_utils_create_temp_stream (const gchar *orig_name, const gchar *hash_base,
                return NULL;
        }
 
-       filepath = g_strconcat (tmpdir, "/", orig_name, NULL);
+       filepath = g_build_filename (tmpdir, tmp, NULL);
+       g_free (tmp);
 
        /* if file exists, first we try to remove it */
-       if (modest_utils_file_exists (filepath)) {
+       if (g_access (filepath, F_OK) == 0)
                g_unlink (filepath);
-       }
 
        /* don't overwrite if it already exists, even if it is writable */
-       if (modest_utils_file_exists (filepath)) {
+       if (g_access (filepath, F_OK) == 0) {
                if (path!=NULL) {
                        *path = filepath;
                } else {
@@ -1130,6 +1139,8 @@ free_notification_data (gpointer data,
        g_free (notification_data->from);
        g_free (notification_data->subject);
        g_free (notification_data->uri);
+
+       g_slice_free (ModestMsgNotificationData, notification_data);
 }
 
 void
@@ -1140,3 +1151,27 @@ modest_utils_free_notification_list (GList *notification_list)
        g_list_foreach (notification_list, free_notification_data, NULL);
        g_list_free (notification_list);
 }
+
+void
+modest_utils_flush_send_queue (const gchar *account_id)
+{
+       TnyTransportAccount *account;
+
+       /* Get the transport account */
+       account = (TnyTransportAccount *)
+               modest_tny_account_store_get_server_account (modest_runtime_get_account_store (),
+                                                            account_id,
+                                                            TNY_ACCOUNT_TYPE_TRANSPORT);
+       if (account) {
+               ModestMailOperation *wakeup_op;
+               ModestTnySendQueue *send_queue = modest_runtime_get_send_queue (account, TRUE);
+
+               /* Flush it! */
+               wakeup_op = modest_mail_operation_new (NULL);
+               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
+                                                wakeup_op);
+               modest_mail_operation_queue_wakeup (wakeup_op, send_queue);
+
+               g_object_unref (account);
+       }
+}