Refactored modest_platform_on_new_headers_received().
[modest] / src / maemo / modest-platform.c
index 512ee1b..f325631 100644 (file)
@@ -1336,53 +1336,73 @@ modest_platform_set_update_interval (guint minutes)
        return TRUE;
 }
 
-void 
-modest_platform_on_new_headers_received (TnyList *header_list,
-                                        gboolean show_visual)
+void
+modest_platform_push_email_notification(void)
 {
        gboolean play_sound;
+       ModestWindow *main_window;
+       gboolean screen_on = TRUE, app_in_foreground;
 
        /* 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);
+       /* Get the screen status */
+       main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE);
+       if (main_window)
                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 ());
+       /* 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 */
+       /* 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 */
 #ifdef MODEST_HAVE_MCE
-                       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);
+               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);
 #endif
-               }
+       }
+}
+
+void 
+modest_platform_on_new_headers_received (TnyList *header_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__);
+               return;
+       }
+       
+       if (!show_visual) {
+                modest_platform_push_email_notification ();
                /* We do a return here to avoid indentation with an else */
                return;
        }
 
 #ifdef MODEST_HAVE_HILDON_NOTIFY
+       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);
+
        HildonNotification *notification;
        TnyIterator *iter;
        GSList *notifications_list = NULL;
@@ -1592,7 +1612,6 @@ modest_platform_create_folder_view (TnyFolderStoreQuery *query)
        modest_folder_view_set_style (MODEST_FOLDER_VIEW (widget),
                                      MODEST_FOLDER_VIEW_STYLE_SHOW_ONE);
 
-
        /* Restore settings */
        modest_widget_memory_restore (modest_runtime_get_conf(), 
                                      G_OBJECT (widget),
@@ -1601,12 +1620,28 @@ modest_platform_create_folder_view (TnyFolderStoreQuery *query)
        return widget;
 }
 
+void
+banner_finish (gpointer data, GObject *object)
+{
+       ModestWindowMgr *mgr = (ModestWindowMgr *) data;
+       modest_window_mgr_unregister_banner (mgr);
+       g_object_unref (mgr);
+}
+
 void 
 modest_platform_information_banner (GtkWidget *parent,
                                    const gchar *icon_name,
                                    const gchar *text)
 {
-       hildon_banner_show_information (parent, icon_name, text);
+       GtkWidget *banner;
+       ModestWindowMgr *mgr;
+
+       mgr = modest_runtime_get_window_mgr ();
+       banner = hildon_banner_show_information (parent, icon_name, text);
+
+       modest_window_mgr_register_banner (mgr);
+       g_object_ref (mgr);
+       g_object_weak_ref ((GObject *) banner, banner_finish, mgr);
 }
 
 void
@@ -1951,6 +1986,7 @@ on_conic_device_went_online (TnyMaemoConicDevice *device, const gchar* iap_id, g
        
 void 
 modest_platform_connect_and_perform (GtkWindow *parent_window, 
+                                    gboolean force,
                                     TnyAccount *account, 
                                     ModestConnectedPerformer callback, 
                                     gpointer user_data)
@@ -1959,15 +1995,10 @@ modest_platform_connect_and_perform (GtkWindow *parent_window,
        TnyDevice *device;
        TnyConnectionStatus conn_status;
        OnWentOnlineInfo *info;
-       gboolean user_requested;
        
        device = modest_runtime_get_device();
        device_online = tny_device_is_online (device);
 
-       /* Whether the connection is user requested or automatically
-          requested, for example via D-Bus */
-       user_requested = (parent_window) ? TRUE : FALSE;
-
        /* If there is no account check only the device status */
        if (!account) {
                
@@ -1994,7 +2025,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window,
                        info->callback = callback;
                
                        tny_maemo_conic_device_connect_async (TNY_MAEMO_CONIC_DEVICE (device), NULL,
-                                                             user_requested, on_conic_device_went_online, 
+                                                             force, on_conic_device_went_online, 
                                                              info);
  
                        /* We'll cleanup in on_conic_device_went_online */
@@ -2047,7 +2078,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window,
                 * and the account */
                
                tny_maemo_conic_device_connect_async (TNY_MAEMO_CONIC_DEVICE (device), NULL,
-                                                     user_requested, on_conic_device_went_online, 
+                                                     force, on_conic_device_went_online, 
                                                      info);
                
        } else {
@@ -2066,6 +2097,7 @@ modest_platform_connect_and_perform (GtkWindow *parent_window,
 
 void
 modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, 
+                                              gboolean force,
                                               TnyFolderStore *folder_store, 
                                               ModestConnectedPerformer callback, 
                                               gpointer user_data)
@@ -2107,7 +2139,7 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window,
                }
        }
  
-       modest_platform_connect_and_perform (parent_window, account, callback, user_data);
+       modest_platform_connect_and_perform (parent_window, force, account, callback, user_data);
  
        return;
 }