+ } else {
+ gchar *str;
+ str = tny_header_dup_subject (cur);
+ g_debug ("Searching in %s\n", str);
+ g_free (str);
+
+ found = search_mime_part_and_child_parts (TNY_MIME_PART (msg),
+ helper->search);
+ if (found) {
+ helper->msg_hits = add_hit (helper->msg_hits, cur, folder);
+ }
+ }
+
+ if (msg)
+ g_object_unref (msg);
+ }
+ go_next:
+ g_object_unref (cur);
+ tny_iterator_next (iter);
+ }
+
+ /* Frees */
+ g_object_unref (iter);
+ end:
+ if (headers)
+ g_object_unref (headers);
+
+ /* Check search finished */
+ tny_list_remove (helper->all_folders, G_OBJECT (folder));
+ if (tny_list_get_length (helper->all_folders) == 0) {
+ /* callback */
+ helper->callback (helper->msg_hits, helper->user_data);
+
+ /* free helper */
+ g_object_unref (helper->all_folders);
+ g_list_free (helper->msg_hits);
+ g_slice_free (SearchHelper, helper);
+ } else {
+ search_next_folder (helper);
+ }
+}
+
+static void
+_search_folder (TnyFolder *folder,
+ SearchHelper *helper)
+{
+ TnyList *list = NULL;
+
+ g_debug ("%s: searching folder %s.", __FUNCTION__, tny_folder_get_name (folder));
+
+ /* 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 (helper->search->folder && strlen (helper->search->folder)) {
+ if (!strcmp (helper->search->folder, "outbox")) {
+ if (modest_tny_folder_guess_folder_type (folder) != TNY_FOLDER_TYPE_OUTBOX) {
+ modest_search_folder_get_headers_cb (folder, TRUE, NULL, NULL, helper);
+ return;
+ }
+ } else if (strcmp (tny_folder_get_id (folder), helper->search->folder) != 0) {
+ modest_search_folder_get_headers_cb (folder, TRUE, NULL, NULL, helper);
+ return;
+ }
+ }
+
+#ifdef MODEST_HAVE_OGS
+ if (helper->search->flags & MODEST_SEARCH_USE_OGS) {
+
+ if (helper->search->text_searcher == NULL && helper->search->query != NULL) {
+ OgsTextSearcher *text_searcher;
+
+ text_searcher = ogs_text_searcher_new (FALSE);
+ ogs_text_searcher_parse_query (text_searcher, helper->search->query);
+ helper->search->text_searcher = text_searcher;
+ }
+ }
+#endif
+ list = tny_simple_list_new ();
+ /* Get the headers */
+ tny_folder_get_headers_async (folder, list, FALSE,
+ modest_search_folder_get_headers_cb,
+ NULL, helper);
+}