From 94f47fa001ea79fc3040397708f7e0e610fc094d Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Thu, 23 Jan 2020 10:35:06 +0100 Subject: [PATCH] carddav: add limit support to addressbook-query References: https://github.com/emersion/go-webdav/issues/18 --- carddav/carddav.go | 5 ++++- carddav/client.go | 3 +++ carddav/server.go | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/carddav/carddav.go b/carddav/carddav.go index f7dbf8e..ae04f61 100644 --- a/carddav/carddav.go +++ b/carddav/carddav.go @@ -19,10 +19,13 @@ type AddressBook struct { type AddressBookQuery struct { Props []string AllProp bool + + Limit int // <= 0 means unlimited } type AddressBookMultiGet struct { - Paths []string + Paths []string + Props []string AllProp bool } diff --git a/carddav/client.go b/carddav/client.go index 0471d72..9088935 100644 --- a/carddav/client.go +++ b/carddav/client.go @@ -215,6 +215,9 @@ func (c *Client) QueryAddressBook(addressBook string, query *AddressBookQuery) ( } addressbookQuery := addressbookQuery{Prop: propReq} + if query.Limit > 0 { + addressbookQuery.Limit = &limit{NResults: uint(query.Limit)} + } req, err := c.ic.NewXMLRequest("REPORT", addressBook, &addressbookQuery) if err != nil { diff --git a/carddav/server.go b/carddav/server.go index 671d3d4..07e4533 100644 --- a/carddav/server.go +++ b/carddav/server.go @@ -80,6 +80,12 @@ func (h *Handler) handleQuery(w http.ResponseWriter, query *addressbookQuery) er q.Props = append(q.Props, p.Name) } } + if query.Limit != nil { + q.Limit = int(query.Limit.NResults) + if q.Limit <= 0 { + return internal.ServeMultistatus(w, internal.NewMultistatus()) + } + } aos, err := h.Backend.QueryAddressObjects(&q) if err != nil {