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

Reply via email to