diff --git a/pkg/models/tasks.go b/pkg/models/tasks.go index 26ef24cc99e..fdb6f849220 100644 --- a/pkg/models/tasks.go +++ b/pkg/models/tasks.go @@ -1352,14 +1352,14 @@ func setTaskDatesDefault(oldTask, newTask *Task) { } } - newTask.ReminderDates = oldTask.ReminderDates + newTask.Reminders = oldTask.Reminders // When repeating from the current date, all reminders should keep their difference to each other. // To make this easier, we sort them first because we can then rely on the fact the first is the smallest - if len(oldTask.ReminderDates) > 0 { - for in, r := range oldTask.ReminderDates { - newTask.ReminderDates[in] = r.Add(repeatDuration) - for !newTask.ReminderDates[in].After(now) { - newTask.ReminderDates[in] = newTask.ReminderDates[in].Add(repeatDuration) + if len(oldTask.Reminders) > 0 { + for in, r := range oldTask.Reminders { + newTask.Reminders[in].Reminder = r.Reminder.Add(repeatDuration) + for !newTask.Reminders[in].Reminder.After(now) { + newTask.Reminders[in].Reminder = newTask.Reminders[in].Reminder.Add(repeatDuration) } } } @@ -1387,10 +1387,10 @@ func setTaskDatesMonthRepeat(oldTask, newTask *Task) { newTask.DueDate = addOneMonthToDate(oldTask.DueDate) } - newTask.ReminderDates = oldTask.ReminderDates - if len(oldTask.ReminderDates) > 0 { - for in, r := range oldTask.ReminderDates { - newTask.ReminderDates[in] = addOneMonthToDate(r) + newTask.Reminders = oldTask.Reminders + if len(oldTask.Reminders) > 0 { + for in, r := range oldTask.Reminders { + newTask.Reminders[in].Reminder = addOneMonthToDate(r.Reminder) } } @@ -1426,17 +1426,17 @@ func setTaskDatesFromCurrentDateRepeat(oldTask, newTask *Task) { newTask.DueDate = now.Add(repeatDuration) } - newTask.ReminderDates = oldTask.ReminderDates + newTask.Reminders = oldTask.Reminders // When repeating from the current date, all reminders should keep their difference to each other. // To make this easier, we sort them first because we can then rely on the fact the first is the smallest - if len(oldTask.ReminderDates) > 0 { - sort.Slice(oldTask.ReminderDates, func(i, j int) bool { - return oldTask.ReminderDates[i].Unix() < oldTask.ReminderDates[j].Unix() + if len(oldTask.Reminders) > 0 { + sort.Slice(oldTask.Reminders, func(i, j int) bool { + return oldTask.Reminders[i].Reminder.Unix() < oldTask.Reminders[j].Reminder.Unix() }) - first := oldTask.ReminderDates[0] - for in, r := range oldTask.ReminderDates { - diff := r.Sub(first) - newTask.ReminderDates[in] = now.Add(repeatDuration + diff) + first := oldTask.Reminders[0].Reminder + for in, r := range oldTask.Reminders { + diff := r.Reminder.Sub(first) + newTask.Reminders[in].Reminder = now.Add(repeatDuration + diff) } } @@ -1543,9 +1543,10 @@ func (t *Task) updateReminders(s *xorm.Session, reminders []*TaskReminder) (err // Loop through all reminders and add them for _, r := range reminderMap { - _, err = s.Insert(&TaskReminder{TaskID: t.ID, Reminder: r.Reminder}) - t.Reminders = append(t.Reminders, &r) - t.ReminderDates = append(t.ReminderDates, r.Reminder) + taskReminder := &TaskReminder{TaskID: t.ID, Reminder: r.Reminder} + _, err = s.Insert(taskReminder) + t.Reminders = append(t.Reminders, taskReminder) + t.ReminderDates = append(t.ReminderDates, taskReminder.Reminder) if err != nil { return err } diff --git a/pkg/models/tasks_test.go b/pkg/models/tasks_test.go index 835789b14ff..65c0eb3eb21 100644 --- a/pkg/models/tasks_test.go +++ b/pkg/models/tasks_test.go @@ -516,9 +516,13 @@ func TestUpdateDone(t *testing.T) { oldTask := &Task{ Done: false, RepeatAfter: 8600, - ReminderDates: []time.Time{ - time.Unix(1550000000, 0), - time.Unix(1555000000, 0), + Reminders: []*TaskReminder{ + { + Reminder: time.Unix(1550000000, 0), + }, + { + Reminder: time.Unix(1555000000, 0), + }, }, } newTask := &Task{ @@ -535,9 +539,9 @@ func TestUpdateDone(t *testing.T) { expected2 = expected2.Add(time.Duration(oldTask.RepeatAfter) * time.Second) } - assert.Len(t, newTask.ReminderDates, 2) - assert.Equal(t, expected1, newTask.ReminderDates[0]) - assert.Equal(t, expected2, newTask.ReminderDates[1]) + assert.Len(t, newTask.Reminders, 2) + assert.Equal(t, expected1, newTask.Reminders[0].Reminder) + assert.Equal(t, expected2, newTask.Reminders[1].Reminder) assert.False(t, newTask.Done) }) t.Run("update start date", func(t *testing.T) { @@ -614,22 +618,25 @@ func TestUpdateDone(t *testing.T) { Done: false, RepeatAfter: 8600, RepeatMode: TaskRepeatModeFromCurrentDate, - ReminderDates: []time.Time{ - time.Unix(1550000000, 0), - time.Unix(1555000000, 0), - }, - } + Reminders: []*TaskReminder{ + { + Reminder: time.Unix(1550000000, 0), + }, + { + Reminder: time.Unix(1555000000, 0), + }, + }} newTask := &Task{ Done: true, } updateDone(oldTask, newTask) - diff := oldTask.ReminderDates[1].Sub(oldTask.ReminderDates[0]) + diff := oldTask.Reminders[1].Reminder.Sub(oldTask.Reminders[0].Reminder) - assert.Len(t, newTask.ReminderDates, 2) + assert.Len(t, newTask.Reminders, 2) // Only comparing unix timestamps because time.Time use nanoseconds which can't ever possibly have the same value - assert.Equal(t, time.Now().Add(time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.ReminderDates[0].Unix()) - assert.Equal(t, time.Now().Add(diff+time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.ReminderDates[1].Unix()) + assert.Equal(t, time.Now().Add(time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.Reminders[0].Reminder.Unix()) + assert.Equal(t, time.Now().Add(diff+time.Duration(oldTask.RepeatAfter)*time.Second).Unix(), newTask.Reminders[1].Reminder.Unix()) assert.False(t, newTask.Done) }) t.Run("start date", func(t *testing.T) { @@ -707,23 +714,28 @@ func TestUpdateDone(t *testing.T) { oldTask := &Task{ Done: false, RepeatMode: TaskRepeatModeMonth, - ReminderDates: []time.Time{ - time.Unix(1550000000, 0), - time.Unix(1555000000, 0), - }, - } + Reminders: []*TaskReminder{ + { + Reminder: time.Unix(1550000000, 0), + }, + { + Reminder: time.Unix(1555000000, 0), + }, + }} newTask := &Task{ Done: true, } - oldReminders := make([]time.Time, len(oldTask.ReminderDates)) - copy(oldReminders, oldTask.ReminderDates) + oldReminders := make([]time.Time, len(oldTask.Reminders)) + for i, r := range newTask.Reminders { + oldReminders[i] = r.Reminder + } updateDone(oldTask, newTask) - assert.Len(t, newTask.ReminderDates, len(oldReminders)) - for i, r := range newTask.ReminderDates { - assert.True(t, r.After(oldReminders[i])) - assert.NotEqual(t, oldReminders[i].Month(), r.Month()) + assert.Len(t, newTask.Reminders, len(oldReminders)) + for i, r := range newTask.Reminders { + assert.True(t, r.Reminder.After(oldReminders[i])) + assert.NotEqual(t, oldReminders[i].Month(), r.Reminder.Month()) } assert.False(t, newTask.Done) }) diff --git a/pkg/modules/migration/microsoft-todo/microsoft_todo.go b/pkg/modules/migration/microsoft-todo/microsoft_todo.go index e2fd5a1d8d8..bf3ecd77df8 100644 --- a/pkg/modules/migration/microsoft-todo/microsoft_todo.go +++ b/pkg/modules/migration/microsoft-todo/microsoft_todo.go @@ -329,7 +329,9 @@ func convertMicrosoftTodoData(todoData []*list) (vikunjsStructure []*models.Name return nil, err } - task.ReminderDates = []time.Time{reminder} + task.Reminders = []*models.TaskReminder{ + {Reminder: reminder}, + } } // Due Date diff --git a/pkg/modules/migration/microsoft-todo/microsoft_todo_test.go b/pkg/modules/migration/microsoft-todo/microsoft_todo_test.go index 7c3a663338f..e9f4de0c8a8 100644 --- a/pkg/modules/migration/microsoft-todo/microsoft_todo_test.go +++ b/pkg/modules/migration/microsoft-todo/microsoft_todo_test.go @@ -141,8 +141,10 @@ func TestConverting(t *testing.T) { { Task: models.Task{ Title: "Task 5", - ReminderDates: []time.Time{ - testtimeTime, + Reminders: []*models.TaskReminder{ + { + Reminder: testtimeTime, + }, }, }, }, diff --git a/pkg/modules/migration/todoist/todoist.go b/pkg/modules/migration/todoist/todoist.go index c0fce82318f..3cb5ca14f5f 100644 --- a/pkg/modules/migration/todoist/todoist.go +++ b/pkg/modules/migration/todoist/todoist.go @@ -471,7 +471,10 @@ func convertTodoistToVikunja(sync *sync, doneItems map[string]*doneItem) (fullVi return nil, err } - tasks[r.ItemID].ReminderDates = append(tasks[r.ItemID].ReminderDates, date.In(config.GetTimeZone())) + tasks[r.ItemID].Reminders = append(tasks[r.ItemID].Reminders, &models.TaskReminder{ + Reminder: date.In(config.GetTimeZone()), + }, + ) } return []*models.NamespaceWithListsAndTasks{ diff --git a/pkg/modules/migration/todoist/todoist_test.go b/pkg/modules/migration/todoist/todoist_test.go index dd697d47f07..42d14318796 100644 --- a/pkg/modules/migration/todoist/todoist_test.go +++ b/pkg/modules/migration/todoist/todoist_test.go @@ -388,9 +388,9 @@ func TestConvertTodoistToVikunja(t *testing.T) { Description: "Lorem Ipsum dolor sit amet", Done: false, Created: time1, - ReminderDates: []time.Time{ - time.Date(2020, time.June, 15, 23, 59, 0, 0, time.UTC).In(config.GetTimeZone()), - time.Date(2020, time.June, 16, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), + Reminders: []*models.TaskReminder{ + {Reminder: time.Date(2020, time.June, 15, 23, 59, 0, 0, time.UTC).In(config.GetTimeZone())}, + {Reminder: time.Date(2020, time.June, 16, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())}, }, }, }, @@ -407,8 +407,8 @@ func TestConvertTodoistToVikunja(t *testing.T) { Title: "Task400000002", Done: false, Created: time1, - ReminderDates: []time.Time{ - time.Date(2020, time.July, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), + Reminders: []*models.TaskReminder{ + {Reminder: time.Date(2020, time.July, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())}, }, }, }, @@ -421,8 +421,8 @@ func TestConvertTodoistToVikunja(t *testing.T) { Created: time1, DoneAt: time3, Labels: vikunjaLabels, - ReminderDates: []time.Time{ - time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), + Reminders: []*models.TaskReminder{ + {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())}, }, }, }, @@ -441,8 +441,8 @@ func TestConvertTodoistToVikunja(t *testing.T) { DueDate: dueTime, Created: time1, DoneAt: time3, - ReminderDates: []time.Time{ - time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), + Reminders: []*models.TaskReminder{ + {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())}, }, }, }, @@ -531,8 +531,8 @@ func TestConvertTodoistToVikunja(t *testing.T) { Title: "Task400000009", Done: false, Created: time1, - ReminderDates: []time.Time{ - time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone()), + Reminders: []*models.TaskReminder{ + {Reminder: time.Date(2020, time.June, 15, 7, 0, 0, 0, time.UTC).In(config.GetTimeZone())}, }, }, },