1
0
mirror of https://github.com/hrfee/jfa-go.git synced 2024-12-23 01:20:11 +00:00

Users: Add delay when modifying >100 users

Hopefully avoids Jellyfin crashing. For #160
This commit is contained in:
Harvey Tindall 2021-11-10 20:40:02 +00:00
parent 36f3860c4c
commit 94e3c13b3e
Signed by: hrfee
GPG Key ID: BBC65952848FB1A2

14
api.go
View File

@ -1715,11 +1715,22 @@ func (app *appContext) ApplySettings(gc *gin.Context) {
"policy": map[string]string{}, "policy": map[string]string{},
"homescreen": map[string]string{}, "homescreen": map[string]string{},
} }
/* Jellyfin doesn't seem to like too many of these requests sent in succession
and can crash and mess up its database. Issue #160 says this occurs when more
than 100 users are modified. A delay totalling 500ms between requests is used
if so. */
var shouldDelay bool = len(req.ApplyTo) >= 100
if shouldDelay {
app.debug.Println("Adding delay between requests for large batch")
}
for _, id := range req.ApplyTo { for _, id := range req.ApplyTo {
status, err := app.jf.SetPolicy(id, policy) status, err := app.jf.SetPolicy(id, policy)
if !(status == 200 || status == 204) || err != nil { if !(status == 200 || status == 204) || err != nil {
errors["policy"][id] = fmt.Sprintf("%d: %s", status, err) errors["policy"][id] = fmt.Sprintf("%d: %s", status, err)
} }
if shouldDelay {
time.Sleep(250 * time.Millisecond)
}
if req.Homescreen { if req.Homescreen {
status, err = app.jf.SetConfiguration(id, configuration) status, err = app.jf.SetConfiguration(id, configuration)
errorString := "" errorString := ""
@ -1735,6 +1746,9 @@ func (app *appContext) ApplySettings(gc *gin.Context) {
errors["homescreen"][id] = errorString errors["homescreen"][id] = errorString
} }
} }
if shouldDelay {
time.Sleep(250 * time.Millisecond)
}
} }
code := 200 code := 200
if len(errors["policy"]) == len(req.ApplyTo) || len(errors["homescreen"]) == len(req.ApplyTo) { if len(errors["policy"]) == len(req.ApplyTo) || len(errors["homescreen"]) == len(req.ApplyTo) {