140 lines
4.8 KiB
Go
140 lines
4.8 KiB
Go
|
package values
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/dolanor/caldav-go/icalendar/properties"
|
||
|
"github.com/dolanor/caldav-go/utils"
|
||
|
"log"
|
||
|
"net/mail"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var _ = log.Print
|
||
|
|
||
|
// Specifies the organizer of a group scheduled calendar entity. The property is specified within the "VFREEBUSY"
|
||
|
// calendar component to specify the calendar user requesting the free or busy time. When publishing a "VFREEBUSY"
|
||
|
// calendar component, the property is used to specify the calendar that the published busy time came from.
|
||
|
//
|
||
|
// The property has the property parameters CN, for specifying the common or display name associated with the
|
||
|
// "Organizer", DIR, for specifying a pointer to the directory information associated with the "Organizer",
|
||
|
// SENT-BY, for specifying another calendar user that is acting on behalf of the "Organizer". The non-standard
|
||
|
// parameters may also be specified on this property. If the LANGUAGE property parameter is specified, the identified
|
||
|
// language applies to the CN parameter value.
|
||
|
type Contact struct {
|
||
|
Entry mail.Address
|
||
|
}
|
||
|
|
||
|
type AttendeeContact Contact
|
||
|
type OrganizerContact Contact
|
||
|
|
||
|
// creates a new icalendar attendee representation
|
||
|
func NewAttendeeContact(name, email string) *AttendeeContact {
|
||
|
return &AttendeeContact{Entry: mail.Address{Name: name, Address: email}}
|
||
|
}
|
||
|
|
||
|
// creates a new icalendar organizer representation
|
||
|
func NewOrganizerContact(name, email string) *OrganizerContact {
|
||
|
return &OrganizerContact{Entry: mail.Address{Name: name, Address: email}}
|
||
|
}
|
||
|
|
||
|
// validates the contact value for the iCalendar specification
|
||
|
func (c *Contact) ValidateICalValue() error {
|
||
|
email := c.Entry.String()
|
||
|
if _, err := mail.ParseAddress(email); err != nil {
|
||
|
msg := fmt.Sprintf("unable to validate address %s", email)
|
||
|
return utils.NewError(c.ValidateICalValue, msg, c, err)
|
||
|
} else {
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// encodes the contact value for the iCalendar specification
|
||
|
func (c *Contact) EncodeICalValue() (string, error) {
|
||
|
return fmt.Sprintf("MAILTO:%s", c.Entry.Address), nil
|
||
|
}
|
||
|
|
||
|
// encodes the contact params for the iCalendar specification
|
||
|
func (c *Contact) EncodeICalParams() (params properties.Params, err error) {
|
||
|
if c.Entry.Name != "" {
|
||
|
params = properties.Params{properties.CanonicalNameParameterName: c.Entry.Name}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// decodes the contact value from the iCalendar specification
|
||
|
func (c *Contact) DecodeICalValue(value string) error {
|
||
|
parts := strings.SplitN(value, ":", 2)
|
||
|
if len(parts) > 1 {
|
||
|
c.Entry.Address = parts[1]
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// decodes the contact params from the iCalendar specification
|
||
|
func (c *Contact) DecodeICalParams(params properties.Params) error {
|
||
|
if name, found := params[properties.CanonicalNameParameterName]; found {
|
||
|
c.Entry.Name = name
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// validates the contact value for the iCalendar specification
|
||
|
func (c *OrganizerContact) ValidateICalValue() error {
|
||
|
return (*Contact)(c).ValidateICalValue()
|
||
|
}
|
||
|
|
||
|
// encodes the contact value for the iCalendar specification
|
||
|
func (c *OrganizerContact) EncodeICalValue() (string, error) {
|
||
|
return (*Contact)(c).EncodeICalValue()
|
||
|
}
|
||
|
|
||
|
// encodes the contact params for the iCalendar specification
|
||
|
func (c *OrganizerContact) EncodeICalParams() (params properties.Params, err error) {
|
||
|
return (*Contact)(c).EncodeICalParams()
|
||
|
}
|
||
|
|
||
|
// decodes the contact value from the iCalendar specification
|
||
|
func (c *OrganizerContact) DecodeICalValue(value string) error {
|
||
|
return (*Contact)(c).DecodeICalValue(value)
|
||
|
}
|
||
|
|
||
|
// decodes the contact params from the iCalendar specification
|
||
|
func (c *OrganizerContact) DecodeICalParams(params properties.Params) error {
|
||
|
return (*Contact)(c).DecodeICalParams(params)
|
||
|
}
|
||
|
|
||
|
// encodes the contact property name for the iCalendar specification
|
||
|
func (o *OrganizerContact) EncodeICalName() (properties.PropertyName, error) {
|
||
|
return properties.OrganizerPropertyName, nil
|
||
|
}
|
||
|
|
||
|
// validates the contact value for the iCalendar specification
|
||
|
func (c *AttendeeContact) ValidateICalValue() error {
|
||
|
return (*Contact)(c).ValidateICalValue()
|
||
|
}
|
||
|
|
||
|
// encodes the contact value for the iCalendar specification
|
||
|
func (c *AttendeeContact) EncodeICalValue() (string, error) {
|
||
|
return (*Contact)(c).EncodeICalValue()
|
||
|
}
|
||
|
|
||
|
// encodes the contact params for the iCalendar specification
|
||
|
func (c *AttendeeContact) EncodeICalParams() (params properties.Params, err error) {
|
||
|
return (*Contact)(c).EncodeICalParams()
|
||
|
}
|
||
|
|
||
|
// decodes the contact value from the iCalendar specification
|
||
|
func (c *AttendeeContact) DecodeICalValue(value string) error {
|
||
|
return (*Contact)(c).DecodeICalValue(value)
|
||
|
}
|
||
|
|
||
|
// decodes the contact params from the iCalendar specification
|
||
|
func (c *AttendeeContact) DecodeICalParams(params properties.Params) error {
|
||
|
return (*Contact)(c).DecodeICalParams(params)
|
||
|
}
|
||
|
|
||
|
// encodes the contact property name for the iCalendar specification
|
||
|
func (o *AttendeeContact) EncodeICalName() (properties.PropertyName, error) {
|
||
|
return properties.AttendeePropertyName, nil
|
||
|
}
|