-
Notifications
You must be signed in to change notification settings - Fork 16
/
config.go
122 lines (113 loc) · 3.38 KB
/
config.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
112
113
114
115
116
117
118
119
120
package gocalendar
import (
// "math"
// "reflect"
"time"
)
// 取日历方式
const (
GridDay int = iota
GridWeek
GridMonth
)
// type CalendarConfig struct 配置
type CalendarConfig struct {
Grid int // 取日历方式,GridDay按天取日历,GridWeek按周取日历,GridMonth按月取日历
FirstWeek int // 日历显示时第一列显示周几,(日历表第一列是周几,0周日,依次最大值6)
TimeZoneName string // 时区名称,需zoneinfo支持的时区名称
SolarTerms bool // 读取节气 bool
Lunar bool // 读取农历 bool
HeavenlyEarthly bool // 读取干支 bool
NightZiHour bool // 区分早晚子时,true则 23:00-24:00 00:00-01:00为子时,否则00:00-02:00为子时
StarSign bool // 读取星座
}
// defaultConfig 新的默认配置
func defaultConfig() CalendarConfig {
return CalendarConfig{
Grid: GridMonth,
FirstWeek: 0,
TimeZoneName: time.Local.String(),
SolarTerms: true,
Lunar: true,
HeavenlyEarthly: true,
NightZiHour: true,
StarSign: true,
}
}
// (*CalendarConfig) clone
func (cfg *CalendarConfig) clone() *CalendarConfig {
return &CalendarConfig{
Grid: cfg.Grid,
FirstWeek: cfg.FirstWeek,
TimeZoneName: cfg.TimeZoneName,
SolarTerms: cfg.SolarTerms,
Lunar: cfg.Lunar,
HeavenlyEarthly: cfg.HeavenlyEarthly,
NightZiHour: cfg.NightZiHour,
StarSign: cfg.StarSign,
}
}
// (*Calendar) GetConfig 读取配置
// 返回的是一个clone
func (c *Calendar) GetConfig() CalendarConfig {
cfg := c.config.clone()
return *cfg
}
// NewConfig 用一个map[string]interface{}新建配置
// func NewConfig(cfgMap map[string]interface{}) CalendarConfig {
// cfg := defaultConfig()
//
// if grid, ok := cfgMap["Grid"]; ok {
// if reflect.TypeOf(grid).Kind() == reflect.Int {
//
// cfg.Grid = int(math.Mod(math.Abs(float64(reflect.ValueOf(grid).Int())),3))
// }
// }
//
// if firstWeek, ok := cfgMap["FirstWeek"]; ok {
// if reflect.TypeOf(firstWeek).Kind() == reflect.Int {
// cfg.FirstWeek = int(math.Mod(math.Abs(float64(reflect.ValueOf(firstWeek).Int())),7))
// }
// }
//
// if timeZoneName, ok := cfgMap["TimeZoneName"]; ok {
// if reflect.TypeOf(timeZoneName).Kind() == reflect.String {
// tzn := reflect.ValueOf(timeZoneName).String()
// if tzn != "" {
// cfg.TimeZoneName = reflect.ValueOf(timeZoneName).String()
// }
// }
// }
//
// if solarTerms, ok := cfgMap["SolarTerms"]; ok {
// if reflect.TypeOf(solarTerms).Kind() == reflect.Bool {
// cfg.SolarTerms = reflect.ValueOf(solarTerms).Bool()
// }
// }
//
// if lunar, ok := cfgMap["Lunar"]; ok {
// if reflect.TypeOf(lunar).Kind() == reflect.Bool {
// cfg.Lunar = reflect.ValueOf(lunar).Bool()
// }
// }
//
// if heavenlyEarthly, ok := cfgMap["HeavenlyEarthly"]; ok {
// if reflect.TypeOf(heavenlyEarthly).Kind() == reflect.Bool {
// cfg.HeavenlyEarthly = reflect.ValueOf(heavenlyEarthly).Bool()
// }
// }
//
// if nightZiHour, ok := cfgMap["NightZiHour"]; ok {
// if reflect.TypeOf(nightZiHour).Kind() == reflect.Bool {
// cfg.NightZiHour = reflect.ValueOf(nightZiHour).Bool()
// }
// }
//
// if starSign, ok := cfgMap["StarSign"]; ok {
// if reflect.TypeOf(starSign).Kind() == reflect.Bool {
// cfg.StarSign = reflect.ValueOf(starSign).Bool()
// }
// }
//
// return cfg
// }