diff --git a/api.go b/api.go index c3369be..a20ca7f 100644 --- a/api.go +++ b/api.go @@ -1191,21 +1191,21 @@ func (app *appContext) ModifyConfig(gc *gin.Context) { for setting, value := range settings.(map[string]interface{}) { if section == "ui" && setting == "language-form" { for key, lang := range app.storage.lang.Form { - if lang.Meta.Name == value.(string) { + if lang.Meta.Name == value.(string) || value.(string) == key { tempConfig.Section("ui").Key("language-form").SetValue(key) break } } } else if section == "ui" && setting == "language-admin" { for key, lang := range app.storage.lang.Admin { - if lang.Meta.Name == value.(string) { + if lang.Meta.Name == value.(string) || value.(string) == key { tempConfig.Section("ui").Key("language-admin").SetValue(key) break } } } else if section == "email" && setting == "language" { for key, lang := range app.storage.lang.Email { - if lang.Meta.Name == value.(string) { + if lang.Meta.Name == value.(string) || value.(string) == key { tempConfig.Section("email").Key("language").SetValue(key) break } diff --git a/html/setup2.html b/html/setup2.html index 3d04ab8..7e27716 100644 --- a/html/setup2.html +++ b/html/setup2.html @@ -133,7 +133,7 @@ diff --git a/lang/admin/de-de.json b/lang/admin/de-de.json index da6b5ed..2b8c331 100644 --- a/lang/admin/de-de.json +++ b/lang/admin/de-de.json @@ -29,8 +29,6 @@ "commitNoun": "Commit", "newUser": "Neuer Benutzer", "profile": "Profil", - "success": "Erfolg", - "error": "Fehler", "unknown": "Unbekannt", "modifySettings": "Einstellungen ändern", "modifySettingsDescription": "Wende Einstellungen von einem bestehenden Profil an, oder beziehe sie direkt von einem Benutzer.", diff --git a/lang/admin/en-us.json b/lang/admin/en-us.json index 3a754f1..4528e1c 100644 --- a/lang/admin/en-us.json +++ b/lang/admin/en-us.json @@ -29,8 +29,6 @@ "commitNoun": "Commit", "newUser": "New User", "profile": "Profile", - "success": "Success", - "error": "Error", "unknown": "Unknown", "label": "Label", "modifySettings": "Modify Settings", diff --git a/lang/admin/fr-fr.json b/lang/admin/fr-fr.json index aee70b4..0ae82a7 100644 --- a/lang/admin/fr-fr.json +++ b/lang/admin/fr-fr.json @@ -30,8 +30,6 @@ "commitNoun": "Commettre", "newUser": "Nouvel utilisateur", "profile": "Profil", - "success": "Succès", - "error": "Erreur", "unknown": "Inconnu", "modifySettings": "Modifier les paramètres", "modifySettingsDescription": "Appliquez les paramètres à partir d'un profil existant ou obtenez-les directement auprès d'un utilisateur.", diff --git a/lang/admin/nl-nl.json b/lang/admin/nl-nl.json index a3b5c9e..b67dcc7 100644 --- a/lang/admin/nl-nl.json +++ b/lang/admin/nl-nl.json @@ -29,8 +29,6 @@ "commitNoun": "Commit", "newUser": "Nieuwe gebruiker", "profile": "Profiel", - "success": "Success", - "error": "Fout", "unknown": "Onbekend", "modifySettings": "Instellingen aanpassen", "modifySettingsDescription": "Pas instellingen van een bestaand profiel toe, of neem ze direct over van een gebruiker.", diff --git a/lang/common/de-de.json b/lang/common/de-de.json index 05ee422..bfec603 100644 --- a/lang/common/de-de.json +++ b/lang/common/de-de.json @@ -6,6 +6,8 @@ "username": "Benutzername", "password": "Passwort", "emailAddress": "E-Mail-Adresse", - "submit": "Absenden" + "submit": "Absenden", + "success": "Erfolg", + "error": "Fehler" } } diff --git a/lang/common/en-us.json b/lang/common/en-us.json index 1dfcd57..4c3e061 100644 --- a/lang/common/en-us.json +++ b/lang/common/en-us.json @@ -6,6 +6,8 @@ "username": "Username", "password": "Password", "emailAddress": "Email Address", - "submit": "Submit" + "submit": "Submit", + "success": "Success", + "error": "Error" } } diff --git a/lang/common/fr-fr.json b/lang/common/fr-fr.json index 0ab8d13..75f8021 100644 --- a/lang/common/fr-fr.json +++ b/lang/common/fr-fr.json @@ -7,6 +7,8 @@ "username": "Nom d'utilisateur", "password": "Mot de passe", "emailAddress": "Addresse Email", - "submit": "Soumettre" + "submit": "Soumettre", + "success": "Succès", + "error": "Erreur" } } diff --git a/lang/common/nl-nl.json b/lang/common/nl-nl.json index c099758..421d740 100644 --- a/lang/common/nl-nl.json +++ b/lang/common/nl-nl.json @@ -6,6 +6,8 @@ "username": "Gebruikersnaam", "password": "Wachtwoord", "emailAddress": "E-mailadres", - "submit": "Verstuur" + "submit": "Verstuur", + "success": "Success", + "error": "Fout" } } diff --git a/setup.go b/setup.go index 02d630d..24391e7 100644 --- a/setup.go +++ b/setup.go @@ -47,15 +47,20 @@ func (app *appContext) ServeSetup(gc *gin.Context) { } type testReq struct { - Host string `json:"jfHost"` - Username string `json:"jfUser"` - Password string `json:"jfPassword"` + ServerType string `json:"type"` + Server string `json:"server"` + Username string `json:"username"` + Password string `json:"password"` } func (app *appContext) TestJF(gc *gin.Context) { var req testReq gc.BindJSON(&req) - tempjf, _ := mediabrowser.NewServer(mediabrowser.JellyfinServer, req.Host, "jfa-go-setup", app.version, "auth", "auth", common.NewTimeoutHandler("authJF", req.Host, true), 30) + serverType := mediabrowser.JellyfinServer + if req.ServerType == "emby" { + serverType = mediabrowser.EmbyServer + } + tempjf, _ := mediabrowser.NewServer(serverType, req.Server, "jfa-go-setup", app.version, "auth", "auth", common.NewTimeoutHandler("authJF", req.Server, true), 30) _, status, err := tempjf.Authenticate(req.Username, req.Password) if !(status == 200 || status == 204) || err != nil { app.info.Printf("Auth failed with code %d (%s)", status, err) diff --git a/ts/modules/common.ts b/ts/modules/common.ts index c1811f0..fe9b497 100644 --- a/ts/modules/common.ts +++ b/ts/modules/common.ts @@ -68,7 +68,7 @@ export const _get = (url: string, data: Object, onreadystatechange: (req: XMLHtt req.send(JSON.stringify(data)); }; -export const _post = (url: string, data: Object, onreadystatechange: (req: XMLHttpRequest) => void, response?: boolean): void => { +export const _post = (url: string, data: Object, onreadystatechange: (req: XMLHttpRequest) => void, response?: boolean, noErrorHandler?: boolean): void => { let req = new XMLHttpRequest(); req.open("POST", window.URLBase + url, true); if (response) { @@ -77,10 +77,10 @@ export const _post = (url: string, data: Object, onreadystatechange: (req: XMLHt req.setRequestHeader("Authorization", "Bearer " + window.token); req.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); req.onreadystatechange = () => { - if (req.status == 0) { + if (req.status == 0 && !noErrorHandler) { window.notifications.connectionError(); return; - } else if (req.status == 401) { + } else if (req.status == 401 && !noErrorHandler) { window.notifications.customError("401Error", window.lang.notif("error401Unauthorized")); } onreadystatechange(req); diff --git a/ts/setup.ts b/ts/setup.ts index f417a34..b01df83 100644 --- a/ts/setup.ts +++ b/ts/setup.ts @@ -1,4 +1,4 @@ -import { _get, _post } from "./modules/common.js"; +import { _get, _post, toggleLoader } from "./modules/common.js"; import { lang, LangFile, loadLangSelector } from "./modules/lang.js"; interface sWindow extends Window { @@ -6,6 +6,7 @@ interface sWindow extends Window { } declare var window: sWindow; +window.URLBase = ""; const get = (id: string): HTMLElement => document.getElementById(id); const text = (id: string, val: string) => { document.getElementById(id).textContent = val; }; @@ -270,6 +271,30 @@ const settings = { }, }; +const restartButton = document.getElementById("restart") as HTMLSpanElement; +const serialize = () => { + toggleLoader(restartButton); + let config = {}; + for (let section in settings) { + config[section] = {}; + for (let setting in settings[section]) { + if (settings[section][setting].value) { + config[section][setting] = settings[section][setting].value; + } + } + } + config["restart-program"] = true; + _post("/config", config, (req: XMLHttpRequest) => { + if (req.readyState == 4) { + toggleLoader(restartButton); + restartButton.classList.add("~positive"); + restartButton.classList.remove("~urge"); + restartButton.textContent = window.lang.strings("success"); + } + }, true, true); +} +restartButton.onclick = serialize; + const relatedToEmail = Array.from(document.getElementsByClassName("related-to-email")); const emailMethodChange = () => { const val = settings["email"]["method"].value; @@ -372,6 +397,48 @@ window.onpopstate = (event: PopStateEvent) => { window.scrollTo(0, 0); }); } } -})() +})(); + +(() => { + const button = document.getElementById("jellyfin-test-connection") as HTMLSpanElement; + const ogText = button.textContent; + const nextButton = button.parentElement.querySelector("span.next") as HTMLSpanElement; + button.onclick = () => { + toggleLoader(button); + let send = { + "type": settings["jellyfin"]["type"].value, + "server": settings["jellyfin"]["server"].value, + "username": settings["jellyfin"]["username"].value, + "password": settings["jellyfin"]["password"].value + }; + _post("/jellyfin/test", send, (req: XMLHttpRequest) => { + if (req.readyState == 4) { + toggleLoader(button); + const success = req.response["success"] as boolean; + if (success) { + nextButton.removeAttribute("disabled"); + button.textContent = window.lang.strings("success"); + button.classList.add("~positive"); + button.classList.remove("~urge"); + setTimeout(() => { + button.textContent = ogText; + button.classList.add("~urge"); + button.classList.remove("~positive"); + }, 5000); + } else { + nextButton.setAttribute("disabled", ""); + button.textContent = window.lang.strings("error"); + button.classList.add("~critical"); + button.classList.remove("~urge"); + setTimeout(() => { + button.textContent = ogText; + button.classList.add("~urge"); + button.classList.remove("~critical"); + }, 5000); + } + } + }, true, true); + }; +})(); loadLangSelector("setup");