forked from pauldemarco/caldav-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
alarm_trigger.go
111 lines (96 loc) · 2.46 KB
/
alarm_trigger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package values
import (
"fmt"
"log"
"strings"
"github.com/soft-stech/caldav-go/icalendar/properties"
"github.com/soft-stech/caldav-go/utils"
)
type AlarmTrigger struct {
Related *AlarmTriggerRelated
Value *AlarmTriggerValue
Relative *Duration
Absolute *DateTime
}
var _ = log.Print
type AlarmTriggerRelated string
const (
StartAlarmTriggerRelated AlarmTriggerRelated = "START"
EndAlarmTriggerRelated AlarmTriggerRelated = "END"
)
type AlarmTriggerValue string
const (
DateTimeAlarmTriggerValue AlarmTriggerValue = "DATE-TIME"
)
func NewAlarmTrigger() *AlarmTrigger {
return &AlarmTrigger{}
}
func (t *AlarmTrigger) EncodeICalName() (properties.PropertyName, error) {
return properties.AlarmTriggerPropertyName, nil
}
func (t *AlarmTrigger) EncodeICalValue() (string, error) {
if t.Related != nil {
return t.Relative.EncodeICalValue()
} else {
return t.Absolute.EncodeICalValue()
}
}
func (t *AlarmTrigger) EncodeICalParams() (params properties.Params, err error) {
if t.Related != nil {
params = properties.Params{
{Name: properties.RelatedPropertyName, Value: string(*t.Related)},
}
} else {
params = properties.Params{
{Name: properties.ValuePropertyName, Value: string(*t.Value)},
}
}
return
}
func (t *AlarmTrigger) DecodeICalValue(value string) error {
if strings.Contains(value, "P") {
d := &Duration{}
if err := d.DecodeICalValue(value); err != nil {
msg := fmt.Sprintf("unable to decode %s value", value)
return utils.NewError(t.DecodeICalValue, msg, t, err)
}
t.Relative = d
} else {
a := &DateTime{}
if err := a.DecodeICalValue(value); err != nil {
msg := fmt.Sprintf("unable to decode %s value", value)
return utils.NewError(t.DecodeICalValue, msg, t, err)
}
t.Absolute = a
}
return nil
}
func (t *AlarmTrigger) DecodeICalParams(params properties.Params) error {
for _, param := range params {
if param.Name == properties.ValuePropertyName {
v := AlarmTriggerValue(param.Value)
t.Value = &v
break
}
}
for _, param := range params {
if param.Name == properties.RelatedPropertyName {
var v AlarmTriggerRelated
if param.Value == "" {
v = StartAlarmTriggerRelated
} else {
v = AlarmTriggerRelated(param.Value)
}
t.Related = &v
break
}
}
return nil
}
func (t *AlarmTrigger) ValidateICalValue() error {
if t.Relative == nil && t.Absolute == nil {
return utils.NewError(t.ValidateICalValue, "a relative or absolute value must be set", t, nil)
} else {
return nil
}
}