new peer adding port fix, deprecated server handling, better peer selector updating

This commit is contained in:
mrfry 2023-05-07 11:48:28 +02:00
parent 0e6ccc4595
commit f0fa999571

View file

@ -46,7 +46,7 @@
// : Script header {{{ // : Script header {{{
// ==UserScript== // ==UserScript==
// @name Moodle/Elearning/KMOOC test help // @name Moodle/Elearning/KMOOC test help
// @version 2.1.5.1 // @version 2.1.5.2
// @description Online Moodle/Elearning/KMOOC test help // @description Online Moodle/Elearning/KMOOC test help
// @author MrFry // @author MrFry
// @match https://elearning.uni-obuda.hu/* // @match https://elearning.uni-obuda.hu/*
@ -93,17 +93,19 @@
;(function () { ;(function () {
// CONFIG // CONFIG
let serverToUse = getJSONVal('serverToUse') let serverToUse = getJSONVal('serverToUse')
const defultServer = {
host: 'piros.trambul.in',
port: 443,
}
if (!serverToUse) { if (!serverToUse) {
serverToUse = { serverToUse = defultServer
host: 'piros.trambul.in',
port: 443,
}
setJSONVal('serverToUse', serverToUse) setJSONVal('serverToUse', serverToUse)
} }
const logElementGetting = false const logElementGetting = false
const logEnabled = true const logEnabled = true
const motdShowCount = 5 // Ammount of times to show motd const motdShowCount = 5 // Ammount of times to show motd
let infoExpireTime = 60 * 5 // Every n seconds basic info should be (re)loaded from server let infoExpireTime = 60 * 5
let p2pInfoExpireTime = 60 * 60 * 24 let p2pInfoExpireTime = 60 * 60 * 24
let loggedIn = false let loggedIn = false
const messageOpacityDelta = 0.1 const messageOpacityDelta = 0.1
@ -1671,6 +1673,33 @@
}) })
} }
function handleDeprecatedServer() {
const peers = getJSONVal('peers')
if (!peers) return
const newPeers = peers.filter((x) => {
return x.host !== serverToUse.host && x.port !== serverToUse.port
})
const removedCurrentPeer = peers.length > newPeers.length
if (removedCurrentPeer) {
if (newPeers.length === 0) {
newPeers.push(defultServer)
}
setJSONVal('peers', newPeers)
serverToUse = defultServer
setJSONVal('serverToUse', serverToUse)
serverAdress = getPeerUrl(serverToUse)
apiAdress = getPeerUrl(serverToUse) + 'api/'
infoExpireTime = 0
p2pInfoExpireTime = 0
}
return removedCurrentPeer
}
function ConnectToServer() { function ConnectToServer() {
clearAllMessages() clearAllMessages()
resetMenu() resetMenu()
@ -1687,6 +1716,16 @@
NoUserAction() NoUserAction()
return return
} }
if (inf.isDeprecated) {
const hadDeprecatedServer = handleDeprecatedServer()
if (hadDeprecatedServer) {
log('Removed deprecated server')
ConnectToServer()
return
}
}
loggedIn = true loggedIn = true
lastestVersion = inf.version.replace(/\n/g, '') lastestVersion = inf.version.replace(/\n/g, '')
motd = inf.motd motd = inf.motd
@ -1699,11 +1738,18 @@
elem.innerText = `${subjInfo.subjects.toLocaleString()} tárgy, ${subjInfo.questions.toLocaleString()} kérdés` elem.innerText = `${subjInfo.subjects.toLocaleString()} tárgy, ${subjInfo.questions.toLocaleString()} kérdés`
}) })
getPeers().catch(() => warn('unable to get p2p info')) getPeers()
.then(() => {
SafeGetElementById('peerSelector', (elem) => {
updatePeerSelector(elem)
})
})
.catch(() => warn('unable to get p2p info'))
SafeGetElementById('peerSelector', (elem) => { SafeGetElementById('peerSelector', (elem) => {
elem.style.display = '' elem.style.display = ''
}) })
AfterLoad() AfterLoad()
registerScript()
} catch (e) { } catch (e) {
warn(e) warn(e)
} }
@ -1904,7 +1950,7 @@
return return
} }
let port = hostUrl.includes('http:') ? 80 : 432 let port = hostUrl.includes('http:') ? 80 : 443
if (hostUrl.split(':').length > 1) { if (hostUrl.split(':').length > 1) {
port = hostUrl.split(':')[1] port = hostUrl.split(':')[1]
port = port.replace(/\//g, '') port = port.replace(/\//g, '')
@ -1980,9 +2026,9 @@
const greetMsg = [] const greetMsg = []
if (isNewVersionAvaible) { if (isNewVersionAvaible) {
timeout = 5 // timeout = 5
greetMsg.push(texts.newVersionAvaible + lastestVersion) // greetMsg.push(texts.newVersionAvaible + lastestVersion)
timeout = undefined // timeout = undefined
} }
if (newVersion) { if (newVersion) {
greetMsg.push(texts.versionUpdated + info().script.version) greetMsg.push(texts.versionUpdated + info().script.version)
@ -2797,31 +2843,6 @@
margin: '4px 0px', margin: '4px 0px',
}) })
const peers = getJSONVal('peers') || []
peers.forEach((peer, i) => {
const option = document.createElement('option')
option.innerText = getPeerUrl(peer, true)
option.value = i
peerSelector.appendChild(option)
})
const newPeerOption = document.createElement('option')
newPeerOption.innerText = texts.addNewPeer
newPeerOption.value = 'new'
peerSelector.appendChild(newPeerOption)
peerSelector.addEventListener('change', (e) => {
const selectedValue = e.target.value
if (selectedValue === 'new') {
addNewHost()
} else {
skipAvailablePeerFind = true
const selectedPeer = peers[selectedValue]
connectToPeer(selectedPeer)
}
})
updatePeerSelector(peerSelector) updatePeerSelector(peerSelector)
return peerSelector return peerSelector
@ -2946,15 +2967,48 @@
} }
} }
function onPeerSelect(e) {
const peers = getJSONVal('peers') || []
const selectedValue = e.target.value
if (selectedValue === 'new') {
addNewHost()
} else {
skipAvailablePeerFind = true
const selectedPeer = peers[selectedValue]
if (!selectedPeer) {
return
}
connectToPeer(selectedPeer)
}
}
function updatePeerSelector(selector) { function updatePeerSelector(selector) {
try { try {
const peers = getJSONVal('peers') const peerSelector = document.getElementById('peerSelector') || selector
if (!peerSelector) return
const peers = getJSONVal('peers') || []
peerSelector.length = 0
peers.forEach((peer, i) => {
const option = document.createElement('option')
option.innerText = getPeerUrl(peer, true)
option.value = i
peerSelector.appendChild(option)
})
const newPeerOption = document.createElement('option')
newPeerOption.innerText = texts.addNewPeer
newPeerOption.value = 'new'
peerSelector.appendChild(newPeerOption)
peerSelector.removeEventListener('change', onPeerSelect)
peerSelector.addEventListener('change', onPeerSelect)
const selectedPeer = getJSONVal('serverToUse') const selectedPeer = getJSONVal('serverToUse')
const selectedIndex = peers.findIndex((x) => { const selectedIndex = peers.findIndex((x) => {
return getPeerUrl(x) === getPeerUrl(selectedPeer) return getPeerUrl(x) === getPeerUrl(selectedPeer)
}) })
selector.value = selectedIndex peerSelector.value = selectedIndex
} catch (e) { } catch (e) {
debugLog('error in updatePeerSelector') debugLog('error in updatePeerSelector')
} }
@ -3149,7 +3203,6 @@
} }
function GetXHRInfos() { function GetXHRInfos() {
registerScript()
const now = new Date().getTime() const now = new Date().getTime()
let lastCheck = getVal('lastInfoCheckTime') let lastCheck = getVal('lastInfoCheckTime')
if (!lastCheck) { if (!lastCheck) {