* lib/model: Make jobQueue.Jobs paginated (fixes #5754) * fix, no test yet * add test
This commit is contained in:
committed by
Audrius Butkevicius
parent
afde0727fe
commit
3c7e7e971d
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user