From 78049d4a333c318cf189d8061a596d5e315b7280 Mon Sep 17 00:00:00 2001 From: Harvey Tindall Date: Tue, 6 Apr 2021 15:46:28 +0100 Subject: [PATCH] hyphenate/dehyphenate users.json if necessary doubt this would have caused problems anyway but why not. --- main.go | 36 ++++++++++++++++++++++++++---------- storage.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 72 insertions(+), 16 deletions(-) diff --git a/main.go b/main.go index 6a60418..db9b1d3 100644 --- a/main.go +++ b/main.go @@ -489,31 +489,47 @@ func start(asDaemon, firstCall bool) { } if noHyphens == app.jf.Hyphens { var newEmails map[string]interface{} - var status int - var err error + var newUsers map[string]time.Time + var status, status2 int + var err, err2 error if app.jf.Hyphens { - app.info.Println(info("Your build of Jellyfin appears to hypenate user IDs. Your emails.json file will be modified to match.")) + app.info.Println(info("Your build of Jellyfin appears to hypenate user IDs. Your emails.json/users.json file will be modified to match.")) time.Sleep(time.Second * time.Duration(3)) newEmails, status, err = app.hyphenateEmailStorage(app.storage.emails) + newUsers, status2, err2 = app.hyphenateUserStorage(app.storage.users) } else { - app.info.Println(info("Your emails.json file uses hyphens, but the Jellyfin server no longer does. It will be modified.")) + app.info.Println(info("Your emails.json/users.json file uses hyphens, but the Jellyfin server no longer does. It will be modified.")) time.Sleep(time.Second * time.Duration(3)) newEmails, status, err = app.deHyphenateEmailStorage(app.storage.emails) + newUsers, status2, err2 = app.deHyphenateUserStorage(app.storage.users) } if status != 200 || err != nil { - app.err.Printf("Failed to get users from Jellyfin: Code %d", status) - app.debug.Printf("Error: %s", err) + app.err.Printf("Failed to get users from Jellyfin (%d): %v", status, err) app.err.Fatalf("Couldn't upgrade emails.json") } - bakFile := app.storage.emails_path + ".bak" - err = storeJSON(bakFile, app.storage.emails) + if status2 != 200 || err2 != nil { + app.err.Printf("Failed to get users from Jellyfin (%d): %v", status, err) + app.err.Fatalf("Couldn't upgrade users.json") + } + emailBakFile := app.storage.emails_path + ".bak" + usersBakFile := app.storage.users_path + ".bak" + err = storeJSON(emailBakFile, app.storage.emails) + err2 = storeJSON(usersBakFile, app.storage.users) if err != nil { - app.err.Fatalf("couldn't store emails.json backup: %s", err) + app.err.Fatalf("couldn't store emails.json backup: %v", err) + } + if err2 != nil { + app.err.Fatalf("couldn't store users.json backup: %v", err) } app.storage.emails = newEmails + app.storage.users = newUsers err = app.storage.storeEmails() + err2 = app.storage.storeUsers() if err != nil { - app.err.Fatalf("couldn't store emails.json: %s", err) + app.err.Fatalf("couldn't store emails.json: %v", err) + } + if err2 != nil { + app.err.Fatalf("couldn't store users.json: %v", err) } } } diff --git a/storage.go b/storage.go index 6e7a7cc..080c9c3 100644 --- a/storage.go +++ b/storage.go @@ -638,7 +638,7 @@ func hyphenate(userID string) string { return userID[:8] + "-" + userID[8:12] + "-" + userID[12:16] + "-" + userID[16:20] + "-" + userID[20:] } -func (app *appContext) deHyphenateEmailStorage(old map[string]interface{}) (map[string]interface{}, int, error) { +func (app *appContext) deHyphenateStorage(old map[string]interface{}) (map[string]interface{}, int, error) { jfUsers, status, err := app.jf.GetUsers(false) if status != 200 || err != nil { return nil, status, err @@ -647,15 +647,15 @@ func (app *appContext) deHyphenateEmailStorage(old map[string]interface{}) (map[ for _, user := range jfUsers { unHyphenated := user.ID hyphenated := hyphenate(unHyphenated) - email, ok := old[hyphenated] + val, ok := old[hyphenated] if ok { - newEmails[unHyphenated] = email + newEmails[unHyphenated] = val } } return newEmails, status, err } -func (app *appContext) hyphenateEmailStorage(old map[string]interface{}) (map[string]interface{}, int, error) { +func (app *appContext) hyphenateStorage(old map[string]interface{}) (map[string]interface{}, int, error) { jfUsers, status, err := app.jf.GetUsers(false) if status != 200 || err != nil { return nil, status, err @@ -664,10 +664,50 @@ func (app *appContext) hyphenateEmailStorage(old map[string]interface{}) (map[st for _, user := range jfUsers { unstripped := user.ID stripped := strings.ReplaceAll(unstripped, "-", "") - email, ok := old[stripped] + val, ok := old[stripped] if ok { - newEmails[unstripped] = email + newEmails[unstripped] = val } } return newEmails, status, err } + +func (app *appContext) hyphenateEmailStorage(old map[string]interface{}) (map[string]interface{}, int, error) { + return app.hyphenateStorage(old) +} + +func (app *appContext) deHyphenateEmailStorage(old map[string]interface{}) (map[string]interface{}, int, error) { + return app.deHyphenateStorage(old) +} + +func (app *appContext) hyphenateUserStorage(old map[string]time.Time) (map[string]time.Time, int, error) { + asInterface := map[string]interface{}{} + for k, v := range old { + asInterface[k] = v + } + fixed, status, err := app.hyphenateStorage(asInterface) + if err != nil { + return nil, status, err + } + out := map[string]time.Time{} + for k, v := range fixed { + out[k] = v.(time.Time) + } + return out, status, err +} + +func (app *appContext) deHyphenateUserStorage(old map[string]time.Time) (map[string]time.Time, int, error) { + asInterface := map[string]interface{}{} + for k, v := range old { + asInterface[k] = v + } + fixed, status, err := app.deHyphenateStorage(asInterface) + if err != nil { + return nil, status, err + } + out := map[string]time.Time{} + for k, v := range fixed { + out[k] = v.(time.Time) + } + return out, status, err +}