* Fixes NB#78357, new mail sound is played now with IMAP IDLE events
[modest] / src / maemo / modest-platform.c
index 9127de6..8b0f3b5 100644 (file)
@@ -40,6 +40,7 @@
 #include <dbus_api/modest-dbus-callbacks.h>
 #include <maemo/modest-osso-autosave-callbacks.h>
 #include <libosso.h>
+#include <mce/dbus-names.h>
 #include <tny-maemo-conic-device.h>
 #include <tny-simple-list.h>
 #include <tny-folder.h>
@@ -55,6 +56,7 @@
 #include <libgnomevfs/gnome-vfs-mime-utils.h>
 #include <modest-account-settings-dialog.h>
 #include <maemo/easysetup/modest-easysetup-wizard.h>
+#include <hildon/hildon-sound.h>
 
 #ifdef MODEST_HAVE_ABOOK
 #include <libosso-abook/osso-abook.h>
@@ -67,6 +69,8 @@
 
 #define HILDON_OSSO_URI_ACTION "uri-action"
 #define URI_ACTION_COPY "copy:"
+#define MODEST_NEW_MAIL_SOUND_FILE "/usr/share/sounds/ui-new_email.wav"
+#define MODEST_NEW_MAIL_LIGHTING_PATTERN "PatternCommunicationEmail"
 
 static void    
 on_modest_conf_update_interval_changed (ModestConf* self, 
@@ -335,7 +339,7 @@ modest_platform_activate_file (const gchar *path, const gchar *mime_type)
        DBusConnection *con;
        gchar *uri_path = NULL;
        
-       uri_path = g_strconcat ("file://", path, NULL); 
+       uri_path = gnome_vfs_get_uri_from_local_path (path);    
        con = osso_get_dbus_connection (modest_maemo_utils_get_osso_context());
        
        if (mime_type)
@@ -477,7 +481,7 @@ modest_platform_show_uri_popup (const gchar *uri)
 
 
 GdkPixbuf*
-modest_platform_get_icon (const gchar *name)
+modest_platform_get_icon (const gchar *name, guint icon_size)
 {
        GError *err = NULL;
        GdkPixbuf* pixbuf = NULL;
@@ -491,20 +495,8 @@ modest_platform_get_icon (const gchar *name)
        if (!name || strlen(name) == 0)
                return NULL;
        
-#if 0 /* do we still need this? */
-       if (g_str_has_suffix (name, ".png")) { /*FIXME: hack*/
-               pixbuf = gdk_pixbuf_new_from_file (name, &err);
-               if (!pixbuf) {
-                       g_printerr ("modest: error loading icon '%s': %s\n",
-                                   name, err->message);
-                       g_error_free (err);
-                       return NULL;
-               }
-               return pixbuf;
-       }
-#endif /* */
        current_theme = gtk_icon_theme_get_default ();
-       pixbuf = gtk_icon_theme_load_icon (current_theme, name, 26,
+       pixbuf = gtk_icon_theme_load_icon (current_theme, name, icon_size,
                                           GTK_ICON_LOOKUP_NO_SVG,
                                           &err);
        if (!pixbuf) {
@@ -643,7 +635,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window,
                    MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT);
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_sender_recipient"),
-                                                           SORT_ID_NUM - 1);
+                                                           SORT_ID_NUM);
        if (outgoing) {
                sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_TO_COLUMN;
                sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT;
@@ -653,7 +645,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window,
        }
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_date"),
-                                                           SORT_ID_NUM - 1);
+                                                           SORT_ID_NUM);
        if (outgoing) {
                sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN;
                sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE;
@@ -664,7 +656,7 @@ launch_sort_headers_dialog (GtkWindow *parent_window,
        default_key = sort_key;
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_subject"),
-                                                           SORT_ID_NUM -1);
+                                                           SORT_ID_NUM);
        sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_SUBJECT_COLUMN;
        if (outgoing)
                sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT;
@@ -672,18 +664,18 @@ launch_sort_headers_dialog (GtkWindow *parent_window,
                sort_ids[sort_key] = MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN;
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_attachment"),
-                                                           SORT_ID_NUM - 1);
+                                                           SORT_ID_NUM);
        sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN;
        sort_ids[sort_key] = TNY_HEADER_FLAG_ATTACHMENTS;
        attachments_sort_id = sort_key;
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_size"),
-                                                           SORT_ID_NUM - 1);
+                                                           SORT_ID_NUM);
        sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN;
        sort_ids[sort_key] = 0;
 
        sort_key = checked_hildon_sort_dialog_add_sort_key (dialog, _("mcen_li_sort_priority"),
-                                                           SORT_ID_NUM - 1);
+                                                           SORT_ID_NUM);
        sort_model_ids[sort_key] = TNY_GTK_HEADER_LIST_MODEL_FLAGS_COLUMN;
        sort_ids[sort_key] = TNY_HEADER_FLAG_PRIORITY_MASK;
        priority_sort_id = sort_key;
@@ -1341,8 +1333,49 @@ modest_platform_set_update_interval (guint minutes)
 }
 
 void 
