mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-12 17:10:41 +00:00
Handle user data streams different 1/2
In the future this will be much more performant!
This commit is contained in:
@ -29,66 +29,48 @@ nopaque.socket = {};
|
||||
nopaque.socket.init = function() {
|
||||
nopaque.socket = io({transports: ['websocket']});
|
||||
// Add event handlers
|
||||
nopaque.socket.on("corpora_init", function(msg) {
|
||||
nopaque.corpora = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.corporaSubscribers) {subscriber._init(nopaque.corpora);}
|
||||
nopaque.socket.on("user_data_stream_init", function(msg) {
|
||||
nopaque.user = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.corporaSubscribers) {subscriber._init(nopaque.user.corpora);}
|
||||
for (let subscriber of nopaque.jobsSubscribers) {subscriber._init(nopaque.user.jobs);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("jobs_init", function(msg) {
|
||||
nopaque.jobs = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.jobsSubscribers) {subscriber._init(nopaque.jobs);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("corpora_update", function(msg) {
|
||||
nopaque.socket.on("user_data_stream_update", function(msg) {
|
||||
var patch;
|
||||
|
||||
patch = JSON.parse(msg);
|
||||
nopaque.corpora = jsonpatch.apply_patch(nopaque.corpora, patch);
|
||||
for (let subscriber of nopaque.corporaSubscribers) {subscriber._update(patch);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("jobs_update", function(msg) {
|
||||
var patch;
|
||||
|
||||
patch = JSON.parse(msg);
|
||||
nopaque.jobs = jsonpatch.apply_patch(nopaque.jobs, patch);
|
||||
if (["all", "end"].includes(nopaque.user.settings.jobStatusSiteNotifications)) {
|
||||
for (operation of patch) {
|
||||
/* "/jobId/valueName" -> ["jobId", "valueName"] */
|
||||
pathArray = operation.path.split("/").slice(1);
|
||||
nopaque.user = jsonpatch.apply_patch(nopaque.user, patch);
|
||||
corpora_patch = patch.filter(operation => operation.path.startsWith("/corpora"));
|
||||
jobs_patch = patch.filter(operation => operation.path.startsWith("/jobs"));
|
||||
for (let subscriber of nopaque.corporaSubscribers) {subscriber._update(corpora_patch);}
|
||||
for (let subscriber of nopaque.jobsSubscribers) {subscriber._update(jobs_patch);}
|
||||
if (["all", "end"].includes(nopaque.user.settings.job_status_site_notifications)) {
|
||||
for (operation of jobs_patch) {
|
||||
/* "/jobs/{jobId}/..." -> ["{jobId}", ...] */
|
||||
pathArray = operation.path.split("/").slice(2);
|
||||
if (operation.op === "replace" && pathArray[1] === "status") {
|
||||
if (nopaque.user.settings.jobStatusSiteNotifications === "end" && !["complete", "failed"].includes(operation.value)) {continue;}
|
||||
nopaque.flash(`[<a href="/jobs/${pathArray[0]}">${nopaque.jobs[pathArray[0]].title}</a>] New status: ${operation.value}`, "job");
|
||||
if (nopaque.user.settings.job_status_site_notifications === "end" && !["complete", "failed"].includes(operation.value)) {continue;}
|
||||
nopaque.flash(`[<a href="/jobs/${pathArray[0]}">${nopaque.user.jobs[pathArray[0]].title}</a>] New status: ${operation.value}`, "job");
|
||||
}
|
||||
}
|
||||
}
|
||||
for (let subscriber of nopaque.jobsSubscribers) {subscriber._update(patch);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("foreign_corpora_init", function(msg) {
|
||||
nopaque.foreignCorpora = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._init(nopaque.foreignCorpora);}
|
||||
nopaque.socket.on("foreign_user_data_stream_init", function(msg) {
|
||||
nopaque.foreignUser = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._init(nopaque.foreignUser.corpora);}
|
||||
for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._init(nopaque.foreignUser.jobs);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("foreign_jobs_init", function(msg) {
|
||||
nopaque.foreignJobs = JSON.parse(msg);
|
||||
for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._init(nopaque.foreignJobs);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("foreign_corpora_update", function(msg) {
|
||||
nopaque.socket.on("foreign_user_data_stream_update", function(msg) {
|
||||
var patch;
|
||||
|
||||
patch = JSON.parse(msg);
|
||||
nopaque.foreignCorpora = jsonpatch.apply_patch(nopaque.foreignCorpora, patch);
|
||||
for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._update(patch);}
|
||||
});
|
||||
|
||||
nopaque.socket.on("foreign_jobs_update", function(msg) {
|
||||
var patch;
|
||||
|
||||
patch = JSON.parse(msg);
|
||||
nopaque.foreignJobs = jsonpatch.apply_patch(nopaque.foreignJobs, patch);
|
||||
for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(patch);}
|
||||
nopaque.foreignUser = jsonpatch.apply_patch(nopaque.foreignUser, patch);
|
||||
corpora_patch = patch.filter(operation => operation.path.startsWith("/corpora"));
|
||||
jobs_patch = patch.filter(operation => operation.path.startsWith("/jobs"));
|
||||
for (let subscriber of nopaque.foreignCorporaSubscribers) {subscriber._update(corpora_patch);}
|
||||
for (let subscriber of nopaque.foreignJobsSubscribers) {subscriber._update(jobs_patch);}
|
||||
});
|
||||
}
|
||||
|
||||
@ -233,11 +215,6 @@ document.addEventListener("DOMContentLoaded", function() {
|
||||
flashedMessage = nopaque.flashedMessages.shift();
|
||||
nopaque.flash(flashedMessage[1], flashedMessage[0]);
|
||||
}
|
||||
if (nopaque.user.isAuthenticated) {
|
||||
if (nopaque.user.settings.darkMode) {
|
||||
DarkReader.enable({"brightness": 150, "contrast": 100, "sepia": 0});
|
||||
}
|
||||
nopaque.socket.init();
|
||||
nopaque.socket.emit("user_ressources_init");
|
||||
}
|
||||
nopaque.socket.init();
|
||||
nopaque.socket.emit("user_data_stream_init");
|
||||
});
|
||||
|
@ -13,6 +13,7 @@ class RessourceList extends List {
|
||||
|
||||
|
||||
_init(ressources) {
|
||||
this.clear();
|
||||
this.addRessources(Object.values(ressources));
|
||||
this.sort("creation_date", {order: "desc"});
|
||||
}
|
||||
@ -22,8 +23,8 @@ class RessourceList extends List {
|
||||
let item, pathArray;
|
||||
|
||||
for (let operation of patch) {
|
||||
/* "/ressourceId/valueName" -> ["ressourceId", "valueName"] */
|
||||
pathArray = operation.path.split("/").slice(1);
|
||||
/* "/{ressourceName}/{ressourceId}/..." -> ["{ressourceId}", "..."] */
|
||||
pathArray = operation.path.split("/").slice(2);
|
||||
switch(operation.op) {
|
||||
case "add":
|
||||
if (pathArray.includes("results")) {break;}
|
||||
@ -48,7 +49,6 @@ class RessourceList extends List {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
addRessources(ressources) {
|
||||
this.add(ressources.map(x => RessourceList.dataMapper[this.type](x)));
|
||||
}
|
||||
|
Reference in New Issue
Block a user