mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +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