port filter/ classes over to new EError API

https://bugzilla.gnome.org/show_bug.cgi?id=602963
This commit is contained in:
Jonathon Jongsma
2009-11-24 16:34:24 -06:00
parent ae8f6d681c
commit 193625ae67
11 changed files with 71 additions and 49 deletions

View File

@ -299,14 +299,17 @@ button_clicked (GtkButton *button, EFilterDatespec *fds)
static gboolean
filter_datespec_validate (EFilterElement *element,
GtkWindow *error_parent)
EError **error)
{
EFilterDatespec *fds = E_FILTER_DATESPEC (element);
gboolean valid;
g_warn_if_fail (error == NULL || *error == NULL);
valid = fds->type != FDST_UNKNOWN;
if (!valid) {
e_error_run (error_parent, "filter:no-date", NULL);
if (error)
*error = e_error_new ("filter:no-date", NULL);
}
return valid;

View File

@ -42,7 +42,7 @@ static gpointer parent_class;
static gboolean
filter_element_validate (EFilterElement *element,
GtkWindow *error_parent)
EError **error)
{
return TRUE;
}
@ -249,22 +249,16 @@ e_filter_element_new (void)
gboolean
e_filter_element_validate (EFilterElement *element,
GtkWindow *error_parent)
EError **error)
{
EFilterElementClass *class;
g_return_val_if_fail (E_IS_FILTER_ELEMENT (element), FALSE);
/* Warn but proceed if no parent window was given. */
if (error_parent != NULL)
g_return_val_if_fail (GTK_IS_WINDOW (error_parent), FALSE);
else
g_warning ("%s() called with no parent window", G_STRFUNC);
class = E_FILTER_ELEMENT_GET_CLASS (element);
g_return_val_if_fail (class->validate != NULL, FALSE);
return class->validate (element, error_parent);
return class->validate (element, error);
}
gint

View File

