57 lines
1.2 KiB
Go
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
|
|
}
|