evcard_to_string() only took one TEL attrib from a vcard. But
multiple TEL attribs are supported. This patch will convert
all TEL attribs to strings.
---
plugins/phonebook-ebook.c | 24 +++++++++++++-----------
1 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/plugins/phonebook-ebook.c b/plugins/phonebook-ebook.c
index 089b956..04b7900 100644
--- a/plugins/phonebook-ebook.c
+++ b/plugins/phonebook-ebook.c
@@ -97,6 +97,7 @@ static char *evcard_to_string(EVCard *evcard, unsigned int format,
uint64_t filter)
{
EVCard *evcard2;
+ GList *l;
char *vcard;
unsigned int i;
@@ -109,18 +110,19 @@ static char *evcard_to_string(EVCard *evcard, unsigned int format,
*/
filter = format == EVC_FORMAT_VCARD_30 ? filter | 0x87: filter | 0x85;
+ l = e_vcard_get_attributes(evcard);
evcard2 = e_vcard_new();
- for (i = 0; i < 29; i++) {
- EVCardAttribute *attrib;
-
- if (!(filter & (1 << i)))
- continue;
-
- attrib = e_vcard_get_attribute(evcard, attribute_mask[i]);
- if (!attrib)
- continue;
-
- e_vcard_add_attribute(evcard2, e_vcard_attribute_copy(attrib));
+ for (; l; l = g_list_next(l)) {
+ EVCardAttribute *attrib = l->data;
+ if (attrib) {
+ const char *name = e_vcard_attribute_get_name(attrib);
+ for (i = 0; i < 29; i++) {
+ if (!(filter & (1 << i)))
+ continue;
+ if (!strcmp(name, attribute_mask[i]))
+ e_vcard_add_attribute(evcard2, e_vcard_attribute_copy(attrib));
+ }
+ }
}
vcard = e_vcard_to_string(evcard2, format);
--
1.7.1.1
Hi,
On Wed, Jul 28, 2010, Marcel Mol wrote:
> evcard_to_string() only took one TEL attrib from a vcard. But
> multiple TEL attribs are supported. This patch will convert
> all TEL attribs to strings.
> ---
> plugins/phonebook-ebook.c | 24 +++++++++++++-----------
> 1 files changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/plugins/phonebook-ebook.c b/plugins/phonebook-ebook.c
> index 089b956..04b7900 100644
> --- a/plugins/phonebook-ebook.c
> +++ b/plugins/phonebook-ebook.c
> @@ -97,6 +97,7 @@ static char *evcard_to_string(EVCard *evcard, unsigned int format,
> uint64_t filter)
> {
> EVCard *evcard2;
> + GList *l;
> char *vcard;
> unsigned int i;
>
> @@ -109,18 +110,19 @@ static char *evcard_to_string(EVCard *evcard, unsigned int format,
> */
> filter = format == EVC_FORMAT_VCARD_30 ? filter | 0x87: filter | 0x85;
>
> + l = e_vcard_get_attributes(evcard);
> evcard2 = e_vcard_new();
> - for (i = 0; i < 29; i++) {
> - EVCardAttribute *attrib;
> -
> - if (!(filter & (1 << i)))
> - continue;
> -
> - attrib = e_vcard_get_attribute(evcard, attribute_mask[i]);
> - if (!attrib)
> - continue;
> -
> - e_vcard_add_attribute(evcard2, e_vcard_attribute_copy(attrib));
> + for (; l; l = g_list_next(l)) {
> + EVCardAttribute *attrib = l->data;
> + if (attrib) {
> + const char *name = e_vcard_attribute_get_name(attrib);
> + for (i = 0; i < 29; i++) {
> + if (!(filter & (1 << i)))
> + continue;
> + if (!strcmp(name, attribute_mask[i]))
> + e_vcard_add_attribute(evcard2, e_vcard_attribute_copy(attrib));
> + }
> + }
> }
This needs to be cleaned up a bit in order not to be so deeply nested
which additionally causes you problems with producing over 80-character
long lines. You can avoid that with keeping the same
if (!attrib)
continue;
trick as the original code had as well as
if (g_strcmp0(name, attribute_mask[i]) != 0)
continue;
Johan