From 06702835f3824679d88e55059ec978aed1c1eb07 Mon Sep 17 00:00:00 2001 From: Chris Cummer Date: Mon, 14 May 2018 20:34:31 -0700 Subject: [PATCH] Closes #32. OS version and build info into System module --- system/system_info.go | 33 +++++++++++++++++++++++++++++++++ system/widget.go | 28 +++++++++++++++++++++++----- 2 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 system/system_info.go diff --git a/system/system_info.go b/system/system_info.go new file mode 100644 index 00000000..f3dda46d --- /dev/null +++ b/system/system_info.go @@ -0,0 +1,33 @@ +package system + +import ( + "strings" +) + +type SystemInfo struct { + ProductName string + ProductVersion string + BuildVersion string +} + +func NewSystemInfo(raw string) *SystemInfo { + m := make(map[string]string) + + for _, row := range strings.Split(raw, "\n") { + parts := strings.Split(row, ":") + + if len(parts) < 2 { + continue + } + + m[strings.TrimSpace(parts[0])] = strings.TrimSpace(parts[1]) + } + + sysInfo := SystemInfo{ + ProductName: m["ProductName"], + ProductVersion: m["ProductVersion"], + BuildVersion: m["BuildVersion"], + } + + return &sysInfo +} diff --git a/system/widget.go b/system/widget.go index 435cff12..0c934841 100644 --- a/system/widget.go +++ b/system/widget.go @@ -2,6 +2,7 @@ package system import ( "fmt" + "os/exec" "time" "github.com/olebedev/config" @@ -14,17 +15,21 @@ var Config *config.Config type Widget struct { wtf.TextWidget - BuiltAt string - Version string + systemInfo *SystemInfo + BuiltAt string + Version string } func NewWidget(builtAt, version string) *Widget { widget := Widget{ TextWidget: wtf.NewTextWidget(" Build ", "system", false), - BuiltAt: builtAt, - Version: version, + + BuiltAt: builtAt, + Version: version, } + widget.buildSystemInfo() + return &widget } @@ -37,11 +42,15 @@ func (widget *Widget) Refresh() { fmt.Fprintf( widget.View, - "%6s: %s\n%6s: %s", + "%8s: %s\n%8s: %s\n\n%8s: %s\n%8s: %s", "Built", widget.prettyBuiltAt(), "Vers", widget.Version, + "OS", + widget.systemInfo.ProductVersion, + "Build", + widget.systemInfo.BuildVersion, ) widget.RefreshedAt = time.Now() @@ -55,3 +64,12 @@ func (widget *Widget) prettyBuiltAt() string { return str.Format("Jan _2, 15:04") } } + +func (widget *Widget) buildSystemInfo() { + arg := []string{} + + cmd := exec.Command("sw_vers", arg...) + str := wtf.ExecuteCommand(cmd) + + widget.systemInfo = NewSystemInfo(str) +}