From 434777125c0b2df560d80dc677aaaca35ee3c3a7 Mon Sep 17 00:00:00 2001 From: mrfry Date: Thu, 27 Apr 2023 09:13:39 +0200 Subject: [PATCH] images update, sync since all time option, qdb write location fixes, lastUsersSync fixes --- defaultPublicFiles/img/scriptimg/script-1.jpg | Bin 15646 -> 15762 bytes defaultPublicFiles/img/scriptimg/script-2.jpg | Bin 13878 -> 17475 bytes src/modules/api/submodules/p2p.ts | 101 +++++++++++------- src/utils/p2putils.ts | 15 ++- src/worker/handlers/handleQuestionsToPeers.ts | 4 +- submodules/moodle-test-userscript | 2 +- submodules/qmining-page | 2 +- 7 files changed, 79 insertions(+), 45 deletions(-) diff --git a/defaultPublicFiles/img/scriptimg/script-1.jpg b/defaultPublicFiles/img/scriptimg/script-1.jpg index 14723bc0b27fcbc7ee909512f66d9d1b198b5b8b..49f57872de617dc12d679152e49eb3f2a9bf927d 100644 GIT binary patch literal 15762 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 literal 15646 zcmdsd1ymhNwrJx{a3{D+a7}P`cXvCuCj_?u!QI^n?hrh9a1A85TY~F9$-Q^x&YQXK z%X;(Q`oFqP)$T3TyQ-^pon5`37M{KVXfhJg5QBtQkefTu?QQ`Fhq*wx&O)Wh1< zid0fsUg>EavRYbH)KE!9Q9@cy9Lx;>kU4gyAQxyM007y$I;%*EkZNh`kizW%&;S8| z0WXIC(61ctdh zTpfSHDPS1O)XLZl3|D|*MrW{sV0hst-sCs<@F#5f3x))P0G6|wiYT~mSYVjc@=vhI zpI}ofXAqc&1I$Bd2C@gY52^JVZ1xj=^AiTyxq)^2m45aR+1y@T61J7jtYZ8r`qkmjCjE^tmO_#Qdd}#0h zJ63SxY^(qj1(+M3pt~_m+Ql7I6!)mf^NVigLnHG#@#;Xz-aeXZSRzU@>ipyAk$yb~k zdu5Ho$t#=`d3uvJVgtR}{6#L;N6`}aju(^Ota#ZXnjw}M@!{VptHo6&!?>mu?)e(0 zei%rIq@HIOL8N~BH4NS+-T?4C1%Pn5>Fk!fRbcts;D7;`&)at}?0Y<2e@5a8rXON` zF4zDs`!UcNXdo=h>wS1M*&YPWX2Xl2fbj?1f>tjOI{sdrT!BlwL1MKsHcoNc(VtsG zE!UXNicKmb*3p>FTvtD8m1Ma8Dq}$ISJd}DAO3|tTlYwzbiIfX!l%EDEPc4Gsr(BsJ zg-5|82oA69BhKwZ27#~KmYiK+%pVDkM4oY#M(WpV{R0QCf9jd!i(B+BW{DzrqA{QW z5I>g(czygn6JY@G9E8Pz#KOiP<3h(IMPp&(WEE8+2TweB@O*@Tfo!o?VL`E=nlsV= zw-maXbokpJNGPu78ZP$B{^RvHURL${Ri@F|>YMeq+n;DK>Z3$@`FJee?v7cQHzhy+ z;0d^;{rjA-pj+?diKW6qEsXFWlQQw z$vJ&v{ixc+0lL@quViZVRXyf(wJHi#w2JE%WyC7V9@(94O>y_amEyb6+!U>Ae}DE} zFv^F)V5Ii2jrq4?{_!`6-dm+!KiPcI{b!*%m3Y0lD(QJca-HN6yDA|0NR_$i5gmKK zw0mV3#Q)x#v=XwYmslt&)Kb6m^oRrY;R9Lt638P{o#;6BEWd^6!MzQ2gpXb7HpuT~ zdO+nuJZTRSoJNczVVrfj*Aw6_1y_u223xEfhmvxI)Oc{4?IPK@Gd}*E|I^^3lTT*% zVm0+1i*QR-3h9@5a{ip!Kv7Ve%V@qbQ}0rq3^PxB&)34QGDWNSWGSlR)s#Nn zs0_*q!WW1dfujShX_I8rOZ11@r(dvT8#)e6qqrno#s<@W{2BtD>L%nvJY86v?%--; zyMF>W3B^1(JMZG$`aol^|BC6K#bkn;EPi!h>4AGW(_ydtqLGp<4|1NhMdMyxnbn$4 z@9mdZ95R2#XCCSugi2MUZ(3A9*WPZp?+2!jgrlV6iEE4d=T7!2PAJ;nM17d{X=0`} z-;H->6Mxor9v#7RdC4#@%T6-wHWy2SZs9%aytg;CewiHbHYf-&#SvEV zPG{n|0aU0

