194 lines
4.2 KiB
Go
194 lines
4.2 KiB
Go
package reveil
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type Date time.Time
|
|
|
|
func (d *Date) MarshalJSON() (dst []byte, err error) {
|
|
return []byte(fmt.Sprintf("\"%04d-%02d-%02d\"", time.Time(*d).Year(), time.Time(*d).Month(), time.Time(*d).Day())), nil
|
|
}
|
|
|
|
func (d *Date) UnmarshalJSON(src []byte) error {
|
|
tmp, err := time.Parse("\"2006-01-02\"", string(src))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*d = Date(tmp)
|
|
|
|
return nil
|
|
}
|
|
|
|
type Hour time.Time
|
|
|
|
func (h *Hour) MarshalJSON() (dst []byte, err error) {
|
|
return []byte(fmt.Sprintf("\"%02d:%02d\"", time.Time(*h).Hour(), time.Time(*h).Minute())), nil
|
|
}
|
|
|
|
func (h *Hour) UnmarshalJSON(src []byte) error {
|
|
tmp, err := time.Parse("\"15:04\"", string(src))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*h = Hour(tmp)
|
|
|
|
return nil
|
|
}
|
|
|
|
type AlarmRepeated struct {
|
|
Id Identifier `json:"id"`
|
|
Weekday uint8 `json:"weekday"`
|
|
StartTime *Hour `json:"time"`
|
|
FollowingRoutines []Identifier `json:"routines"`
|
|
IgnoreExceptions bool `json:"ignore_exceptions"`
|
|
Comment string `json:"comment"`
|
|
}
|
|
|
|
func GetAlarmRepeated(db *LevelDBStorage, id Identifier) (alarm *AlarmRepeated, err error) {
|
|
alarm = &AlarmRepeated{}
|
|
err = db.get(fmt.Sprintf("alarm-repeated-%s", id.ToString()), alarm)
|
|
return
|
|
}
|
|
|
|
func GetAlarmsRepeated(db *LevelDBStorage) (alarms []*AlarmRepeated, err error) {
|
|
iter := db.search("alarm-repeated-")
|
|
defer iter.Release()
|
|
|
|
for iter.Next() {
|
|
var a AlarmRepeated
|
|
|
|
err = decodeData(iter.Value(), &a)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
alarms = append(alarms, &a)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func PutAlarmRepeated(db *LevelDBStorage, alarm *AlarmRepeated) (err error) {
|
|
var key string
|
|
var id Identifier
|
|
|
|
if alarm.Id.IsEmpty() {
|
|
key, id, err = db.findBytesKey("alarm-repeated-", IDENTIFIER_LEN)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
alarm.Id = id
|
|
|
|
return db.put(key, alarm)
|
|
}
|
|
|
|
func DeleteAlarmRepeated(db *LevelDBStorage, alarm *AlarmRepeated) (err error) {
|
|
return db.delete(fmt.Sprintf("alarm-repeated-%s", alarm.Id.ToString()))
|
|
}
|
|
|
|
type AlarmSingle struct {
|
|
Id Identifier `json:"id"`
|
|
Time time.Time `json:"time"`
|
|
FollowingRoutines []Identifier `json:"routines"`
|
|
Comment string `json:"comment"`
|
|
}
|
|
|
|
func GetAlarmSingle(db *LevelDBStorage, id Identifier) (alarm *AlarmSingle, err error) {
|
|
alarm = &AlarmSingle{}
|
|
err = db.get(fmt.Sprintf("alarm-single-%s", id.ToString()), alarm)
|
|
return
|
|
}
|
|
|
|
func GetAlarmsSingle(db *LevelDBStorage) (alarms []*AlarmSingle, err error) {
|
|
iter := db.search("alarm-single-")
|
|
defer iter.Release()
|
|
|
|
for iter.Next() {
|
|
var a AlarmSingle
|
|
|
|
err = decodeData(iter.Value(), &a)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
alarms = append(alarms, &a)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func PutAlarmSingle(db *LevelDBStorage, alarm *AlarmSingle) (err error) {
|
|
var key string
|
|
var id Identifier
|
|
|
|
if alarm.Id.IsEmpty() {
|
|
key, id, err = db.findBytesKey("alarm-single-", IDENTIFIER_LEN)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
alarm.Id = id
|
|
|
|
return db.put(key, alarm)
|
|
}
|
|
|
|
func DeleteAlarmSingle(db *LevelDBStorage, alarm *AlarmSingle) (err error) {
|
|
return db.delete(fmt.Sprintf("alarm-single-%s", alarm.Id.ToString()))
|
|
}
|
|
|
|
type AlarmException struct {
|
|
Id Identifier `json:"id"`
|
|
Start *Date `json:"start"`
|
|
End *Date `json:"end"`
|
|
Comment string `json:"comment"`
|
|
}
|
|
|
|
func GetAlarmException(db *LevelDBStorage, id Identifier) (alarm *AlarmException, err error) {
|
|
alarm = &AlarmException{}
|
|
err = db.get(fmt.Sprintf("alarm-exception-%s", id.ToString()), alarm)
|
|
return
|
|
}
|
|
|
|
func GetAlarmExceptions(db *LevelDBStorage) (alarms []*AlarmException, err error) {
|
|
iter := db.search("alarm-exception-")
|
|
defer iter.Release()
|
|
|
|
for iter.Next() {
|
|
var a AlarmException
|
|
|
|
err = decodeData(iter.Value(), &a)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
alarms = append(alarms, &a)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func PutAlarmException(db *LevelDBStorage, alarm *AlarmException) (err error) {
|
|
var key string
|
|
var id Identifier
|
|
|
|
if alarm.Id.IsEmpty() {
|
|
key, id, err = db.findBytesKey("alarm-exception-", IDENTIFIER_LEN)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
alarm.Id = id
|
|
|
|
return db.put(key, alarm)
|
|
}
|
|
|
|
func DeleteAlarmException(db *LevelDBStorage, alarm *AlarmException) (err error) {
|
|
return db.delete(fmt.Sprintf("alarm-exception-%s", alarm.Id.ToString()))
|
|
}
|