task sorting might work
parent
cb73169eeb
commit
6319c18ddd
|
|
@ -7,10 +7,16 @@ import (
|
|||
"local/todo-server/server/ajax/form"
|
||||
"local/todo-server/server/ajax/task"
|
||||
"net/http"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type taskWithDelta struct {
|
||||
task *task.Task
|
||||
delta int
|
||||
}
|
||||
|
||||
func (a *Ajax) loadTasks(w http.ResponseWriter, r *http.Request) error {
|
||||
listID, _, _ := a.Cur(r)
|
||||
filterComplete := filterComplete(form.Get(r, "compl"))
|
||||
|
|
@ -158,8 +164,8 @@ func (a *Ajax) parseTaskStr(w http.ResponseWriter, r *http.Request) error {
|
|||
func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error {
|
||||
order := form.Get(r, "order")
|
||||
orders := strings.Split(order, "&")
|
||||
sum := 0
|
||||
zero := ""
|
||||
modified := make([]taskWithDelta, 0)
|
||||
indices := make([]int, 0)
|
||||
for _, order := range orders {
|
||||
taskIDDelta := strings.Split(order, "=")
|
||||
if len(taskIDDelta) < 2 {
|
||||
|
|
@ -167,43 +173,34 @@ func (a *Ajax) changeOrder(w http.ResponseWriter, r *http.Request) error {
|
|||
}
|
||||
taskID := taskIDDelta[0]
|
||||
delta, _ := strconv.Atoi(taskIDDelta[1])
|
||||
if delta < 0 {
|
||||
delta = -1
|
||||
} else {
|
||||
delta = 0
|
||||
}
|
||||
task, err := a.storageGetTask(taskID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listID, err := a.taskIDToListID(taskID)
|
||||
modified = append(modified, taskWithDelta{task: task, delta: delta})
|
||||
indices = append(indices, task.Index)
|
||||
}
|
||||
sort.Slice(modified, func(i, j int) bool {
|
||||
if modified[i].delta < modified[j].delta {
|
||||
return true
|
||||
} else if modified[i].delta > modified[j].delta {
|
||||
return false
|
||||
}
|
||||
return modified[i].task.Index < modified[j].task.Index
|
||||
})
|
||||
sort.Ints(indices)
|
||||
for i := 0; i < len(modified); i++ {
|
||||
task := *modified[i].task
|
||||
task.Index = indices[i]
|
||||
listID, err := a.taskIDToListID(task.UUID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
task.Index += delta
|
||||
if err := a.storageSetTask(listID, task); err != nil {
|
||||
if err := a.storageSetTask(listID, &task); err != nil {
|
||||
return err
|
||||
}
|
||||
if delta == 0 {
|
||||
zero = taskID
|
||||
}
|
||||
sum += delta
|
||||
}
|
||||
if zero == "" || sum == 0 {
|
||||
return nil
|
||||
}
|
||||
task, err := a.storageGetTask(zero)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listID, err := a.taskIDToListID(zero)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
task.Index -= sum
|
||||
if err := a.storageSetTask(listID, task); err != nil {
|
||||
return err
|
||||
}
|
||||
fmt.Fprint(w, `{"total":1}`)
|
||||
|
||||
fmt.Fprintf(w, `{"total":1}`)
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue