Add function to resend queries during running query

This commit is contained in:
Stephan Porada
2020-03-26 15:28:11 +01:00
parent 6b24184206
commit 08e7df4ad3
3 changed files with 141 additions and 25 deletions

View File

@ -1,3 +1,24 @@
// ### corpus analysis client status functions
function sendAbortSignal() {
console.log(`Sending status "abort signal" from client side.`);
message = {'status': "abort"};
nopaque.socket.emit("send_analysis_status_cli", message);
setAnalysisStatus("abort");
}
function setAnalysisStatus(statusStr) {
analysisClientStatus[sessionId] = statusStr;
console.log(`Set new status "${statusStr}" for "${sessionId}" on client side.`);
console.log("Object with status is:", analysisClientStatus);
}
function checkAnalysisStatus(sessionId) {
let status = analysisClientStatus[sessionId];
console.log(`Check status on client side for ${sessionId}.`, analysisClientStatus);
return status;
}
// ### Send query functions ###
//function to get current queryData from a given queryFormElement
@ -12,11 +33,13 @@ function getQueryData(queryFormElement) {
}
// Function to send a query to the CQP server using queryData gatherd with getQueryData
function sendQuery(event) {
async function sendQuery(event) {
const delay = ms => new Promise(res => setTimeout(res, ms));
result; // global declaration, holds query results as JSON
resultList; // global declaration, list.js object displaying the results
let queryData; // holds data of query form
let resultListOptions; // holding the options for the ResultList object
let analysisStatus;
// checks if one query has been finished before
// if true, result download will be disabled again until query is finished
@ -26,9 +49,32 @@ function sendQuery(event) {
queryResultsDeterminateElement.parentNode.parentNode.classList.remove("hide");
}
console.log("Sending query.");
console.log("Session status are: ", analysisClientStatus);
event.preventDefault();
analysisStatus = checkAnalysisStatus(sessionId);
queryData = getQueryData(queryFormElement);
nopaque.socket.emit("corpus_analysis_query", queryData.query);
if (analysisStatus === "idle") {
nopaque.toast("Query has been sent!");
nopaque.socket.emit("corpus_analysis_query", queryData.query);
helperSendQuery(queryData);
analysisStatus = checkAnalysisStatus(sessionId);
} else if (analysisStatus === "running" ) {
sendAbortSignal();
analysisStatus = checkAnalysisStatus(sessionId);
while (analysisStatus === "abort") {
queryResultsTableElement.classList.add("hide");
queryLoadingElement.classList.remove("hide");
analysisStatus = checkAnalysisStatus(sessionId);
await delay(100);
}
sendQuery(event)
}
}
function helperSendQuery(queryData) {
// full results object declaration, global declaration!
// will always be reset if a query is sent, so that only the chunks of the
// current query will be saved in it
@ -42,7 +88,6 @@ function sendQuery(event) {
// some hiding/showing for loading animation
queryLoadingElement.classList.remove("hide");
queryResultsTableElement.classList.add("hide");
nopaque.toast("Query has been sent!");
resultListOptions = {page: queryData["hits_per_page"],
pagination: [{
@ -114,10 +159,16 @@ function recieveResults(response) {
result["query"] = queryData["query"];
console.log(result);
// Some hiding and showing of loading animations
queryLoadingElement.classList.add("hide");
queryResultsTableElement.classList.remove("hide");
queryResultsElement = document.getElementById("query-results");
queryResultsElement.innerHTML = "";
analysisStatus = checkAnalysisStatus();
if (analysisStatus === "abort") {
queryResultsTableElement.classList.add("hide");
queryLoadingElement.classList.remove("hide");
} else {
queryResultsTableElement.classList.remove("hide");
queryLoadingElement.classList.add("hide");
queryResultsElement = document.getElementById("query-results");
queryResultsElement.innerHTML = "";
}
// check if query has any results
if (chunk["matches"].length === 0) {
@ -252,7 +303,7 @@ function changeContext(event) {
console.log("This error is expected.");
} finally {
newContextValue = document.getElementById("context").value;
console.log(newContextValue);
console.log("Context value is:", newContextValue);
lc = document.getElementsByClassName("left-context");
rc = document.getElementsByClassName("right-context");
for (let element of lc) {