syslog(LOG_DEBUG, " id: %s", cbid);
struct uploaded_file u;
- generate_uuid(u.id);
+
+ // create a random ID for the attachment
+ for (int i=0; i<sizeof(u.id); ++i) {
+ u.id[i] = (rand() % 26) + 'a';
+ }
+ u.id[sizeof(u.id)-1] = 0;
+
safestrncpy(u.filename, filename, sizeof(u.filename));
safestrncpy(u.content_type, cbtype, sizeof(u.content_type));
u.length = length;
}
+// Remove an uploaded item from the upload_list. Caller now owns the file handle and is responsible for closing it.
+struct uploaded_file pop_upload(char *id) {
+ int i;
+ struct uploaded_file *u;
+ struct uploaded_file ret;
+
+ memset(&ret, 0, sizeof(struct uploaded_file));
+
+ pthread_mutex_lock(&upload_list_mutex);
+ for (i=0; i<array_len(upload_list); ++i) {
+ u = (struct uploaded_file *) array_get_element_at(upload_list, i), sizeof(struct uploaded_file);
+ if (!strcmp(u->id, id)) {
+ ret = *u;
+ array_delete_element_at(upload_list, i);
+ i = array_len(upload_list) + 1; // Go out of scope; we're done here
+ }
+ }
+ pthread_mutex_unlock(&upload_list_mutex);
+
+ return(ret); // ret will be all-zeroes if we didn't find it
+}
+
+
// Handle operations on a specific upload
void specific_upload(struct http_transaction *h, struct ctdlsession *c, char *name) {
int i;
j_response.forEach((item) => {
let new_upl = document.createElement("li");
// item["ref"] is what we need
- new_upl.innerHTML = `<a href="xxx">❌</a>`
+ new_upl.innerHTML = `<i class="fa-solid fa-circle-xmark" style="color:red" onClick="alert('` + item["ref"] + `')"></i>`
+ + ` `
+ item["uploadfilename"] + " (" + item["contenttype"] + ", " + item["contentlength"] + " " + _("bytes") + ")";
document.getElementById("ctdl-upload_list").appendChild(new_upl);
});