mirror of
https://git.vectorsigma.ru/public/photoview.git
synced 2026-08-03 18:19:11 +00:00
Fix bug where it was possible to set max scanner worker jobs to 0, resulting in the scanner not processing any jobs.
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package resolvers
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/viktorstrate/photoview/api/graphql/models"
|
|
"github.com/viktorstrate/photoview/api/scanner"
|
|
)
|
|
|
|
func (r *mutationResolver) ScanAll(ctx context.Context) (*models.ScannerResult, error) {
|
|
err := scanner.AddAllToQueue()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
startMessage := "Scanner started"
|
|
|
|
return &models.ScannerResult{
|
|
Finished: false,
|
|
Success: true,
|
|
Message: &startMessage,
|
|
}, nil
|
|
}
|
|
|
|
func (r *mutationResolver) ScanUser(ctx context.Context, userID int) (*models.ScannerResult, error) {
|
|
row := r.Database.QueryRow("SELECT * FROM user WHERE user_id = ?", userID)
|
|
user, err := models.NewUserFromRow(row)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "get user from database")
|
|
}
|
|
|
|
scanner.AddUserToQueue(user)
|
|
|
|
startMessage := "Scanner started"
|
|
return &models.ScannerResult{
|
|
Finished: false,
|
|
Success: true,
|
|
Message: &startMessage,
|
|
}, nil
|
|
}
|
|
|
|
func (r *mutationResolver) SetPeriodicScanInterval(ctx context.Context, interval int) (int, error) {
|
|
if interval < 0 {
|
|
return 0, errors.New("interval must be 0 or above")
|
|
}
|
|
|
|
_, err := r.Database.Exec("UPDATE site_info SET periodic_scan_interval = ?", interval)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
var dbInterval int
|
|
|
|
row := r.Database.QueryRow("SELECT periodic_scan_interval FROM site_info")
|
|
if err = row.Scan(&dbInterval); err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
scanner.ChangePeriodicScanInterval(time.Duration(dbInterval) * time.Second)
|
|
|
|
return dbInterval, nil
|
|
}
|
|
|
|
func (r *mutationResolver) SetScannerConcurrentWorkers(ctx context.Context, workers int) (int, error) {
|
|
if workers < 1 {
|
|
return 0, errors.New("concurrent workers must at least be 1")
|
|
}
|
|
|
|
_, err := r.Database.Exec("UPDATE site_info SET concurrent_workers = ?", workers)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
var dbWorkers int
|
|
|
|
row := r.Database.QueryRow("SELECT concurrent_workers FROM site_info")
|
|
if err = row.Scan(&dbWorkers); err != nil {
|
|
return 0, err
|
|
}
|
|
|
|
scanner.ChangeScannerConcurrentWorkers(dbWorkers)
|
|
|
|
return dbWorkers, nil
|
|
}
|