From e6ed9246bc9a35c611d33d00ff813ec5858a6b2b Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 27 Sep 2023 13:48:29 -0400 Subject: [PATCH] uploads: return uploaded file info to caller --- webcit-ng/server/upload.c | 12 +++++++++--- webcit-ng/static/js/view_mail.js | 32 +++++++++++++++++--------------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/webcit-ng/server/upload.c b/webcit-ng/server/upload.c index 866be6762..5d296626f 100644 --- a/webcit-ng/server/upload.c +++ b/webcit-ng/server/upload.c @@ -35,10 +35,16 @@ void upload_handler(char *name, char *filename, char *partnum, char *disp, write(fd, content, length); close(fd); + // Create a JSON object describing this upload + JsonValue *j_one_upload = NewJsonObject(HKEY("")); + JsonObjectAppend(j_one_upload, NewJsonPlainString(HKEY("tempfilename"), tempfile, -1)); + JsonObjectAppend(j_one_upload, NewJsonPlainString(HKEY("uploadfilename"), filename, -1)); + JsonObjectAppend(j_one_upload, NewJsonPlainString(HKEY("contenttype"), cbtype, -1)); + JsonObjectAppend(j_one_upload, NewJsonNumber(HKEY("contentlength"), length)); + + // ...and attach it to the array of uploads JsonValue *j_uploads = (JsonValue *) userdata; - JsonArrayAppend(j_uploads, NewJsonNumber(HKEY("foo"), 1)); - JsonArrayAppend(j_uploads, NewJsonNumber(HKEY("bar"), 2)); - JsonArrayAppend(j_uploads, NewJsonNumber(HKEY("baz"), 3)); + JsonArrayAppend(j_uploads, j_one_upload); } // upload handler diff --git a/webcit-ng/static/js/view_mail.js b/webcit-ng/static/js/view_mail.js index 3c21682ea..6db894d13 100644 --- a/webcit-ng/static/js/view_mail.js +++ b/webcit-ng/static/js/view_mail.js @@ -13,8 +13,8 @@ var newmail_notify = { NO : 0, // do not perform new mail notifications YES : 1 // yes, perform new mail notifications }; -var num_attachments = 0; // number of attachments in current composed msg var uploads_in_progress = 0; +var uploads = [] ; // everything the user has uploaded // This is the async back end for mail_delete_selected() @@ -514,9 +514,9 @@ function mail_compose(is_quoted, references, quoted_msgnum, m_to, m_cc, m_subjec
${_("Send message")} ${_("Save to Drafts")} - ${_("Attachments:")} ${num_attachments} + ${_("Attachments:")} ${uploads.length} ${_("Contacts")} - ${_("Cancel")} + ${_("Cancel")}
` ; @@ -536,14 +536,11 @@ function activate_uploads(parent_div) { document.getElementById(parent_div).innerHTML += `
-

` + _("Attachments:") + ` ` + num_attachments + `

+

` + _("Attachments:") + ` ` + uploads.length + `



@@ -556,7 +553,6 @@ function activate_uploads(parent_div) { `; // activate drag and drop (shamelessly swiped from https://www.smashingmagazine.com/2018/01/drag-drop-file-uploader-vanilla-js/ ) - //let dropArea = document.getElementById("ctdl-upload"); let dropArea = document.getElementById(parent_div); ;['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { dropArea.addEventListener(eventName, upload_prevent_defaults, false) @@ -597,19 +593,25 @@ function upload_file(file) { xhr.open('POST', url, true); xhr.addEventListener('readystatechange', function(e) { - console.log("readyState: " + xhr.readyState); if (xhr.readyState == 4 && xhr.status == 200) { - num_attachments += 1; - document.getElementById("num_attachments").innerHTML = num_attachments; - // remove the "uploading in progress" message let li = document.getElementById("ctdl_uploading_" + uploads_in_progress.toString()); li.parentNode.removeChild(li); uploads_in_progress -= 1; - // what happened? - console.log("response: " + xhr.response); - console.log("responseText: " + xhr.responseText); + // The response body will be a JSON array of completed uploads. + var j_response = JSON.parse(xhr.response); + + // Add these uploads to the displayed list + j_response.forEach((item) => { + let new_upl = document.createElement("li"); + new_upl.innerHTML = item["tempfilename"] + " " + item["uploadfilename"] + " " + item["contenttype"] + " " + item["contentlength"]; + document.getElementById("ctdl-upload_list").appendChild(new_upl); + }); + + // append it to the global list of uploads + uploads.push(j_response); + document.getElementById("num_attachments").innerHTML = uploads.length; } else if (xhr.readyState == 4 && xhr.status != 200) { // remove the "uploading in progress" message (there was an error, so just let it disappear) -- 2.39.2