Update .editorconfig, run gofumpt -w ./

This commit is contained in:
マリウス
2025-02-19 10:32:24 -05:00
parent d6f9f8efeb
commit 866ee4ac6d
28 changed files with 1735 additions and 1727 deletions
-2
View File
@@ -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
+11 -10
View File
@@ -2,17 +2,18 @@ package z
import (
"fmt"
"time"
"strings"
"github.com/shopspring/decimal"
"time"
"github.com/jinzhu/now"
"github.com/shopspring/decimal"
// "github.com/gookit/color"
)
type Statistic struct {
Hours decimal.Decimal
Project string
Color (func(...interface {}) string)
Color (func(...interface{}) string)
}
type WeekStatistics map[string][]Statistic
@@ -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)
@@ -153,7 +154,7 @@ func (calendar *Calendar) GetOutputForWeekCalendar(date time.Time, month int, we
}
if dayHours.GreaterThan(decimal.NewFromInt(24)) {
fmt.Printf("%s %s of week %d in month %d has more than 24h tracked; cutting at 24h now\n", CharError, day, (month+1), (week+1))
fmt.Printf("%s %s of week %d in month %d has more than 24h tracked; cutting at 24h now\n", CharError, day, (month + 1), (week + 1))
dayHours = decimal.NewFromInt(24)
}
@@ -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())
-1
View File
@@ -16,4 +16,3 @@ const (
FinishWithMetadata int = 0
FinishOnlyTime int = 1
)
+21 -21
View File
@@ -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)
@@ -52,12 +52,12 @@ func (database *Database) AddEntry(user string, entry Entry, setRunning bool) (s
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
if setRunning == true {
_, _, seterr := tx.Set(user + ":status:running", id, nil)
_, _, seterr := tx.Set(user+":status:running", id, nil)
if seterr != nil {
return seterr
}
}
_, _, seterr := tx.Set(user + ":entry:" + id, string(entryJson), nil)
_, _, seterr := tx.Set(user+":entry:"+id, string(entryJson), nil)
if seterr != nil {
return seterr
}
@@ -92,7 +92,7 @@ func (database *Database) UpdateEntry(user string, entry Entry) (string, error)
}
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
_, _, seerr := tx.Set(user + ":entry:" + entry.ID, string(entryJson), nil)
_, _, seerr := tx.Set(user+":entry:"+entry.ID, string(entryJson), nil)
if seerr != nil {
return seerr
}
@@ -119,12 +119,12 @@ func (database *Database) FinishEntry(user string, entry Entry) (string, error)
return errors.New("specified entry is not currently running!")
}
_, _, srerr := tx.Set(user + ":status:running", "", nil)
_, _, srerr := tx.Set(user+":status:running", "", nil)
if srerr != nil {
return srerr
}
_, _, seerr := tx.Set(user + ":entry:" + entry.ID, string(entryJson), nil)
_, _, seerr := tx.Set(user+":entry:"+entry.ID, string(entryJson), nil)
if seerr != nil {
return seerr
}
@@ -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
@@ -143,7 +143,7 @@ func (database *Database) EraseEntry(user string, id string) (error) {
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
if runningEntryId == id {
_, _, seterr := tx.Set(user + ":status:running", "", nil)
_, _, seterr := tx.Set(user+":status:running", "", nil)
if seterr != nil {
return seterr
}
@@ -182,7 +182,7 @@ func (database *Database) ListEntries(user string) ([]Entry, error) {
var entries []Entry
dberr := database.DB.View(func(tx *buntdb.Tx) error {
tx.AscendKeys(user + ":entry:*", func(key, value string) bool {
tx.AscendKeys(user+":entry:*", func(key, value string) bool {
var entry Entry
json.Unmarshal([]byte(value), &entry)
@@ -200,10 +200,10 @@ 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)
value, err := tx.Get(user+":imports:sha1", false)
if err != nil {
return nil
}
@@ -223,17 +223,17 @@ 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 {
sha1Entries = append(sha1Entries, sha1 + ":" + id)
sha1Entries = append(sha1Entries, sha1+":"+id)
}
value := strings.Join(sha1Entries, ",")
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
_, _, seterr := tx.Set(user + ":imports:sha1", value, nil)
_, _, seterr := tx.Set(user+":imports:sha1", value, nil)
if seterr != nil {
return seterr
}
@@ -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
@@ -253,7 +253,7 @@ func (database *Database) UpdateProject(user string, projectName string, project
projectId := GetIdFromName(projectName)
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
_, _, sperr := tx.Set(user + ":project:" + projectId, string(projectJson), nil)
_, _, sperr := tx.Set(user+":project:"+projectId, string(projectJson), nil)
if sperr != nil {
return sperr
}
@@ -269,7 +269,7 @@ func (database *Database) GetProject(user string, projectName string) (Project,
projectId := GetIdFromName(projectName)
dberr := database.DB.View(func(tx *buntdb.Tx) error {
value, err := tx.Get(user + ":project:" + projectId, false)
value, err := tx.Get(user+":project:"+projectId, false)
if err != nil {
return nil
}
@@ -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
@@ -291,7 +291,7 @@ func (database *Database) UpdateTask(user string, taskName string, task Task) (e
taskId := GetIdFromName(taskName)
dberr := database.DB.Update(func(tx *buntdb.Tx) error {
_, _, sperr := tx.Set(user + ":task:" + taskId, string(taskJson), nil)
_, _, sperr := tx.Set(user+":task:"+taskId, string(taskJson), nil)
if sperr != nil {
return sperr
}
@@ -307,7 +307,7 @@ func (database *Database) GetTask(user string, taskName string) (Task, error) {
taskId := GetIdFromName(taskName)
dberr := database.DB.View(func(tx *buntdb.Tx) error {
value, err := tx.Get(user + ":task:" + taskId, false)
value, err := tx.Get(user+":task:"+taskId, false)
if err != nil {
return nil
}
+12 -12
View File
@@ -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,14 +176,13 @@ 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),
color.FgLightWhite.Render(entry.Project),
color.FgLightWhite.Render(entry.Begin.Format("2006-01-02 15:04 -0700")),
color.FgLightWhite.Render(entryFinish.Format("2006-01-02 15:04 -0700")),
color.FgLightWhite.Render(taskDuration) ,
color.FgLightWhite.Render(taskDuration),
color.FgLightYellow.Render(isRunning),
)
} else {
@@ -237,4 +238,3 @@ func (entry *Entry) secondsFinish() {
entry.Finish = entry.Finish.Truncate(time.Duration(time.Minute))
}
}
+3 -2
View File
@@ -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{
+6 -5
View File
@@ -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 {
@@ -81,7 +82,7 @@ func init() {
exportCmd.Flags().StringVar(&format, "format", "zeit", "Format to export, possible values: zeit, tyme")
exportCmd.Flags().StringVar(&since, "since", "", "Date/time to start the export from")
exportCmd.Flags().StringVar(&until, "until", "", "Date/time to export until")
exportCmd.Flags().StringVar(&listRange, "range", "", "Shortcut for --since and --until that accepts: " + strings.Join(Ranges(), ", "))
exportCmd.Flags().StringVar(&listRange, "range", "", "Shortcut for --since and --until that accepts: "+strings.Join(Ranges(), ", "))
exportCmd.Flags().StringVarP(&project, "project", "p", "", "Project to be exported")
exportCmd.Flags().StringVarP(&task, "task", "t", "", "Task to be exported")
+19 -21
View File
@@ -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 {
@@ -67,7 +67,7 @@ func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, erro
var minutes int = 0
if ftId == TFRelHourFraction {
f, _ := strconv.ParseFloat(gm[2] + "." + gm[3], 32)
f, _ := strconv.ParseFloat(gm[2]+"."+gm[3], 32)
minutes = int(f * 60.0)
} else {
hours, _ = strconv.Atoi(gm[2])
@@ -79,9 +79,9 @@ func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, erro
if viper.IsSet("time.relative") && viper.GetString("time.relative") == "context" && !contextTime.IsZero() {
switch gm[1] {
case "+":
t = contextTime.Add(time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes))
t = contextTime.Add(time.Hour*time.Duration(hours) + time.Minute*time.Duration(minutes))
case "-":
t = contextTime.Add((time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes)) * -1)
t = contextTime.Add((time.Hour*time.Duration(hours) + time.Minute*time.Duration(minutes)) * -1)
}
return t, nil
@@ -89,9 +89,9 @@ func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, erro
switch gm[1] {
case "+":
t = time.Now().Local().Add(time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes))
t = time.Now().Local().Add(time.Hour*time.Duration(hours) + time.Minute*time.Duration(minutes))
case "-":
t = time.Now().Local().Add((time.Hour * time.Duration(hours) + time.Minute * time.Duration(minutes)) * -1)
t = time.Now().Local().Add((time.Hour*time.Duration(hours) + time.Minute*time.Duration(minutes)) * -1)
}
return t, nil
@@ -100,7 +100,7 @@ func RelToTime(timeStr string, ftId int, contextTime time.Time) (time.Time, erro
func ParseTime(timeStr string, contextTime time.Time) (time.Time, error) {
tfId := GetTimeFormat(timeStr)
t:= time.Now()
t := time.Now()
switch tfId {
case TFAbsTwelveHour:
@@ -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
View File
@@ -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)
+8 -8
View File
@@ -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
},
@@ -39,7 +39,7 @@ func init() {
rootCmd.AddCommand(listCmd)
listCmd.Flags().StringVar(&since, "since", "", "Date/time to start the list from")
listCmd.Flags().StringVar(&until, "until", "", "Date/time to list until")
listCmd.Flags().StringVar(&listRange, "range", "", "Shortcut for --since and --until that accepts: " + strings.Join(Ranges(), ", "))
listCmd.Flags().StringVar(&listRange, "range", "", "Shortcut for --since and --until that accepts: "+strings.Join(Ranges(), ", "))
listCmd.Flags().StringVarP(&project, "project", "p", "", "Project to be listed")
listCmd.Flags().StringVarP(&task, "task", "t", "", "Task to be listed")
listCmd.Flags().BoolVar(&fractional, "decimal", false, "Show fractional hours in decimal format instead of minutes")
-3
View File
@@ -1,8 +1,5 @@
package z
import (
)
type Project struct {
Name string `json:"name,omitempty"`
Color string `json:"color,omitempty"`
+1 -1
View File
@@ -1,8 +1,8 @@
package z
import (
"os"
"fmt"
"os"
// "time"
"github.com/spf13/cobra"
// "github.com/gookit/color"
+26 -17
View File
@@ -2,33 +2,42 @@ 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(
const (
CharTrack = " ▶"
CharFinish = " ■"
CharErase = " ◀"
+3 -2
View File
@@ -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"
-1
View File
@@ -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)
-2
View File
@@ -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
})
}
+1 -5
View File
@@ -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
View File
@@ -1,8 +1,8 @@
package z
import (
"os"
"fmt"
"os"
// "time"
"github.com/spf13/cobra"
// "github.com/gookit/color"
+2 -1
View File
@@ -1,8 +1,9 @@
package z
import (
"os"
"fmt"
"os"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
+2 -1
View File
@@ -1,8 +1,9 @@
package z
import (
"os"
"fmt"
"os"
"github.com/spf13/cobra"
)
+20 -14
View File
@@ -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("····"),
@@ -36,7 +42,7 @@ func GetOutputBarForHours(hours decimal.Decimal, stats []Statistic) ([]string) {
divisible := hoursInt - restInt
fullparts := divisible / 4
colorsFull := make(map[int](func(...interface {}) string))
colorsFull := make(map[int](func(...interface{}) string))
colorsFullIdx := 0
colorFraction := color.FgWhite.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
@@ -92,7 +98,7 @@ func OutputAppendRight(leftStr string, rightStr string, pad int) (string) {
rightLen := len(right)
for lpos := 0; lpos < leftLen; lpos++ {
if left[lpos] == '\n' || lpos == (leftLen - 1) {
if left[lpos] == '\n' || lpos == (leftLen-1) {
output = fmt.Sprintf("%s%*s", output, pad, "")
for rpos = rpos; rpos < rightLen; rpos++ {
output = fmt.Sprintf("%s%c", output, right[rpos])
@@ -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"
}
+3 -2
View File
@@ -2,10 +2,11 @@ package z
import (
"encoding/json"
// "fmt"
"os"
"github.com/shopspring/decimal"
"time"
// "fmt"
"github.com/shopspring/decimal"
)
type TymeEntry struct {
+2 -2
View File
@@ -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 {
+1 -1
View File
@@ -1,7 +1,7 @@
package main
import (
"github.com/mrusme/zeit/z"
"github.com/mrusme/zeit/z"
)
func main() {