summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Zeuthen <davidz@redhat.com>2011-05-23 14:16:42 -0400
committerDavid Zeuthen <davidz@redhat.com>2011-05-23 14:16:42 -0400
commit8983aceb0a2db04fb5520eb637f3991a5932261a (patch)
tree4a81e5bfd0e4802ddb6b9a6d84141e8998f7cbdd
parent21374619064eb50c1cee8adf6d43d0b4be66c624 (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.c81
-rw-r--r--src/goabackend/goagoogleprovider.c12
-rw-r--r--src/goabackend/goaoauthprovider.c34
-rw-r--r--src/goabackend/goaoauthprovider.h4
-rw-r--r--src/goabackend/goaprovider.c106
-rw-r--r--src/goabackend/goaprovider.h8
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,