this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 105 lines 1.9 kB view raw
1package config 2 3import ( 4 "errors" 5 "io" 6 "os" 7 "path" 8 "slices" 9 10 "github.com/pelletier/go-toml/v2" 11) 12 13var globalConfig = make(map[string]any) 14 15func LoadOrCreate() error { 16 cfgDir, err := os.UserConfigDir() 17 if err != nil { 18 return err 19 } 20 cfgPath := path.Join(cfgDir, "knit", "config.toml") 21 22 f, err := os.Open(cfgPath) 23 if errors.Is(err, os.ErrNotExist) { 24 return createConfig() 25 } 26 defer f.Close() 27 28 data, err := io.ReadAll(f) 29 if err != nil { 30 return err 31 } 32 33 if err := toml.Unmarshal(data, &globalConfig); err != nil { 34 return err 35 } 36 37 return nil 38} 39 40func createConfig() error { 41 cfgDir, err := os.UserConfigDir() 42 if err != nil { 43 return err 44 } 45 cfgPath := path.Join(cfgDir, "knit", "config.toml") 46 47 return os.WriteFile(cfgPath, []byte{}, 0o600) 48} 49 50func HandlesForHost(host string) []string { 51 hostCfg, ok := globalConfig[host].(map[string]any) 52 if !ok { 53 return []string{} 54 } 55 56 handles, ok := hostCfg["handles"].([]interface{}) 57 if !ok { 58 return []string{} 59 } 60 asStrings := make([]string, 0, len(handles)) 61 for _, handle := range handles { 62 asStrings = append(asStrings, handle.(string)) 63 } 64 return asStrings 65} 66 67func DefaultHandleForHost(host string) string { 68 handles := HandlesForHost(host) 69 if len(handles) == 0 { 70 return "" 71 } 72 return handles[0] 73} 74 75func AddHandleToHost(host string, handle string) error { 76 handles := HandlesForHost(host) 77 if slices.Contains(handles, handle) { 78 return nil 79 } 80 81 handles = append(handles, handle) 82 83 hostCfg, ok := globalConfig[host].(map[string]any) 84 if !ok { 85 hostCfg = make(map[string]any) 86 } 87 88 hostCfg["handles"] = handles 89 globalConfig[host] = hostCfg 90 return WriteConfig() 91} 92 93func WriteConfig() error { 94 cfgDir, err := os.UserConfigDir() 95 if err != nil { 96 return err 97 } 98 cfgPath := path.Join(cfgDir, "knit", "config.toml") 99 data, err := toml.Marshal(globalConfig) 100 if err != nil { 101 return err 102 } 103 104 return os.WriteFile(cfgPath, data, 0o600) 105}