diff --git a/src/app/mainview/components/ChatViewFooter.qml b/src/app/mainview/components/ChatViewFooter.qml index e6b31331849a72072b452ce4d5368a8ea1b1a9b0..650b230fd12af4445b022abbb0c280a0c3a9c928 100644 --- a/src/app/mainview/components/ChatViewFooter.qml +++ b/src/app/mainview/components/ChatViewFooter.qml @@ -200,16 +200,6 @@ Rectangle { } onSendMessageButtonClicked: { - // Send text message - if (messageBar.text) { - if (MessagesAdapter.editId !== "") { - MessagesAdapter.editMessage(CurrentConversation.id, messageBar.text) - } else { - MessagesAdapter.sendMessage(messageBar.text) - } - } - messageBar.textAreaObj.clearText() - // Send file messages var fileCounts = dataTransferSendContainer.filesToSendListModel.rowCount() for (var i = 0; i < fileCounts; i++) { @@ -219,6 +209,16 @@ Rectangle { MessagesAdapter.sendFile(filePath) } dataTransferSendContainer.filesToSendListModel.flush() + // Send text message + if (messageBar.text) { + if (MessagesAdapter.editId !== "") { + MessagesAdapter.editMessage(CurrentConversation.id, messageBar.text) + } else { + MessagesAdapter.sendMessage(messageBar.text) + } + } + messageBar.textAreaObj.clearText() + MessagesAdapter.replyToId = "" } onVideoRecordMessageButtonClicked: { JamiQmlUtils.updateMessageBarButtonsPoints() diff --git a/src/app/mainview/components/RecordBox.qml b/src/app/mainview/components/RecordBox.qml index e907cc1832fc7847ea4696825b850e34876dd26c..4614e183a86230a5aee1893d90b6eccd49a9d814 100644 --- a/src/app/mainview/components/RecordBox.qml +++ b/src/app/mainview/components/RecordBox.qml @@ -113,6 +113,7 @@ Popup { function sendRecord() { if (pathRecorder !== "") { MessagesAdapter.sendFile(pathRecorder) + MessagesAdapter.replyToId = "" } } diff --git a/src/app/messagesadapter.cpp b/src/app/messagesadapter.cpp index 1481996f5b9d296301b391cab17d568a3accc53f..800371779a05414754566c5bac8454e8168d151e 100644 --- a/src/app/messagesadapter.cpp +++ b/src/app/messagesadapter.cpp @@ -173,7 +173,6 @@ MessagesAdapter::sendMessage(const QString& message) try { const auto convUid = lrcInstance_->get_selectedConvUid(); lrcInstance_->getCurrentConversationModel()->sendMessage(convUid, message, replyToId_); - set_replyToId(""); } catch (...) { qDebug() << "Exception during sendMessage:" << message; } @@ -229,19 +228,15 @@ MessagesAdapter::sendFile(const QString& message) QString fileName = fi.fileName(); try { auto convUid = lrcInstance_->get_selectedConvUid(); - lrcInstance_->getCurrentConversationModel()->sendFile(convUid, message, fileName); + lrcInstance_->getCurrentConversationModel()->sendFile(convUid, + message, + fileName, + replyToId_); } catch (...) { qDebug() << "Exception during sendFile"; } } -void -MessagesAdapter::retryInteraction(const QString& interactionId) -{ - lrcInstance_->getCurrentConversationModel() - ->retryInteraction(lrcInstance_->get_selectedConvUid(), interactionId); -} - void MessagesAdapter::joinCall(const QString& uri, const QString& deviceId, diff --git a/src/app/messagesadapter.h b/src/app/messagesadapter.h index 992b3fc5edc9f21f7d03144b71d41b0a63315a8c..84fdd4d0d7a3683b980497de22882de3729c8b9a 100644 --- a/src/app/messagesadapter.h +++ b/src/app/messagesadapter.h @@ -109,7 +109,6 @@ protected: Q_INVOKABLE void cancelFile(const QString& arg); Q_INVOKABLE void openUrl(const QString& url); Q_INVOKABLE void openDirectory(const QString& arg); - Q_INVOKABLE void retryInteraction(const QString& interactionId); Q_INVOKABLE void deleteInteraction(const QString& interactionId); Q_INVOKABLE void joinCall(const QString& uri, const QString& deviceId, diff --git a/src/libclient/api/conversationmodel.h b/src/libclient/api/conversationmodel.h index 980c23677cf89683f4c4ad83950faa7c865ae411..367ada7baa3aa46ebd0f1d271af627956e5fd542 100644 --- a/src/libclient/api/conversationmodel.h +++ b/src/libclient/api/conversationmodel.h @@ -284,12 +284,6 @@ public: * @param convId */ void clearInteractionsCache(const QString& convId); - /** - * Retry to send a message. In fact, will delete the previous interaction and resend a new one. - * @param convId - * @param interactionId - */ - void retryInteraction(const QString& convId, const QString& interactionId); /** * @param convId * @param interactionId @@ -305,7 +299,10 @@ public: */ void deleteObsoleteHistory(int date); - void sendFile(const QString& convUid, const QString& path, const QString& filename); + void sendFile(const QString& convUid, + const QString& path, + const QString& filename, + const QString& parent); void acceptTransfer(const QString& convUid, const QString& interactionId); diff --git a/src/libclient/api/datatransfermodel.h b/src/libclient/api/datatransfermodel.h index 1abf8cc114884fdf2e7b58937479de23dc723100..b6769ab6e947113b8e6cfd40d79425b949809988 100644 --- a/src/libclient/api/datatransfermodel.h +++ b/src/libclient/api/datatransfermodel.h @@ -54,7 +54,8 @@ public: void sendFile(const QString& account_id, const QString& conversationId, const QString& file_path, - const QString& display_name); + const QString& display_name, + const QString& parent); void fileTransferInfo(const QString& accountId, const QString& conversationId, diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp index 43a6d2fe8d94015de3615fa0f4dc8443f98cdd01..090f77bfda1af2c1666a7093330bcfa5f663ec8b 100644 --- a/src/libclient/conversationmodel.cpp +++ b/src/libclient/conversationmodel.cpp @@ -1285,8 +1285,13 @@ ConversationModel::sendMessage(const QString& uid, const QString& body, const QS } // Add interaction to database - interaction::Info - msg {owner.profileInfo.uri, body, std::time(nullptr), 0, interaction::Type::TEXT, status, true}; + interaction::Info msg {owner.profileInfo.uri, + body, + std::time(nullptr), + 0, + interaction::Type::TEXT, + status, + true}; auto msgId = storage::addMessageToConversation(pimpl_->db, convId, msg); // Update conversation @@ -1562,59 +1567,6 @@ ConversationModel::clearInteractionsCache(const QString& convId) } } -void -ConversationModel::retryInteraction(const QString& convId, const QString& interactionId) -{ - auto conversationIdx = pimpl_->indexOf(convId); - if (conversationIdx == -1) - return; - - auto interactionType = interaction::Type::INVALID; - QString body = {}; - { - std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convId]); - try { - auto& conversation = pimpl_->conversations.at(conversationIdx); - if (conversation.isSwarm()) { - // WARNING: retry interaction is not implemented for swarm - return; - } - - auto& interactions = conversation.interactions; - auto it = interactions->find(interactionId); - if (it == interactions->end()) - return; - - if (!interaction::isOutgoing(it->second)) - return; // Do not retry non outgoing info - - if (it->second.type == interaction::Type::TEXT - || (it->second.type == interaction::Type::DATA_TRANSFER - && interaction::isOutgoing(it->second))) { - body = it->second.body; - interactionType = it->second.type; - } else - return; - - storage::clearInteractionFromConversation(pimpl_->db, convId, interactionId); - conversation.interactions->erase(interactionId); - } catch (const std::out_of_range& e) { - qDebug() << "can't find interaction from conversation: " << e.what(); - return; - } - } - Q_EMIT interactionRemoved(convId, interactionId); - - // Send a new interaction like the previous one - if (interactionType == interaction::Type::TEXT) { - sendMessage(convId, body); - } else { - // send file - QFileInfo f(body); - sendFile(convId, body, f.fileName()); - } -} - bool ConversationModel::isLastDisplayed(const QString& convId, const QString& interactionId, @@ -3488,7 +3440,8 @@ ConversationModelPimpl::slotCallStatusChanged(const QString& callId, int code) if (!conversation.callId.isEmpty()) { // If outgoing and incoming happen at the same time, choose the current one. auto call = linked.owner.callModel->getCall(conversation.callId); - qWarning() << "Double call detected" << call::to_string(call.status) << " - " << conversation.callId; + qWarning() << "Double call detected" << call::to_string(call.status) + << " - " << conversation.callId; // Ignore new call in favor of existing one if (call.status == call::Status::IN_PROGRESS) return; @@ -3950,12 +3903,15 @@ ConversationModel::setIsComposing(const QString& convUid, bool isComposing) } void -ConversationModel::sendFile(const QString& convUid, const QString& path, const QString& filename) +ConversationModel::sendFile(const QString& convUid, + const QString& path, + const QString& filename, + const QString& parent) { try { auto& conversation = pimpl_->getConversationForUid(convUid, true).get(); if (conversation.isSwarm()) { - owner.dataTransferModel->sendFile(owner.id, convUid, path, filename); + owner.dataTransferModel->sendFile(owner.id, convUid, path, filename, parent); return; } auto peers = pimpl_->peersForConversation(conversation); @@ -3979,7 +3935,7 @@ ConversationModel::sendFile(const QString& convUid, const QString& path, const Q pimpl_->sendContactRequest(peerId); - auto cb = ([this, peerId, path, filename](QString conversationId) { + auto cb = ([this, peerId, path, filename, parent](QString conversationId) { try { auto conversationOpt = getConversationForUid(conversationId); if (!conversationOpt.has_value()) { @@ -3991,7 +3947,7 @@ ConversationModel::sendFile(const QString& convUid, const QString& path, const Q qDebug() << "ContactModel::sendFile: denied, contact is banned"; return; } - owner.dataTransferModel->sendFile(owner.id, conversationId, path, filename); + owner.dataTransferModel->sendFile(owner.id, conversationId, path, filename, parent); } catch (...) { } }); diff --git a/src/libclient/datatransfermodel.cpp b/src/libclient/datatransfermodel.cpp index 3e07d570e4ad892eecde3db234b76f9909689ea9..460b64578c209329633969ea21354b0fd093ca78 100644 --- a/src/libclient/datatransfermodel.cpp +++ b/src/libclient/datatransfermodel.cpp @@ -134,13 +134,14 @@ void DataTransferModel::sendFile(const QString& accountId, const QString& conversationId, const QString& filePath, - const QString& displayName) + const QString& displayName, + const QString& parent) { ConfigurationManager::instance().sendFile(accountId, conversationId, filePath, displayName, - {} /* TODO parent */); + parent); } void