package gime import ( "errors" "time" "github.com/pborman/uuid" ) // Entry is a time entry type TimeEntry struct { uuid string start time.Time end time.Time tags []string } // CreateTimeEntry creates an entry with the given parameters and returns it. // An error is returned if no start time is given or if the end time given is // non-zero and earlier than the start time. func CreateTimeEntry(s, e time.Time, t []string) (*TimeEntry, error) { ret := new(TimeEntry) ret.uuid = uuid.New() if s.IsZero() { // No start time given, return error return ret, errors.New("No start time given") } if !e.IsZero() { if !e.After(s) { // Given end time is earlier than start time return ret, errors.New("End time is before start time") } } return &TimeEntry{start: s, end: e, tags: t}, nil } // GetStart returns the start time for the entry func (t *TimeEntry) GetStart() time.Time { return t.start } // SetStart sets the start time on the time entry func (t *TimeEntry) SetStart(s time.Time) { t.start = s } // GetEnd returns the end time for the entry func (t *TimeEntry) GetEnd() time.Time { return t.end } // SetEnd sets the end time on the time entry func (t *TimeEntry) SetEnd(e time.Time) { t.end = e } // IsActive return true if start is earlier than now and end is zero func (t *TimeEntry) IsActive() bool { return time.Now().After(t.start) && !t.end.IsZero() } // GetTags returns all of the tags associated with this time entry func (t *TimeEntry) GetTags() []string { return t.tags } // HasTag returns if the time entry contains a specific tag func (t *TimeEntry) HasTag(s string) bool { for i := range t.tags { if t.tags[i] == s { return true } } return false } // AddTag adds a tag to the time entry (if it isn't already there) func (t *TimeEntry) AddTag(s string) { if !t.HasTag(s) { t.tags = append(t.tags, s) } } // RemoveTag removes a tag from the time entry func (t *TimeEntry) RemoveTag(s string) { var i int var fnd bool for i = range t.tags { if t.tags[i] == s { fnd = true break } } if fnd { t.tags = append(t.tags[:i], t.tags[i+1:]...) } } func (t *TimeEntry) Equals(tst *TimeEntry) bool { return t.uuid == tst.uuid }