Chat message retraction
This commit is contained in:
parent
13ec790648
commit
d40045d5bb
13 changed files with 247 additions and 6 deletions
|
|
@ -394,6 +394,7 @@ void ChatCore::setSelf(QSharedPointer<ChatCore> me) {
|
||||||
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f); });
|
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f); });
|
||||||
mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved,
|
mCoreModelConnection->makeConnectToModel(&CoreModel::friendRemoved,
|
||||||
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f, true); });
|
[this](std::shared_ptr<linphone::Friend> f) { updateInfo(f, true); });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QDateTime ChatCore::getLastUpdatedTime() const {
|
QDateTime ChatCore::getLastUpdatedTime() const {
|
||||||
|
|
|
||||||
|
|
@ -115,11 +115,13 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
|
||||||
if (chatmessage) {
|
if (chatmessage) {
|
||||||
mChatMessageModel = Utils::makeQObject_ptr<ChatMessageModel>(chatmessage);
|
mChatMessageModel = Utils::makeQObject_ptr<ChatMessageModel>(chatmessage);
|
||||||
mChatMessageModel->setSelf(mChatMessageModel);
|
mChatMessageModel->setSelf(mChatMessageModel);
|
||||||
mText = ToolModel::getMessageFromContent(chatmessage->getContents());
|
mText = ToolModel::getMessageFromMessage(chatmessage);
|
||||||
mUtf8Text = mChatMessageModel->getUtf8Text();
|
mUtf8Text = mChatMessageModel->getUtf8Text();
|
||||||
mHasTextContent = mChatMessageModel->getHasTextContent();
|
mHasTextContent = mChatMessageModel->getHasTextContent();
|
||||||
mTimestamp = QDateTime::fromSecsSinceEpoch(chatmessage->getTime());
|
mTimestamp = QDateTime::fromSecsSinceEpoch(chatmessage->getTime());
|
||||||
mIsOutgoing = chatmessage->isOutgoing();
|
mIsOutgoing = chatmessage->isOutgoing();
|
||||||
|
mIsRetractable = chatmessage->isRetractable();
|
||||||
|
mIsRetracted = chatmessage->isRetracted();
|
||||||
mIsRemoteMessage = !chatmessage->isOutgoing();
|
mIsRemoteMessage = !chatmessage->isOutgoing();
|
||||||
mPeerAddress = Utils::coreStringToAppString(chatmessage->getPeerAddress()->asStringUriOnly());
|
mPeerAddress = Utils::coreStringToAppString(chatmessage->getPeerAddress()->asStringUriOnly());
|
||||||
mPeerName = ToolModel::getDisplayName(chatmessage->getPeerAddress());
|
mPeerName = ToolModel::getDisplayName(chatmessage->getPeerAddress());
|
||||||
|
|
@ -191,7 +193,7 @@ ChatMessageCore::ChatMessageCore(const std::shared_ptr<linphone::ChatMessage> &c
|
||||||
if (mIsReply) {
|
if (mIsReply) {
|
||||||
auto replymessage = chatmessage->getReplyMessage();
|
auto replymessage = chatmessage->getReplyMessage();
|
||||||
if (replymessage) {
|
if (replymessage) {
|
||||||
mReplyText = ToolModel::getMessageFromContent(replymessage->getContents());
|
mReplyText = ToolModel::getMessageFromMessage(replymessage);
|
||||||
if (mIsFromChatGroup) mRepliedToName = ToolModel::getDisplayName(replymessage->getFromAddress());
|
if (mIsFromChatGroup) mRepliedToName = ToolModel::getDisplayName(replymessage->getFromAddress());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -207,6 +209,9 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
|
||||||
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lDelete, [this] {
|
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lDelete, [this] {
|
||||||
mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->deleteMessageFromChatRoom(true); });
|
mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->deleteMessageFromChatRoom(true); });
|
||||||
});
|
});
|
||||||
|
mChatMessageModelConnection->makeConnectToCore(&ChatMessageCore::lRetract, [this] {
|
||||||
|
mChatMessageModelConnection->invokeToModel([this] { mChatMessageModel->retractMessageFromChatRoom(); });
|
||||||
|
});
|
||||||
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageDeleted, [this](bool deletedByUser) {
|
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::messageDeleted, [this](bool deletedByUser) {
|
||||||
mChatMessageModelConnection->invokeToCore([this, deletedByUser] {
|
mChatMessageModelConnection->invokeToCore([this, deletedByUser] {
|
||||||
//: Deleted
|
//: Deleted
|
||||||
|
|
@ -350,6 +355,15 @@ void ChatMessageCore::setSelf(QSharedPointer<ChatMessageCore> me) {
|
||||||
int duration = now.secsTo(QDateTime::fromSecsSinceEpoch(expireTime));
|
int duration = now.secsTo(QDateTime::fromSecsSinceEpoch(expireTime));
|
||||||
mChatMessageModelConnection->invokeToCore([this, duration] { setEphemeralDuration(duration); });
|
mChatMessageModelConnection->invokeToCore([this, duration] { setEphemeralDuration(duration); });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mChatMessageModelConnection->makeConnectToModel(&ChatMessageModel::retracted,
|
||||||
|
[this](const std::shared_ptr<linphone::ChatMessage> &message) {
|
||||||
|
QString text = ToolModel::getMessageFromMessage(message);
|
||||||
|
mChatMessageModelConnection->invokeToCore([this, text] {
|
||||||
|
setText(text);
|
||||||
|
setRetracted();
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<ImdnStatus> ChatMessageCore::computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message) {
|
QList<ImdnStatus> ChatMessageCore::computeDeliveryStatus(const std::shared_ptr<linphone::ChatMessage> &message) {
|
||||||
|
|
@ -472,6 +486,18 @@ void ChatMessageCore::setIsRead(bool read) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatMessageCore::setRetracted() {
|
||||||
|
if (!mIsRetracted) {
|
||||||
|
mIsRetracted = true;
|
||||||
|
emit isRetractedChanged();
|
||||||
|
emit messageStateChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ChatMessageCore::isRetracted() const {
|
||||||
|
return mIsRetracted;
|
||||||
|
}
|
||||||
|
|
||||||
QString ChatMessageCore::getOwnReaction() const {
|
QString ChatMessageCore::getOwnReaction() const {
|
||||||
return mOwnReaction;
|
return mOwnReaction;
|
||||||
}
|
}
|
||||||
|
|
@ -650,4 +676,4 @@ std::shared_ptr<ChatMessageModel> ChatMessageCore::getModel() const {
|
||||||
|
|
||||||
ChatMessageContentGui *ChatMessageCore::getVoiceRecordingContent() const {
|
ChatMessageContentGui *ChatMessageCore::getVoiceRecordingContent() const {
|
||||||
return new ChatMessageContentGui(mVoiceRecordingContent);
|
return new ChatMessageContentGui(mVoiceRecordingContent);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,9 @@ class ChatMessageCore : public QObject, public AbstractObject {
|
||||||
Q_PROPERTY(bool hasFileContent MEMBER mHasFileContent CONSTANT)
|
Q_PROPERTY(bool hasFileContent MEMBER mHasFileContent CONSTANT)
|
||||||
Q_PROPERTY(bool isVoiceRecording MEMBER mIsVoiceRecording CONSTANT)
|
Q_PROPERTY(bool isVoiceRecording MEMBER mIsVoiceRecording CONSTANT)
|
||||||
Q_PROPERTY(bool isCalendarInvite MEMBER mIsCalendarInvite CONSTANT)
|
Q_PROPERTY(bool isCalendarInvite MEMBER mIsCalendarInvite CONSTANT)
|
||||||
|
Q_PROPERTY(bool isOutgoing MEMBER mIsOutgoing CONSTANT)
|
||||||
|
Q_PROPERTY(bool isRetractable MEMBER mIsRetractable CONSTANT)
|
||||||
|
Q_PROPERTY(bool isRetracted READ isRetracted NOTIFY isRetractedChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static QSharedPointer<ChatMessageCore> create(const std::shared_ptr<linphone::ChatMessage> &chatmessage);
|
static QSharedPointer<ChatMessageCore> create(const std::shared_ptr<linphone::ChatMessage> &chatmessage);
|
||||||
|
|
@ -143,6 +146,9 @@ public:
|
||||||
bool isRead() const;
|
bool isRead() const;
|
||||||
void setIsRead(bool read);
|
void setIsRead(bool read);
|
||||||
|
|
||||||
|
bool isRetracted() const;
|
||||||
|
void setRetracted();
|
||||||
|
|
||||||
QString getOwnReaction() const;
|
QString getOwnReaction() const;
|
||||||
void setOwnReaction(const QString &reaction);
|
void setOwnReaction(const QString &reaction);
|
||||||
QString getTotalReactionsLabel() const;
|
QString getTotalReactionsLabel() const;
|
||||||
|
|
@ -176,9 +182,11 @@ signals:
|
||||||
void messageReactionChanged();
|
void messageReactionChanged();
|
||||||
void singletonReactionMapChanged();
|
void singletonReactionMapChanged();
|
||||||
void ephemeralDurationChanged(int duration);
|
void ephemeralDurationChanged(int duration);
|
||||||
|
void isRetractedChanged();
|
||||||
|
|
||||||
void lDelete();
|
void lDelete();
|
||||||
void deleted();
|
void deleted();
|
||||||
|
void lRetract();
|
||||||
void lMarkAsRead();
|
void lMarkAsRead();
|
||||||
void readChanged();
|
void readChanged();
|
||||||
void lSendReaction(const QString &reaction);
|
void lSendReaction(const QString &reaction);
|
||||||
|
|
@ -214,6 +222,8 @@ private:
|
||||||
bool mIsVoiceRecording = false;
|
bool mIsVoiceRecording = false;
|
||||||
bool mIsEphemeral = false;
|
bool mIsEphemeral = false;
|
||||||
int mEphemeralDuration = 0;
|
int mEphemeralDuration = 0;
|
||||||
|
bool mIsRetractable = false;
|
||||||
|
bool mIsRetracted = false;
|
||||||
|
|
||||||
bool mIsOutgoing = false;
|
bool mIsOutgoing = false;
|
||||||
QString mTotalReactionsLabel;
|
QString mTotalReactionsLabel;
|
||||||
|
|
|
||||||
|
|
@ -2486,6 +2486,42 @@ Only your correspondent can decrypt them.</translation>
|
||||||
<extracomment>%1 is writing…</extracomment>
|
<extracomment>%1 is writing…</extracomment>
|
||||||
<translation>%1 is writing…</translation>
|
<translation>%1 is writing…</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="470"/>
|
||||||
|
<source>conversation_dialog_delete_chat_message_title</source>
|
||||||
|
<extracomment>"Delete this message?"</extracomment>
|
||||||
|
<translation>Delete this message?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="471"/>
|
||||||
|
<source>conversation_dialog_delete_locally_label</source>
|
||||||
|
<extracomment>"For me"</extracomment>
|
||||||
|
<translation>For me</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>conversation_dialog_delete_for_everyone_label</source>
|
||||||
|
<extracomment>"For everyone"</extracomment>
|
||||||
|
<translation>For everyone</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>dialog_cancel</source>
|
||||||
|
<extracomment>"Cancel"</extracomment>
|
||||||
|
<translation>Cancel</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>info_toast_deleted_title</source>
|
||||||
|
<extracomment>Deleted</extracomment>
|
||||||
|
<translation>Deleted</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>info_toast_deleted_message</source>
|
||||||
|
<extracomment>The message has been deleted</extracomment>
|
||||||
|
<translation>The message has been deleted</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ChatPage</name>
|
<name>ChatPage</name>
|
||||||
|
|
@ -5947,6 +5983,18 @@ To enable them in a commercial project, please contact us.</translation>
|
||||||
<source>conference_invitation_updated</source>
|
<source>conference_invitation_updated</source>
|
||||||
<translation>Meeting modification</translation>
|
<translation>Meeting modification</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
|
||||||
|
<source>conversation_message_content_deleted_label</source>
|
||||||
|
<extracomment>"<i>This message has been deleted</i>"</extracomment>
|
||||||
|
<translation><i>This message has been deleted</i></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
|
||||||
|
<source>conversation_message_content_deleted_by_us_label</source>
|
||||||
|
<extracomment>"<i>You have deleted this message</i>"</extracomment>
|
||||||
|
<translation><i>You have deleted this message</i></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Utils</name>
|
<name>Utils</name>
|
||||||
|
|
|
||||||
|
|
@ -2486,6 +2486,42 @@ en bout. Seul votre correspondant peut les déchiffrer.</translation>
|
||||||
<extracomment>%1 is writing…</extracomment>
|
<extracomment>%1 is writing…</extracomment>
|
||||||
<translation>%1 est en train d'écrire…</translation>
|
<translation>%1 est en train d'écrire…</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="470"/>
|
||||||
|
<source>conversation_dialog_delete_chat_message_title</source>
|
||||||
|
<extracomment>"Delete this message?"</extracomment>
|
||||||
|
<translation>Supprimer le message ?</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="471"/>
|
||||||
|
<source>conversation_dialog_delete_locally_label</source>
|
||||||
|
<extracomment>"For me"</extracomment>
|
||||||
|
<translation>Pour moi</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>conversation_dialog_delete_for_everyone_label</source>
|
||||||
|
<extracomment>"For everyone"</extracomment>
|
||||||
|
<translation>Pour tout le monde</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>dialog_cancel</source>
|
||||||
|
<extracomment>"Cancel"</extracomment>
|
||||||
|
<translation>Annuler</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>info_toast_deleted_title</source>
|
||||||
|
<extracomment>Deleted</extracomment>
|
||||||
|
<translation>Supprimé</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../view/Control/Display/Chat/ChatMessagesListView.qml" line="472"/>
|
||||||
|
<source>info_toast_deleted_message</source>
|
||||||
|
<extracomment>The message has been deleted</extracomment>
|
||||||
|
<translation>Le message a été supprimé</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>ChatPage</name>
|
<name>ChatPage</name>
|
||||||
|
|
@ -5947,6 +5983,18 @@ Pour les activer dans un projet commercial, merci de nous contacter.</translatio
|
||||||
<source>conference_invitation_updated</source>
|
<source>conference_invitation_updated</source>
|
||||||
<translation>Modification d'une réunion</translation>
|
<translation>Modification d'une réunion</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
|
||||||
|
<source>conversation_message_content_deleted_label</source>
|
||||||
|
<extracomment>"<i>This message has been deleted</i>"</extracomment>
|
||||||
|
<translation><i>Le message a été supprimé</i></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../../model/tool/ToolModel.cpp" line="530"/>
|
||||||
|
<source>conversation_message_content_deleted_by_us_label</source>
|
||||||
|
<extracomment>"<i>You have deleted this message</i>"</extracomment>
|
||||||
|
<translation><i>Vous avez supprimé le message</i></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>Utils</name>
|
<name>Utils</name>
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ ChatMessageModel::~ChatMessageModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ChatMessageModel::getText() const {
|
QString ChatMessageModel::getText() const {
|
||||||
return ToolModel::getMessageFromContent(mMonitor->getContents());
|
return ToolModel::getMessageFromMessage(mMonitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ChatMessageModel::getUtf8Text() const {
|
QString ChatMessageModel::getUtf8Text() const {
|
||||||
|
|
@ -103,6 +103,13 @@ void ChatMessageModel::deleteMessageFromChatRoom(bool deletedByUser) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatMessageModel::retractMessageFromChatRoom() {
|
||||||
|
auto chatRoom = mMonitor->getChatRoom();
|
||||||
|
if (chatRoom) {
|
||||||
|
chatRoom->retractMessage(mMonitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ChatMessageModel::sendReaction(const QString &reaction) {
|
void ChatMessageModel::sendReaction(const QString &reaction) {
|
||||||
auto linReaction = mMonitor->createReaction(Utils::appStringToCoreString(reaction));
|
auto linReaction = mMonitor->createReaction(Utils::appStringToCoreString(reaction));
|
||||||
linReaction->send();
|
linReaction->send();
|
||||||
|
|
@ -188,3 +195,7 @@ void ChatMessageModel::onEphemeralMessageTimerStarted(const std::shared_ptr<linp
|
||||||
void ChatMessageModel::onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) {
|
void ChatMessageModel::onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) {
|
||||||
emit ephemeralMessageDeleted(message);
|
emit ephemeralMessageDeleted(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ChatMessageModel::onRetracted(const std::shared_ptr<linphone::ChatMessage> &message) {
|
||||||
|
emit retracted(message);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ public:
|
||||||
void markAsRead();
|
void markAsRead();
|
||||||
|
|
||||||
void deleteMessageFromChatRoom(bool deletedByUser);
|
void deleteMessageFromChatRoom(bool deletedByUser);
|
||||||
|
void retractMessageFromChatRoom();
|
||||||
|
|
||||||
void sendReaction(const QString &reaction);
|
void sendReaction(const QString &reaction);
|
||||||
|
|
||||||
|
|
@ -95,6 +96,7 @@ signals:
|
||||||
void ephemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message);
|
void ephemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message);
|
||||||
void ephemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message);
|
void ephemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message);
|
||||||
void ephemeralMessageTimeUpdated(const std::shared_ptr<linphone::ChatMessage> &message, int expireTime);
|
void ephemeralMessageTimeUpdated(const std::shared_ptr<linphone::ChatMessage> &message, int expireTime);
|
||||||
|
void retracted(const std::shared_ptr<linphone::ChatMessage> &message);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
linphone::ChatMessage::State mMessageState;
|
linphone::ChatMessage::State mMessageState;
|
||||||
|
|
@ -130,6 +132,7 @@ private:
|
||||||
const std::shared_ptr<const linphone::ParticipantImdnState> &state) override;
|
const std::shared_ptr<const linphone::ParticipantImdnState> &state) override;
|
||||||
void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message) override;
|
void onEphemeralMessageTimerStarted(const std::shared_ptr<linphone::ChatMessage> &message) override;
|
||||||
void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) override;
|
void onEphemeralMessageDeleted(const std::shared_ptr<linphone::ChatMessage> &message) override;
|
||||||
|
void onRetracted(const std::shared_ptr<linphone::ChatMessage> &message) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -537,6 +537,15 @@ QString ToolModel::getMessageFromContent(std::list<std::shared_ptr<linphone::Con
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString ToolModel::getMessageFromMessage(std::shared_ptr<linphone::ChatMessage> message) {
|
||||||
|
if (message->isRetracted()) {
|
||||||
|
return message->isOutgoing() ? tr("conversation_message_content_deleted_by_us_label")
|
||||||
|
: tr("conversation_message_content_deleted_label");
|
||||||
|
} else {
|
||||||
|
return getMessageFromContent(message->getContents());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Load downloaded codecs like OpenH264 (needs to be after core is created and has loaded its plugins, as
|
// Load downloaded codecs like OpenH264 (needs to be after core is created and has loaded its plugins, as
|
||||||
// reloadMsPlugins modifies plugin path for the factory)
|
// reloadMsPlugins modifies plugin path for the factory)
|
||||||
void ToolModel::loadDownloadedCodecs() {
|
void ToolModel::loadDownloadedCodecs() {
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,7 @@ public:
|
||||||
const std::shared_ptr<linphone::Friend> &f);
|
const std::shared_ptr<linphone::Friend> &f);
|
||||||
|
|
||||||
static QString getMessageFromContent(std::list<std::shared_ptr<linphone::Content>> contents);
|
static QString getMessageFromContent(std::list<std::shared_ptr<linphone::Content>> contents);
|
||||||
|
static QString getMessageFromMessage(std::shared_ptr<linphone::ChatMessage> message);
|
||||||
|
|
||||||
static void loadDownloadedCodecs();
|
static void loadDownloadedCodecs();
|
||||||
static void updateCodecs();
|
static void updateCodecs();
|
||||||
|
|
|
||||||
|
|
@ -247,11 +247,21 @@ Control.Control {
|
||||||
}
|
}
|
||||||
contentItem: ColumnLayout {
|
contentItem: ColumnLayout {
|
||||||
spacing: Utils.getSizeWithScreenRatio(5)
|
spacing: Utils.getSizeWithScreenRatio(5)
|
||||||
|
Text {
|
||||||
|
id: retractedId
|
||||||
|
visible: mainItem.chatMessage.core.isRetracted
|
||||||
|
font: Typography.p1i
|
||||||
|
color: DefaultStyle.info_800_main
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
text: mainItem.chatMessage.core.text
|
||||||
|
}
|
||||||
ChatMessageContent {
|
ChatMessageContent {
|
||||||
id: chatBubbleContent
|
id: chatBubbleContent
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.fillHeight: true
|
Layout.fillHeight: true
|
||||||
chatGui: mainItem.chat
|
chatGui: mainItem.chat
|
||||||
|
visible: !mainItem.chatMessage.core.isRetracted
|
||||||
searchedTextPart: mainItem.searchedTextPart
|
searchedTextPart: mainItem.searchedTextPart
|
||||||
chatMessageGui: mainItem.chatMessage
|
chatMessageGui: mainItem.chatMessage
|
||||||
maxWidth: mainItem.maxWidth
|
maxWidth: mainItem.maxWidth
|
||||||
|
|
@ -415,6 +425,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
IconLabelButton {
|
IconLabelButton {
|
||||||
inverseLayout: true
|
inverseLayout: true
|
||||||
|
visible: !mainItem.chatMessage.core.isRetracted
|
||||||
//: Reply
|
//: Reply
|
||||||
text: qsTr("chat_message_reply")
|
text: qsTr("chat_message_reply")
|
||||||
icon.source: AppIcons.reply
|
icon.source: AppIcons.reply
|
||||||
|
|
@ -427,6 +438,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
IconLabelButton {
|
IconLabelButton {
|
||||||
inverseLayout: true
|
inverseLayout: true
|
||||||
|
visible: !mainItem.chatMessage.core.isRetracted
|
||||||
text: chatBubbleContent.selectedText != ""
|
text: chatBubbleContent.selectedText != ""
|
||||||
//: "Copy selection"
|
//: "Copy selection"
|
||||||
? qsTr("chat_message_copy_selection")
|
? qsTr("chat_message_copy_selection")
|
||||||
|
|
@ -447,6 +459,7 @@ Control.Control {
|
||||||
}
|
}
|
||||||
IconLabelButton {
|
IconLabelButton {
|
||||||
inverseLayout: true
|
inverseLayout: true
|
||||||
|
visible: !mainItem.chatMessage.core.isRetracted
|
||||||
//: Forward
|
//: Forward
|
||||||
text: qsTr("chat_message_forward")
|
text: qsTr("chat_message_forward")
|
||||||
icon.source: AppIcons.forward
|
icon.source: AppIcons.forward
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,51 @@ ListView {
|
||||||
indicatorColor: DefaultStyle.main1_500_main
|
indicatorColor: DefaultStyle.main1_500_main
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: messageDeletionDialog
|
||||||
|
width: Utils.getSizeWithScreenRatio(637)
|
||||||
|
//: "Supprimer le message ?"
|
||||||
|
title: qsTr("conversation_dialog_delete_chat_message_title")
|
||||||
|
property var chatMessage
|
||||||
|
buttons: RowLayout {
|
||||||
|
id: buttonsLayout
|
||||||
|
Layout.alignment: Qt.AlignBottom | Qt.AlignRight
|
||||||
|
spacing: Utils.getSizeWithScreenRatio(20)
|
||||||
|
MediumButton {
|
||||||
|
id: firstButtonId
|
||||||
|
text: qsTr("conversation_dialog_delete_locally_label")
|
||||||
|
style: ButtonStyle.main
|
||||||
|
onClicked: {
|
||||||
|
messageDeletionDialog.chatMessage.core.lDelete()
|
||||||
|
messageDeletionDialog.close()
|
||||||
|
}
|
||||||
|
KeyNavigation.left: thirdButtonId
|
||||||
|
KeyNavigation.right: secondButtonId
|
||||||
|
}
|
||||||
|
MediumButton {
|
||||||
|
id: secondButtonId
|
||||||
|
text: qsTr("conversation_dialog_delete_for_everyone_label")
|
||||||
|
style: ButtonStyle.main
|
||||||
|
onClicked: {
|
||||||
|
messageDeletionDialog.chatMessage.core.lRetract()
|
||||||
|
messageDeletionDialog.close()
|
||||||
|
}
|
||||||
|
KeyNavigation.left: firstButtonId
|
||||||
|
KeyNavigation.right: thirdButtonId
|
||||||
|
}
|
||||||
|
MediumButton {
|
||||||
|
id: thirdButtonId
|
||||||
|
text: qsTr("dialog_cancel")
|
||||||
|
style: ButtonStyle.secondary
|
||||||
|
onClicked: {
|
||||||
|
messageDeletionDialog.close()
|
||||||
|
}
|
||||||
|
KeyNavigation.left: secondButtonId
|
||||||
|
KeyNavigation.right: firstButtonId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
delegate: DelegateChooser {
|
delegate: DelegateChooser {
|
||||||
role: "eventType"
|
role: "eventType"
|
||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
|
|
@ -262,7 +307,14 @@ ListView {
|
||||||
? parent.right
|
? parent.right
|
||||||
: undefined
|
: undefined
|
||||||
|
|
||||||
onMessageDeletionRequested: chatMessage.core.lDelete()
|
onMessageDeletionRequested: {
|
||||||
|
if (chatMessage.core.isOutgoing && chatMessage.core.isRetractable && !chatMessage.core.isRetracted) {
|
||||||
|
messageDeletionDialog.chatMessage = chatMessage
|
||||||
|
messageDeletionDialog.open()
|
||||||
|
} else {
|
||||||
|
chatMessage.core.lDelete()
|
||||||
|
}
|
||||||
|
}
|
||||||
onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(chatMessage)
|
onShowReactionsForMessageRequested: mainItem.showReactionsForMessageRequested(chatMessage)
|
||||||
onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(chatMessage)
|
onShowImdnStatusForMessageRequested: mainItem.showImdnStatusForMessageRequested(chatMessage)
|
||||||
onReplyToMessageRequested: mainItem.replyToMessageRequested(chatMessage)
|
onReplyToMessageRequested: mainItem.replyToMessageRequested(chatMessage)
|
||||||
|
|
@ -283,6 +335,16 @@ ListView {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Connections {
|
||||||
|
target: chatMessage.core
|
||||||
|
onIsRetractedChanged: {
|
||||||
|
if (chatMessage.core.isRetracted && chatMessage.core.isOutgoing) {
|
||||||
|
UtilsCpp.showInformationPopup(qsTr("info_toast_deleted_title"),
|
||||||
|
//: The message has been deleted
|
||||||
|
qsTr("info_toast_deleted_message"), true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ QtObject {
|
||||||
property var success_700: "#377d71"
|
property var success_700: "#377d71"
|
||||||
property var success_900: "#1E4C53"
|
property var success_900: "#1E4C53"
|
||||||
property var info_500_main: "#4AA8FF"
|
property var info_500_main: "#4AA8FF"
|
||||||
|
property var info_800_main: "#02528D"
|
||||||
|
|
||||||
property var vue_meter_light_green: "#6FF88D"
|
property var vue_meter_light_green: "#6FF88D"
|
||||||
property var vue_meter_dark_green: "#00D916"
|
property var vue_meter_dark_green: "#00D916"
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,14 @@ QtObject {
|
||||||
weight: Font.Normal
|
weight: Font.Normal
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Text/P1i - Paragraph text Italic
|
||||||
|
property font p1i: Qt.font( {
|
||||||
|
family: DefaultStyle.defaultFont,
|
||||||
|
pixelSize: Utils.getSizeWithScreenRatio(14),
|
||||||
|
weight: Font.Normal,
|
||||||
|
italic: true
|
||||||
|
})
|
||||||
|
|
||||||
// Text/P1s - Paragraph text
|
// Text/P1s - Paragraph text
|
||||||
property font p1s: Qt.font( {
|
property font p1s: Qt.font( {
|
||||||
family: DefaultStyle.defaultFont,
|
family: DefaultStyle.defaultFont,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue