summaryrefslogtreecommitdiff
path: root/plugins/phonebook-tracker.c
diff options
context:
space:
mode:
authorRadoslaw Jablonski <ext-jablonski.radoslaw@nokia.com>2011-02-14 11:19:50 +0200
committerJohan Hedberg <johan.hedberg@nokia.com>2011-02-15 11:19:55 -0300
commitae6e7fe491c9d86682fbe379b967ab32cfbafb31 (patch)
tree3320a4651b8a8f79d1b49b2bf9ce2304b76439f5 /plugins/phonebook-tracker.c
parent4170f13ece1f0218ad70ec2bc6c2536367eed922 (diff)
downloadobexd-ae6e7fe491c9d86682fbe379b967ab32cfbafb31.tar.gz
Introduction of phonebook_pull_read
Previosly reading from backend was initialized in phonebook_pull. Now phonebook_pull should be used only for preparing request data and phonebook_pull_read for 'real' reading vcards data from back-end. The back-end can return data in one response or it can return data in many parts. After obtaining one part, PBAP core need to call phonebook_pull_read with the same request again to get more results. Using that, PBAP core has control of its the buffer size - it can ask for new parts of data when buffer is empty or when its size will be lower than some level.
Diffstat (limited to 'plugins/phonebook-tracker.c')
-rw-r--r--plugins/phonebook-tracker.c51
1 files changed, 32 insertions, 19 deletions
diff --git a/plugins/phonebook-tracker.c b/plugins/phonebook-tracker.c
index aea2365..e7f0807 100644
--- a/plugins/phonebook-tracker.c
+++ b/plugins/phonebook-tracker.c
@@ -918,6 +918,7 @@ struct phonebook_data {
phonebook_entry_cb entry_cb;
int newmissedcalls;
GCancellable *query_canc;
+ char *req_name;
};
struct phonebook_index {
@@ -1819,6 +1820,7 @@ void phonebook_req_finalize(void *request)
}
g_slist_free(data->contacts);
+ g_free(data->req_name);
g_free(data);
}
@@ -1897,41 +1899,52 @@ void *phonebook_pull(const char *name, const struct apparam_field *params,
phonebook_cb cb, void *user_data, int *err)
{
struct phonebook_data *data;
- const char *query;
- reply_list_foreach_t pull_cb;
- int col_amount, ret;
DBG("name %s", name);
- if (g_strcmp0(name, "telecom/mch.vcf") == 0) {
+ data = g_new0(struct phonebook_data, 1);
+ data->params = params;
+ data->user_data = user_data;
+ data->cb = cb;
+ data->req_name = g_strdup(name);
+
+ if (err)
+ *err = 0;
+
+ return data;
+}
+
+int phonebook_pull_read(void *request)
+{
+ struct phonebook_data *data = request;
+ reply_list_foreach_t pull_cb;
+ const char *query;
+ int col_amount;
+ int ret;
+
+ if(!data)
+ return -ENOENT;
+
+ if (g_strcmp0(data->req_name, "telecom/mch.vcf") == 0) {
query = NEW_MISSED_CALLS_LIST;
col_amount = PULL_QUERY_COL_AMOUNT;
pull_cb = pull_newmissedcalls;
- } else if (params->maxlistcount == 0) {
- query = name2count_query(name);
+ } else if (data->params->maxlistcount == 0) {
+ query = name2count_query(data->req_name);
col_amount = COUNT_QUERY_COL_AMOUNT;
pull_cb = pull_contacts_size;
} else {
- query = name2query(name);
+ query = name2query(data->req_name);
col_amount = PULL_QUERY_COL_AMOUNT;
pull_cb = pull_contacts;
}
- if (query == NULL) {
- if (err)
- *err = -ENOENT;
- return NULL;
- }
+ if (query == NULL)
+ return -ENOENT;
- data = g_new0(struct phonebook_data, 1);
- data->params = params;
- data->user_data = user_data;
- data->cb = cb;
ret = query_tracker(query, col_amount, pull_cb, data);
- if (err)
- *err = ret;
- return data;
+ return ret;
}
void *phonebook_get_entry(const char *folder, const char *id,