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)
}