Files

57 lines
1.2 KiB
Go

package subsonic
import (
"context"
"git.noroutes.net/NoRoutes/vibetunes/internal/database"
)
func init() {
register("getScanStatus", handleGetScanStatus)
register("startScan", handleStartScan)
}
func scanStatus(rc *Context) (*ScanStatus, *apiError) {
db := rc.Server.DB
scanning := rc.Server.Scanner.IsAnyScanning()
var count int64
var err error
if scanning {
count, err = database.TotalFilesSeenAcrossScans(db)
} else {
count, err = database.TotalMediaFileCount(db)
}
if err != nil {
return nil, newError(ErrGeneric, err.Error())
}
return &ScanStatus{Scanning: scanning, Count: count}, nil
}
func handleGetScanStatus(rc *Context) *apiError {
status, aerr := scanStatus(rc)
if aerr != nil {
return aerr
}
rc.Response = newResponse()
rc.Response.ScanStatus = status
return nil
}
func handleStartScan(rc *Context) *apiError {
if !rc.User.IsAdmin {
return errUnauthorized("starting a library scan")
}
if !rc.Server.Scanner.IsAnyScanning() {
go func() {
_ = rc.Server.Scanner.ScanAllEnabled(context.Background())
}()
}
status, aerr := scanStatus(rc)
if aerr != nil {
return aerr
}
rc.Response = newResponse()
rc.Response.ScanStatus = status
return nil
}