mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-04-21 21:52:03 +02:00
messagelistmodel: add support for file deletion
+ Add button to delete messages on file transfer + Show "Deleted media" on deleted files. + Update last interaction + Update icon for saving file, we're in 2024, no more floppy disk Change-Id: I607b1a6beda443db85c60d8cf95a9aae29ce1f7c GitLab: #1287
This commit is contained in:
parent
010a2c4eea
commit
99254f8d02
9 changed files with 84 additions and 16 deletions
|
@ -1 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" height="48" width="48"><path d="M42 13.85V39q0 1.2-.9 2.1-.9.9-2.1.9H9q-1.2 0-2.1-.9Q6 40.2 6 39V9q0-1.2.9-2.1Q7.8 6 9 6h25.15Zm-3 1.35L32.8 9H9v30h30ZM24 35.75q2.15 0 3.675-1.525T29.2 30.55q0-2.15-1.525-3.675T24 25.35q-2.15 0-3.675 1.525T18.8 30.55q0 2.15 1.525 3.675T24 35.75ZM11.65 18.8h17.9v-7.15h-17.9ZM9 15.2V39 9Z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="48px" viewBox="0 -960 960 960" width="48px" fill="#e8eaed"><path d="M480-313 287-506l43-43 120 120v-371h60v371l120-120 43 43-193 193ZM220-160q-24 0-42-18t-18-42v-143h60v143h520v-143h60v143q0 24-18 42t-42 18H220Z"/></svg>
|
Before Width: | Height: | Size: 369 B After Width: | Height: | Size: 268 B |
|
@ -40,9 +40,18 @@ Loader {
|
|||
property int seq: MsgSeq.single
|
||||
property string author: Author
|
||||
property string body: Body
|
||||
property var tid: TID
|
||||
property int transferStatus: TransferStatus
|
||||
onTidChanged: {
|
||||
if (tid === "") {
|
||||
sourceComponent = deletedMsgComp
|
||||
}
|
||||
}
|
||||
onTransferStatusChanged: {
|
||||
if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
|
||||
if (tid === "") {
|
||||
sourceComponent = deletedMsgComp
|
||||
return;
|
||||
} else if (transferStatus === Interaction.TransferStatus.TRANSFER_FINISHED) {
|
||||
mediaInfo = MessagesAdapter.getMediaInfo(root.body);
|
||||
if (Object.keys(mediaInfo).length !== 0 && WITH_WEBENGINE) {
|
||||
sourceComponent = localMediaMsgComp;
|
||||
|
@ -58,6 +67,54 @@ Loader {
|
|||
Behavior on opacity { NumberAnimation { duration: 100 } }
|
||||
onLoaded: opacity = 1
|
||||
|
||||
Component {
|
||||
id: deletedMsgComp
|
||||
|
||||
SBSMessageBase {
|
||||
id: deletedItem
|
||||
|
||||
isOutgoing: Author === CurrentAccount.uri
|
||||
showTime: root.showTime
|
||||
seq: root.seq
|
||||
author: Author
|
||||
readers: Readers
|
||||
timestamp: root.timestamp
|
||||
formattedTime: root.formattedTime
|
||||
formattedDay: root.formattedTime
|
||||
extraHeight: 0
|
||||
textContentWidth: textEditId.width
|
||||
textContentHeight: textEditId.height
|
||||
innerContent.children: [
|
||||
TextEdit {
|
||||
id: textEditId
|
||||
|
||||
anchors.right: isOutgoing ? parent.right : undefined
|
||||
anchors.rightMargin: isOutgoing ? timeWidth : 0
|
||||
bottomPadding: 6
|
||||
topPadding: 6
|
||||
leftPadding: 10
|
||||
text: UtilsAdapter.getBestNameForUri(CurrentAccount.id, Author) + " " + JamiStrings.deletedMedia ;
|
||||
horizontalAlignment: Text.AlignLeft
|
||||
width: Math.min((2 / 3) * parent.width, implicitWidth + 18, innerContent.width - senderMargin + 18)
|
||||
|
||||
font.pointSize: JamiTheme.smallFontSize
|
||||
font.hintingPreference: Font.PreferNoHinting
|
||||
renderType: Text.NativeRendering
|
||||
textFormat: Text.RichText
|
||||
clip: true
|
||||
readOnly: true
|
||||
color: getBaseColor()
|
||||
opacity: 0.5
|
||||
|
||||
function getBaseColor() {
|
||||
bubble.isDeleted = true
|
||||
return UtilsAdapter.luma(bubble.color) ? "white" : "dark"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Component {
|
||||
id: dataTransferMsgComp
|
||||
|
||||
|
@ -223,8 +280,8 @@ Loader {
|
|||
: JamiTheme.chatviewTextColorDark
|
||||
}
|
||||
}
|
||||
}
|
||||
,ProgressBar {
|
||||
},
|
||||
ProgressBar {
|
||||
id: progressBar
|
||||
|
||||
visible: root.transferStatus === Interaction.TransferStatus.TRANSFER_ONGOING
|
||||
|
|
|
@ -382,7 +382,11 @@ Control {
|
|||
property bool bubbleHovered
|
||||
property string imgSource
|
||||
|
||||
width: (root.type === Interaction.Type.TEXT ? root.textContentWidth + (IsEmojiOnly || root.bigMsg ? 0 : root.timeWidth + root.editedWidth) : innerContent.childrenRect.width)
|
||||
width: (root.type === Interaction.Type.TEXT || isDeleted ?
|
||||
root.textContentWidth + (IsEmojiOnly || root.bigMsg ?
|
||||
0
|
||||
: root.timeWidth + root.editedWidth)
|
||||
: innerContent.childrenRect.width)
|
||||
height: innerContent.childrenRect.height + (visible ? root.extraHeight : 0) + (root.bigMsg ? 15 : 0)
|
||||
|
||||
HoverHandler {
|
||||
|
|
|
@ -175,7 +175,7 @@ BaseContextMenu {
|
|||
GeneralMenuItem {
|
||||
id: deleteMessage
|
||||
|
||||
canTrigger: root.isOutgoing && type === Interaction.Type.TEXT
|
||||
canTrigger: root.isOutgoing && (type === Interaction.Type.TEXT || type === Interaction.Type.DATA_TRANSFER)
|
||||
iconSource: JamiResources.delete_svg
|
||||
itemName: JamiStrings.deleteMessage
|
||||
onClicked: {
|
||||
|
|
|
@ -125,7 +125,11 @@ ConversationListModelBase::dataForItem(item_t item, int role) const
|
|||
if (interaction.type == interaction::Type::UPDATE_PROFILE) {
|
||||
lastInteractionBody = interaction::getProfileUpdatedString();
|
||||
} else if (interaction.type == interaction::Type::DATA_TRANSFER) {
|
||||
lastInteractionBody = interaction.commit.value("displayName");
|
||||
if (interaction.commit.value("tid").isEmpty()) {
|
||||
lastInteractionBody = tr("Deleted media");
|
||||
} else {
|
||||
lastInteractionBody = interaction.commit.value("displayName");
|
||||
}
|
||||
} else if (interaction.type == lrc::api::interaction::Type::CALL) {
|
||||
const auto isOutgoing = interaction.authorUri == accInfo.profileInfo.uri;
|
||||
lastInteractionBody = interaction::getCallInteractionString(isOutgoing, interaction);
|
||||
|
|
|
@ -88,7 +88,7 @@ Rectangle {
|
|||
mirror: UtilsAdapter.isRTL
|
||||
|
||||
source: JamiResources.back_24dp_svg
|
||||
toolTipText: CurrentConversation.inCall ? JamiStrings.backCall : JamiStrings.hideChat
|
||||
toolTipText: CurrentConversation.inCall ? JamiStrings.returnToCall : JamiStrings.hideChat
|
||||
|
||||
onClicked: root.backClicked()
|
||||
}
|
||||
|
|
|
@ -346,7 +346,8 @@ Item {
|
|||
property string disabledAccount: qsTr("The account is disabled")
|
||||
property string noNetworkConnectivity: qsTr("No network connectivity")
|
||||
property string deletedMessage: qsTr("deleted a message")
|
||||
property string backCall: qsTr("Back to Call")
|
||||
property string deletedMedia: qsTr("deleted a media")
|
||||
property string returnToCall: qsTr("Return to call")
|
||||
|
||||
//MessagesResearch
|
||||
property string jumpTo: qsTr("Jump to")
|
||||
|
|
|
@ -55,6 +55,7 @@ struct Info;
|
|||
X(ReplyToAuthor) \
|
||||
X(TotalSize) \
|
||||
X(TransferName) \
|
||||
X(TID) \
|
||||
X(FileExtension) \
|
||||
X(Readers) \
|
||||
X(IsEmojiOnly) \
|
||||
|
|
|
@ -201,16 +201,15 @@ MessageListModel::update(const QString& id, const interaction::Info& interaction
|
|||
return true;
|
||||
}
|
||||
}
|
||||
// DataTransfer interactions should not be updated.
|
||||
if (current.type == interaction::Type::DATA_TRANSFER) {
|
||||
return true;
|
||||
}
|
||||
// Just update bodies notify the view otherwise.
|
||||
current.body = interaction.body;
|
||||
current.commit = interaction.commit;
|
||||
current.previousBodies = interaction.previousBodies;
|
||||
current.parsedBody = interaction.parsedBody;
|
||||
auto modelIndex = QAbstractListModel::index(indexOfMessage(id), 0);
|
||||
Q_EMIT dataChanged(modelIndex, modelIndex, {Role::Body, Role::PreviousBodies, Role::ParsedBody});
|
||||
Q_EMIT dataChanged(modelIndex,
|
||||
modelIndex,
|
||||
{Role::TID, Role::Body, Role::PreviousBodies, Role::ParsedBody});
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -251,8 +250,8 @@ MessageListModel::updateStatus(const QString& id,
|
|||
|
||||
bool
|
||||
MessageListModel::updateTransferStatus(const QString& id,
|
||||
interaction::TransferStatus newStatus,
|
||||
const QString& newBody)
|
||||
interaction::TransferStatus newStatus,
|
||||
const QString& newBody)
|
||||
{
|
||||
const std::lock_guard<std::recursive_mutex> lk(mutex_);
|
||||
auto it = find(id);
|
||||
|
@ -594,6 +593,8 @@ MessageListModel::dataForItem(const item_t& item, int, int role) const
|
|||
return QVariant(item.second.commit["totalSize"].toInt());
|
||||
case Role::TransferName:
|
||||
return QVariant(item.second.commit["displayName"]);
|
||||
case Role::TID:
|
||||
return QVariant(item.second.commit["tid"]);
|
||||
case Role::FileExtension:
|
||||
return QVariant(QFileInfo(item.second.body).suffix());
|
||||
case Role::Readers:
|
||||
|
|
Loading…
Add table
Reference in a new issue