34 lines
997 B
Go
34 lines
997 B
Go
package main
|
|
|
|
import "time"
|
|
|
|
// resyncPendingUploads repairs tasks that finished locally while WebDAV was
|
|
// unavailable or the user's WebDAV permission was not yet configured.
|
|
func (a *App) resyncPendingUploads() {
|
|
var tasks []Task
|
|
if err := a.db.Where("status IN ? AND local_path <> ? AND (remote_path = ? OR remote_path IS NULL)", []string{"done", "upload_pending", "error"}, "", "").Order("id asc").Limit(100).Find(&tasks).Error; err != nil {
|
|
return
|
|
}
|
|
for i := range tasks {
|
|
t := tasks[i]
|
|
if _, _, ok := a.storageForTask(&t); !ok {
|
|
continue
|
|
}
|
|
a.upload(&t)
|
|
time.Sleep(50 * time.Millisecond)
|
|
}
|
|
}
|
|
|
|
// startWebDAVResync runs a small periodic repair loop. It is intentionally
|
|
// conservative: only tasks with a completed local file and no confirmed remote path are retried.
|
|
func (a *App) startWebDAVResync() {
|
|
go func() {
|
|
a.resyncPendingUploads()
|
|
ticker := time.NewTicker(5 * time.Minute)
|
|
defer ticker.Stop()
|
|
for range ticker.C {
|
|
a.resyncPendingUploads()
|
|
}
|
|
}()
|
|
}
|