=)t?j$1tMP|-gvgR1s0?xw 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 literal 13878 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 nM}hM$-CZN|L%EN_y+w mergeRes.localQdbIndex === qdb.index ) - if (qdbMergeResult) { + if ( + qdbMergeResult && + (qdbMergeResult.newData.length > 0 || + qdbMergeResult.newSubjects.length > 0) + ) { const mergedQdb = { ...qdb, data: mergeSubjects( @@ -273,23 +277,34 @@ function writeNewData( const qdbsToWrite = [...changedQuestionDbs, ...newQuestionDbs] const existingQdbs = utils.ReadJSON(dbsFilePath) - const qdbDataToWrite = qdbsToWrite.reduce((acc, qdb) => { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const { data, index, ...qdbData } = qdb - const existingQdbData = acc.find((data) => { - return data.name === qdbData.name + const qdbDataToWrite = qdbsToWrite + .reduce((acc, qdb) => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { data, index, ...qdbData } = qdb + const existingQdbData = acc.find((data) => { + return data.name === qdbData.name + }) + if (!existingQdbData) { + return [...acc, qdbData] + } else { + return acc + } + }, existingQdbs) + .map((qdb) => { + if (qdb.path.includes(publicDir)) { + return { + ...qdb, + path: qdb.path.replace(publicDir, ''), + } + } else { + return qdb + } }) - if (!existingQdbData) { - return [...acc, qdbData] - } else { - return acc - } - }, existingQdbs) utils.WriteFile(JSON.stringify(qdbDataToWrite, null, 2), dbsFilePath) qdbsToWrite.forEach((qdb) => { try { - writeData(qdb.data, publicDir + qdb.path) + writeData(qdb.data, qdb.path) } catch (e) { logger.Log(`Error writing ${qdb.name} qdb to file!`, 'redbg') console.error(e) @@ -321,23 +336,23 @@ function setupQuestionsForMerge(qdb: QuestionDb, peer: PeerInfo) { } async function authAndGetNewData({ - peers, peer, selfInfo, + allTime, }: { - peers: PeerInfo[] peer: PeerInfo selfInfo: PeerInfo + allTime?: boolean }): Promise> { let sessionCookie = peer.sessionCookie - const lastSyncWithPeer = peer.lastSync || 0 - const lastUsersSyncWithPeer = peer.lastUsersSync || 0 + const lastSyncWithPeer = allTime ? 0 : peer.lastSync || 0 + const lastUsersSyncWithPeer = allTime ? 0 : peer.lastUsersSync || 0 if (!sessionCookie) { const loginResult = await loginToPeer(peer) if (typeof loginResult === 'string') { sessionCookie = loginResult - updatePeersFile(peers, { ...peer, sessionCookie: loginResult }) + updatePeersFile({ ...peer, sessionCookie: loginResult }) } else { return { error: loginResult, @@ -375,7 +390,7 @@ async function authAndGetNewData({ const loginResult = await loginToPeer(peer) if (typeof loginResult === 'string') { sessionCookie = loginResult - updatePeersFile(peers, { ...peer, sessionCookie: loginResult }) + updatePeersFile({ ...peer, sessionCookie: loginResult }) } else { return { error: loginResult, @@ -559,7 +574,7 @@ function setup(data: SubmoduleData): Submodule { return { ...qdb, index: availableIndexes[i], - path: `questionDbs/${qdb.name}.json`, + path: `${publicDir}questionDbs/${qdb.name}.json`, } }) } @@ -595,7 +610,13 @@ function setup(data: SubmoduleData): Submodule { } } - async function syncData(usersOnly?: boolean) { + async function syncData({ + usersOnly, + allTime, + }: { + usersOnly: boolean + allTime: boolean + }) { if (peers.length === 0) { logger.Log( `There are no peers specified in ${paths.peersFile}, aborting sync`, @@ -611,21 +632,27 @@ function setup(data: SubmoduleData): Submodule { peers.length }${logger.C()} peers` ) + if (usersOnly) { logger.Log(`\tSyncing users only!`, 'yellowbg') } + if (allTime) { + logger.Log(`\tSyncing since all time!`, 'yellowbg') + } const lastSync = selfInfo.lastSync logger.Log( - `\tLast sync date: ${logger.C('blue')}${new Date( - lastSync - ).toLocaleString()}${logger.C()}` + `\tLast sync date: ${logger.C('blue')}${ + lastSync ? new Date(lastSync).toLocaleString() : 'never' + }${logger.C()}` ) const syncStart = new Date().getTime() const lastSyncInfos = peers.map((peer) => { return [ peerToString(peer), - new Date(peer.lastSync).toLocaleString(), + peer.lastSync + ? new Date(peer.lastSync).toLocaleString() + : 'never', ] }) logger.Log(`\tLast sync with peers:`) @@ -636,9 +663,9 @@ function setup(data: SubmoduleData): Submodule { const requests = peers.map((peer) => { return authAndGetNewData({ - peers: peers, peer: peer, selfInfo: selfInfo, + allTime: allTime, }) }) @@ -688,7 +715,7 @@ function setup(data: SubmoduleData): Submodule { if (questionCount > 0) { resultDataWithoutEmptyDbs.push(res) } else if (!usersOnly) { - updatePeersFile(peers, { + updatePeersFile({ ...res.peer, lastSync: syncStart, }) @@ -775,7 +802,7 @@ function setup(data: SubmoduleData): Submodule { resultsCount[peerToString(res.peer)] = { newUsers: addedUserCount, } - updatePeersFile(peers, { + updatePeersFile({ ...res.peer, lastUsersSync: syncStart, }) @@ -894,7 +921,7 @@ function setup(data: SubmoduleData): Submodule { newQuestions: newQuestionCount, } // Processing result data is successfull - updatePeersFile(peers, { + updatePeersFile({ ...peer, lastSync: syncStart, }) @@ -1092,9 +1119,9 @@ function setup(data: SubmoduleData): Submodule { } } - const usersSinceDate = Number.isNaN(since) - ? 'all time' - : new Date(since).toLocaleString() + const usersSinceDate = usersSince + ? new Date(since).toLocaleString() + : 'all time' if (usersOnly) { logger.Log('Sending users only!', 'yellowbg') @@ -1108,9 +1135,10 @@ function setup(data: SubmoduleData): Submodule { )}${sentUsers}${logger.C()}` ) } else { - const dateToLog = Number.isNaN(since) - ? 'all time' - : new Date(since).toLocaleString() + console.log(since) + const dateToLog = since + ? new Date(since).toLocaleString() + : 'all time' logger.Log( `\tSending new data to ${logger.C( @@ -1141,6 +1169,7 @@ function setup(data: SubmoduleData): Submodule { app.get('/syncp2pdata', (req: Request, res: Response) => { logger.LogReq(req) const usersOnly = !!req.query.usersOnly + const allTime = !!req.query.allTime const user = req.session.user if (!user || user.id !== 1) { res.json({ @@ -1160,7 +1189,7 @@ function setup(data: SubmoduleData): Submodule { syncInProgress = true setPendingJobsAlertCount(5000) - syncData(usersOnly) + syncData({ usersOnly: usersOnly, allTime: allTime }) .then((syncResult) => { res.json({ msg: 'sync successfull', diff --git a/src/utils/p2putils.ts b/src/utils/p2putils.ts index 2366d1a..bd5068d 100644 --- a/src/utils/p2putils.ts +++ b/src/utils/p2putils.ts @@ -1,5 +1,5 @@ import { PeerInfo } from '../types/basicTypes' -import { paths } from './files' +import { files, paths, readAndValidateFile } from './files' import { parseCookie, post } from './networkUtils' import utils from './utils' @@ -14,10 +14,15 @@ export function isPeerSameAs(peer1: PeerInfo, peer2: PeerInfo): boolean { return peer1.host === peer2.host && peer1.port === peer2.port } -export function updatePeersFile( - peers: PeerInfo[], - updatedPeer: PeerInfo -): void { +export function updatePeersFile(updatedPeer: PeerInfo): void { + const newVal = readAndValidateFile(files.peersFile) + let peers + if (newVal) { + peers = newVal + } + if (!peers) + throw new Error('Peers file was invalid while trying to update it!') + const updatedPeers = peers.map((x) => { if (isPeerSameAs(updatedPeer, x)) { return { diff --git a/src/worker/handlers/handleQuestionsToPeers.ts b/src/worker/handlers/handleQuestionsToPeers.ts index af0c06d..3f04b64 100644 --- a/src/worker/handlers/handleQuestionsToPeers.ts +++ b/src/worker/handlers/handleQuestionsToPeers.ts @@ -98,7 +98,7 @@ export const handleQuestionsToPeers = async ( results.loginErrors.push(peer) continue } - updatePeersFile(peers, { ...peer, sessionCookie: sessionCookie }) + updatePeersFile({ ...peer, sessionCookie: sessionCookie }) } let res = await postData(peer, sessionCookie) @@ -109,7 +109,7 @@ export const handleQuestionsToPeers = async ( results.loginErrors.push(peer) continue } - updatePeersFile(peers, { ...peer, sessionCookie: sessionCookie }) + updatePeersFile({ ...peer, sessionCookie: sessionCookie }) res = await postData(peer, sessionCookie) } diff --git a/submodules/moodle-test-userscript b/submodules/moodle-test-userscript index 9220466..2ee9731 160000 --- a/submodules/moodle-test-userscript +++ b/submodules/moodle-test-userscript @@ -1 +1 @@ -Subproject commit 9220466561fce5a42111552a9acdc0d0fa28ad61 +Subproject commit 2ee9731fdf350bbddb54b0ce34b590a5c79fbd03 diff --git a/submodules/qmining-page b/submodules/qmining-page index 97e1914..2e12f32 160000 --- a/submodules/qmining-page +++ b/submodules/qmining-page @@ -1 +1 @@ -Subproject commit 97e1914bf67f23c2e2dd84df7a4d3021dc2d3382 +Subproject commit 2e12f3275d47334acb97437ecb9f72af4261d334