Subsonic: internet radio, chat, bookmarks, play queue, scanner status endpoints
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user