diff --git a/src/web-chatview/chatview.js b/src/web-chatview/chatview.js index 3eeb36f513c40f3365d810055efe5535f6d8e841..c98e6d0daab9d3404b4d400100110ed116b8b808 100644 --- a/src/web-chatview/chatview.js +++ b/src/web-chatview/chatview.js @@ -1329,10 +1329,11 @@ function updateFileInteraction(message_div, message_object, forceTypeToFile = fa message_div.querySelector(".filename").innerText = displayName updateProgressBar(message_div.querySelector(".message_progress_bar"), message_object) - - if (message_delivery_status === "finished") { - var message_dropdown = buildMessageDropdown(message_id) - message_div.appendChild(message_dropdown) + if (!message_div.querySelector(`.dropdown_${message_id}`)) { + if (!is_swarm || message_delivery_status === "finished") { + var message_dropdown = buildMessageDropdown(message_id) + message_div.appendChild(message_dropdown) + } } } @@ -1676,20 +1677,39 @@ function buildMessageDropdown(message_id) { const save = document.createElement("div") save.setAttribute("class", "menuoption") - if (use_qt) { - save.innerHTML = "Copy to downloads" + if (is_swarm) { + if (use_qt) { + save.innerHTML = "Copy to downloads" + } else { + save.innerHTML = i18n.gettext("Copy to downloads") + } + save.msg_id = message_id + save.onclick = function () { + if (use_qt) { + window.jsbridge.copyToDownloads(`${this.msg_id}`) + } else { + window.prompt(`COPY:${this.msg_id}`) + } + } + dropdown.appendChild(save) } else { - save.innerHTML = i18n.gettext("Copy to downloads") - } - save.msg_id = message_id - save.onclick = function () { + const remove = document.createElement("div") + remove.setAttribute("class", "menuoption") if (use_qt) { - window.jsbridge.copyToDownloads(`${this.msg_id}`) + remove.innerHTML = "Delete" } else { - window.prompt(`COPY:${this.msg_id}`) + remove.innerHTML = i18n.gettext("Delete") + } + remove.msg_id = message_id + remove.onclick = function () { + if (use_qt) { + window.jsbridge.deleteInteraction(`${this.msg_id}`) + } else { + window.prompt(`DELETE_INTERACTION:${this.msg_id}`) + } } + dropdown.appendChild(remove) } - dropdown.appendChild(save) menu_element.appendChild(dropdown) return menu_element @@ -1893,9 +1913,11 @@ function buildNewMessage(message_object) { message_div.append(fileInteraction(message_id)) updateProgressBar(message_div.querySelector(".message_progress_bar"), message_object) } - if (delivery_status === "finished") { - var message_dropdown = buildMessageDropdown(message_id) - message_div.appendChild(message_dropdown) + if (!message_div.querySelector(`.dropdown_${message_id}`)) { + if (is_swarm && delivery_status === "finished") { + var message_dropdown = buildMessageDropdown(message_id) + message_div.appendChild(message_dropdown) + } } } else if (message_type === "text") { // TODO add the possibility to update messages (remove and rebuild) @@ -1927,6 +1949,12 @@ function buildNewMessage(message_object) { message_div.appendChild(temp) } + + if (message_type !== "typing" && !is_swarm && !message_div.querySelector(`.dropdown_${message_id}`)) { + var message_dropdown = buildMessageDropdown(message_id) + message_div.appendChild(message_dropdown) + } + return message_div } @@ -2038,6 +2066,28 @@ function addOrUpdateMessage(message_object, new_message, insert_after = true, me } } + if (!is_swarm && isErrorStatus(delivery_status) && message_direction === "out") { + const dropdown = messages_div.querySelector(`.dropdown_${message_id}`) + if (!dropdown.querySelector(".retry")) { + const retry = document.createElement("div") + retry.setAttribute("class", "retry") + if (use_qt) { + retry.innerHTML = "Retry" + } else { + retry.innerHTML = i18n.gettext("Retry") + } + retry.msg_id = message_id + retry.onclick = function () { + if (use_qt) { + window.jsbridge.retryInteraction(`${this.msg_id}`) + } else { + window.prompt(`RETRY_INTERACTION:${this.msg_id}`) + } + } + dropdown.insertBefore(retry, message_div.querySelector(".delete")) + } + } + // Update informations if needed if (message_type === "data_transfer") updateFileInteraction(message_div, message_object)