2020-02-05 14:51:46 +01:00
|
|
|
package resolvers
|
2020-02-01 17:58:45 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
2020-09-21 12:34:56 +02:00
|
|
|
"time"
|
2020-02-01 17:58:45 +01:00
|
|
|
|
2020-06-23 00:40:47 +02:00
|
|
|
"github.com/pkg/errors"
|
2020-02-01 17:58:45 +01:00
|
|
|
"github.com/viktorstrate/photoview/api/graphql/models"
|
2020-06-23 00:40:47 +02:00
|
|
|
"github.com/viktorstrate/photoview/api/scanner"
|
2020-02-01 17:58:45 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
func (r *mutationResolver) ScanAll(ctx context.Context) (*models.ScannerResult, error) {
|
2020-06-23 15:13:07 +02:00
|
|
|
err := scanner.AddAllToQueue()
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
startMessage := "Scanner started"
|
|
|
|
|
|
|
|
return &models.ScannerResult{
|
|
|
|
Finished: false,
|
|
|
|
Success: true,
|
|
|
|
Message: &startMessage,
|
|
|
|
}, nil
|
2020-02-01 17:58:45 +01:00
|
|
|
}
|
2020-04-15 11:21:16 +02:00
|
|
|
|
2020-02-09 21:25:33 +01:00
|
|
|
func (r *mutationResolver) ScanUser(ctx context.Context, userID int) (*models.ScannerResult, error) {
|
2020-06-23 00:40:47 +02:00
|
|
|
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")
|
|
|
|
}
|
2020-06-22 23:52:41 +02:00
|
|
|
|
2020-06-23 00:40:47 +02:00
|
|
|
scanner.AddUserToQueue(user)
|
|
|
|
|
|
|
|
startMessage := "Scanner started"
|
|
|
|
return &models.ScannerResult{
|
|
|
|
Finished: false,
|
|
|
|
Success: true,
|
|
|
|
Message: &startMessage,
|
|
|
|
}, nil
|
2020-02-01 17:58:45 +01:00
|
|
|
}
|
2020-09-21 11:50:39 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2020-09-21 12:34:56 +02:00
|
|
|
scanner.ChangePeriodicScanInterval(time.Duration(dbInterval) * time.Second)
|
|
|
|
|
2020-09-21 11:50:39 +02:00
|
|
|
return dbInterval, nil
|
|
|
|
}
|
2020-09-21 21:32:30 +02:00
|
|
|
|
|
|
|
func (r *mutationResolver) SetScannerConcurrentWorkers(ctx context.Context, workers int) (int, error) {
|
|
|
|
if workers < 0 {
|
|
|
|
return 0, errors.New("concurrent workers must be positive")
|
|
|
|
}
|
|
|
|
|
|
|
|
_, 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
|
|
|
|
}
|