carddav: add limit support to addressbook-query

References: https://github.com/emersion/go-webdav/issues/18
This commit is contained in:
Simon Ser 2020-01-23 10:35:06 +01:00
parent 70c3bffdf3
commit 94f47fa001
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
3 changed files with 13 additions and 1 deletions

View File

@ -19,10 +19,13 @@ type AddressBook struct {
type AddressBookQuery struct { type AddressBookQuery struct {
Props []string Props []string
AllProp bool AllProp bool
Limit int // <= 0 means unlimited
} }
type AddressBookMultiGet struct { type AddressBookMultiGet struct {
Paths []string Paths []string
Props []string Props []string
AllProp bool AllProp bool
} }

View File

@ -215,6 +215,9 @@ func (c *Client) QueryAddressBook(addressBook string, query *AddressBookQuery) (
} }
addressbookQuery := addressbookQuery{Prop: propReq} addressbookQuery := addressbookQuery{Prop: propReq}
if query.Limit > 0 {
addressbookQuery.Limit = &limit{NResults: uint(query.Limit)}
}
req, err := c.ic.NewXMLRequest("REPORT", addressBook, &addressbookQuery) req, err := c.ic.NewXMLRequest("REPORT", addressBook, &addressbookQuery)
if err != nil { if err != nil {

View File

@ -80,6 +80,12 @@ func (h *Handler) handleQuery(w http.ResponseWriter, query *addressbookQuery) er
q.Props = append(q.Props, p.Name) 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) aos, err := h.Backend.QueryAddressObjects(&q)
if err != nil { if err != nil {