lib/model: Make jobQueue.Jobs paginated (fixes #5754) (#5804)

* lib/model: Make jobQueue.Jobs paginated (fixes #5754)

* fix, no test yet

* add test
This commit is contained in:
Simon Frei
2019-06-27 20:25:38 +02:00
committed by Audrius Butkevicius
parent afde0727fe
commit 3c7e7e971d
5 changed files with 208 additions and 65 deletions

View File

@@ -84,19 +84,46 @@ func (q *jobQueue) Done(file string) {
}
}
func (q *jobQueue) Jobs() ([]string, []string) {
// Jobs returns a paginated list of file currently being pulled and files queued
// to be pulled. It also returns how many items were skipped.
func (q *jobQueue) Jobs(page, perpage int) ([]string, []string, int) {
q.mut.Lock()
defer q.mut.Unlock()
progress := make([]string, len(q.progress))
copy(progress, q.progress)
toSkip := (page - 1) * perpage
plen := len(q.progress)
qlen := len(q.queued)
queued := make([]string, len(q.queued))
for i := range q.queued {
queued[i] = q.queued[i].name
if tot := plen + qlen; tot <= toSkip {
return nil, nil, tot
}
return progress, queued
if plen >= toSkip+perpage {
progress := make([]string, perpage)
copy(progress, q.progress[toSkip:toSkip+perpage])
return progress, nil, toSkip
}
var progress []string
if plen > toSkip {
progress = make([]string, plen-toSkip)
copy(progress, q.progress[toSkip:plen])
toSkip = 0
} else {
toSkip -= plen
}
var queued []string
if qlen-toSkip < perpage-len(progress) {
queued = make([]string, qlen-toSkip)
} else {
queued = make([]string, perpage-len(progress))
}
for i := range queued {
queued[i] = q.queued[i+toSkip].name
}
return progress, queued, (page - 1) * perpage
}
func (q *jobQueue) Shuffle() {