diff --git a/internal/task/task.go b/internal/task/task.go index a19f9b8..8ba6c8e 100644 --- a/internal/task/task.go +++ b/internal/task/task.go @@ -17,10 +17,11 @@ const ( FOLDER_INBOX = "INBOX" FOLDER_NEW = "New" - QUOTE_PREFIX = ">" - FIELD_SEPARATOR = ":" - FIELD_ID = "id" - FIELD_ACTION = "action" + QUOTE_PREFIX = ">" + PREVIOUS_SEPARATOR = "Previous version:" + FIELD_SEPARATOR = ":" + FIELD_ID = "id" + FIELD_ACTION = "action" ) // Task reperesents a task based on the data stored in a message @@ -115,6 +116,9 @@ func (t *Task) FormatBody() string { body += fmt.Sprintf("%s\n", line) } + if t.Message != nil { + body += fmt.Sprintf("\nPrevious version:\n\n%s\n", t.Message.Body) + } return body } @@ -124,12 +128,18 @@ func FieldFromBody(field, body string) (string, bool) { lines := strings.Split(body, "\n") for _, line := range lines { + line = strings.TrimSpace(strings.TrimPrefix(line, QUOTE_PREFIX)) + + if line == PREVIOUS_SEPARATOR { + return value, dirty + } + parts := strings.SplitN(line, FIELD_SEPARATOR, 2) if len(parts) < 2 { continue } - fieldName := strings.ToLower(strings.TrimSpace(strings.TrimPrefix(parts[0], QUOTE_PREFIX))) + fieldName := strings.ToLower(strings.TrimSpace(parts[0])) if fieldName == field { if value == "" { value = strings.TrimSpace(parts[1]) diff --git a/internal/task/task_test.go b/internal/task/task_test.go index 077e350..fd54f31 100644 --- a/internal/task/task_test.go +++ b/internal/task/task_test.go @@ -169,10 +169,17 @@ action: task: &task.Task{ Id: id, Action: action, + Message: &mstore.Message{ + Body: "previous body", + }, }, exp: ` id: an id action: an action + +Previous version: + +previous body `, }, } { @@ -250,6 +257,30 @@ field: valueb body: "> field: value", expValue: "value", }, + { + name: "previous body", + field: "field", + body: ` +field: valuea + +Previous version: + +field: valueb + `, + expValue: "valuea", + }, + { + name: "quoted previous body", + field: "field", + body: ` +field: valuea + +> Previous version: +> +> field: valueb + `, + expValue: "valuea", + }, } { t.Run(tc.name, func(t *testing.T) { actValue, actDirty := task.FieldFromBody(tc.field, tc.body)