diff options
Diffstat (limited to 'addressbook/backend')
-rw-r--r-- | addressbook/backend/ebook/e-card.c | 233 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-card.h | 8 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-backend-file.c | 5 |
3 files changed, 205 insertions, 41 deletions
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c index 8c7139da79..1b27ed164e 100644 --- a/addressbook/backend/ebook/e-card.c +++ b/addressbook/backend/ebook/e-card.c @@ -25,6 +25,7 @@ /* Object argument IDs */ enum { ARG_0, + ARG_FILE_AS, ARG_FULL_NAME, ARG_NAME, ARG_ADDRESS, @@ -35,9 +36,14 @@ enum { ARG_URL, ARG_ORG, ARG_ORG_UNIT, + ARG_OFFICE, ARG_TITLE, ARG_ROLE, + ARG_MANAGER, + ARG_ASSISTANT, ARG_NICKNAME, + ARG_SPOUSE, + ARG_ANNIVERSARY, ARG_FBURL, ARG_NOTE, ARG_ID @@ -62,6 +68,7 @@ static ECardDate e_card_date_from_string (char *str); static void parse_bday(ECard *card, VObject *object); static void parse_full_name(ECard *card, VObject *object); +static void parse_file_as(ECard *card, VObject *object); static void parse_name(ECard *card, VObject *object); static void parse_email(ECard *card, VObject *object); static void parse_phone(ECard *card, VObject *object); @@ -69,9 +76,14 @@ static void parse_address(ECard *card, VObject *object); static void parse_address_label(ECard *card, VObject *object); static void parse_url(ECard *card, VObject *object); static void parse_org(ECard *card, VObject *object); +static void parse_office(ECard *card, VObject *object); static void parse_title(ECard *card, VObject *object); static void parse_role(ECard *card, VObject *object); +static void parse_manager(ECard *card, VObject *object); +static void parse_assistant(ECard *card, VObject *object); static void parse_nickname(ECard *card, VObject *object); +static void parse_spouse(ECard *card, VObject *object); +static void parse_anniversary(ECard *card, VObject *object); static void parse_fburl(ECard *card, VObject *object); static void parse_note(ECard *card, VObject *object); static void parse_id(ECard *card, VObject *object); @@ -88,21 +100,27 @@ struct { ParsePropertyFunc function; } attribute_jump_array[] = { - { VCFullNameProp, parse_full_name }, - { VCNameProp, parse_name }, - { VCBirthDateProp, parse_bday }, - { VCEmailAddressProp, parse_email }, - { VCTelephoneProp, parse_phone }, - { VCAdrProp, parse_address }, - { VCDeliveryLabelProp, parse_address_label }, - { VCURLProp, parse_url }, - { VCOrgProp, parse_org }, - { VCTitleProp, parse_title }, - { VCBusinessRoleProp, parse_role }, - { "NICKNAME", parse_nickname }, - { "FBURL", parse_fburl }, - { VCNoteProp, parse_note }, - { VCUniqueStringProp, parse_id } + { VCFullNameProp, parse_full_name }, + { "X-EVOLUTION-FILE-AS", parse_file_as }, + { VCNameProp, parse_name }, + { VCBirthDateProp, parse_bday }, + { VCEmailAddressProp, parse_email }, + { VCTelephoneProp, parse_phone }, + { VCAdrProp, parse_address }, + { VCDeliveryLabelProp, parse_address_label }, + { VCURLProp, parse_url }, + { VCOrgProp, parse_org }, + { "X-EVOLUTION-OFFICE", parse_office }, + { VCTitleProp, parse_title }, + { VCBusinessRoleProp, parse_role }, + { "X-EVOLUTION-MANAGER", parse_manager }, + { "X-EVOLUTION-ASSISTANT", parse_assistant }, + { "NICKNAME", parse_nickname }, + { "X-EVOLUTION-SPOUSE", parse_spouse }, + { "X-EVOLUTION-ANNIVERSARY", parse_anniversary }, + { "FBURL", parse_fburl }, + { VCNoteProp, parse_note }, + { VCUniqueStringProp, parse_id } }; /** @@ -209,6 +227,9 @@ char vobj = newVObject (VCCardProp); + if ( card->file_as ) + addPropValue(vobj, "X-EVOLUTION-FILE-AS", card->file_as); + if ( card->fname ) addPropValue(vobj, VCFullNameProp, card->fname); @@ -316,6 +337,9 @@ char if (card->org_unit) addPropValue(orgprop, VCOrgUnitProp, card->org_unit); } + + if (card->office) + addPropValue(vobj, "X-EVOLUTION-OFFICE", card->office); if (card->title) addPropValue(vobj, VCTitleProp, card->title); @@ -323,8 +347,29 @@ char if (card->role) addPropValue(vobj, VCBusinessRoleProp, card->role); + if (card->manager) + addPropValue(vobj, "X-EVOLUTION-MANAGER", card->manager); + + if (card->assistant) + addPropValue(vobj, "X-EVOLUTION-ASSISTANT", card->assistant); + if (card->nickname) addPropValue(vobj, "NICKNAME", card->nickname); + + if (card->spouse) + addPropValue(vobj, "X-EVOLUTION-SPOUSE", card->spouse); + + if ( card->anniversary ) { + ECardDate date; + char *value; + date = *card->anniversary; + date.year = MIN(date.year, 9999); + date.month = MIN(date.month, 12); + date.day = MIN(date.day, 31); + value = g_strdup_printf("%04d-%02d-%02d", date.year, date.month, date.day); + addPropValue(vobj, "X-EVOLUTION-ANNIVERSARY", value); + g_free(value); + } if (card->fburl) addPropValue(vobj, "FBURL", card->fburl); @@ -355,19 +400,6 @@ char } } - if (crd->dellabel.l) { - GList *node; - - for (node = crd->dellabel.l; node; node = node->next) { - CardDelLabel *dellabel = (CardDelLabel *) node->data; - - vprop = add_strProp (vobj, VCDeliveryLabelProp, - dellabel->data); - add_AddrType (vprop, dellabel->type); - add_CardProperty (vprop, &dellabel->prop); - } - } - add_CardStrProperty (vobj, VCMailerProp, &crd->mailer); if (crd->timezn.prop.used) { @@ -388,8 +420,6 @@ char add_CardProperty (vprop, &crd->geopos.prop); } - add_CardStrProperty (vobj, VCBusinessRoleProp, &crd->role); - if (crd->logo.prop.used) { vprop = addPropSizedValue (vobj, VCLogoProp, crd->logo.data, crd->logo.size); @@ -400,16 +430,6 @@ char if (crd->agent) addVObjectProp (vobj, card_convert_to_vobject (crd->agent)); - if (crd->org.prop.used) { - vprop = addProp (vobj, VCOrgProp); - add_strProp (vprop, VCOrgNameProp, crd->org.name); - add_strProp (vprop, VCOrgUnitProp, crd->org.unit1); - add_strProp (vprop, VCOrgUnit2Prop, crd->org.unit2); - add_strProp (vprop, VCOrgUnit3Prop, crd->org.unit3); - add_strProp (vprop, VCOrgUnit4Prop, crd->org.unit4); - add_CardProperty (vprop, &crd->org.prop); - } - add_CardStrProperty (vobj, VCCategoriesProp, &crd->categories); add_CardStrProperty (vobj, VCCommentProp, &crd->comment); @@ -438,6 +458,14 @@ char } static void +parse_file_as(ECard *card, VObject *vobj) +{ + if ( card->file_as ) + g_free(card->file_as); + assign_string(vobj, &(card->file_as)); +} + +static void parse_name(ECard *card, VObject *vobj) { if ( card->name ) { @@ -569,6 +597,14 @@ parse_org(ECard *card, VObject *vobj) } static void +parse_office(ECard *card, VObject *vobj) +{ + if ( card->office ) + g_free(card->office); + assign_string(vobj, &(card->office)); +} + +static void parse_title(ECard *card, VObject *vobj) { if ( card->title ) @@ -585,6 +621,22 @@ parse_role(ECard *card, VObject *vobj) } static void +parse_manager(ECard *card, VObject *vobj) +{ + if ( card->manager ) + g_free(card->manager); + assign_string(vobj, &(card->manager)); +} + +static void +parse_assistant(ECard *card, VObject *vobj) +{ + if ( card->assistant ) + g_free(card->assistant); + assign_string(vobj, &(card->assistant)); +} + +static void parse_nickname(ECard *card, VObject *vobj) { if (card->nickname) @@ -593,6 +645,27 @@ parse_nickname(ECard *card, VObject *vobj) } static void +parse_spouse(ECard *card, VObject *vobj) +{ + if ( card->spouse ) + g_free(card->spouse); + assign_string(vobj, &(card->spouse)); +} + +static void +parse_anniversary(ECard *card, VObject *vobj) +{ + if ( vObjectValueType (vobj) ) { + char *str = fakeCString (vObjectUStringZValue (vobj)); + if (card->anniversary) + g_free(card->anniversary); + card->anniversary = g_new(ECardDate, 1); + *(card->anniversary) = e_card_date_from_string(str); + free(str); + } +} + +static void parse_fburl(ECard *card, VObject *vobj) { if (card->fburl) @@ -648,6 +721,8 @@ e_card_class_init (ECardClass *klass) g_hash_table_insert(klass->attribute_jump_table, attribute_jump_array[i].key, attribute_jump_array[i].function); } + gtk_object_add_arg_type ("ECard::file_as", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FILE_AS); gtk_object_add_arg_type ("ECard::full_name", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FULL_NAME); gtk_object_add_arg_type ("ECard::name", @@ -668,12 +743,22 @@ e_card_class_init (ECardClass *klass) GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG); gtk_object_add_arg_type ("ECard::org_unit", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG_UNIT); + gtk_object_add_arg_type ("ECard::office", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_OFFICE); gtk_object_add_arg_type ("ECard::title", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_TITLE); gtk_object_add_arg_type ("ECard::role", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ROLE); + gtk_object_add_arg_type ("ECard::manager", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MANAGER); + gtk_object_add_arg_type ("ECard::assistant", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ASSISTANT); gtk_object_add_arg_type ("ECard::nickname", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NICKNAME); + gtk_object_add_arg_type ("ECard::spouse", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_SPOUSE); + gtk_object_add_arg_type ("ECard::anniversary", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_ANNIVERSARY); gtk_object_add_arg_type ("ECard::fburl", GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FBURL); gtk_object_add_arg_type ("ECard::note", @@ -781,6 +866,8 @@ e_card_destroy (GtkObject *object) ECard *card = E_CARD(object); if ( card->id ) g_free(card->id); + if (card->file_as) + g_free(card->file_as); if ( card->fname ) g_free(card->fname); if ( card->name ) @@ -794,12 +881,22 @@ e_card_destroy (GtkObject *object) g_free(card->org); if (card->org_unit) g_free(card->org_unit); + if (card->office) + g_free(card->office); if (card->title) g_free(card->title); if (card->role) g_free(card->role); + if (card->manager) + g_free(card->manager); + if (card->assistant) + g_free(card->assistant); if (card->nickname) g_free(card->nickname); + if (card->spouse) + g_free(card->spouse); + if (card->anniversary) + g_free(card->anniversary); if (card->fburl) g_free(card->fburl); if (card->note) @@ -825,6 +922,11 @@ e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) card = E_CARD (object); switch (arg_id) { + case ARG_FILE_AS: + if (card->file_as) + g_free(card->file_as); + card->file_as = g_strdup(GTK_VALUE_STRING(*arg)); + break; case ARG_FULL_NAME: if ( card->fname ) g_free(card->fname); @@ -855,6 +957,11 @@ e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) g_free(card->org_unit); card->org_unit = g_strdup(GTK_VALUE_STRING(*arg)); break; + case ARG_OFFICE: + if (card->office) + g_free(card->office); + card->office = g_strdup(GTK_VALUE_STRING(*arg)); + break; case ARG_TITLE: if ( card->title ) g_free(card->title); @@ -865,11 +972,31 @@ e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) g_free(card->role); card->role = g_strdup(GTK_VALUE_STRING(*arg)); break; + case ARG_MANAGER: + if (card->manager) + g_free(card->manager); + card->manager = g_strdup(GTK_VALUE_STRING(*arg)); + break; + case ARG_ASSISTANT: + if (card->assistant) + g_free(card->assistant); + card->assistant = g_strdup(GTK_VALUE_STRING(*arg)); + break; case ARG_NICKNAME: if (card->nickname) g_free(card->nickname); card->nickname = g_strdup(GTK_VALUE_STRING(*arg)); break; + case ARG_SPOUSE: + if (card->spouse) + g_free(card->spouse); + card->spouse = g_strdup(GTK_VALUE_STRING(*arg)); + break; + case ARG_ANNIVERSARY: + if ( card->anniversary ) + g_free(card->anniversary); + card->anniversary = GTK_VALUE_POINTER(*arg); + break; case ARG_FBURL: if (card->fburl) g_free(card->fburl); @@ -899,6 +1026,9 @@ e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) card = E_CARD (object); switch (arg_id) { + case ARG_FILE_AS: + GTK_VALUE_STRING (*arg) = card->file_as; + break; case ARG_FULL_NAME: GTK_VALUE_STRING (*arg) = card->fname; break; @@ -945,15 +1075,30 @@ e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) case ARG_ORG_UNIT: GTK_VALUE_STRING(*arg) = card->org_unit; break; + case ARG_OFFICE: + GTK_VALUE_STRING(*arg) = card->office; + break; case ARG_TITLE: GTK_VALUE_STRING(*arg) = card->title; break; case ARG_ROLE: GTK_VALUE_STRING(*arg) = card->role; break; + case ARG_MANAGER: + GTK_VALUE_STRING(*arg) = card->manager; + break; + case ARG_ASSISTANT: + GTK_VALUE_STRING(*arg) = card->assistant; + break; case ARG_NICKNAME: GTK_VALUE_STRING(*arg) = card->nickname; break; + case ARG_SPOUSE: + GTK_VALUE_STRING(*arg) = card->spouse; + break; + case ARG_ANNIVERSARY: + GTK_VALUE_POINTER(*arg) = card->anniversary; + break; case ARG_FBURL: GTK_VALUE_STRING(*arg) = card->fburl; break; @@ -977,7 +1122,8 @@ static void e_card_init (ECard *card) { card->id = g_strdup(""); - + + card->file_as = NULL; card->fname = NULL; card->name = NULL; card->bday = NULL; @@ -988,9 +1134,14 @@ e_card_init (ECard *card) card->url = NULL; card->org = NULL; card->org_unit = NULL; + card->office = NULL; card->title = NULL; card->role = NULL; + card->manager = NULL; + card->assistant = NULL; card->nickname = NULL; + card->spouse = NULL; + card->anniversary = NULL; card->fburl = NULL; card->note = NULL; #if 0 diff --git a/addressbook/backend/ebook/e-card.h b/addressbook/backend/ebook/e-card.h index 774c327371..1c48376dca 100644 --- a/addressbook/backend/ebook/e-card.h +++ b/addressbook/backend/ebook/e-card.h @@ -31,6 +31,7 @@ struct _ECard { GtkObject object; char *id; + char *file_as; /* The File As field. */ char *fname; /* The full name. */ ECardName *name; /* The structured name. */ ECardList *address; /* Delivery addresses (ECardDeliveryAddress *) */ @@ -48,10 +49,17 @@ struct _ECard { char *org; /* The person's organization. */ char *org_unit; /* The person's organization unit. */ + char *office; /* The person's office. */ char *role; /* The person's role w/in his org */ char *title; /* The person's title w/in his org */ + char *manager; + char *assistant; + char *nickname; /* The person's nickname */ + + char *spouse; /* The person's spouse. */ + ECardDate *anniversary; /* The person's anniversary. */ char *fburl; /* Free Busy URL */ diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c index a1435f9251..cbe75a5aba 100644 --- a/addressbook/backend/pas/pas-backend-file.c +++ b/addressbook/backend/pas/pas-backend-file.c @@ -231,14 +231,19 @@ static struct prop_info { } prop_info_table[] = { /* query prop, ecard prop, type, list compare function */ + { "file_as", "file_as", PROP_TYPE_NORMAL, NULL }, { "full_name", "full_name", PROP_TYPE_NORMAL, NULL }, { "url", "url", PROP_TYPE_NORMAL, NULL }, { "mailer", "mailer", PROP_TYPE_NORMAL, NULL }, { "org", "org", PROP_TYPE_NORMAL, NULL }, { "org_unit", "org_unit", PROP_TYPE_NORMAL, NULL }, + { "office", "office", PROP_TYPE_NORMAL, NULL }, { "title", "title", PROP_TYPE_NORMAL, NULL }, { "role", "role", PROP_TYPE_NORMAL, NULL }, + { "manager", "manager", PROP_TYPE_NORMAL, NULL }, + { "assistant", "assistant", PROP_TYPE_NORMAL, NULL }, { "nickname", "nickname", PROP_TYPE_NORMAL, NULL }, + { "spouse", "spouse", PROP_TYPE_NORMAL, NULL }, { "email", "email", PROP_TYPE_LIST, compare_email }, { "phone", "phone", PROP_TYPE_LIST, compare_phone }, { "address", "address", PROP_TYPE_LIST, compare_address }, |