New modest_platform_system_banner (show even if no windows visible)
[modest] / src / maemo / modest-platform.c
index 28fc3ab..bb472f1 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <config.h>
 #include <glib/gi18n.h>
+#include <modest-defs.h>
 #include <modest-platform.h>
 #include <modest-runtime.h>
 #include <modest-main-window.h>
@@ -36,6 +37,7 @@
 #include "maemo/modest-maemo-global-settings-dialog.h"
 #include "modest-widget-memory.h"
 #include <modest-hildon-includes.h>
+#include <modest-utils.h>
 #include <modest-maemo-utils.h>
 #include <dbus_api/modest-dbus-callbacks.h>
 #include <maemo/modest-osso-autosave-callbacks.h>
@@ -43,6 +45,8 @@
 #include <tny-maemo-conic-device.h>
 #include <tny-simple-list.h>
 #include <tny-folder.h>
+#include <tny-error.h>
+#include <tny-merge-folder.h>
 #include <tny-camel-imap-store-account.h>
 #include <tny-camel-pop-store-account.h>
 #include <gtk/gtkicontheme.h>
@@ -99,19 +103,27 @@ on_modest_conf_update_interval_changed (ModestConf* self,
 static gboolean
 check_required_files (void)
 {
-       FILE *mcc_file = modest_maemo_open_mcc_mapping_file ();
+       FILE *mcc_file = modest_utils_open_mcc_mapping_file (FALSE,NULL);
        if (!mcc_file) {
                g_printerr ("modest: check for mcc file failed\n");
                return FALSE;
-       } else 
+       } else
                fclose (mcc_file);
-       
+
+
+       mcc_file = modest_utils_open_mcc_mapping_file (TRUE, NULL);
+       if (!mcc_file) {
+               g_printerr ("modest: check for mcc file (for LC_MESSAGES) failed\n");
+               return FALSE;
+       } else
+               fclose (mcc_file);
+
        if (access(MODEST_PROVIDER_DATA_FILE, R_OK) != 0 &&
-           access(MODEST_MAEMO_PROVIDER_DATA_FILE, R_OK) != 0) {
+           access(MODEST_FALLBACK_PROVIDER_DATA_FILE, R_OK) != 0) {
                g_printerr ("modest: cannot find providers data\n");
                return FALSE;
        }
-       
+
        return TRUE;
 }
 
@@ -332,7 +344,7 @@ modest_platform_activate_uri (const gchar *uri)
                        modest_window_mgr_get_main_window (modest_runtime_get_window_mgr(), FALSE);
                hildon_banner_show_information (parent ? GTK_WIDGET(parent): NULL, NULL,
                                                _("mcen_ib_unsupported_link"));
-               g_warning ("%s: cannot open uri '%s'", __FUNCTION__,uri);
+               g_debug ("%s: cannot open uri '%s'", __FUNCTION__,uri);
        } 
        
        return result;
@@ -789,7 +801,7 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
                g_free(real_suggested_name);
 
        if (parent_folder != NULL) {
-               parent_folder = suggested_parent?g_object_ref (suggested_parent): NULL;
+               *parent_folder = suggested_parent?g_object_ref (suggested_parent): NULL;
        }
 
        return result;
@@ -1095,7 +1107,7 @@ modest_platform_set_update_interval (guint minutes)
         * because we will replace it: */
        if (alarm_cookie) {
                if (alarm_event_del(alarm_cookie) != 1)
-                       g_warning ("%s: alarm %d was not on the queue", __FUNCTION__, (int)alarm_cookie);
+                       g_debug ("%s: alarm %d was not on the queue", __FUNCTION__, (int)alarm_cookie);
                alarm_cookie = 0;
                modest_conf_set_int (conf, MODEST_CONF_ALARM_ID, 0, NULL);
        }
@@ -1211,16 +1223,12 @@ modest_platform_push_email_notification(void)
 }
 
 void 
