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