-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtime.go
67 lines (58 loc) · 1.32 KB
/
time.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
package blocks
import (
"context"
"fmt"
"time"
. "github.com/kraftwerk28/gost/core"
"github.com/kraftwerk28/gost/core/formatting"
)
type TimeBlockConfig struct {
Format *ConfigFormat `yaml:"format"`
Layout string `yaml:"layout"`
Interval *ConfigInterval `yaml:"interval"`
}
type TimeBlock struct {
TimeBlockConfig
}
func NewTimeBlock() I3barBlocklet {
defInterval := ConfigInterval(time.Second)
defaultFmt := NewConfigFormatFromString("{layout}")
return &TimeBlock{TimeBlockConfig{
Interval: &defInterval,
Layout: "Mon 02.01.2006 15:04:05",
Format: defaultFmt,
}}
}
func (t *TimeBlock) GetConfig() interface{} {
return &t.TimeBlockConfig
}
func (t *TimeBlock) Run(ch UpdateChan, ctx context.Context) {
tickTimer := time.NewTicker(time.Duration(*t.Interval))
for {
select {
case <-tickTimer.C:
ch.SendUpdate()
case <-ctx.Done():
return
}
}
}
func (t *TimeBlock) Render(cfg *AppConfig) []I3barBlock {
currentTime := time.Now()
return []I3barBlock{{
FullText: t.Format.Expand(formatting.NamedArgs{
"time": fmt.Sprintf(
"%d.%d %d:%d:%d",
currentTime.Day(),
currentTime.Month(),
currentTime.Hour(),
currentTime.Minute(),
currentTime.Second(),
),
"layout": currentTime.Format(t.Layout),
}),
}}
}
func init() {
RegisterBlocklet("time", NewTimeBlock)
}