-modest_platform_on_new_headers_received (TnyList *header_list) 
+modest_platform_on_new_headers_received (TnyList *header_list,
+                                        gboolean show_visual)
 {
+       gboolean play_sound;
+
+       /* Check whether or not we should play a sound */
+       play_sound = modest_conf_get_bool (modest_runtime_get_conf (),
+                                          MODEST_CONF_PLAY_SOUND_MSG_ARRIVE,
+                                          NULL);
+
+       if (!show_visual) {
+               gboolean screen_on, app_in_foreground;
+               ModestWindow *main_window;
+
+               /* Get the screen status */
+               main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE);
+               screen_on = modest_main_window_screen_is_on (MODEST_MAIN_WINDOW (main_window));
+
+               /* Get the window status */
+               app_in_foreground = hildon_program_get_is_topmost (hildon_program_get_instance ());
+
+               /* If the screen is on and the app is in the
+                  foreground we don't show anything */
+               if (!(screen_on && app_in_foreground)) {
+                       /* Play a sound */
+                       if (play_sound)
+                               hildon_play_system_sound (MODEST_NEW_MAIL_SOUND_FILE);
+                       
+                       /* Activate LED. This must be deactivated by
+                          modest_platform_remove_new_mail_notifications */
+                       osso_rpc_run_system (modest_maemo_utils_get_osso_context (),
+                                            MCE_SERVICE,
+                                            MCE_REQUEST_PATH,
+                                            MCE_REQUEST_IF,
+                                            MCE_ACTIVATE_LED_PATTERN,
+                                            NULL,
+                                            DBUS_TYPE_STRING, MODEST_NEW_MAIL_LIGHTING_PATTERN,
+                                            DBUS_TYPE_INVALID);
+               }
+               /* We do a return here to avoid indentation with an else */
+               return;
+       }
+
 #ifdef MODEST_HAVE_HILDON_NOTIFY
        HildonNotification *notification;
        TnyIterator *iter;
@@ -1391,11 +1424,9 @@ modest_platform_on_new_headers_received (TnyList *header_list)
                   pattern. Show and play just one */
                if (G_UNLIKELY (first_notification)) {
                        first_notification = FALSE;
-                       if (modest_conf_get_bool (modest_runtime_get_conf (),
-                                                 MODEST_CONF_PLAY_SOUND_MSG_ARRIVE,
-                                                 NULL))  {
+                       if (play_sound)  {
                                notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification),
-                                                                   "sound-file", "/usr/share/sounds/ui-new_email.wav");
+                                                                   "sound-file", MODEST_NEW_MAIL_SOUND_FILE);
                        }
 
                        /* Set the led pattern */
@@ -1403,7 +1434,7 @@ modest_platform_on_new_headers_received (TnyList *header_list)
                                                            "dialog-type", 4);
                        notify_notification_set_hint_string(NOTIFY_NOTIFICATION (notification),
                                                            "led-pattern",
-                                                           "PatternCommunicationEmail");                       
+                                                           MODEST_NEW_MAIL_LIGHTING_PATTERN);                  
                }
 
                /* Notify. We need to do this in an idle because this function
@@ -1437,8 +1468,20 @@ modest_platform_on_new_headers_received (TnyList *header_list)
 }
 
 void
-modest_platform_remove_new_mail_notifications (void) 
+modest_platform_remove_new_mail_notifications (gboolean only_visuals) 
 {
+       if (only_visuals) {
+               osso_rpc_run_system (modest_maemo_utils_get_osso_context (),
+                                    MCE_SERVICE,
+                                    MCE_REQUEST_PATH,
+                                    MCE_REQUEST_IF,
+                                    MCE_DEACTIVATE_LED_PATTERN,
+                                    NULL,
+                                    DBUS_TYPE_STRING, MODEST_NEW_MAIL_LIGHTING_PATTERN,
+                                    DBUS_TYPE_INVALID);
+               return;
+       }
+
 #ifdef MODEST_HAVE_HILDON_NOTIFY
        GSList *notif_list = NULL;
 
@@ -1558,6 +1601,17 @@ modest_platform_information_banner (GtkWidget *parent,
        hildon_banner_show_information (parent, icon_name, text);
 }
 
+void
+modest_platform_information_banner_with_timeout (GtkWidget *parent,
+                                                const gchar *icon_name,
+                                                const gchar *text,
+                                                gint timeout)
+{
+       GtkWidget *banner;
+       banner = hildon_banner_show_information (parent, icon_name, text);
+       hildon_banner_set_timeout(HILDON_BANNER(banner), timeout);
+}
+
 GtkWidget *
 modest_platform_animation_banner (GtkWidget *parent,
                                  const gchar *animation_name,
@@ -2004,9 +2058,9 @@ modest_platform_connect_and_perform (GtkWindow *parent_window,
 
 void
 modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, 
-                                                           TnyFolderStore *folder_store, 
-                                                           ModestConnectedPerformer callback, 
-                                                           gpointer user_data)
+                                              TnyFolderStore *folder_store, 
+                                              ModestConnectedPerformer callback, 
+                                              gpointer user_data)
 {
        TnyAccount *account = NULL;