9e9df5247d51b7c29cbe8a737a12aa4ae7a5fa2f

Author
Toby Padilla <toby@charm.sh>
Committer
Toby Padilla <toby@charm.sh>
Date

Message

Clean up config loading

Diff

 1diff --git a/tui/bubble.go b/tui/bubble.go
 2index 8d1080a35acdba204757bb215d32716665e3b8d1..f6f1c021ea4c0c9a5d5cbc78ac2abc8eaa5a7d62 100644
 3--- a/tui/bubble.go
 4+++ b/tui/bubble.go
 5@@ -164,28 +164,56 @@ func glamourReadme(md string) string {
 6 	return mdt
 7 }
 8 
 9+func loadConfig(rs *git.RepoSource) (*Config, error) {
10+	cfg := &Config{}
11+	cfg.RepoSource = rs
12+	cr, err := rs.GetRepo("config")
13+	if err != nil {
14+		return nil, fmt.Errorf("cannot load config repo: %s", err)
15+	}
16+	cs, err := cr.LatestFile("config.json")
17+	if err != nil {
18+		return nil, fmt.Errorf("cannot load config.json: %s", err)
19+	}
20+	err = json.Unmarshal([]byte(cs), cfg)
21+	if err != nil {
22+		return nil, fmt.Errorf("bad json in config.json: %s", err)
23+	}
24+	return cfg, nil
25+}
26+
27 func SessionHandler(reposPath string, repoPoll time.Duration) func(ssh.Session) (tea.Model, []tea.ProgramOption) {
28-	appCfg := &Config{}
29 	rs := git.NewRepoSource(reposPath, glamourReadme)
30-	appCfg.RepoSource = rs
31-	go func() {
32-		for {
33-			_ = rs.LoadRepos()
34-			cr, err := rs.GetRepo("config")
35-			if err != nil {
36-				log.Fatalf("cannot load config repo: %s", err)
37-			}
38-			cs, err := cr.LatestFile("config.json")
39-			err = json.Unmarshal([]byte(cs), appCfg)
40-			time.Sleep(repoPoll)
41-		}
42-	}()
43 	err := createDefaultConfigRepo(rs)
44 	if err != nil {
45 		if err != nil {
46 			log.Fatalf("cannot create config repo: %s", err)
47 		}
48 	}
49+	appCfg, err := loadConfig(rs)
50+	if err != nil {
51+		if err != nil {
52+			log.Printf("cannot load config: %s", err)
53+		}
54+	}
55+	go func() {
56+		for {
57+			time.Sleep(repoPoll)
58+			err := rs.LoadRepos()
59+			if err != nil {
60+				log.Printf("cannot load repos: %s", err)
61+				continue
62+			}
63+			cfg, err := loadConfig(rs)
64+			if err != nil {
65+				if err != nil {
66+					log.Printf("cannot load config: %s", err)
67+					continue
68+				}
69+			}
70+			appCfg = cfg
71+		}
72+	}()
73 
74 	return func(s ssh.Session) (tea.Model, []tea.ProgramOption) {
75 		if len(s.Command()) == 0 {