1
Fork 0
photoview/api/graphql/resolvers/scanner.go

88 lines
2.3 KiB
Go
Raw Normal View History

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
"github.com/photoview/photoview/api/database/drivers"
2020-12-17 22:51:43 +01:00
"github.com/photoview/photoview/api/graphql/models"
"github.com/photoview/photoview/api/scanner"
"github.com/pkg/errors"
"gorm.io/gorm"
2020-02-01 17:58:45 +01:00
)
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
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-11-27 16:02:10 +01:00
var user models.User
if err := r.DB(ctx).First(&user, userID).Error; err != nil {
return nil, errors.Wrap(err, "get user from database")
}
2020-06-22 23:52:41 +02:00
2020-11-27 16:02:10 +01: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) {
db := r.DB(ctx)
2020-09-21 11:50:39 +02:00
if interval < 0 {
return 0, errors.New("interval must be 0 or above")
}
if err := db.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(&models.SiteInfo{}).Update("periodic_scan_interval", interval).Error; err != nil {
2020-09-21 11:50:39 +02:00
return 0, err
}
2020-11-27 16:02:10 +01:00
var siteInfo models.SiteInfo
if err := db.First(&siteInfo).Error; err != nil {
2020-09-21 11:50:39 +02:00
return 0, err
}
2020-11-27 16:02:10 +01:00
scanner.ChangePeriodicScanInterval(time.Duration(siteInfo.PeriodicScanInterval) * time.Second)
2020-09-21 12:34:56 +02:00
2020-11-27 16:02:10 +01:00
return siteInfo.PeriodicScanInterval, nil
2020-09-21 11:50:39 +02:00
}
func (r *mutationResolver) SetScannerConcurrentWorkers(ctx context.Context, workers int) (int, error) {
db := r.DB(ctx)
if workers < 1 {
return 0, errors.New("concurrent workers must at least be 1")
}
if workers > 1 && drivers.DatabaseDriverFromEnv() == drivers.SQLITE {
return 0, errors.New("multiple workers not supported for SQLite databases")
}
if err := db.Session(&gorm.Session{AllowGlobalUpdate: true}).Model(&models.SiteInfo{}).Update("concurrent_workers", workers).Error; err != nil {
return 0, err
}
2020-11-27 16:02:10 +01:00
var siteInfo models.SiteInfo
if err := db.First(&siteInfo).Error; err != nil {
return 0, err
}
2020-11-27 16:02:10 +01:00
scanner.ChangeScannerConcurrentWorkers(siteInfo.ConcurrentWorkers)
2020-11-27 16:02:10 +01:00
return siteInfo.ConcurrentWorkers, nil
}