uploads: return uploaded file info to caller
authorArt Cancro <ajc@citadel.org>
Wed, 27 Sep 2023 17:48:29 +0000 (13:48 -0400)
committerArt Cancro <ajc@citadel.org>
Wed, 27 Sep 2023 17:48:29 +0000 (13:48 -0400)
webcit-ng/server/upload.c
webcit-ng/static/js/view_mail.js

index 866be6762b3cc8a6b204965f031594fb513cd2fd..5d296626fd437c283abfe051028d317042afe661 100644 (file)
@@ -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
index 3c21682ea309aca7c326a0f709a28f0d7fc4ddaa..6db894d130d40c5cd8e0b5da81dbc144a6327287 100644 (file)
@@ -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
                <div class="ctdl-compose-toolbar">
                <span class="ctdl-msg-button" onclick="mail_send_message()"><i class="fa fa-paper-plane" style="color:green"></i> ${_("Send message")} </span>
                <span class="ctdl-msg-button"> ${_("Save to Drafts")} </span>
-               <span class="ctdl-msg-button" onClick="show_or_hide_attachments()"><i class="fa fa-paperclip" style="color:grey"></i> ${_("Attachments:")} <span id="ctdl_num_attachments"> ${num_attachments} </span></span>
+               <span class="ctdl-msg-button" onClick="show_or_hide_attachments()"><i class="fa fa-paperclip" style="color:grey"></i> ${_("Attachments:")} <span id="ctdl_num_attachments"> ${uploads.length} </span></span>
                <span class="ctdl-msg-button">  ${_("Contacts")} </span>
-               <span class="ctdl-msg-button" onClick="document.getElementById('ctdl-upload').style.display='none';gotoroom(current_room)"><i class="fa fa-trash" style="color:red"></i> ${_("Cancel")} </span>
+               <span class="ctdl-msg-button" onClick="document.getElementById('ctdl-upload').style.display='none';uploads=[];gotoroom(current_room)"><i class="fa fa-trash" style="color:red"></i> ${_("Cancel")} </span>
                </div>`
        ;
 
@@ -536,14 +536,11 @@ function activate_uploads(parent_div) {
                document.getElementById(parent_div).innerHTML += `
                        <div class="ctdl-upload" id="ctdl-upload">
                                <div id="ctdl_attachments_title" class="ctdl-compose-attachments-title">
-                                       <div><h1><i class="fa fa-paperclip" style="color:grey"></i>` + _("Attachments:") + ` <span id="num_attachments">` + num_attachments + `</span></h1></div>
+                                       <div><h1><i class="fa fa-paperclip" style="color:grey"></i>` + _("Attachments:") + ` <span id="num_attachments">` + uploads.length + `</span></h1></div>
                                        <div><h1><i class="fas fa-window-close" style="color:red" onClick="show_or_hide_attachments()"></i></h1></div>
                                </div>
                                <br>
                                <ul id="ctdl-upload_list">
-                                       <li>uploaded file</li>
-                                       <li>another uploaded file</li>
-                                       <li>philez and warez</li>
                                </ul>
                                <br>
                                <div id="drop-area" class="ctdl-upload-drop-area">
@@ -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)