add recur to cli

This commit is contained in:
Erik Winter 2022-10-17 10:20:18 +02:00
parent 7219969010
commit 86612e4998
4 changed files with 46 additions and 2 deletions

View File

@ -18,6 +18,7 @@ var (
ErrFieldAlreadyUsed = errors.New("field was already used")
ErrInvalidDate = errors.New("could not understand date format")
ErrInvalidProject = errors.New("could not understand project")
ErrInvalidRecur = errors.New("could not understand recurrer")
)
type Command interface {
@ -124,6 +125,18 @@ func ParseTaskFieldArgs(args []string) (*task.LocalUpdate, error) {
fields = append(fields, task.FIELD_DUE)
continue
}
if recur, ok := parseRecurField(f); ok {
fmt.Printf("%+v\n", recur)
if recur == nil {
return &task.LocalUpdate{}, ErrInvalidRecur
}
if lu.Recur != nil {
return &task.LocalUpdate{}, fmt.Errorf("%w: %v", ErrFieldAlreadyUsed, task.FIELD_RECUR)
}
lu.Recur = recur
fields = append(fields, task.FIELD_RECUR)
continue
}
if len(f) > 0 {
action = append(action, f)
}
@ -158,3 +171,15 @@ func parseDueField(s string) (task.Date, bool) {
return due, true
}
func parseRecurField(s string) (task.Recurrer, bool) {
if !strings.HasPrefix(s, "recur:") && !strings.HasPrefix(s, "r:") {
return nil, false
}
split := strings.SplitN(s, ":", 2)
fmt.Printf("s: %+v\n", split[1])
recur := task.NewRecurrer(split[1])
return recur, true
}

View File

@ -90,6 +90,22 @@ func TestParseTaskFieldArgs(t *testing.T) {
expUpdate: &task.LocalUpdate{},
expErr: command.ErrInvalidDate,
},
{
name: "recur",
input: "recur:today,daily",
expUpdate: &task.LocalUpdate{
Fields: []string{task.FIELD_RECUR},
Recur: task.NewRecurrer("today, daily"),
},
},
{
name: "recurs short",
input: "r:today,daily",
expUpdate: &task.LocalUpdate{
Fields: []string{task.FIELD_RECUR},
Recur: task.NewRecurrer("today, daily"),
},
},
} {
t.Run(tc.name, func(t *testing.T) {
args := strings.Split(tc.input, " ")

View File

@ -23,7 +23,7 @@ func NewFolder(conf *configuration.Configuration, cmdArgs []string) (*Folder, er
if len(cmdArgs) < 1 {
return &Folder{}, ErrInvalidAmountOfArgs
}
knownFolders := []string{task.FOLDER_NEW, task.FOLDER_PLANNED, task.FOLDER_UNPLANNED}
knownFolders := []string{task.FOLDER_NEW, task.FOLDER_RECURRING, task.FOLDER_PLANNED, task.FOLDER_UNPLANNED}
var folder string
for _, f := range knownFolders {
if strings.ToLower(f) == strings.ToLower(cmdArgs[0]) {

View File

@ -24,6 +24,9 @@ func NewRecurrer(recurStr string) Recurrer {
}
terms = terms[1:]
for i, t := range terms {
terms[i] = strings.TrimSpace(t)
}
for _, parseFunc := range []func(Date, []string) (Recurrer, bool){
ParseDaily, ParseEveryNDays, ParseWeekly, ParseBiweekly,