This email list is read-only. Emails sent to this list will be discarded ---------------------------------- plugins/ebook.c | 47 +++++++++++++++++++++++++++++++++++ src/pbap.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/phonebook.c | 24 ++++++++++++++++++ src/phonebook.h | 16 ++++++++++- 4 files changed, 158 insertions(+), 3 deletions(-)
New commits: commit 1135852ae0f4b8806c36c009d9ee6b5ea1d9f40e Author: Marcel Holtmann <[email protected]> Date: Fri Dec 12 11:33:57 2008 +0100 Remove extra empty line commit 0deedcaa2c8c418c331202ebad180a194a1c0977 Author: Forrest Zhao <[email protected]> Date: Fri Dec 12 06:27:23 2008 +0800 add support for PBAP Pullvcardentry commit 6e61b3b6f979ed1877dcddd0010adbd292e94c91 Author: Forrest Zhao <[email protected]> Date: Fri Dec 12 05:13:37 2008 +0800 add support for PBAP Pullvcardlisting Diff in this email is a maximum of 400 lines. diff --git a/plugins/ebook.c b/plugins/ebook.c index 5316bd8..da8bc9b 100644 --- a/plugins/ebook.c +++ b/plugins/ebook.c @@ -101,11 +101,58 @@ static int ebook_pullphonebook(struct phonebook_context *context, return 0; } +static int ebook_pullvcardlisting(struct phonebook_context *context, + gchar *objname, guint8 order, guint8 *searchval, + guint8 searchattrib, guint16 maxlistcount, + guint16 liststartoffset, guint16 *phonebooksize, + guint8 *newmissedcalls) +{ + EBook *book; + EBookQuery *query; + + DBG("context %p", context); + + phonebook_ref(context); + + book = e_book_new_default_addressbook(NULL); + + e_book_open(book, FALSE, NULL); + + query = e_book_query_any_field_contains(""); + + e_book_async_get_contacts(book, query, ebooklist_cb, context); + + return 0; +} + +static int ebook_pullvcardentry(struct phonebook_context *context, + gchar *objname, guint64 filter, guint8 format) +{ + EBook *book; + EBookQuery *query; + + DBG("context %p", context); + + phonebook_ref(context); + + book = e_book_new_default_addressbook(NULL); + + e_book_open(book, FALSE, NULL); + + query = e_book_query_any_field_contains(""); + + e_book_async_get_contacts(book, query, ebooklist_cb, context); + + return 0; +} + static struct phonebook_driver ebook_driver = { .name = "ebook", .create = ebook_create, .destroy = ebook_destroy, .pullphonebook = ebook_pullphonebook, + .pullvcardlisting = ebook_pullvcardlisting, + .pullvcardentry = ebook_pullvcardentry, }; static int ebook_init(void) diff --git a/src/pbap.c b/src/pbap.c index b7a3311..13f21e0 100644 --- a/src/pbap.c +++ b/src/pbap.c @@ -35,7 +35,9 @@ #include "logging.h" #include "obex.h" -#define PHONEBOOK_TYPE "x-bt/phonebook" +#define PHONEBOOK_TYPE "x-bt/phonebook" +#define VCARDLISTING_TYPE "x-bt/vcard-listing" +#define VCARDENTRY_TYPE "x-bt/vcard" #define ORDER_TAG 0x01 #define SEARCHVALUE_TAG 0x02 @@ -257,6 +259,72 @@ static int pbap_pullphonebook(obex_t *obex, obex_object_t *obj, newmissedcalls, addbody); } +static int pbap_pullvcardlisting(obex_t *obex, obex_object_t *obj, + gboolean *addbody) +{ + struct obex_session *session = OBEX_GetUserData(obex); + gchar *fullname; + struct apparam_field apparam; + guint8 newmissedcalls = 0; + guint16 phonebooksize = 0; + int err; + + memset(&apparam, 0, sizeof(struct apparam_field)); + + err = pbap_parse_apparam_header(obex, obj, &apparam); + if (err < 0) + return err; + + fullname = g_build_filename(session->current_folder, + session->name, NULL); + err = phonebook_pullvcardlisting(session->pbctx, fullname, + apparam.order, apparam.searchval, + apparam.searchattrib, + apparam.maxlistcount, + apparam.liststartoffset, + &phonebooksize, &newmissedcalls); + if (err < 0) + goto done; + + g_free(fullname); + + fullname = g_build_filename(session->current_folder, session->name, + NULL); + if (fullname != NULL) + fullname = g_strconcat(fullname, ".vcf", NULL); + + err = pbap_add_result_apparam_header(obex, obj, apparam.maxlistcount, + fullname, phonebooksize, + newmissedcalls, addbody); + +done: + g_free(apparam.searchval); + g_free(fullname); + return err; +} + +static int pbap_pullvcardentry(obex_t *obex, obex_object_t *obj) +{ + struct obex_session *session = OBEX_GetUserData(obex); + gchar *fullname; + struct apparam_field apparam; + int err; + + memset(&apparam, 0, sizeof(struct apparam_field)); + err = pbap_parse_apparam_header(obex, obj, &apparam); + if (err < 0) + return err; + + fullname = g_build_filename(session->current_folder, + session->name, NULL); + err = phonebook_pullvcardentry(session->pbctx, fullname, + apparam.filter, apparam.format); + + g_free(apparam.searchval); + g_free(fullname); + return err; +} + void pbap_get(obex_t *obex, obex_object_t *obj) { struct obex_session *session = OBEX_GetUserData(obex); @@ -274,6 +342,10 @@ void pbap_get(obex_t *obex, obex_object_t *obj) if (g_str_equal(session->type, PHONEBOOK_TYPE) == TRUE) err = pbap_pullphonebook(obex, obj, &addbody); + else if (g_str_equal(session->type, VCARDLISTING_TYPE) == TRUE) + err = pbap_pullvcardlisting(obex, obj, &addbody); + else if (g_str_equal(session->type, VCARDENTRY_TYPE) == TRUE) + err = pbap_pullvcardentry(obex, obj); else goto fail; diff --git a/src/phonebook.c b/src/phonebook.c index 874da7d..ab97b97 100644 --- a/src/phonebook.c +++ b/src/phonebook.c @@ -114,6 +114,30 @@ int phonebook_pullphonebook(struct phonebook_context *context, gchar *objname, newmissedcalls); } +int phonebook_pullvcardlisting(struct phonebook_context *context, + gchar *objname, guint8 order, guint8 *searchval, + guint8 searchattrib, guint16 maxlistcount, + guint16 liststartoffset, guint16 *phonebooksize, + guint8 *newmissedcalls) +{ + if (!context->driver->pullvcardlisting) + return -1; + + return context->driver->pullvcardlisting(context, objname, order, + searchval, searchattrib, maxlistcount, + liststartoffset, phonebooksize, newmissedcalls); +} + +int phonebook_pullvcardentry(struct phonebook_context *context, gchar *objname, + guint64 filter, guint8 format) +{ + if (!context->driver->pullvcardentry) + return -1; + + return context->driver->pullvcardentry(context, objname, filter, + format); +} + /* if buf is NULL or size is 0, this indicate that no more result will * be returned by PBAP plugin * */ diff --git a/src/phonebook.h b/src/phonebook.h index c334c05..4a270e8 100644 --- a/src/phonebook.h +++ b/src/phonebook.h @@ -53,6 +53,13 @@ extern int phonebook_pullphonebook(struct phonebook_context *context, gchar *objname, guint64 filter, guint8 format, guint16 maxlistcount, guint16 liststartoffset, guint16 *phonebooksize, guint8 *newmissedcalls); +extern int phonebook_pullvcardlisting(struct phonebook_context *context, + gchar *objname, guint8 order, guint8 *searchval, + guint8 searchattrib, guint16 maxlistcount, + guint16 liststartoffset, guint16 *phonebooksize, + guint8 *newmissedcalls); +extern int phonebook_pullvcardentry(struct phonebook_context *context, + gchar *objname, guint64 filter, guint8 format); extern void phonebook_return(struct phonebook_context *context, char *buf, int size); @@ -64,8 +71,13 @@ struct phonebook_driver { gchar *objname, guint64 filter, guint8 format, guint16 maxlistcount, guint16 liststartoffset, guint16 *phonebooksize, guint8 *newmissedcalls); - int (*pullvcardlisting) (struct phonebook_context *context); - int (*pullvcardentry) (struct phonebook_context *context); + int (*pullvcardlisting) (struct phonebook_context *context, + gchar *objname, guint8 order, guint8 *searchval, + guint8 searchattrib, guint16 maxlistcount, + guint16 liststartoffset, guint16 *phonebooksize, + guint8 *newmissedcalls); + int (*pullvcardentry) (struct phonebook_context *context, + gchar *objname, guint64 filter, guint8 format); }; extern int phonebook_driver_register(struct phonebook_driver *driver); _______________________________________________ Commits mailing list [email protected] https://lists.moblin.org/mailman/listinfo/commits
