feat: implement caldav search
This commit is contained in:
+78
@@ -0,0 +1,78 @@
|
||||
package values
|
||||
|
||||
import (
|
||||
"github.com/dolanor/caldav-go/icalendar/properties"
|
||||
"github.com/dolanor/caldav-go/utils"
|
||||
"log"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
var _ = log.Print
|
||||
|
||||
// Specific venues such as conference or meeting rooms may be explicitly specified using this property. An alternate
|
||||
// representation may be specified that is a URI that points to directory information with more structured specification
|
||||
// of the location. For example, the alternate representation may specify either an LDAP URI pointing to an LDAP server
|
||||
// entry or a CID URI pointing to a MIME body part containing a vCard [RFC 2426] for the location.
|
||||
type Location struct {
|
||||
value string
|
||||
altrep *url.URL
|
||||
}
|
||||
|
||||
// creates a new icalendar location representation
|
||||
func NewLocation(value string, altrep ...*url.URL) *Location {
|
||||
loc := &Location{value: value}
|
||||
if len(altrep) > 0 {
|
||||
loc.altrep = altrep[0]
|
||||
}
|
||||
return loc
|
||||
}
|
||||
|
||||
// returns an alternate representation for the location
|
||||
// if one exists
|
||||
func (l *Location) AltRep() *url.URL {
|
||||
return l.altrep
|
||||
}
|
||||
|
||||
// encodes the location for the iCalendar specification
|
||||
func (l *Location) EncodeICalValue() (string, error) {
|
||||
return l.value, nil
|
||||
}
|
||||
|
||||
// decodes the location from the iCalendar specification
|
||||
func (l *Location) DecodeICalValue(value string) error {
|
||||
l.value = value
|
||||
return nil
|
||||
}
|
||||
|
||||
// encodes the location params for the iCalendar specification
|
||||
func (l *Location) EncodeICalParams() (params properties.Params, err error) {
|
||||
if l.altrep != nil {
|
||||
params = properties.Params{properties.AlternateRepresentationName: l.altrep.String()}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// decodes the location params from the iCalendar specification
|
||||
func (l *Location) DecodeICalParams(params properties.Params) error {
|
||||
if rep, found := params[properties.AlternateRepresentationName]; !found {
|
||||
return nil
|
||||
} else if altrep, err := url.Parse(rep); err != nil {
|
||||
return utils.NewError(l.DecodeICalValue, "unable to parse alternate representation", l, err)
|
||||
} else {
|
||||
l.altrep = altrep
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
// validates the location against the iCalendar specification
|
||||
func (l *Location) ValidateICalValue() error {
|
||||
|
||||
if l.altrep != nil {
|
||||
if _, err := url.Parse(l.altrep.String()); err != nil {
|
||||
msg := "location alternate representation must be a valid url"
|
||||
return utils.NewError(l.ValidateICalValue, msg, l, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user