From 0b4e7ec091c8bbe65dc2f2afd7da78b04da7c274 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sun, 19 May 2013 12:14:58 -0400 Subject: Rename EMailFormatterVCardInline to EMailFormatterVCard. --- modules/vcard-inline/e-mail-formatter-vcard.c | 228 ++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 modules/vcard-inline/e-mail-formatter-vcard.c (limited to 'modules/vcard-inline/e-mail-formatter-vcard.c') diff --git a/modules/vcard-inline/e-mail-formatter-vcard.c b/modules/vcard-inline/e-mail-formatter-vcard.c new file mode 100644 index 0000000000..01d015f754 --- /dev/null +++ b/modules/vcard-inline/e-mail-formatter-vcard.c @@ -0,0 +1,228 @@ +/* + * e-mail-formatter-vcard.c + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the program; if not, see + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "e-mail-formatter-vcard.h" +#include "e-mail-part-vcard.h" + +#include + +#include + +#include +#include +#include +#include + +#include + +#define d(x) + +typedef EMailFormatterExtension EMailFormatterVCard; +typedef EMailFormatterExtensionClass EMailFormatterVCardClass; + +typedef EExtension EMailFormatterVCardLoader; +typedef EExtensionClass EMailFormatterVCardLoaderClass; + +GType e_mail_formatter_vcard_get_type (void); + +G_DEFINE_DYNAMIC_TYPE ( + EMailFormatterVCard, + e_mail_formatter_vcard, + E_TYPE_MAIL_FORMATTER_EXTENSION) + +static const gchar *formatter_mime_types[] = { + "text/vcard", + "text/x-vcard", + "text/directory", + NULL +}; + +static gboolean +mail_formatter_vcard_format (EMailFormatterExtension *extension, + EMailFormatter *formatter, + EMailFormatterContext *context, + EMailPart *part, + CamelStream *stream, + GCancellable *cancellable) +{ + EMailPartVCard *vcard_part; + + g_return_val_if_fail (E_IS_MAIL_PART_VCARD (part), FALSE); + + vcard_part = (EMailPartVCard *) part; + + if (context->mode == E_MAIL_FORMATTER_MODE_RAW) { + + EContact *contact; + + if (vcard_part->contact_list != NULL) + contact = E_CONTACT (vcard_part->contact_list->data); + else + contact = NULL; + + eab_contact_formatter_format_contact_sync ( + vcard_part->formatter, contact, stream, cancellable); + + } else { + CamelFolder *folder; + const gchar *message_uid; + const gchar *default_charset, *charset; + gchar *str, *uri; + gint length; + const gchar *label = NULL; + EABContactDisplayMode mode; + const gchar *info = NULL; + gchar *html_label, *access_key; + + length = g_slist_length (vcard_part->contact_list); + if (length < 1) + return FALSE; + + folder = e_mail_part_list_get_folder (context->part_list); + message_uid = e_mail_part_list_get_message_uid (context->part_list); + default_charset = e_mail_formatter_get_default_charset (formatter); + charset = e_mail_formatter_get_charset (formatter); + + if (!default_charset) + default_charset = ""; + if (!charset) + charset = ""; + + if (vcard_part->message_uid == NULL && message_uid != NULL) + vcard_part->message_uid = g_strdup (message_uid); + + if (vcard_part->folder == NULL && folder != NULL) + vcard_part->folder = g_object_ref (folder); + + uri = e_mail_part_build_uri ( + folder, message_uid, + "part_id", G_TYPE_STRING, e_mail_part_get_id (part), + "mode", G_TYPE_INT, E_MAIL_FORMATTER_MODE_RAW, + "formatter_default_charset", G_TYPE_STRING, default_charset, + "formatter_charset", G_TYPE_STRING, charset, + NULL); + + mode = eab_contact_formatter_get_display_mode (vcard_part->formatter); + if (mode == EAB_CONTACT_DISPLAY_RENDER_COMPACT) { + mode = EAB_CONTACT_DISPLAY_RENDER_NORMAL; + label = _("Show F_ull vCard"); + } else { + mode = EAB_CONTACT_DISPLAY_RENDER_COMPACT; + label = _("Show Com_pact vCard"); + } + + str = g_strdup_printf ( + "
", + e_mail_part_get_id (part)); + camel_stream_write_string (stream, str, cancellable, NULL); + g_free (str); + + html_label = e_mail_formatter_parse_html_mnemonics ( + label, &access_key); + str = g_strdup_printf ( + "", + mode, access_key, html_label); + camel_stream_write_string (stream, str, cancellable, NULL); + g_free (str); + g_free (html_label); + if (access_key) + g_free (access_key); + + html_label = e_mail_formatter_parse_html_mnemonics ( + _("Save _To Addressbook"), &access_key); + str = g_strdup_printf ( + "
" + "" + "
", + e_mail_part_get_id (part), + access_key, html_label, uri, + e_mail_part_get_id (part)); + camel_stream_write_string (stream, str, cancellable, NULL); + g_free (str); + g_free (html_label); + if (access_key) + g_free (access_key); + + if (length == 2) { + + info = _("There is one other contact."); + + } else if (length > 2) { + + /* Translators: This will always be two or more. */ + info = g_strdup_printf (ngettext ( + "There is %d other contact.", + "There are %d other contacts.", + length - 1), length - 1); + } + + if (info) { + + str = g_strdup_printf ( + "
%s
", + info); + + camel_stream_write_string (stream, str, cancellable, NULL); + + g_free (str); + } + + g_free (uri); + } + + return TRUE; +} + +static void +e_mail_formatter_vcard_class_init (EMailFormatterExtensionClass *class) +{ + class->display_name = _("Addressbook Contact"); + class->description = _("Display the part as an addressbook contact"); + class->mime_types = formatter_mime_types; + class->format = mail_formatter_vcard_format; +} + +static void +e_mail_formatter_vcard_class_finalize (EMailFormatterExtensionClass *class) +{ +} + +static void +e_mail_formatter_vcard_init (EMailFormatterExtension *extension) +{ +} + +void +e_mail_formatter_vcard_type_register (GTypeModule *type_module) +{ + e_mail_formatter_vcard_register_type (type_module); +} + -- cgit v1.2.3