aboutsummaryrefslogtreecommitdiffstats
path: root/modules/mail/e-mail-shell-view-private.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-09-03 03:21:35 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-09-03 03:26:49 +0800
commit53268d5516083c47607dbd3acbbd6bafd6d15747 (patch)
treec2a35758d36f00a2ce51633674c811eb1c5070ba /modules/mail/e-mail-shell-view-private.c
parent5cbcdddfe769c0df81122b8d4944507f4739a618 (diff)
downloadgsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar.gz
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar.bz2
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar.lz
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar.xz
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.tar.zst
gsoc2013-evolution-53268d5516083c47607dbd3acbbd6bafd6d15747.zip
Introduce an EShellView::execute-search signal.
This addresses bug #593896 but is also a cleaner design than before. It introduces an EShellView::execute-search signal and renames the "search-execute" action to "search-quick" to clarify that it's only meant for the "quick" search bar in the main window. Shell view subclasses should implement the execute_search() method to actually execute a search. e_shell_view_execute_search() emits the new signal.
Diffstat (limited to 'modules/mail/e-mail-shell-view-private.c')
-rw-r--r--modules/mail/e-mail-shell-view-private.c244
1 files changed, 0 insertions, 244 deletions
diff --git a/modules/mail/e-mail-shell-view-private.c b/modules/mail/e-mail-shell-view-private.c
index 067900b5c2..984c3acf27 100644
--- a/modules/mail/e-mail-shell-view-private.c
+++ b/modules/mail/e-mail-shell-view-private.c
@@ -491,250 +491,6 @@ e_mail_shell_view_restore_state (EMailShellView *mail_shell_view)
g_free (group_name);
}
-void
-e_mail_shell_view_execute_search (EMailShellView *mail_shell_view)
-{
- EShell *shell;
- EShellView *shell_view;
- EShellWindow *shell_window;
- EShellContent *shell_content;
- EShellSettings *shell_settings;
- EMFormatHTMLDisplay *html_display;
- EMailShellContent *mail_shell_content;
- MessageList *message_list;
- FilterRule *rule;
- EMailReader *reader;
- CamelFolder *folder;
- GtkAction *action;
- GtkTreeModel *model;
- GtkTreePath *path;
- GtkTreeIter tree_iter;
- GString *string;
- GList *iter;
- GSList *search_strings = NULL;
- const gchar *folder_uri;
- const gchar *text;
- gboolean valid;
- gchar *query;
- gchar *temp;
- gchar *tag;
- gint value;
-
- g_return_if_fail (E_IS_MAIL_SHELL_VIEW (mail_shell_view));
-
- shell_view = E_SHELL_VIEW (mail_shell_view);
- shell_window = e_shell_view_get_shell_window (shell_view);
- shell_content = e_shell_view_get_shell_content (shell_view);
-
- shell = e_shell_window_get_shell (shell_window);
- shell_settings = e_shell_get_shell_settings (shell);
-
- mail_shell_content = mail_shell_view->priv->mail_shell_content;
-
- reader = E_MAIL_READER (shell_content);
- html_display = e_mail_reader_get_html_display (reader);
- message_list = e_mail_reader_get_message_list (reader);
-
- folder_uri = message_list->folder_uri;
- folder = message_list->folder;
-
- /* This returns a new object reference. */
- model = e_shell_settings_get_object (
- shell_settings, "mail-label-list-store");
-
- text = e_shell_content_get_search_text (shell_content);
- if (text == NULL || *text == '\0') {
- query = g_strdup ("");
- goto filter;
- }
-
- /* Replace variables in the selected rule with the
- * current search text and extract a query string. */
-
- action = ACTION (MAIL_SEARCH_SUBJECT_OR_SENDER_CONTAINS);
- value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
- g_return_if_fail (value >= 0 && value < MAIL_NUM_SEARCH_RULES);
- rule = mail_shell_view->priv->search_rules[value];
-
- for (iter = rule->parts; iter != NULL; iter = iter->next) {
- FilterPart *part = iter->data;
- FilterElement *element = NULL;
-
- if (strcmp (part->name, "subject") == 0)
- element = filter_part_find_element (part, "subject");
- else if (strcmp (part->name, "body") == 0)
- element = filter_part_find_element (part, "word");
- else if (strcmp (part->name, "sender") == 0)
- element = filter_part_find_element (part, "sender");
- else if (strcmp (part->name, "to") == 0)
- element = filter_part_find_element (part, "recipient");
-
- if (strcmp (part->name, "body") == 0) {
- struct _camel_search_words *words;
- gint ii;
-
- words = camel_search_words_split ((guchar *) text);
- for (ii = 0; ii < words->len; ii++)
- search_strings = g_slist_prepend (
- search_strings, g_strdup (
- words->words[ii]->word));
- camel_search_words_free (words);
- }
-
- if (element != NULL) {
- FilterInput *input = FILTER_INPUT (element);
- filter_input_set_value (input, text);
- }
- }
-
- string = g_string_sized_new (1024);
- filter_rule_build_code (rule, string);
- query = g_string_free (string, FALSE);
-
-filter:
-
- /* Apply selected filter. */
-
- value = e_shell_content_get_filter_value (shell_content);
- switch (value) {
- case MAIL_FILTER_ALL_MESSAGES:
- break;
-
- case MAIL_FILTER_UNREAD_MESSAGES:
- temp = g_strdup_printf (
- "(and %s (match-all (not "
- "(system-flag \"Seen\"))))", query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_NO_LABEL:
- string = g_string_sized_new (1024);
- g_string_append_printf (
- string, "(and %s (and ", query);
- valid = gtk_tree_model_get_iter_first (
- model, &tree_iter);
- while (valid) {
- tag = e_mail_label_list_store_get_tag (
- E_MAIL_LABEL_LIST_STORE (model),
- &tree_iter);
- g_string_append_printf (
- string, " (match-all (not (or "
- "(= (user-tag \"label\") \"%s\") "
- "(user-flag \"$Label%s\") "
- "(user-flag \"%s\"))))",
- tag, tag, tag);
- g_free (tag);
-
- valid = gtk_tree_model_iter_next (
- model, &tree_iter);
- }
- g_string_append_len (string, "))", 2);
- g_free (query);
- query = g_string_free (string, FALSE);
- break;
-
- case MAIL_FILTER_READ_MESSAGES:
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(system-flag \"Seen\")))", query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_RECENT_MESSAGES:
- if (em_utils_folder_is_sent (folder, folder_uri))
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(> (get-sent-date) "
- "(- (get-current-date) 86400))))",
- query);
- else
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(> (get-received-date) "
- "(- (get-current-date) 86400))))",
- query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_LAST_5_DAYS_MESSAGES:
- if (em_utils_folder_is_sent (folder, folder_uri))
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(> (get-sent-date) "
- "(- (get-current-date) 432000))))",
- query);
- else
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(> (get-received-date) "
- "(- (get-current-date) 432000))))",
- query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_MESSAGES_WITH_ATTACHMENTS:
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(system-flag \"Attachments\")))", query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_IMPORTANT_MESSAGES:
- temp = g_strdup_printf (
- "(and %s (match-all "
- "(system-flag \"Flagged\")))", query);
- g_free (query);
- query = temp;
- break;
-
- case MAIL_FILTER_MESSAGES_NOT_JUNK:
- temp = g_strdup_printf (
- "(and %s (match-all (not "
- "(system-flag \"junk\"))))", query);
- g_free (query);
- query = temp;
- break;
-
- default:
- /* The action value also serves as a path for
- * the label list store. That's why we number
- * the label actions from zero. */
- path = gtk_tree_path_new_from_indices (value, -1);
- gtk_tree_model_get_iter (model, &tree_iter, path);
- gtk_tree_path_free (path);
-
- tag = e_mail_label_list_store_get_tag (
- E_MAIL_LABEL_LIST_STORE (model), &tree_iter);
- temp = g_strdup_printf (
- "(and %s (match-all (or "
- "(= (user-tag \"label\") \"%s\") "
- "(user-flag \"$Label%s\") "
- "(user-flag \"%s\"))))",
- query, tag, tag, tag);
- g_free (tag);
-
- g_free (query);
- query = temp;
- break;
- }
-
- message_list_set_search (message_list, query);
-
- e_mail_shell_content_set_search_strings (
- mail_shell_content, search_strings);
-
- g_slist_foreach (search_strings, (GFunc) g_free, NULL);
- g_slist_free (search_strings);
-
- g_object_unref (model);
- g_free (query);
-}
-
/* Helper for e_mail_shell_view_create_filter_from_selected() */
static void
mail_shell_view_create_filter_cb (CamelFolder *folder,