Add resumable downloads, download paths, queue controls and history
This commit is contained in:
1 parent
434f6441da
commit
6027cfabb9
43 files changed
+2138
-291
No files matched your search
@@ -0,0 +1,79 @@
|
||||
package jobs
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
"ddc/internal/fetch"
|
||||
)
|
||||
|
||||
var errPaused = errors.New("download paused")
|
||||
|
||||
func (job *Job) SetTotal(total int64) {
|
||||
job.bytesTotal.Store(total)
|
||||
}
|
||||
|
||||
func (job *Job) SetDone(done int64) {
|
||||
job.bytesDone.Store(done)
|
||||
}
|
||||
|
||||
func (job *Job) Add(delta int64) {
|
||||
job.bytesDone.Add(delta)
|
||||
}
|
||||
|
||||
func (job *Job) SetFileName(name string) {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
job.fileName = name
|
||||
}
|
||||
|
||||
func (job *Job) SetNotice(text string) {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
if !job.deleted && job.status == StatusDownloading {
|
||||
job.message = text
|
||||
}
|
||||
}
|
||||
|
||||
func (job *Job) resetProgress() {
|
||||
job.bytesDone.Store(0)
|
||||
job.bytesTotal.Store(0)
|
||||
}
|
||||
|
||||
func (job *Job) startRun() (context.Context, context.CancelCauseFunc) {
|
||||
runContext, cancelRun := context.WithCancelCause(job.jobContext)
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
job.cancelRun = cancelRun
|
||||
return runContext, cancelRun
|
||||
}
|
||||
|
||||
func (job *Job) pause() bool {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
if job.cancelRun == nil || (job.status != StatusQueued && job.status != StatusDownloading) {
|
||||
return false
|
||||
}
|
||||
job.cancelRun(errPaused)
|
||||
return true
|
||||
}
|
||||
|
||||
func (job *Job) currentDownloadState() *fetch.State {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
return job.downloadState
|
||||
}
|
||||
|
||||
func (job *Job) setDownloadState(state *fetch.State) {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
job.downloadState = state
|
||||
}
|
||||
|
||||
func (job *Job) markDownloaded(fileName string) {
|
||||
job.mutex.Lock()
|
||||
defer job.mutex.Unlock()
|
||||
job.downloaded = true
|
||||
job.downloadState = nil
|
||||
job.fileName = fileName
|
||||
}
|
||||
Reference in new issue
Block a user