#include <tny-list.h>
#include <tny-iterator.h>
#include <tny-simple-list.h>
-
-#include <libmodest-dbus-client/libmodest-dbus-client.h>
+#include <tny-camel-imap-store-account.h>
+#include <tny-camel-pop-store-account.h>
#include "modest-text-utils.h"
#include "modest-account-mgr.h"
#include "modest-tny-account-store.h"
#include "modest-tny-account.h"
+#include "modest-tny-folder.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)
{
- ModestSearchHit *hit;
+ ModestSearchResultHit *hit;
TnyHeaderFlags flags;
char *furl;
char *msg_url;
const char *subject;
const char *sender;
- hit = g_slice_new0 (ModestSearchHit);
+ hit = g_slice_new0 (ModestSearchResultHit);
furl = tny_folder_get_url_string (folder);
printf ("DEBUG: %s: folder URL=%s\n", __FUNCTION__, furl);
hit->msize = tny_header_get_message_size (header);
hit->has_attachment = flags & TNY_HEADER_FLAG_ATTACHMENTS;
hit->is_unread = ! (flags & TNY_HEADER_FLAG_SEEN);
- hit->timestamp = tny_header_get_date_received (header);
+ hit->timestamp = MIN (tny_header_get_date_received (header), tny_header_get_date_sent (header));
return g_list_prepend (list, hit);
}
buffer,
TRUE);
- if (found) {
+ if ((found)||(nread == 0)) {
break;
}
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);
}
/* Check that we should be searching this folder. */
/* Note that we don't try to search sub-folders.
* Maybe we should, but that should be specified. */
- if (search->folder && strlen (search->folder) && (strcmp (tny_folder_get_id (folder), search->folder) != 0))
- return NULL;
+ if (search->folder && strlen (search->folder)) {
+ if (!strcmp (search->folder, "outbox")) {
+ if (modest_tny_folder_guess_folder_type (folder) != TNY_FOLDER_TYPE_OUTBOX) {
+ return NULL;
+ }
+ } else if (strcmp (tny_folder_get_id (folder), search->folder) != 0) {
+ return NULL;
+ }
+ }
GList *retval = NULL;
TnyIterator *iter = NULL;
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)
retval = add_hit (retval, cur, folder);
}
}
+
if (msg)
g_object_unref (msg);
}
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);
}
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 (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);
- if (res != NULL) {
+ /* Search: */
+ res = modest_search_account (account, search);
- 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 (account);
+ g_object_unref (account);
+ }
+
tny_iterator_next (iter);
}