@ -27,6 +27,7 @@
#include <gtk/gtk.h>
#include <libxml/parser.h>
#include <libxml/xmlmemory.h>
#include <e-util/e-error.h>
#define E_TYPE_FILTER_ELEMENT \
(e_filter_element_get_type ())
@ -68,7 +69,7 @@ struct _EFilterElementClass {
GObjectClass parent_class;
gboolean (*validate) (EFilterElement *element,
GtkWindow *error_parent);
EError **error);
gint (*eq) (EFilterElement *element_a,
EFilterElement *element_b);
@ -95,7 +96,7 @@ EFilterElement *e_filter_element_new (void);
void e_filter_element_set_data (EFilterElement *element,
gpointer data);
gboolean e_filter_element_validate (EFilterElement *element,
GtkWindow *error_parent);
EError **error);
gint e_filter_element_eq (EFilterElement *element_a,
EFilterElement *element_b);
void e_filter_element_xml_create (EFilterElement *element,

View File

@ -65,12 +65,15 @@ filter_file_finalize (GObject *object)
static gboolean
filter_file_validate (EFilterElement *element,
GtkWindow *error_parent)
EError **error)
{
EFilterFile *file = E_FILTER_FILE (element);
g_warn_if_fail (error == NULL || *error == NULL);
if (!file->path) {
e_error_run (error_parent, "filter:no-file", NULL);
if (error)
*error = e_error_new ("filter:no-file", NULL);
return FALSE;
}
@ -78,9 +81,9 @@ filter_file_validate (EFilterElement *element,
if (g_strcmp0 (file->type, "file") == 0) {
if (!g_file_test (file->path, G_FILE_TEST_IS_REGULAR)) {
e_error_run (
error_parent, "filter:bad-file",
file->path, NULL);
if (error)
*error = e_error_new ( "filter:bad-file",
file->path, NULL);
return FALSE;
}
} else if (g_strcmp0 (file->type, "command") == 0) {

View File

@ -70,11 +70,13 @@ filter_input_finalize (GObject *object)
static gboolean
filter_input_validate (EFilterElement *element,
GtkWindow *error_parent)
EError **error)
{
EFilterInput *input = E_FILTER_INPUT (element);
gboolean valid = TRUE;
g_warn_if_fail (error == NULL || *error == NULL);
if (input->values && !strcmp (input->type, "regex")) {
const gchar *pattern;
regex_t regexpat;
@ -83,17 +85,20 @@ filter_input_validate (EFilterElement *element,
pattern = input->values->data;
if ((regerr = regcomp (&regexpat, pattern, REG_EXTENDED | REG_NEWLINE | REG_ICASE))) {
gsize reglen;
gchar *regmsg;
if (error) {
gsize reglen;
gchar *regmsg;
/* regerror gets called twice to get the full error string
length to do proper posix error reporting */
reglen = regerror (regerr, &regexpat, 0, 0);
regmsg = g_malloc0 (reglen + 1);
regerror (regerr, &regexpat, regmsg, reglen);
/* regerror gets called twice to get the full error string
length to do proper posix error reporting */
reglen = regerror (regerr, &regexpat, 0, 0);
regmsg = g_malloc0 (reglen + 1);
regerror (regerr, &regexpat, regmsg, reglen);
e_error_run (error_parent, "filter:bad-regexp", pattern, regmsg, NULL);
g_free (regmsg);
*error = e_error_new ("filter:bad-regexp",
pattern, regmsg, NULL);
g_free (regmsg);
}
valid = FALSE;
}

View File

@ -105,7 +105,7 @@ e_filter_part_new (void)
gboolean
e_filter_part_validate (EFilterPart *part,
GtkWindow *error_parent)
EError **error)
{
GList *link;
@ -115,7 +115,7 @@ e_filter_part_validate (EFilterPart *part,
for (link = part->elements; link != NULL; link = g_list_next (link)) {
EFilterElement *element = link->data;
if (!e_filter_element_validate (element, error_parent))
if (!e_filter_element_validate (element, error))
return FALSE;
}

View File

@ -71,7 +71,7 @@ struct _EFilterPartClass {
GType e_filter_part_get_type (void);
EFilterPart * e_filter_part_new (void);
gboolean e_filter_part_validate (EFilterPart *part,
GtkWindow *error_parent);
EError **error);
gint e_filter_part_eq (EFilterPart *part_a,
EFilterPart *part_b);
gint e_filter_part_xml_create (EFilterPart *part,

View File

@ -239,11 +239,14 @@ more_parts (GtkWidget *button,
if (data->rule->parts) {
EFilterPart *part;
GList *l;
EError *error = NULL;
l = g_list_last (data->rule->parts);
part = l->data;
if (!e_filter_part_validate (part, GTK_WINDOW (gtk_widget_get_toplevel (button))))
if (!e_filter_part_validate (part, &error)) {
e_error_run_dialog (GTK_WINDOW (gtk_widget_get_toplevel (button)), error);
return;
}
}
/* create a new rule entry, use the first type of rule */
@ -353,13 +356,15 @@ filter_rule_finalize (GObject *object)
static gint
filter_rule_validate (EFilterRule *rule,
GtkWindow *error_parent)
EError **error)
{
gint valid = TRUE;
GList *parts;
g_warn_if_fail (error == NULL || *error == NULL);
if (!rule->name || !*rule->name) {
e_error_run (error_parent, "filter:no-name", NULL);
if (error)
*error = e_error_new ("filter:no-name", NULL);
return FALSE;
}
@ -368,7 +373,7 @@ filter_rule_validate (EFilterRule *rule,
parts = rule->parts;
valid = parts != NULL;
while (parts && valid) {
valid = e_filter_part_validate ((EFilterPart *) parts->data, error_parent);
valid = e_filter_part_validate ((EFilterPart *) parts->data, error);
parts = parts->next;
}
@ -907,7 +912,7 @@ e_filter_rule_set_source (EFilterRule *rule,
gint
e_filter_rule_validate (EFilterRule *rule,
GtkWindow *error_parent)
EError **error)
{
EFilterRuleClass *class;
@ -916,7 +921,7 @@ e_filter_rule_validate (EFilterRule *rule,
class = E_FILTER_RULE_GET_CLASS (rule);
g_return_val_if_fail (class->validate != NULL, FALSE);
return class->validate (rule, error_parent);
return class->validate (rule, error);
}
gint

View File

@ -96,7 +96,7 @@ struct _EFilterRuleClass {
/* virtual methods */
gint (*validate) (EFilterRule *rule,
GtkWindow *error_parent);
EError **error);
gint (*eq) (EFilterRule *rule_a,
EFilterRule *rule_b);
@ -126,7 +126,7 @@ void e_filter_rule_set_name (EFilterRule *rule,
void e_filter_rule_set_source (EFilterRule *rule,
const gchar *source);
gint e_filter_rule_validate (EFilterRule *rule,
GtkWindow *error_parent);
EError **error);
gint e_filter_rule_eq (EFilterRule *rule_a,
EFilterRule *rule_b);
xmlNodePtr e_filter_rule_xml_encode (EFilterRule *rule);

View File

@ -92,14 +92,17 @@ new_rule_response (GtkWidget *dialog,
if (button == GTK_RESPONSE_OK) {
EFilterRule *rule = g_object_get_data ((GObject *) dialog, "rule");
gchar *user = g_object_get_data ((GObject *) dialog, "path");
EError *error = NULL;
if (!e_filter_rule_validate (rule, GTK_WINDOW (dialog))) {
/* no need to popup a dialog because the validate code does that. */
return;
if (!e_filter_rule_validate (rule, &error)) {
e_error_run_dialog (GTK_WINDOW (dialog), error);
e_error_free (error);
}
if (e_rule_context_find_rule (context, rule->name, rule->source)) {
e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", rule->name, NULL);
e_error_run_dialog_for_args ((GtkWindow *)dialog,
"filter:bad-name-notunique",
rule->name, NULL);
return;
}

View File

@ -143,13 +143,17 @@ add_editor_response (GtkWidget *dialog, gint button, ERuleEditor *editor)
GtkTreeIter iter;
if (button == GTK_RESPONSE_OK) {
if (!e_filter_rule_validate (editor->edit, GTK_WINDOW (dialog))) {
/* no need to popup a dialog because the validate code does that. */
EError *error = NULL;
if (!e_filter_rule_validate (editor->edit, &error)) {
e_error_run_dialog (GTK_WINDOW (dialog), error);
e_error_free (error);
return;
}
if (e_rule_context_find_rule (editor->context, editor->edit->name, editor->edit->source)) {
e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", editor->edit->name, NULL);
e_error_run_dialog_for_args ((GtkWindow *)dialog,
"filter:bad-name-notunique",
editor->edit->name, NULL);
return;
}
@ -287,14 +291,18 @@ edit_editor_response (GtkWidget *dialog, gint button, ERuleEditor *editor)
gint pos;
if (button == GTK_RESPONSE_OK) {
if (!e_filter_rule_validate (editor->edit, GTK_WINDOW (dialog))) {
/* no need to popup a dialog because the validate code does that. */
EError *error = NULL;
if (!e_filter_rule_validate (editor->edit, &error)) {
e_error_run_dialog (GTK_WINDOW (dialog), error);
e_error_free (error);
return;
}
rule = e_rule_context_find_rule (editor->context, editor->edit->name, editor->edit->source);
if (rule != NULL && rule != editor->current) {
e_error_run ((GtkWindow *)dialog, "filter:bad-name-notunique", rule->name, NULL);
e_error_run_dialog_for_args ((GtkWindow *)dialog,
"filter:bad-name-notunique",
rule->name, NULL);
return;
}