diff --git a/stable.user.js b/stable.user.js index 60dbace..d8da544 100755 --- a/stable.user.js +++ b/stable.user.js @@ -184,8 +184,6 @@ fatalError: 'Fatál error. Check console (f12). Kattints az üzenetre az összes kérdés/válaszért manuális kereséshez! (új böngésző tab-ban)', consoleErrorInfo: `Itteni hibák 100% a moodle hiba. Kivéve, ha oda van írva hogy script error ;) Ha ilyesmi szerepel itt, akkor olvasd el a segítség szekciót! ${serverAdress}`, - freshStartWarning: - '

Moodle teszt userscript:

1.5.0 verzió: a script mostantól XMLHTTP kéréseket küld szerver fele! Erre a userscript futtató kiegészítőd is figyelmeztetni fog! Ha ez történik, a script rendes működése érdekében engedélyezd (Always allow domain)! Ha nem akarod, hogy ez történjen, akkor ne engedélyezd, vagy a menüben válaszd ki a "helyi fájl használata" opciót!

Elküldött adatok: minden teszt után a kérdés-válasz páros. Fogadott adatok: Az összes eddig ismert kérdés. Érdemes help-et elolvasni!!!

Ez az ablak frissités után eltűnik. Ha nem, akkor a visza gombbal próbálkozz.
', noResult: 'Nincs találat :( Kattints az üzenetre az összes kérdés/válaszért manuális kereséshez! (új böngésző tab-ban)', videoHelp: 'Miután elindítottad: Play/pause: space. Seek: Bal/jobb nyíl.', @@ -201,7 +199,6 @@ noPeersOnline: 'Egy peer sem elérhető!', peerTryingError: 'Hiba peerek keresése közben!', pwHere: 'Jelszó ...', - noServerConsoleMessage: `Nem elérhető a szerver! Ha elérhető a weboldal, akkor ott meg bírod nézni a kérdéseket itt: ${serverAdress}allQuestions`, unhandledErrorConsoleMessage: `Kezeletlen hiba történt! Ha elérhető a weboldal, akkor ott meg bírod nézni a kérdéseket itt: ${serverAdress}allQuestions`, noParseableQuestionResult: 'A tesztben nem találhatók kérdések, amit fel lehet dolgozni, vagy hiba történt feldolgozásuk közben', @@ -216,6 +213,9 @@ noHostText: '', hostHere: 'Qmining szerver domain-je...', invalidDomain: 'Hibás domain!\nHelyes formátum: "qmining.com"', + addNewPeer: 'Új hozzáadása...', + selectOtherPeer: 'Másik peer...', + back: 'Vissza', } var texts = huTexts @@ -1639,7 +1639,7 @@ } if (!serverToUse) { - noHostAction() + addNewHost() return } @@ -1650,8 +1650,6 @@ post('login', { pw: pw, script: true }).then((res) => { if (res.result === 'success') { ConnectToServer() - clearAllMessages() - resetMenu() } else { SafeGetElementById('infoMainDiv', (elem) => { elem.innerText = texts.invalidPW + pw @@ -1660,32 +1658,18 @@ }) } - function resetMenu() { - SafeGetElementById('scriptMenuDiv', (elem) => { - elem.style.backgroundColor = '#262626' - }) - SafeGetElementById('retryContainer', (elem) => { - elem.style.display = 'none' - }) - SafeGetElementById('loginDiv', (elem) => { - elem.style.display = 'none' - }) - SafeGetElementById('infoMainDiv', (elem) => { - elem.innerText = texts.connecting + getShortServerURL(serverAdress) - }) - } - function ConnectToServer() { - console.info('Connecting to:', serverAdress) clearAllMessages() - SafeGetElementById('peerSelector', (elem) => { - elem.style.display = 'none' - updatePeerSelector(elem) - }) + resetMenu() GetXHRInfos() .then((inf) => { try { + addPeerToSavedPeersIfNotExists(serverToUse) + SafeGetElementById('peerSelector', (elem) => { + updatePeerSelector(elem) + }) + if (inf.result === 'nouser') { NoUserAction() return @@ -1697,9 +1681,9 @@ } subjInfo = inf.subjinfo setVal('userId', inf.uid) - overlay.querySelector( - '#infoMainDiv' - ).innerText = `${subjInfo.subjects.toLocaleString()} tárgy, ${subjInfo.questions.toLocaleString()} kérdés. UID: #${getUid()}` + SafeGetElementById('infoMainDiv', (elem) => { + elem.innerText = `${subjInfo.subjects.toLocaleString()} tárgy, ${subjInfo.questions.toLocaleString()} kérdés` + }) getPeers().catch(() => warn('unable to get p2p info')) SafeGetElementById('peerSelector', (elem) => { @@ -1712,7 +1696,6 @@ } }) .catch((e) => { - warn(texts.noServerConsoleMessage) warn(e) SafeGetElementById('infoMainDiv', (elem) => { elem.innerText = texts.noServer @@ -1780,30 +1763,55 @@ } } - function connectToPeer(peer) { - const newPeers = getJSONVal('peers').filter((x) => { + function addPeerToSavedPeersIfNotExists(peer) { + const peers = getJSONVal('peers') || [] + const peerAlreadyExists = peers.find((x) => { return getPeerUrl(x) !== getPeerUrl(peer) }) - if (serverToUse) { - newPeers.push(serverToUse) + if (!peerAlreadyExists) { + setVal('peers', JSON.stringify([peer, ...peers])) } - setVal('peers', JSON.stringify(newPeers)) - setVal('serverToUse', JSON.stringify(peer)) - SafeGetElementById('peerSelector', (elem) => { - updatePeerSelector(elem) - }) - - SafeGetElementById('scriptMenuDiv', (elem) => { - elem.style.backgroundColor = '#222426' - }) + } + function connectToPeer(peer) { const url = getPeerUrl(peer) - serverToUse = peer serverAdress = url apiAdress = url + 'api/' + + serverToUse = peer + setVal('serverToUse', JSON.stringify(peer)) + p2pInfoExpireTime = 0 + setVal('lastp2pchecktime', 0) + infoExpireTime = 0 + setVal('lastInfoCheckTime', 0) + ConnectToServer() } + function resetMenu() { + SafeGetElementById('scriptMenuDiv', (elem) => { + elem.style.backgroundColor = '#262626' + }) + SafeGetElementById('peerSelector', (elem) => { + elem.style.display = 'none' + }) + SafeGetElementById('retryContainer', (elem) => { + elem.style.display = 'none' + }) + SafeGetElementById('loginDiv', (elem) => { + elem.style.display = 'none' + }) + SafeGetElementById('hostInputContainer', (elem) => { + elem.style.display = 'none' + }) + SafeGetElementById('buttonContainer', (elem) => { + elem.style.display = 'flex' + }) + SafeGetElementById('infoMainDiv', (elem) => { + elem.innerText = texts.connecting + getShortServerURL(serverAdress) + }) + } + function connectionErrorAction(infoText) { SafeGetElementById('infoMainDiv', (elem) => { elem.innerText = infoText || texts.noServer @@ -1831,12 +1839,9 @@ }) } - function noHostAction() { - const elementIdsToHide = ['buttonContainer'] - elementIdsToHide.forEach((id) => { - SafeGetElementById(id, (elem) => { - elem.style.display = 'none' - }) + function addNewHost() { + SafeGetElementById('buttonContainer', (elem) => { + elem.style.display = 'none' }) SafeGetElementById('retryContainer', (elem) => { elem.style.display = 'none' @@ -2628,7 +2633,7 @@ height: '110px', position: 'fixed', padding: '3px 0px', - bottom: '30px', + bottom: '10px', left: '10px', zIndex: 999999, border: '2px solid #f2cb05', @@ -2664,6 +2669,7 @@ position: 'absolute', display: 'inline', right: '0px', + top: '0px', margin: '5px', cursor: 'pointer', fontSize: '18px', @@ -2737,13 +2743,6 @@ }) const peers = getJSONVal('peers') - if (serverToUse) { - peers.push(serverToUse) - } - - if (peers.length === 1) { - return document.createElement('span') - } peers.forEach((peer, i) => { const option = document.createElement('option') @@ -2752,12 +2751,20 @@ peerSelector.appendChild(option) }) + const newPeerOption = document.createElement('option') + newPeerOption.innerText = texts.addNewPeer + newPeerOption.value = 'new' + peerSelector.appendChild(newPeerOption) peerSelector.addEventListener('change', (e) => { - skipAvailablePeerFind = true - const selectedPeer = peers[e.target.value] - connectToPeer(selectedPeer) - resetMenu() + const selectedValue = e.target.value + if (selectedValue === 'new') { + addNewHost() + } else { + skipAvailablePeerFind = true + const selectedPeer = peers[selectedValue] + connectToPeer(selectedPeer) + } }) updatePeerSelector(peerSelector) @@ -2817,6 +2824,32 @@ return peerInput }, }, + backButton: { + innerText: texts.back, + style: { + color: 'white', + position: 'absolute', + display: serverToUse ? 'inline' : 'none', + right: '0px', + bottom: '0px', + margin: '5px', + cursor: 'pointer', + }, + onClick: () => { + resetMenu() + SafeGetElementById('peerSelector', (elem) => { + elem.style.display = '' + }) + SafeGetElementById('peerSelector', (elem) => { + updatePeerSelector(elem) + }) + SafeGetElementById('infoMainDiv', (elem) => { + if (subjInfo) { + elem.innerText = `${subjInfo.subjects.toLocaleString()} tárgy, ${subjInfo.questions.toLocaleString()} kérdés` + } + }) + }, + }, connectButton: { innerText: texts.connect, style: buttonStyle, @@ -2859,7 +2892,7 @@ }, }, anotherPeerButton: { - innerText: '~Másik peer...~', + innerText: texts.selectOtherPeer, style: { position: '', padding: '0px 8px', @@ -2870,7 +2903,7 @@ cursor: 'pointer', }, onClick: () => { - noHostAction() + addNewHost() }, }, }, @@ -2894,9 +2927,7 @@ peers.push(serverToUse) } - const selectedPeer = getVal('serverToUse') - ? JSON.parse(getVal('serverToUse')) - : null + const selectedPeer = getJSONVal('serverToUse') const selectedIndex = peers.findIndex((x) => { return getPeerUrl(x) === getPeerUrl(selectedPeer) }) @@ -3026,13 +3057,10 @@ } } - function SafeGetElementById(id, next, silent) { + function SafeGetElementById(id, next) { const element = overlay.querySelector('#' + id) if (element) { next(element) - } else { - if (silent) return - log(`Unable to safe get element by id: ${id}`) } } @@ -3118,15 +3146,15 @@ getCid() get(url) - .then(({ responseText: infos }) => { + .then(({ responseText }) => { try { - const infos = JSON.parse(infos) - setVal('lastInfo', JSON.stringify(infos)) + const infos = JSON.parse(responseText) + setJSONVal('lastInfo', infos) setVal('lastInfoCheckTime', now) resolve(infos) } catch (e) { log('Error parsing JSON in GetXHRInfos') - log({ infos: infos }) + log({ infos: responseText }) log(e) reject(e) }