diff --git a/src/api/datatransfermodel.h b/src/api/datatransfermodel.h index 0b6b041ce0a9e74bb4cf07ddbd412675e5249e11..bab1ec92f9cd09be42ea20f200b407c0ef6329e2 100644 --- a/src/api/datatransfermodel.h +++ b/src/api/datatransfermodel.h @@ -77,7 +77,8 @@ public: void copyTo(const QString& accountId, const QString& convId, const QString& interactionId, - const QString& destPath); + const QString& destPath, + const QString& displayName); void cancel(const QString& accountId, const QString& conversationId, const QString& fileId); diff --git a/src/datatransfermodel.cpp b/src/datatransfermodel.cpp index a895393753f2720147d35566f09a5c4b2337f48c..bdd62cdd66afa46928fd477fcb6739669aa8e025 100644 --- a/src/datatransfermodel.cpp +++ b/src/datatransfermodel.cpp @@ -94,19 +94,17 @@ DataTransferModel::Impl::Impl(DataTransferModel& up_link) QString DataTransferModel::Impl::getUniqueFilePath(const QString& filename, const QString& path) { - auto wantedDest = filename; - QString base(wantedDest); - QString ext = QFileInfo(wantedDest).completeSuffix(); - if (!ext.isEmpty()) { + auto base = filename; + QString ext = QFileInfo(base).completeSuffix(); + if (!ext.isEmpty()) ext = ext.prepend("."); - } - if (!path.isEmpty()) { - QFileInfo fi(filename); - wantedDest = QDir(path).filePath(fi.baseName() + ext); - } - if (!QFile::exists(wantedDest)) { - return wantedDest; - } + + QFileInfo fi(filename); + auto p = !path.isEmpty() ? path : fi.dir().path(); + base = QDir(p).filePath(fi.baseName() + ext); + if (!QFile::exists(base)) + return base; + base.chop(ext.size()); QString ret; for (int suffix = 1;; suffix++) { @@ -226,7 +224,8 @@ void DataTransferModel::copyTo(const QString& accountId, const QString& convId, const QString& interactionId, - const QString& destPath) + const QString& destPath, + const QString& displayName) { auto fileId = getFileIdFromInteractionId(interactionId); if (fileId.isEmpty()) { @@ -243,8 +242,11 @@ DataTransferModel::copyTo(const QString& accountId, if (!src.exists()) return; - auto realPath = srcfi.isSymLink() ? srcfi.symLinkTarget() : path; - auto dest = pimpl_->getUniqueFilePath(realPath, destPath); + auto filename = displayName; + if (displayName.isEmpty()) + filename = srcfi.isSymLink() ? srcfi.symLinkTarget() : path; + auto dest = pimpl_->getUniqueFilePath(filename, destPath); + qDebug() << "Copy to " << dest; src.copy(dest); } diff --git a/src/web-chatview/chatview.js b/src/web-chatview/chatview.js index c98e6d0daab9d3404b4d400100110ed116b8b808..30cdda1658bc2f996278ef3a8aeab4759fd105f1 100644 --- a/src/web-chatview/chatview.js +++ b/src/web-chatview/chatview.js @@ -1331,7 +1331,7 @@ function updateFileInteraction(message_div, message_object, forceTypeToFile = fa if (!message_div.querySelector(`.dropdown_${message_id}`)) { if (!is_swarm || message_delivery_status === "finished") { - var message_dropdown = buildMessageDropdown(message_id) + var message_dropdown = buildMessageDropdown(message_id, message_object["displayName"]) message_div.appendChild(message_dropdown) } } @@ -1649,7 +1649,7 @@ function textInteraction(message_id, message_direction, htmlText) { * Build message dropdown * @return a message dropdown for passed message id */ -function buildMessageDropdown(message_id) { +function buildMessageDropdown(message_id, display_name) { const menu_element = document.createElement("div") menu_element.setAttribute("class", "menu_interaction") menu_element.innerHTML = @@ -1684,11 +1684,12 @@ function buildMessageDropdown(message_id) { save.innerHTML = i18n.gettext("Copy to downloads") } save.msg_id = message_id + save.display_name = display_name save.onclick = function () { if (use_qt) { - window.jsbridge.copyToDownloads(`${this.msg_id}`) + window.jsbridge.copyToDownloads(this.msg_id, this.display_name) } else { - window.prompt(`COPY:${this.msg_id}`) + window.prompt(`COPY:${this.msg_id}:${this.display_name}`) } } dropdown.appendChild(save) @@ -1915,7 +1916,7 @@ function buildNewMessage(message_object) { } if (!message_div.querySelector(`.dropdown_${message_id}`)) { if (is_swarm && delivery_status === "finished") { - var message_dropdown = buildMessageDropdown(message_id) + var message_dropdown = buildMessageDropdown(message_id, message_object["displayName"]) message_div.appendChild(message_dropdown) } } @@ -1949,7 +1950,6 @@ 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)