67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func cmdManageTag(args []string) int {
|
||
|
if len(args) == 0 {
|
||
|
return cmdListTags(args)
|
||
|
}
|
||
|
return cmdEditTag(args)
|
||
|
}
|
||
|
|
||
|
func cmdListTags(args []string) int {
|
||
|
m, err := LoadMetadata()
|
||
|
if err != nil {
|
||
|
fmt.Println("Error loading tags")
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
fmt.Println("[")
|
||
|
for _, v := range m.Tags {
|
||
|
fmt.Println(" " + v.String())
|
||
|
}
|
||
|
fmt.Println("]")
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
func cmdEditTag(args []string) int {
|
||
|
m, err := LoadMetadata()
|
||
|
if err != nil {
|
||
|
fmt.Println("Error loading tags")
|
||
|
return 1
|
||
|
}
|
||
|
// The first argument should be the tag name that we want to edit
|
||
|
tagName := args[0]
|
||
|
if tagName[0] == '+' {
|
||
|
tagName = tagName[1:]
|
||
|
}
|
||
|
tg := m.GetTag(tagName)
|
||
|
if tg == nil {
|
||
|
tg = NewTag(tagName, false)
|
||
|
}
|
||
|
for _, v := range args[1:] {
|
||
|
switch v[0] {
|
||
|
case '+':
|
||
|
// Altering tag name
|
||
|
tg.Name = v[1:]
|
||
|
case ':':
|
||
|
// Altering billable flag
|
||
|
if strings.HasPrefix(v, ":non") {
|
||
|
tg.SetBillable(false)
|
||
|
} else if strings.HasPrefix(v, ":bill") {
|
||
|
tg.SetBillable(true)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
m.SaveTag(tg)
|
||
|
if err = SaveMetadata(m); err != nil {
|
||
|
fmt.Println("Error saving metadata: " + err.Error())
|
||
|
return 1
|
||
|
}
|
||
|
fmt.Println(tg.String())
|
||
|
return 0
|
||
|
}
|