main.go (1383B)
1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "os" 8 "path/filepath" 9 "time" 10 11 "code.dwrz.net/src/cmd/statusbar/config" 12 "code.dwrz.net/src/pkg/log" 13 "code.dwrz.net/src/pkg/statusbar" 14 ) 15 16 var once = flag.Bool("once", false, "print output once") 17 18 // TODO: block labels; rendered in case of error. 19 func main() { 20 flag.Parse() 21 22 var ( 23 ctx = context.Background() 24 l = log.New(os.Stderr) 25 ) 26 27 // Setup workspace and log file. 28 cdir, err := os.UserCacheDir() 29 if err != nil { 30 l.Error.Fatalf( 31 "failed to determine user cache directory: %v", err, 32 ) 33 } 34 wdir := filepath.Join(cdir, "statusbar") 35 36 if err := os.MkdirAll(wdir, os.ModeDir|0700); err != nil { 37 l.Error.Fatalf("failed to create tmp dir: %v", err) 38 } 39 40 flog, err := os.Create(wdir + "/log") 41 if err != nil { 42 l.Error.Fatalf("failed to create log file: %v", err) 43 } 44 defer flog.Close() 45 46 // Load the config and create the blocks. 47 cfg, blocks, err := config.Load() 48 if err != nil { 49 l.Error.Fatalf("failed to load config: %v", err) 50 } 51 var bar = statusbar.New(statusbar.Parameters{ 52 Blocks: blocks, 53 Log: log.New(flog), 54 Separator: cfg.Separator, 55 }) 56 57 // Initial print. 58 fmt.Println(bar.Render(ctx)) 59 if *once { 60 os.Exit(0) 61 } 62 63 // Main loop. 64 ticker := time.NewTicker(1 * time.Second) 65 for range ticker.C { 66 // now := time.Now() 67 fmt.Println(bar.Render(ctx)) 68 // fmt.Println(time.Since(now)) 69 } 70 }