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 }