diff --git a/src/app/commoncomponents/MessageOptionsPopup.qml b/src/app/commoncomponents/MessageOptionsPopup.qml index e359bc1968e02cb35d4cab8c92f4a765acd344d9..c562a791451dad5e9b0f08a87947888ad9b0740e 100644 --- a/src/app/commoncomponents/MessageOptionsPopup.qml +++ b/src/app/commoncomponents/MessageOptionsPopup.qml @@ -228,6 +228,18 @@ Popup { } } + MessageOptionButton { + visible: type === Interaction.Type.DATA_TRANSFER && Status === Interaction.Status.TRANSFER_FINISHED + textButton: JamiStrings.removeLocally + iconSource: JamiResources.trash_black_24dp_svg + Layout.fillWidth: true + Layout.margins: 5 + onClicked: { + MessagesAdapter.removeFile(msgId, root.location) + close() + } + } + MessageOptionButton { id: buttonEdit diff --git a/src/app/constant/JamiStrings.qml b/src/app/constant/JamiStrings.qml index 4d6cbfb252dc07274876e2ca221b48fe4eeeeb8a..1fe84a663ae7da5d76230287ccfdfbb2852c7159 100644 --- a/src/app/constant/JamiStrings.qml +++ b/src/app/constant/JamiStrings.qml @@ -496,6 +496,7 @@ Item { // Context Menu property string saveFile: qsTr("Save file") property string openLocation: qsTr("Open location") + property string removeLocally: qsTr("Delete file from device") // Updates property string betaInstall: qsTr("Install beta version") diff --git a/src/app/messagesadapter.cpp b/src/app/messagesadapter.cpp index 0b77e51b6e7793a93d258f26ae5bf238804b9a1d..0a6ccae43bdd45f951431ec5bc47dc74fed9a7ba 100644 --- a/src/app/messagesadapter.cpp +++ b/src/app/messagesadapter.cpp @@ -299,6 +299,13 @@ MessagesAdapter::openDirectory(const QString& path) } } +void +MessagesAdapter::removeFile(const QString& interactionId, const QString& path) +{ + auto convUid = lrcInstance_->get_selectedConvUid(); + lrcInstance_->getCurrentConversationModel()->removeFile(convUid, interactionId, path); +} + void MessagesAdapter::acceptFile(const QString& interactionId) { diff --git a/src/app/messagesadapter.h b/src/app/messagesadapter.h index a70c66d6765db6c28dd0f9e1319f64c12c0393a8..db3916ed15cdd866e5dcaaaa6428006e1697de73 100644 --- a/src/app/messagesadapter.h +++ b/src/app/messagesadapter.h @@ -111,6 +111,7 @@ 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 removeFile(const QString& interactionId, const QString& path); 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 07536a6feda92818da9637ff6f757cca869fdc94..dcfeb31ddc55c2d7abac8e4b7fdb58010cd38adc 100644 --- a/src/libclient/api/conversationmodel.h +++ b/src/libclient/api/conversationmodel.h @@ -306,6 +306,9 @@ public: void getTransferInfo(const QString& conversationId, const QString& interactionId, api::datatransfer::Info& info) const; + void removeFile(const QString& conversationId, + const QString& interactionId, + const QString& path); /** * Starts a search of all medias in a conversation diff --git a/src/libclient/conversationmodel.cpp b/src/libclient/conversationmodel.cpp index 5d853fb7984955dcb162324311efc3db7cb51f59..4031eb97f8d2500c70518341b5a3cfa64d67897b 100644 --- a/src/libclient/conversationmodel.cpp +++ b/src/libclient/conversationmodel.cpp @@ -3384,8 +3384,7 @@ ConversationModelPimpl::slotNewCall(const QString& fromId, const QString& callId // in case if we receive call after removing contact add conversation request; try { auto contact = linked.owner.contactModel->getContact(fromId); - if (!isOutgoing && !contact.isBanned - && fromId != linked.owner.profileInfo.uri) { + if (!isOutgoing && !contact.isBanned && fromId != linked.owner.profileInfo.uri) { addContactRequest(fromId); } if (isOutgoing && contact.profileInfo.type == profile::Type::TEMPORARY) { @@ -4049,6 +4048,26 @@ ConversationModel::getTransferInfo(const QString& conversationId, } } +void +ConversationModel::removeFile(const QString& conversationId, + const QString& interactionId, + const QString& path) +{ + auto convOpt = getConversationForUid(conversationId); + if (!convOpt) + return; + + QFile::remove(path); + + std::lock_guard<std::mutex> lk(pimpl_->interactionsLocks[convOpt->get().uid]); + auto& interactions = convOpt->get().interactions; + auto it = interactions->find(interactionId); + if (it != interactions->end()) { + it->second.status = interaction::Status::TRANSFER_AWAITING_HOST; + interactions->emitDataChanged(it, {MessageList::Role::Status}); + } +} + int ConversationModel::getNumberOfUnreadMessagesFor(const QString& convUid) {