src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

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 }