#include <tny-list.h>
#include <tny-iterator.h>
#include <tny-simple-list.h>
+#include <tny-camel-imap-store-account.h>
+#include <tny-camel-pop-store-account.h>
#include <libmodest-dbus-client/libmodest-dbus-client.h>
#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)
return string;
}
-
static GList*
add_hit (GList *list, TnyHeader *header, TnyFolder *folder)
{
TnyIterator *piter = tny_list_create_iterator (child_parts);
while (!found && !tny_iterator_is_done (piter)) {
TnyMimePart *pcur = (TnyMimePart *) tny_iterator_get_current (piter);
+ if (pcur) {
+ found = search_mime_part_and_child_parts (pcur, search);
- found = search_mime_part_and_child_parts (pcur, search);
+ g_object_unref (pcur);
+ }
- g_object_unref (pcur);
tny_iterator_next (piter);
}
while (!tny_iterator_is_done (iter)) {
TnyHeader *cur = (TnyHeader *) tny_iterator_get_current (iter);
- time_t t = tny_header_get_date_sent (cur);
+ const time_t t = tny_header_get_date_sent (cur);
gboolean found = FALSE;
+ /* Ignore deleted (not yet expunged) emails: */
+ if (tny_header_get_flags(cur) & TNY_HEADER_FLAG_DELETED)
+ goto go_next;
+
if (search->flags & MODEST_SEARCH_BEFORE)
- if (!(t <= search->before))
+ if (!(t <= search->end_date))
goto go_next;
if (search->flags & MODEST_SEARCH_AFTER)
- if (!(t >= search->after))
+ if (!(t >= search->start_date))
goto go_next;
if (search->flags & MODEST_SEARCH_SIZE)
if (msg) {
g_object_unref (msg);
}
- }
-
- found = search_mime_part_and_child_parts (TNY_MIME_PART (msg),
- search);
- if (found) {
- retval = add_hit (retval, cur, folder);
+ } else {
+
+ found = search_mime_part_and_child_parts (TNY_MIME_PART (msg),
+ search);
+ if (found) {
+ retval = add_hit (retval, cur, folder);
+ }
}
- g_object_unref (msg);
-
+ if (msg)
+ g_object_unref (msg);
}
go_next:
iter = tny_list_create_iterator (folders);
while (!tny_iterator_is_done (iter)) {
- TnyFolder *folder;
- GList *res;
+ TnyFolder *folder = NULL;
+ GList *res = NULL;
folder = TNY_FOLDER (tny_iterator_get_current (iter));
- /* g_debug ("DEBUG: %s: searching folder %s.",
- __FUNCTION__, tny_folder_get_name (folder)); */
+ if (folder) {
+ /* g_debug ("DEBUG: %s: searching folder %s.",
+ __FUNCTION__, tny_folder_get_name (folder)); */
- res = modest_search_folder (folder, search);
+ res = modest_search_folder (folder, search);
- if (res != NULL) {
- if (hits == NULL) {
- hits = res;
- } else {
- hits = g_list_concat (hits, res);
+ if (res != NULL) {
+ if (hits == NULL) {
+ hits = res;
+ } else {
+ hits = g_list_concat (hits, res);
+ }
}
+
+ g_object_unref (folder);
}
- g_object_unref (folder);
tny_iterator_next (iter);
}
g_object_unref (iter);
g_object_unref (folders);
+ /* printf ("DEBUG: %s: hits length = %d\n", __FUNCTION__, g_list_length (hits)); */
return hits;
}
iter = tny_list_create_iterator (accounts);
while (!tny_iterator_is_done (iter)) {
- TnyAccount *account;
- GList *res;
+ TnyAccount *account = NULL;
+ GList *res = NULL;
account = TNY_ACCOUNT (tny_iterator_get_current (iter));
-
- /* g_debug ("DEBUG: %s: Searching account %s",
- __FUNCTION__, tny_account_get_name (account)); */
- res = modest_search_account (account, search);
-
- if (res != NULL) {
-
- if (hits == NULL) {
- hits = res;
- } else {
- hits = g_list_concat (hits, res);
+ if (account) {
+ /* g_debug ("DEBUG: %s: Searching account %s",
+ __FUNCTION__, tny_account_get_name (account)); */
+
+ /* Give the account time to go online if necessary,
+ * for instance if this is immediately after startup,
+ * after D-Bus activation: */
+ modest_platform_check_and_wait_for_account_is_online (account);
+
+ /* Search: */
+ res = modest_search_account (account, search);
+
+ if (res != NULL) {
+ if (hits == NULL) {
+ hits = res;
+ } else {
+ hits = g_list_concat (hits, res);
+ }
}
+
+ g_object_unref (account);
}
- g_object_unref (account);
tny_iterator_next (iter);
}
g_object_unref (accounts);
g_object_unref (iter);
+ /* printf ("DEBUG: %s: end: hits length=%d\n", __FUNCTION__, g_list_length(hits)); */
return hits;
}