mirror of
https://github.com/Threnklyn/zeit.git
synced 2026-05-18 12:53:30 +02:00
Update .editorconfig, run gofumpt -w ./
This commit is contained in:
@@ -4,8 +4,6 @@ root = true
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
max_line = 80
|
||||
|
||||
|
||||
+9
-8
@@ -2,10 +2,11 @@ package z
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
"strings"
|
||||
"github.com/shopspring/decimal"
|
||||
"time"
|
||||
|
||||
"github.com/jinzhu/now"
|
||||
"github.com/shopspring/decimal"
|
||||
// "github.com/gookit/color"
|
||||
)
|
||||
|
||||
@@ -123,7 +124,7 @@ func NewCalendar(entries []Entry) (Calendar, error) {
|
||||
cal.Months[month0].Weeks[weeknumber0].Statistics[weekdayName] = append(cal.Months[month0].Weeks[weeknumber0].Statistics[weekdayName], stat)
|
||||
}
|
||||
|
||||
var dist = cal.Distribution[entry.Project]
|
||||
dist := cal.Distribution[entry.Project]
|
||||
dist.Project = entry.Project
|
||||
dist.Hours = dist.Hours.Add(sameDayHours)
|
||||
dist.Hours = dist.Hours.Add(nextDayHours)
|
||||
@@ -138,14 +139,14 @@ func NewCalendar(entries []Entry) (Calendar, error) {
|
||||
return cal, nil
|
||||
}
|
||||
|
||||
func (calendar *Calendar) GetOutputForWeekCalendar(date time.Time, month int, week int) (string) {
|
||||
func (calendar *Calendar) GetOutputForWeekCalendar(date time.Time, month int, week int) string {
|
||||
var output string = ""
|
||||
var bars [][]string
|
||||
var totalHours = decimal.NewFromInt(0)
|
||||
totalHours := decimal.NewFromInt(0)
|
||||
|
||||
var days = []string{"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
|
||||
days := []string{"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"}
|
||||
for _, day := range days {
|
||||
var dayHours = decimal.NewFromInt(0)
|
||||
dayHours := decimal.NewFromInt(0)
|
||||
|
||||
for _, stat := range calendar.Months[month].Weeks[week].Statistics[day] {
|
||||
dayHours = dayHours.Add(stat.Hours)
|
||||
@@ -175,7 +176,7 @@ func (calendar *Calendar) GetOutputForWeekCalendar(date time.Time, month int, we
|
||||
return output
|
||||
}
|
||||
|
||||
func (calendar *Calendar) GetOutputForDistribution() (string) {
|
||||
func (calendar *Calendar) GetOutputForDistribution() string {
|
||||
var output string = ""
|
||||
|
||||
// fmt.Printf("%s\n", calendar.TotalHours.String())
|
||||
|
||||
@@ -16,4 +16,3 @@ const (
|
||||
FinishWithMetadata int = 0
|
||||
FinishOnlyTime int = 1
|
||||
)
|
||||
|
||||
|
||||
+7
-7
@@ -8,8 +8,8 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/tidwall/buntdb"
|
||||
"github.com/spf13/viper"
|
||||
"github.com/tidwall/buntdb"
|
||||
)
|
||||
|
||||
type Database struct {
|
||||
@@ -34,7 +34,7 @@ func InitDatabase() (*Database, error) {
|
||||
return &database, nil
|
||||
}
|
||||
|
||||
func (database *Database) NewID() (string) {
|
||||
func (database *Database) NewID() string {
|
||||
id, err := uuid.NewRandom()
|
||||
if err != nil {
|
||||
log.Fatalln("could not generate UUID: %+v", err)
|
||||
@@ -135,7 +135,7 @@ func (database *Database) FinishEntry(user string, entry Entry) (string, error)
|
||||
return entry.ID, dberr
|
||||
}
|
||||
|
||||
func (database *Database) EraseEntry(user string, id string) (error) {
|
||||
func (database *Database) EraseEntry(user string, id string) error {
|
||||
runningEntryId, err := database.GetRunningEntryId(user)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -200,7 +200,7 @@ func (database *Database) ListEntries(user string) ([]Entry, error) {
|
||||
}
|
||||
|
||||
func (database *Database) GetImportsSHA1List(user string) (map[string]string, error) {
|
||||
var sha1List = make(map[string]string)
|
||||
sha1List := make(map[string]string)
|
||||
|
||||
dberr := database.DB.View(func(tx *buntdb.Tx) error {
|
||||
value, err := tx.Get(user+":imports:sha1", false)
|
||||
@@ -223,7 +223,7 @@ func (database *Database) GetImportsSHA1List(user string) (map[string]string, er
|
||||
return sha1List, dberr
|
||||
}
|
||||
|
||||
func (database *Database) UpdateImportsSHA1List(user string, sha1List map[string]string) (error) {
|
||||
func (database *Database) UpdateImportsSHA1List(user string, sha1List map[string]string) error {
|
||||
var sha1Entries []string
|
||||
|
||||
for sha1, id := range sha1List {
|
||||
@@ -244,7 +244,7 @@ func (database *Database) UpdateImportsSHA1List(user string, sha1List map[string
|
||||
return dberr
|
||||
}
|
||||
|
||||
func (database *Database) UpdateProject(user string, projectName string, project Project) (error) {
|
||||
func (database *Database) UpdateProject(user string, projectName string, project Project) error {
|
||||
projectJson, jsonerr := json.Marshal(project)
|
||||
if jsonerr != nil {
|
||||
return jsonerr
|
||||
@@ -282,7 +282,7 @@ func (database *Database) GetProject(user string, projectName string) (Project,
|
||||
return project, dberr
|
||||
}
|
||||
|
||||
func (database *Database) UpdateTask(user string, taskName string, task Task) (error) {
|
||||
func (database *Database) UpdateTask(user string, taskName string, task Task) error {
|
||||
taskJson, jsonerr := json.Marshal(task)
|
||||
if jsonerr != nil {
|
||||
return jsonerr
|
||||
|
||||
+11
-11
@@ -2,9 +2,10 @@ package z
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
"fmt"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/spf13/viper"
|
||||
@@ -28,7 +29,8 @@ func NewEntry(
|
||||
finish string,
|
||||
project string,
|
||||
task string,
|
||||
user string) (Entry, error) {
|
||||
user string,
|
||||
) (Entry, error) {
|
||||
var err error
|
||||
|
||||
newEntry := Entry{}
|
||||
@@ -55,7 +57,7 @@ func NewEntry(
|
||||
return newEntry, nil
|
||||
}
|
||||
|
||||
func (entry *Entry) SetIDFromDatabaseKey(key string) (error) {
|
||||
func (entry *Entry) SetIDFromDatabaseKey(key string) error {
|
||||
splitKey := strings.Split(key, ":")
|
||||
|
||||
if len(splitKey) < 3 || len(splitKey) > 3 {
|
||||
@@ -100,11 +102,11 @@ func (entry *Entry) SetFinishFromString(finish string, contextTime time.Time) (t
|
||||
return entry.Finish, nil
|
||||
}
|
||||
|
||||
func (entry *Entry) IsFinishedAfterBegan() (bool) {
|
||||
func (entry *Entry) IsFinishedAfterBegan() bool {
|
||||
return (entry.Finish.IsZero() || entry.Begin.Before(entry.Finish) || entry.Begin.Equal(entry.Finish))
|
||||
}
|
||||
|
||||
func (entry *Entry) GetOutputForTrack(isRunning bool, wasRunning bool) (string) {
|
||||
func (entry *Entry) GetOutputForTrack(isRunning bool, wasRunning bool) string {
|
||||
var outputPrefix string = ""
|
||||
var outputSuffix string = ""
|
||||
|
||||
@@ -132,15 +134,15 @@ func (entry *Entry) GetOutputForTrack(isRunning bool, wasRunning bool) (string)
|
||||
return fmt.Sprintf("%s %s task%s\n", CharTrack, outputPrefix, outputSuffix)
|
||||
}
|
||||
|
||||
func (entry *Entry) GetDuration() (decimal.Decimal) {
|
||||
func (entry *Entry) GetDuration() decimal.Decimal {
|
||||
duration := entry.Finish.Sub(entry.Begin)
|
||||
if (duration < 0) {
|
||||
if duration < 0 {
|
||||
duration = time.Now().Sub(entry.Begin)
|
||||
}
|
||||
return decimal.NewFromFloat(duration.Hours())
|
||||
}
|
||||
|
||||
func (entry *Entry) GetOutputForFinish() (string) {
|
||||
func (entry *Entry) GetOutputForFinish() string {
|
||||
var outputSuffix string = ""
|
||||
|
||||
trackDiff := entry.Finish.Sub(entry.Begin)
|
||||
@@ -159,7 +161,7 @@ func (entry *Entry) GetOutputForFinish() (string) {
|
||||
return fmt.Sprintf("%s finished tracking task%s\n", CharFinish, outputSuffix)
|
||||
}
|
||||
|
||||
func (entry *Entry) GetOutput(full bool) (string) {
|
||||
func (entry *Entry) GetOutput(full bool) string {
|
||||
var output string = ""
|
||||
var entryFinish time.Time
|
||||
var isRunning string = ""
|
||||
@@ -174,7 +176,6 @@ func (entry *Entry) GetOutput(full bool) (string) {
|
||||
trackDiff := entryFinish.Sub(entry.Begin)
|
||||
taskDuration := fmtDuration(trackDiff)
|
||||
if full == false {
|
||||
|
||||
output = fmt.Sprintf("%s %s on %s from %s to %s (%sh) %s",
|
||||
color.FgGray.Render(entry.ID),
|
||||
color.FgLightWhite.Render(entry.Task),
|
||||
@@ -237,4 +238,3 @@ func (entry *Entry) secondsFinish() {
|
||||
entry.Finish = entry.Finish.Truncate(time.Duration(time.Minute))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -1,10 +1,11 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"github.com/spf13/cobra"
|
||||
"os"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var eraseCmd = &cobra.Command{
|
||||
|
||||
+5
-4
@@ -1,10 +1,11 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"strings"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
@@ -53,7 +54,7 @@ var exportCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
var output string = ""
|
||||
switch(format) {
|
||||
switch format {
|
||||
case "zeit":
|
||||
output, err = exportZeitJson(user, filteredEntries)
|
||||
if err != nil {
|
||||
|
||||
+13
-15
@@ -1,21 +1,21 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os/user"
|
||||
"os/exec"
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
"math"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/araddon/dateparse"
|
||||
"github.com/spf13/viper"
|
||||
"github.com/jinzhu/now"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
func TimeFormats() []string {
|
||||
@@ -27,7 +27,7 @@ func TimeFormats() []string {
|
||||
}
|
||||
}
|
||||
|
||||
func GetCurrentUser() (string) {
|
||||
func GetCurrentUser() string {
|
||||
user, err := user.Current()
|
||||
if err != nil {
|
||||
return "unknown"
|
||||
@@ -36,7 +36,7 @@ func GetCurrentUser() (string) {
|
||||
return user.Username
|
||||
}
|
||||
|
||||
func GetTimeFormat(timeStr string) (int) {
|
||||
func GetTimeFormat(timeStr string) int {
|
||||
var matched bool
|
||||
var regerr error
|
||||
|
||||
@@ -56,7 +56,7 @@ func GetTimeFormat(timeStr string) (int) {
|
||||
|
||||
// TODO: Use https://golang.org/pkg/time/#ParseDuration
|
||||
func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, error) {
|
||||
var re = regexp.MustCompile(TimeFormats()[ftId])
|
||||
re := regexp.MustCompile(TimeFormats()[ftId])
|
||||
gm := re.FindStringSubmatch(timeStr)
|
||||
|
||||
if len(gm) < 4 {
|
||||
@@ -115,7 +115,6 @@ func ParseTime(timeStr string, contextTime time.Time) (time.Time, error) {
|
||||
return RelToTime(timeStr, tfId, contextTime)
|
||||
default:
|
||||
loc, err := time.LoadLocation("Local")
|
||||
|
||||
if err != nil {
|
||||
return time.Now(), errors.New("could not load location")
|
||||
}
|
||||
@@ -142,8 +141,8 @@ func GetIdFromName(name string) string {
|
||||
return id
|
||||
}
|
||||
|
||||
func GetISOCalendarWeek(date time.Time) (int) {
|
||||
var _, cw = date.ISOWeek()
|
||||
func GetISOCalendarWeek(date time.Time) int {
|
||||
_, cw := date.ISOWeek()
|
||||
return cw
|
||||
}
|
||||
|
||||
@@ -156,7 +155,7 @@ func GetISOWeekInMonth(date time.Time) (month int, weeknumber int) {
|
||||
addDay := (date.Day() - newDay) * -1
|
||||
changedDate := date.AddDate(0, 0, addDay)
|
||||
|
||||
return int(changedDate.Month()), int(math.Ceil(float64(changedDate.Day()) / 7.0));
|
||||
return int(changedDate.Month()), int(math.Ceil(float64(changedDate.Day()) / 7.0))
|
||||
}
|
||||
|
||||
func GetGitLog(repo string, since time.Time, until time.Time) (string, string, error) {
|
||||
@@ -200,7 +199,6 @@ func Ranges() []string {
|
||||
}
|
||||
|
||||
func ParseSinceUntil(since string, until string, listRange string) (time.Time, time.Time) {
|
||||
|
||||
var sinceTime time.Time
|
||||
var untilTime time.Time
|
||||
var err error
|
||||
|
||||
+5
-4
@@ -1,12 +1,13 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"os"
|
||||
"time"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/gookit/color"
|
||||
|
||||
"github.com/cnf/structhash"
|
||||
"github.com/gookit/color"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
func importTymeJson(user string, file string) ([]Entry, error) {
|
||||
@@ -57,7 +58,7 @@ var importCmd = &cobra.Command{
|
||||
|
||||
user := GetCurrentUser()
|
||||
|
||||
switch(format) {
|
||||
switch format {
|
||||
case "zeit":
|
||||
// TODO:
|
||||
fmt.Printf("%s not yet implemented\n", CharError)
|
||||
|
||||
+7
-7
@@ -8,18 +8,18 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var listTotalTime bool
|
||||
var listOnlyProjectsAndTasks bool
|
||||
var listOnlyTasks bool
|
||||
var appendProjectIDToTask bool
|
||||
|
||||
var (
|
||||
listTotalTime bool
|
||||
listOnlyProjectsAndTasks bool
|
||||
listOnlyTasks bool
|
||||
appendProjectIDToTask bool
|
||||
)
|
||||
|
||||
var listCmd = &cobra.Command{
|
||||
Use: "list",
|
||||
Short: "List activities",
|
||||
Long: "List all tracked activities.",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
filteredEntries := listEntries()
|
||||
|
||||
totalHours := decimal.NewFromInt(0)
|
||||
@@ -29,7 +29,7 @@ var listCmd = &cobra.Command{
|
||||
}
|
||||
|
||||
if listTotalTime == true {
|
||||
fmt.Printf("\nTOTAL: %s H\n\n", fmtHours(totalHours));
|
||||
fmt.Printf("\nTOTAL: %s H\n\n", fmtHours(totalHours))
|
||||
}
|
||||
return
|
||||
},
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
)
|
||||
|
||||
type Project struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Color string `json:"color,omitempty"`
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"os"
|
||||
// "time"
|
||||
"github.com/spf13/cobra"
|
||||
// "github.com/gookit/color"
|
||||
|
||||
+25
-16
@@ -2,31 +2,40 @@ package z
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
"github.com/gookit/color"
|
||||
"os"
|
||||
)
|
||||
|
||||
var database *Database
|
||||
|
||||
var begin string
|
||||
var finish string
|
||||
var switchString string
|
||||
var project string
|
||||
var task string
|
||||
var notes string
|
||||
var (
|
||||
begin string
|
||||
finish string
|
||||
switchString string
|
||||
project string
|
||||
task string
|
||||
notes string
|
||||
)
|
||||
|
||||
var since string
|
||||
var until string
|
||||
var listRange string
|
||||
var (
|
||||
since string
|
||||
until string
|
||||
listRange string
|
||||
)
|
||||
|
||||
var format string
|
||||
var force bool
|
||||
var (
|
||||
format string
|
||||
force bool
|
||||
)
|
||||
|
||||
var noColors bool
|
||||
var debug bool
|
||||
var cfgFile string
|
||||
var (
|
||||
noColors bool
|
||||
debug bool
|
||||
cfgFile string
|
||||
)
|
||||
|
||||
const (
|
||||
CharTrack = " ▶"
|
||||
|
||||
+3
-2
@@ -1,10 +1,11 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"time"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
// "github.com/shopspring/decimal"
|
||||
// "github.com/gookit/color"
|
||||
|
||||
@@ -9,7 +9,6 @@ var switchBackCmd = &cobra.Command{
|
||||
Short: "switchback to the task before the last one",
|
||||
Long: "End running activity and resume the task which was before, which can either be kept running until 'finish' is being called or parameterized to be a finished activity.",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
finish = switchString
|
||||
finishTask(FinishOnlyTime)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ var switchCmd = &cobra.Command{
|
||||
Short: "switch to another task",
|
||||
Long: "End running activity and track new activity, which can either be kept running until 'finish' is being called or parameterized to be a finished activity.",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
finish = switchString
|
||||
finishTask(FinishOnlyTime)
|
||||
|
||||
@@ -35,4 +34,3 @@ func init() {
|
||||
return tasks, cobra.ShellCompDirectiveDefault
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ func listEntries() []Entry {
|
||||
}
|
||||
|
||||
func printProjects(entries []Entry) {
|
||||
|
||||
projectsAndTasks, _ := listProjectsAndTasks(entries)
|
||||
for project := range projectsAndTasks {
|
||||
if listOnlyProjectsAndTasks && !listOnlyTasks {
|
||||
@@ -61,7 +60,7 @@ func printProjects(entries []Entry) {
|
||||
}
|
||||
|
||||
func listProjectsAndTasks(entries []Entry) (map[string]map[string]bool, []string) {
|
||||
var projectsAndTasks = make(map[string]map[string]bool)
|
||||
projectsAndTasks := make(map[string]map[string]bool)
|
||||
var allTasks []string
|
||||
|
||||
for _, filteredEntry := range entries {
|
||||
@@ -130,7 +129,6 @@ func trackTask() {
|
||||
}
|
||||
|
||||
func finishTask(mode int) {
|
||||
|
||||
user := GetCurrentUser()
|
||||
|
||||
runningEntryId, err := database.GetRunningEntryId(user)
|
||||
@@ -185,7 +183,6 @@ func finishTask(mode int) {
|
||||
}
|
||||
|
||||
func finishTaskMetadata(user string, runningEntry *Entry, tmpEntry *Entry) {
|
||||
|
||||
if project != "" {
|
||||
runningEntry.Project = tmpEntry.Project
|
||||
}
|
||||
@@ -207,7 +204,6 @@ func finishTaskMetadata(user string, runningEntry *Entry, tmpEntry *Entry) {
|
||||
|
||||
taskGit(&task, runningEntry)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func taskGit(task *Task, runningEntry *Entry) {
|
||||
|
||||
+1
-1
@@ -1,8 +1,8 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"os"
|
||||
// "time"
|
||||
"github.com/spf13/cobra"
|
||||
// "github.com/gookit/color"
|
||||
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
+2
-1
@@ -1,8 +1,9 @@
|
||||
package z
|
||||
|
||||
import (
|
||||
"os"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
|
||||
@@ -3,24 +3,30 @@ package z
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"github.com/gookit/color"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
func GetOutputBoxForNumber(number int, clr (func(...interface {}) string) ) (string) {
|
||||
switch(number) {
|
||||
case 0: return clr(" ")
|
||||
case 1: return clr(" ▄")
|
||||
case 2: return clr("▄▄")
|
||||
case 3: return clr("▄█")
|
||||
case 4: return clr("██")
|
||||
func GetOutputBoxForNumber(number int, clr func(...interface{}) string) string {
|
||||
switch number {
|
||||
case 0:
|
||||
return clr(" ")
|
||||
case 1:
|
||||
return clr(" ▄")
|
||||
case 2:
|
||||
return clr("▄▄")
|
||||
case 3:
|
||||
return clr("▄█")
|
||||
case 4:
|
||||
return clr("██")
|
||||
}
|
||||
|
||||
return clr(" ")
|
||||
}
|
||||
|
||||
func GetOutputBarForHours(hours decimal.Decimal, stats []Statistic) ([]string) {
|
||||
var bar = []string{
|
||||
func GetOutputBarForHours(hours decimal.Decimal, stats []Statistic) []string {
|
||||
bar := []string{
|
||||
color.FgGray.Render("····"),
|
||||
color.FgGray.Render("····"),
|
||||
color.FgGray.Render("····"),
|
||||
@@ -75,14 +81,14 @@ func GetOutputBarForHours(hours decimal.Decimal, stats []Statistic) ([]string) {
|
||||
}
|
||||
}
|
||||
|
||||
if(restInt > 0) {
|
||||
if restInt > 0 {
|
||||
bar[(len(bar) - 1 - fullparts)] = " " + GetOutputBoxForNumber(restInt, colorFraction) + " "
|
||||
}
|
||||
|
||||
return bar
|
||||
}
|
||||
|
||||
func OutputAppendRight(leftStr string, rightStr string, pad int) (string) {
|
||||
func OutputAppendRight(leftStr string, rightStr string, pad int) string {
|
||||
var output string = ""
|
||||
var rpos int = 0
|
||||
|
||||
@@ -109,7 +115,7 @@ func OutputAppendRight(leftStr string, rightStr string, pad int) (string) {
|
||||
return output
|
||||
}
|
||||
|
||||
func GetColorFnFromHex(colorHex string) (func(...interface {}) string) {
|
||||
func GetColorFnFromHex(colorHex string) func(...interface{}) string {
|
||||
if colorHex == "" {
|
||||
colorHex = "#dddddd"
|
||||
}
|
||||
|
||||
@@ -2,10 +2,11 @@ package z
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
// "fmt"
|
||||
"os"
|
||||
"github.com/shopspring/decimal"
|
||||
"time"
|
||||
|
||||
// "fmt"
|
||||
"github.com/shopspring/decimal"
|
||||
)
|
||||
|
||||
type TymeEntry struct {
|
||||
|
||||
@@ -9,11 +9,11 @@ import (
|
||||
|
||||
var fractional bool
|
||||
|
||||
func fmtDuration(dur time.Duration) (string) {
|
||||
func fmtDuration(dur time.Duration) string {
|
||||
return fmtHours(decimal.NewFromFloat(dur.Hours()))
|
||||
}
|
||||
|
||||
func fmtHours(hours decimal.Decimal) (string) {
|
||||
func fmtHours(hours decimal.Decimal) string {
|
||||
if fractional {
|
||||
return hours.StringFixed(2)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user