-modest_platform_on_new_headers_received (TnyList *header_list,
+modest_platform_on_new_headers_received (GList *URI_list,
                                         gboolean show_visual)
 {
-       g_return_if_fail (TNY_IS_LIST(header_list));
-
-       if (tny_list_get_length(header_list) == 0) {
-               g_warning ("%s: header list is empty", __FUNCTION__);
+       if (g_list_length (URI_list) == 0)
                return;
-       }
-       
+
        if (!show_visual) {
                 modest_platform_push_email_notification ();
                /* We do a return here to avoid indentation with an else */
@@ -1236,7 +1244,7 @@ modest_platform_on_new_headers_received (TnyList *header_list,
                                           NULL);
 
        HildonNotification *notification;
-       TnyIterator *iter;
+       GList *iter;
        GSList *notifications_list = NULL;
 
        /* Get previous notifications ids */
@@ -1244,35 +1252,25 @@ modest_platform_on_new_headers_received (TnyList *header_list,
                                                   MODEST_CONF_NOTIFICATION_IDS, 
                                                   MODEST_CONF_VALUE_INT, NULL);
 
-       iter = tny_list_create_iterator (header_list);
-       while (!tny_iterator_is_done (iter)) {
-               gchar *url = NULL, *display_address = NULL,  *summary = NULL;
-               const gchar *display_date;
-               TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
-               TnyFolder *folder = tny_header_get_folder (header);
+       iter = URI_list;
+       while (iter) {
+               gchar *display_address = NULL;
                gboolean first_notification = TRUE;
                gint notif_id;
-               gchar *str;
+               ModestMsgNotificationData *data;
 
-               /* constant string, don't free */
-               display_date = modest_text_utils_get_display_date (tny_header_get_date_received (header));
+               data = (ModestMsgNotificationData *) iter->data;
 
-               display_address = tny_header_dup_from (header);
+               display_address = g_strdup (data->from);
                modest_text_utils_get_display_address (display_address); /* string is changed in-place */
-               
-               summary = g_strdup_printf ("%s - %s", display_date, display_address);
-               str = tny_header_dup_subject (header);
-               notification = hildon_notification_new (summary,
-                                                       str,
+
+               notification = hildon_notification_new (display_address,
+                                                       data->subject,
                                                        "qgn_list_messagin",
                                                        "email.arrive");
-               g_free (str);
-               /* Create the message URL */
-               str = tny_header_dup_uid (header);
-               url = g_strdup_printf ("%s/%s", tny_folder_get_url_string (folder), 
-                                      str);
-               g_free (str);
+               g_free (display_address);
 
+               /* Add DBus action */
                hildon_notification_add_dbus_action(notification,
                                                    "default",
                                                    "Cancel",
@@ -1280,7 +1278,7 @@ modest_platform_on_new_headers_received (TnyList *header_list,
                                                    MODEST_DBUS_OBJECT,
                                                    MODEST_DBUS_IFACE,
                                                    MODEST_DBUS_METHOD_OPEN_MESSAGE,
-                                                   G_TYPE_STRING, url,
+                                                   G_TYPE_STRING, data->uri,
                                                    -1);
 
                /* Play sound if the user wants. Show the LED
@@ -1297,7 +1295,7 @@ modest_platform_on_new_headers_received (TnyList *header_list,
                                                            "dialog-type", 4);
                        notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification),
                                                            "led-pattern",
-                                                           MODEST_NEW_MAIL_LIGHTING_PATTERN);                  
+                                                           MODEST_NEW_MAIL_LIGHTING_PATTERN);
                }
 
                /* Notify. We need to do this in an idle because this function
@@ -1310,23 +1308,16 @@ modest_platform_on_new_headers_received (TnyList *header_list,
                /* We don't listen for the "closed" signal, because we
                   don't care about if the notification was removed or
                   not to store the list in gconf */
-       
-               /* Free & carry on */
-               g_free (display_address);
-               g_free (summary);
-               g_free (url);
-               g_object_unref (folder);
-               g_object_unref (header);
-               tny_iterator_next (iter);
+
+               iter = g_list_next (iter);
        }
-       g_object_unref (iter);
 
        /* Save the ids */
        modest_conf_set_list (modest_runtime_get_conf (), MODEST_CONF_NOTIFICATION_IDS, 
                              notifications_list, MODEST_CONF_VALUE_INT, NULL);
 
        g_slist_free (notifications_list);
-       
+
 #endif /*MODEST_HAVE_HILDON_NOTIFY*/
 }
 
@@ -1470,7 +1461,7 @@ modest_platform_information_banner (GtkWidget *parent,
                                    const gchar *icon_name,
                                    const gchar *text)
 {
-       GtkWidget *banner, *banner_parent = NULL;
+       GtkWidget *banner_parent = NULL;
        ModestWindowMgr *mgr = modest_runtime_get_window_mgr ();
 
        if (modest_window_mgr_get_num_windows (mgr) == 0)
@@ -1493,8 +1484,25 @@ modest_platform_information_banner (GtkWidget *parent,
                        return;
        }
 
+       modest_platform_system_banner (banner_parent, icon_name, text);
+
+}
+
+void
+modest_platform_system_banner (GtkWidget *parent,
+                                   const gchar *icon_name,
+                                   const gchar *text)
+{
+       GtkWidget *banner = NULL;
+       ModestWindowMgr *mgr = modest_runtime_get_window_mgr ();
+
+
+       if (parent && GTK_IS_WINDOW (parent)) {
+               if (!gtk_window_is_active (GTK_WINDOW (parent)))
+                       parent = NULL;
+       }
 
-       banner = hildon_banner_show_information (banner_parent, icon_name, text);
+       banner = hildon_banner_show_information (parent, icon_name, text);
 
        modest_window_mgr_register_banner (mgr);
        g_object_ref (mgr);
@@ -1681,8 +1689,8 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name,
        ModestWindow *main_win;
        
        if (!modest_window_mgr_main_window_exists (modest_runtime_get_window_mgr())) {
-               g_warning ("%s: don't show dialogs if there's no main window; assuming 'Cancel'",
-                          __FUNCTION__);
+               g_debug ("%s: don't show dialogs if there's no main window; assuming 'Cancel'",
+                        __FUNCTION__);
                return FALSE;
        }
 
@@ -1727,7 +1735,7 @@ modest_platform_run_alert_dialog (const gchar* prompt,
        ModestWindow *main_win; 
 
        if (!modest_window_mgr_main_window_exists (modest_runtime_get_window_mgr())) {
-               g_warning ("%s:\n'%s'\ndon't show dialogs if there's no main window;"
+               g_debug ("%s:\n'%s'\ndon't show dialogs if there's no main window;"
                           " assuming 'Cancel' for questions, 'Ok' otherwise", prompt, __FUNCTION__);
                return is_question ? FALSE : TRUE;
        }
@@ -1978,17 +1986,21 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window,
                                               gpointer user_data)
 {
        TnyAccount *account = NULL;
-       
-       if (!folder_store) {
+
+       if (!folder_store ||
+           (TNY_IS_MERGE_FOLDER (folder_store) &&
+            (tny_folder_get_folder_type (TNY_FOLDER(folder_store)) == TNY_FOLDER_TYPE_OUTBOX))) {
+
                /* We promise to instantly perform the callback, so ... */
                if (callback) {
-                       callback (FALSE, NULL, parent_window, NULL, user_data);
-               }
-               return; 
-               
-               /* Original comment: Maybe it is something local. */
-               /* PVH's comment: maybe we should KNOW this in stead of assuming? */
-               
+                       GError *error = NULL;
+                       g_set_error (&error, TNY_ERROR_DOMAIN, TNY_SERVICE_ERROR_UNKNOWN,
+                                    "Unable to move or not found folder");
+                       callback (FALSE, error, parent_window, NULL, user_data);
+                       g_error_free (error);
+               }
+               return;
+
        } else if (TNY_IS_FOLDER (folder_store)) {
                /* Get the folder's parent account: */
                account = tny_folder_get_account (TNY_FOLDER (folder_store));
@@ -2108,7 +2120,7 @@ modest_platform_check_memory_low (ModestWindow *win,
        if (win && lowmem && visuals)
                modest_platform_run_information_dialog (
                        GTK_WINDOW(win),
-                       dgettext("ke-recv","memr_ib_operation_disabled"),
+                       _KR("memr_ib_operation_disabled"),
                        TRUE);
 
        if (lowmem)
@@ -2140,12 +2152,14 @@ modest_platform_run_folder_details_dialog (GtkWindow *parent_window,
 
 void
 modest_platform_run_header_details_dialog (GtkWindow *parent_window,
-                                          TnyHeader *header)
+                                          TnyHeader *header,
+                                          gboolean async_get_size,
+                                          TnyMsg *msg)
 {
        GtkWidget *dialog;
        
        /* Create dialog */
-       dialog = modest_details_dialog_new_with_header (parent_window, header);
+       dialog = modest_details_dialog_new_with_header (parent_window, header, TRUE);
 
        /* Run dialog */
        modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), 
@@ -2241,6 +2255,9 @@ modest_platform_get_list_to_move (ModestWindow *window)
                        tny_list_prepend (list, G_OBJECT (header));
                        g_object_unref (header);
                }
+       } else {
+               g_return_val_if_reached (NULL);
        }
+
        return list;
 }