X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-search.c;h=477638f4c79239ca73268b83e3fb12dac7b25d64;hb=27523b2f2982bfae1a25fd79555c2fb67c548332;hp=c30b3004b294b98cef4f1a57209b87be79887e66;hpb=b2cb8780e917149c36a7d610d248add3edebf9f9;p=modest diff --git a/src/modest-search.c b/src/modest-search.c index c30b300..477638f 100644 --- a/src/modest-search.c +++ b/src/modest-search.c @@ -43,6 +43,8 @@ #include #include #include +#include +#include #include @@ -52,6 +54,7 @@ #include "modest-tny-account.h" #include "modest-search.h" #include "modest-runtime.h" +#include "modest-platform.h" static gchar * g_strdup_or_null (const gchar *str) @@ -65,120 +68,6 @@ g_strdup_or_null (const gchar *str) return string; } -typedef struct -{ - GMainLoop* loop; - TnyAccount *account; - gboolean is_online; - gint count_tries; -} UtilIdleData; - -#define NUMBER_OF_TRIES 10 /* Try approx every second, ten times. */ - -static gboolean -on_timeout_check_account_is_online(gpointer user_data) -{ - printf ("DEBUG: %s:\n", __FUNCTION__); - UtilIdleData *data = (UtilIdleData*)user_data; - - if (!data) { - g_warning ("%s: data is NULL.\n", __FUNCTION__); - } - - if (!(data->account)) { - g_warning ("%s: data->account is NULL.\n", __FUNCTION__); - } - - if (data && data->account) { - printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n", __FUNCTION__, tny_account_get_connection_status (data->account)); - } - - gboolean stop_trying = FALSE; - if (data && data->account && - (tny_account_get_connection_status (data->account) == TNY_CONNECTION_STATUS_CONNECTED) ) - { - data->is_online = TRUE; - - stop_trying = TRUE; - } - else { - /* Give up if we have tried too many times: */ - if (data->count_tries >= NUMBER_OF_TRIES) - { - stop_trying = TRUE; - } - else { - /* Wait for another timeout: */ - ++(data->count_tries); - } - } - - if (stop_trying) { - /* Allow the function that requested this idle callback to continue: */ - if (data->loop) - g_main_loop_quit (data->loop); - - if (data->account) - g_object_unref (data->account); - - return FALSE; /* Don't call this again. */ - } else { - return TRUE; /* Call this timeout callback again. */ - } -} - -/* Return TRUE immediately if the account is already online, - * otherwise check every second for NUMBER_OF_TRIES seconds and return TRUE as - * soon as the account is online, or FALSE if the account does - * not become online in the NUMBER_OF_TRIES seconds. - * This is useful when the D-Bus method was run immediately after - * the application was started (when using D-Bus activation), - * because the account usually takes a short time to go online. - * The return value is maybe not very useful. - */ -static gboolean -check_and_wait_for_account_is_online(TnyAccount *account) -{ - g_return_val_if_fail (account, FALSE); - - printf ("DEBUG: %s: account id=%s\n", __FUNCTION__, tny_account_get_id (account)); - - if (!tny_device_is_online (modest_runtime_get_device())) { - printf ("DEBUG: %s: device is offline.\n", __FUNCTION__); - return FALSE; - } - - printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n", __FUNCTION__, tny_account_get_connection_status (account)); - - /* TODO: The local_folders account never seems to leave TNY_CONNECTION_STATUS_INIT, - * so we wait unnecessarily, - * but that enum value isn't enough to get a message list from POP and IMAP. */ - if (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_CONNECTED) - return TRUE; - - /* This blocks on the result: */ - UtilIdleData *data = g_slice_new0 (UtilIdleData); - data->is_online = FALSE; - data->account = account; - g_object_ref (data->account); - data->count_tries = 0; - - GMainContext *context = NULL; /* g_main_context_new (); */ - data->loop = g_main_loop_new (context, FALSE /* not running */); - - g_timeout_add (1000, &on_timeout_check_account_is_online, data); - - /* This main loop will run until the idle handler has stopped it: */ - g_main_loop_run (data->loop); - - g_main_loop_unref (data->loop); - /* g_main_context_unref (context); */ - - g_slice_free (UtilIdleData, data); - - return data->is_online; -} - static GList* add_hit (GList *list, TnyHeader *header, TnyFolder *folder) { @@ -705,7 +594,7 @@ modest_search_all_accounts (ModestSearch *search) /* Give the account time to go online if necessary, * for instance if this is immediately after startup, * after D-Bus activation: */ - check_and_wait_for_account_is_online (account); + modest_platform_check_and_wait_for_account_is_online (account); /* Search: */ res = modest_search_account (account, search);