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 {{{
// ==UserScript==
// @name Moodle/Elearning/KMOOC test help
// @version 2.1.5.1
// @version 2.1.5.2
// @description Online Moodle/Elearning/KMOOC test help
// @author MrFry
// @match https://elearning.uni-obuda.hu/*
@ -93,17 +93,19 @@
;(function () {
// CONFIG
let serverToUse = getJSONVal('serverToUse')
if (!serverToUse) {
serverToUse = {
const defultServer = {
host: 'piros.trambul.in',
port: 443,
}
if (!serverToUse) {
serverToUse = defultServer
setJSONVal('serverToUse', serverToUse)
}
const logElementGetting = false
const logEnabled = true
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 loggedIn = false
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() {
clearAllMessages()
resetMenu()
@ -1687,6 +1716,16 @@
NoUserAction()
return
}
if (inf.isDeprecated) {
const hadDeprecatedServer = handleDeprecatedServer()
if (hadDeprecatedServer) {
log('Removed deprecated server')
ConnectToServer()
return
}
}
loggedIn = true
lastestVersion = inf.version.replace(/\n/g, '')
motd = inf.motd
@ -1699,11 +1738,18 @@
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) => {
elem.style.display = ''
})
AfterLoad()
registerScript()
} catch (e) {
warn(e)
}
@ -1904,7 +1950,7 @@
return
}
let port = hostUrl.includes('http:') ? 80 : 432
let port = hostUrl.includes('http:') ? 80 : 443
if (hostUrl.split(':').length > 1) {
port = hostUrl.split(':')[1]
port = port.replace(/\//g, '')
@ -1980,9 +2026,9 @@
const greetMsg = []
if (isNewVersionAvaible) {
timeout = 5
greetMsg.push(texts.newVersionAvaible + lastestVersion)
timeout = undefined
// timeout = 5
// greetMsg.push(texts.newVersionAvaible + lastestVersion)
// timeout = undefined
}
if (newVersion) {
greetMsg.push(texts.versionUpdated + info().script.version)
@ -2797,31 +2843,6 @@
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)
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) {
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 selectedIndex = peers.findIndex((x) => {
return getPeerUrl(x) === getPeerUrl(selectedPeer)
})
selector.value = selectedIndex
peerSelector.value = selectedIndex
} catch (e) {
debugLog('error in updatePeerSelector')
}
@ -3149,7 +3203,6 @@
}
function GetXHRInfos() {
registerScript()
const now = new Date().getTime()
let lastCheck = getVal('lastInfoCheckTime')
if (!lastCheck) {