diff options
author | David Zeuthen <davidz@redhat.com> | 2011-05-23 14:16:42 -0400 |
---|---|---|
committer | David Zeuthen <davidz@redhat.com> | 2011-05-23 14:16:42 -0400 |
commit | 8983aceb0a2db04fb5520eb637f3991a5932261a (patch) | |
tree | 4a81e5bfd0e4802ddb6b9a6d84141e8998f7cbdd | |
parent | 21374619064eb50c1cee8adf6d43d0b4be66c624 (diff) |
Iterate over the show_accounts UI for generic_mail and google accounts
Signed-off-by: David Zeuthen <davidz@redhat.com>
-rw-r--r-- | src/goabackend/goagenericmailprovider.c | 81 | ||||
-rw-r--r-- | src/goabackend/goagoogleprovider.c | 12 | ||||
-rw-r--r-- | src/goabackend/goaoauthprovider.c | 34 | ||||
-rw-r--r-- | src/goabackend/goaoauthprovider.h | 4 | ||||
-rw-r--r-- | src/goabackend/goaprovider.c | 106 | ||||
-rw-r--r-- | src/goabackend/goaprovider.h | 8 |
6 files changed, 225 insertions, 20 deletions
diff --git a/src/goabackend/goagenericmailprovider.c b/src/goabackend/goagenericmailprovider.c index c4cf486..fe7a568 100644 --- a/src/goabackend/goagenericmailprovider.c +++ b/src/goabackend/goagenericmailprovider.c @@ -761,6 +761,7 @@ add_account (GoaProvider *_provider, * waiting for this to complete */ g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}")); + g_variant_builder_add (&builder, "{ss}", "Enabled", "true"); g_variant_builder_add (&builder, "{ss}", "EmailAddress", gtk_entry_get_text (GTK_ENTRY (data.intro_address_entry))); g_variant_builder_add (&builder, "{ss}", "ImapHost", @@ -824,26 +825,78 @@ show_account (GoaProvider *provider, GtkBox *vbox, GtkTable *table) { + gchar *email_address; + gchar *imap_host; + gchar *imap_user_name; + gboolean imap_use_tls; + gboolean imap_ignore_bad_tls; + gchar *smtp_host; + gchar *smtp_user_name; + gboolean smtp_use_tls; + gboolean smtp_ignore_bad_tls; + GString *str; + /* Chain up */ GOA_PROVIDER_CLASS (goa_generic_mail_provider_parent_class)->show_account (provider, client, object, vbox, table); - /* TODO: passwords */ - - goa_util_add_row_editable_label_from_keyfile (table, object, _("Email Address"), "EmailAddress", FALSE); - - goa_util_add_heading (table, _("Receiving Mail")); + email_address = goa_util_lookup_keyfile_string (object, "EmailAddress"); + goa_util_add_row_label (table, _("Email Address"), email_address); + + imap_host = goa_util_lookup_keyfile_string (object, "ImapHost"); + imap_user_name = goa_util_lookup_keyfile_string (object, "ImapUserName"); + imap_use_tls = goa_util_lookup_keyfile_boolean (object, "ImapUseTls"); + imap_ignore_bad_tls = goa_util_lookup_keyfile_boolean (object, "ImapIgnoreBadTls"); + str = g_string_new (imap_host); + if (g_strcmp0 (g_get_user_name (), imap_user_name) != 0) + g_string_append_printf (str, "\n<small>%s: %s</small>", + _("User Name"), + imap_user_name); + if (imap_use_tls) + { + if (imap_ignore_bad_tls) + g_string_append_printf (str, "\n<small><span foreground=\"red\">%s</span></small>", + _("Transport Security without Certificate Checks")); + } + else + { + g_string_append_printf (str, "\n<small><span foreground=\"red\">%s</span></small>", + _("No Transport Security")); + } + goa_util_add_row_label (table, _("IMAP Server"), str->str); + g_string_free (str, TRUE); + + smtp_host = goa_util_lookup_keyfile_string (object, "SmtpHost"); + smtp_user_name = goa_util_lookup_keyfile_string (object, "SmtpUserName"); + smtp_use_tls = goa_util_lookup_keyfile_boolean (object, "SmtpUseTls"); + smtp_ignore_bad_tls = goa_util_lookup_keyfile_boolean (object, "SmtpIgnoreBadTls"); + str = g_string_new (smtp_host); + if (g_strcmp0 (g_get_user_name (), smtp_user_name) != 0) + g_string_append_printf (str, "\n<small>%s: %s</small>", + _("User Name"), + smtp_user_name); + if (smtp_use_tls) + { + if (smtp_ignore_bad_tls) + g_string_append_printf (str, "\n<small><span foreground=\"red\">%s</span></small>", + _("Transport Security without Certificate Checks")); + } + else + { + g_string_append_printf (str, "\n<small><span foreground=\"red\">%s</span></small>", + _("No Transport Security")); + } + goa_util_add_row_label (table, _("SMTP Server"), str->str); + g_string_free (str, TRUE); - goa_util_add_row_editable_label_from_keyfile (table, object, _("IMAP Server"), "ImapHost", TRUE); - goa_util_add_row_editable_label_from_keyfile (table, object, _("User Name"), "ImapUserName", TRUE); - goa_util_add_row_check_button_from_keyfile (table, object, NULL, "ImapUseTls", _("Use s_ecure connection")); - goa_util_add_row_check_button_from_keyfile (table, object, NULL, "ImapIgnoreBadTls", _("_Don't check certificates")); + goa_util_add_row_switch_from_keyfile (table, object, _("Enabled"), "Enabled"); - goa_util_add_heading (table, _("Sending Mail")); + /* TODO: we could have a "Edit" button */ - goa_util_add_row_editable_label_from_keyfile (table, object, _("SMTP Server"), "SmtpHost", TRUE); - goa_util_add_row_editable_label_from_keyfile (table, object, _("User Name"), "SmtpUserName", TRUE); - goa_util_add_row_check_button_from_keyfile (table, object, NULL, "SmtpUseTls", _("Use s_ecure connection")); - goa_util_add_row_check_button_from_keyfile (table, object, NULL, "SmtpIgnoreBadTls", _("_Don't check certificates")); + g_free (smtp_host); + g_free (smtp_user_name); + g_free (imap_host); + g_free (imap_user_name); + g_free (email_address); } /* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/goabackend/goagoogleprovider.c b/src/goabackend/goagoogleprovider.c index 5f67e03..c38b893 100644 --- a/src/goabackend/goagoogleprovider.c +++ b/src/goabackend/goagoogleprovider.c @@ -336,7 +336,16 @@ show_account (GoaProvider *provider, GOA_PROVIDER_CLASS (goa_google_provider_parent_class)->show_account (provider, client, object, vbox, table); goa_util_add_row_editable_label_from_keyfile (table, object, _("Email Address"), "Identity", FALSE); - goa_util_add_row_switch_from_keyfile (table, object, _("GMail"), "GoogleMailEnabled"); + goa_util_add_row_switch_from_keyfile (table, object, _("Mail"), "MailEnabled"); +} + +/* ---------------------------------------------------------------------------------------------------- */ + +static void +add_account_key_values (GoaOAuthProvider *provider, + GVariantBuilder *builder) +{ + g_variant_builder_add (builder, "{ss}", "MailEnabled", "true"); } /* ---------------------------------------------------------------------------------------------------- */ @@ -368,6 +377,7 @@ goa_google_provider_class_init (GoaGoogleProviderClass *klass) oauth_class->get_token_uri = get_token_uri; oauth_class->get_callback_uri = get_callback_uri; oauth_class->get_use_external_browser = get_use_external_browser; + oauth_class->add_account_key_values = add_account_key_values; } /* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/goabackend/goaoauthprovider.c b/src/goabackend/goaoauthprovider.c index 32b8ca4..ab4087f 100644 --- a/src/goabackend/goaoauthprovider.c +++ b/src/goabackend/goaoauthprovider.c @@ -163,6 +163,33 @@ goa_oauth_provider_get_use_external_browser (GoaOAuthProvider *provider) /* ---------------------------------------------------------------------------------------------------- */ +static void +goa_oauth_provider_add_account_key_values_default (GoaOAuthProvider *provider, + GVariantBuilder *builder) +{ + /* do nothing */ +} + +/** + * goa_oauth_provider_add_account_key_values: + * @provider: A #GoaProvider. + * @builder: A #GVariantBuilder for a <literal>a{ss}</literal> variant. + * + * Hook for implementations to add key/value pairs to the key-file + * when creating an account. + * + * This is a virtual method where the default implementation does nothing. + */ +void +goa_oauth_provider_add_account_key_values (GoaOAuthProvider *provider, + GVariantBuilder *builder) +{ + g_return_if_fail (GOA_IS_OAUTH_PROVIDER (provider)); + return GOA_OAUTH_PROVIDER_GET_CLASS (provider)->add_account_key_values (provider, builder); +} + +/* ---------------------------------------------------------------------------------------------------- */ + static gchar * goa_oauth_provider_build_authorization_uri_default (GoaOAuthProvider *provider, const gchar *authorization_uri, @@ -992,11 +1019,13 @@ goa_oauth_provider_add_account (GoaProvider *_provider, * can create a proxy for the new object) so run the mainloop while * waiting for this to complete */ + g_variant_builder_init (&builder, G_VARIANT_TYPE ("a{ss}")); + g_variant_builder_add (&builder, "{ss}", "Identity", identity); + goa_oauth_provider_add_account_key_values (provider, &builder); goa_manager_call_add_account (goa_client_get_manager (client), goa_provider_get_provider_type (GOA_PROVIDER (provider)), name, /* Name */ - g_variant_new_parsed ("{'Identity': %s}", - identity), + g_variant_builder_end (&builder), NULL, /* GCancellable* */ (GAsyncReadyCallback) add_account_cb, &data); @@ -1536,6 +1565,7 @@ goa_oauth_provider_class_init (GoaOAuthProviderClass *klass) klass->build_authorization_uri = goa_oauth_provider_build_authorization_uri_default; klass->get_use_external_browser = goa_oauth_provider_get_use_external_browser_default; klass->get_request_uri_params = goa_oauth_provider_get_request_uri_params_default; + klass->add_account_key_values = goa_oauth_provider_add_account_key_values_default; } /* ---------------------------------------------------------------------------------------------------- */ diff --git a/src/goabackend/goaoauthprovider.h b/src/goabackend/goaoauthprovider.h index 1806cce..876dacb 100644 --- a/src/goabackend/goaoauthprovider.h +++ b/src/goabackend/goaoauthprovider.h @@ -97,6 +97,8 @@ struct _GoaOAuthProviderClass const gchar *escaped_oauth_token); gboolean (*get_use_external_browser) (GoaOAuthProvider *provider); gchar **(*get_request_uri_params) (GoaOAuthProvider *provider); + void (*add_account_key_values) (GoaOAuthProvider *provider, + GVariantBuilder *builder); /*< private >*/ /* Padding for future expansion */ @@ -128,6 +130,8 @@ gchar *goa_oauth_provider_build_authorization_uri (GoaOAuthProvider *pro const gchar *authorization_uri, const gchar *escaped_oauth_token); gboolean goa_oauth_provider_get_use_external_browser (GoaOAuthProvider *provider); +void goa_oauth_provider_add_account_key_values (GoaOAuthProvider *provider, + GVariantBuilder *builder); G_END_DECLS diff --git a/src/goabackend/goaprovider.c b/src/goabackend/goaprovider.c index 4cfe2ab..6c06982 100644 --- a/src/goabackend/goaprovider.c +++ b/src/goabackend/goaprovider.c @@ -820,12 +820,109 @@ goa_util_add_row_label (GtkTable *table, label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), value_markup); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_widget_set_margin_top (label, 6); + gtk_widget_set_margin_bottom (label, 6); + gtk_widget_set_margin_left (label, 6); gtk_label_set_selectable (GTK_LABEL (label), TRUE); return goa_util_add_row_widget (table, label_text, label); } /* ---------------------------------------------------------------------------------------------------- */ +gchar * +goa_util_lookup_keyfile_string (GoaObject *object, + const gchar *key) +{ + GoaAccount *account; + GError *error; + GKeyFile *key_file; + gchar *ret; + + ret = NULL; + + account = goa_object_peek_account (object); + + key_file = g_key_file_new (); + error = NULL; + if (!g_key_file_load_from_file (key_file, + goa_account_get_keyfile_path (account), + G_KEY_FILE_NONE, + &error)) + { + goa_warning ("Error loading keyfile %s: %s (%s, %d)", + goa_account_get_keyfile_path (account), + error->message, g_quark_to_string (error->domain), error->code); + g_error_free (error); + goto out; + } + ret = g_key_file_get_string (key_file, + goa_account_get_keyfile_group (account), + key, + &error); + if (ret == NULL) + { + /* this is not fatal (think upgrade-path) */ + goa_debug ("Error getting value for key %s in group `%s' from keyfile %s: %s (%s, %d)", + key, + goa_account_get_keyfile_group (account), + goa_account_get_keyfile_path (account), + error->message, g_quark_to_string (error->domain), error->code); + g_error_free (error); + goto out; + } + + out: + return ret; +} + +gboolean +goa_util_lookup_keyfile_boolean (GoaObject *object, + const gchar *key) +{ + GoaAccount *account; + GError *error; + GKeyFile *key_file; + gboolean ret; + + ret = NULL; + + account = goa_object_peek_account (object); + + key_file = g_key_file_new (); + error = NULL; + if (!g_key_file_load_from_file (key_file, + goa_account_get_keyfile_path (account), + G_KEY_FILE_NONE, + &error)) + { + goa_warning ("Error loading keyfile %s: %s (%s, %d)", + goa_account_get_keyfile_path (account), + error->message, g_quark_to_string (error->domain), error->code); + g_error_free (error); + goto out; + } + ret = g_key_file_get_boolean (key_file, + goa_account_get_keyfile_group (account), + key, + &error); + if (error != NULL) + { + /* this is not fatal (think upgrade-path) */ + goa_debug ("Error getting boolean value for key %s in group `%s' from keyfile %s: %s (%s, %d)", + key, + goa_account_get_keyfile_group (account), + goa_account_get_keyfile_path (account), + error->message, g_quark_to_string (error->domain), error->code); + g_error_free (error); + goto out; + } + + out: + return ret; +} + +/* ---------------------------------------------------------------------------------------------------- */ + typedef struct { GoaObject *object; gchar *key; @@ -969,8 +1066,9 @@ goa_util_add_row_editable_label_from_keyfile (GtkTable *table, if (value == NULL) { /* this is not fatal (think upgrade-path) */ - goa_debug ("Error getting value for key %s from keyfile %s: %s (%s, %d)", + goa_debug ("Error getting value for key %s in group `%s' from keyfile %s: %s (%s, %d)", key, + goa_account_get_keyfile_group (account), goa_account_get_keyfile_path (account), error->message, g_quark_to_string (error->domain), error->code); g_error_free (error); @@ -1118,8 +1216,9 @@ goa_util_add_row_switch_from_keyfile (GtkTable *table, if (error != NULL) { /* this is not fatal (think upgrade-path) */ - goa_debug ("Error getting boolean value for key %s from keyfile %s: %s (%s, %d)", + goa_debug ("Error getting boolean value for key %s in group `%s' from keyfile %s: %s (%s, %d)", key, + goa_account_get_keyfile_group (account), goa_account_get_keyfile_path (account), error->message, g_quark_to_string (error->domain), error->code); g_error_free (error); @@ -1265,8 +1364,9 @@ goa_util_add_row_check_button_from_keyfile (GtkTable *table, if (error != NULL) { /* this is not fatal (think upgrade-path) */ - goa_debug ("Error getting boolean value for key %s from keyfile %s: %s (%s, %d)", + goa_debug ("Error getting boolean value for key %s in group `%s' from keyfile %s: %s (%s, %d)", key, + goa_account_get_keyfile_group (account), goa_account_get_keyfile_path (account), error->message, g_quark_to_string (error->domain), error->code); g_error_free (error); diff --git a/src/goabackend/goaprovider.h b/src/goabackend/goaprovider.h index 7db7737..3dbb888 100644 --- a/src/goabackend/goaprovider.h +++ b/src/goabackend/goaprovider.h @@ -175,6 +175,14 @@ GtkWidget *goa_util_add_row_label (GtkTable *table, const gchar *label_text, const gchar *value_markup); +gchar * +goa_util_lookup_keyfile_string (GoaObject *object, + const gchar *key); + +gboolean +goa_util_lookup_keyfile_boolean (GoaObject *object, + const gchar *key); + GtkWidget *goa_util_add_row_editable_label_from_keyfile (GtkTable *table, GoaObject *object, const gchar *label_text, |