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
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()
<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>`
;
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">
`;
// 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)
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)