mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-08-19 06:05:57 +02:00
chatview: fix message styling and timestamps after removing a msg
https://git.jami.net/savoirfairelinux/jami-daemon/-/issues/316 Change-Id: I26cd21f91571021de960f83f189d7323336fa41b
This commit is contained in:
parent
9195cb0bc5
commit
4245c13a42
1 changed files with 44 additions and 24 deletions
|
@ -59,53 +59,52 @@ JamiListView {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
function computeChatview(item,itemIndex) {
|
function computeChatview(item, itemIndex) {
|
||||||
if (!root ) return
|
if (!root) return
|
||||||
var rootItem = root.itemAtIndex(0)
|
var rootItem = root.itemAtIndex(0)
|
||||||
var pItem = root.itemAtIndex(itemIndex - 1)
|
var pItem = root.itemAtIndex(itemIndex - 1)
|
||||||
var pItemIndex = itemIndex - 1
|
var pItemIndex = itemIndex - 1
|
||||||
var nItem = root.itemAtIndex(itemIndex + 1)
|
var nItem = root.itemAtIndex(itemIndex + 1)
|
||||||
var nItemIndex = itemIndex + 1
|
var nItemIndex = itemIndex + 1
|
||||||
//Middle insertion
|
// middle insertion
|
||||||
if (pItem && nItem) {
|
if (pItem && nItem) {
|
||||||
computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)
|
computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)
|
||||||
computeSequencing(nItemIndex, nItem, root.itemAtIndex(itemIndex + 2), item)
|
computeSequencing(item, nItem, root.itemAtIndex(itemIndex + 2))
|
||||||
}
|
}
|
||||||
//top buffer insertion = scroll up
|
// top buffer insertion = scroll up
|
||||||
if (pItem && !nItem) {
|
if (pItem && !nItem) {
|
||||||
computeTimestampVisibility(item, itemIndex, pItem, pItemIndex)
|
computeTimestampVisibility(item, itemIndex, pItem, pItemIndex)
|
||||||
computeSequencing(pItemIndex, pItem, item, root.itemAtIndex(itemIndex - 2))
|
computeSequencing(root.itemAtIndex(itemIndex - 2), pItem, item)
|
||||||
}
|
}
|
||||||
//bottom buffer insertion = scroll down
|
// bottom buffer insertion = scroll down
|
||||||
if (!pItem && nItem) {
|
if (!pItem && nItem) {
|
||||||
computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)
|
computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)
|
||||||
computeSequencing(nItemIndex, nItem, root.itemAtIndex(itemIndex + 2), item)
|
computeSequencing(item, nItem, root.itemAtIndex(itemIndex + 2))
|
||||||
}
|
}
|
||||||
//index 0 insertion = new message
|
// index 0 insertion = new message
|
||||||
if (itemIndex === 0) {
|
if (itemIndex === 0) {
|
||||||
Qt.callLater(computeSequencing, itemIndex, item, root.itemAtIndex(itemIndex + 1), null)
|
Qt.callLater(computeSequencing, null, item, root.itemAtIndex(itemIndex + 1))
|
||||||
if (! computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)) {
|
if (!computeTimestampVisibility(item, itemIndex, nItem, nItemIndex)) {
|
||||||
Qt.callLater(computeChatview, item, itemIndex)
|
Qt.callLater(computeChatview, item, itemIndex)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//top element
|
// top element
|
||||||
if(itemIndex === root.count - 1 && CurrentConversation.allMessagesLoaded) {
|
if(itemIndex === root.count - 1 && CurrentConversation.allMessagesLoaded) {
|
||||||
item.showTime = true
|
item.showTime = true
|
||||||
item.showDay = true
|
item.showDay = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function computeSequencing(index, item, nItem, pItem) {
|
function computeSequencing(pItem, item, nItem) {
|
||||||
if (root === undefined || !item)
|
if (root === undefined || !item)
|
||||||
return
|
return
|
||||||
|
|
||||||
function isFirst() {
|
function isFirst() {
|
||||||
if (!nItem) return true
|
if (!nItem) return true
|
||||||
else{
|
else {
|
||||||
if (item.showTime) {
|
if (item.showTime) {
|
||||||
return true
|
return true
|
||||||
}
|
} else if (nItem.author !== item.author) {
|
||||||
if (nItem.author !== item.author) {
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,11 +113,10 @@ JamiListView {
|
||||||
|
|
||||||
function isLast() {
|
function isLast() {
|
||||||
if (!pItem) return true
|
if (!pItem) return true
|
||||||
else{
|
else {
|
||||||
if (pItem.showTime) {
|
if (pItem.showTime) {
|
||||||
return true
|
return true
|
||||||
}
|
} else if (pItem.author !== item.author) {
|
||||||
if (pItem.author !== item.author) {
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,7 +182,29 @@ JamiListView {
|
||||||
boundsBehavior: Flickable.StopAtBounds
|
boundsBehavior: Flickable.StopAtBounds
|
||||||
currentIndex: -1
|
currentIndex: -1
|
||||||
|
|
||||||
|
// This connection to dataChanged resolves the styling for
|
||||||
|
// messages before and after an erased message.
|
||||||
|
Connections {
|
||||||
|
target: MessagesAdapter.messageListModel
|
||||||
|
function onDataChanged(tl, br, roles) {
|
||||||
|
if (!(roles.includes(MessageList.Body) &&
|
||||||
|
roles.includes(MessageList.PreviousBodies))) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const staleIndex = proxyModel.mapFromSource(tl).row
|
||||||
|
var pItem = root.itemAtIndex(staleIndex - 1)
|
||||||
|
var nItem = root.itemAtIndex(staleIndex + 1)
|
||||||
|
var ppItem = root.itemAtIndex(staleIndex + 2)
|
||||||
|
var nnItem = root.itemAtIndex(staleIndex + 2)
|
||||||
|
computeTimestampVisibility(ppItem, staleIndex - 2, pItem, staleIndex - 1)
|
||||||
|
computeSequencing(ppItem, pItem, nItem)
|
||||||
|
computeTimestampVisibility(nItem, staleIndex + 1, nnItem, staleIndex + 2)
|
||||||
|
computeSequencing(pItem, nItem, nnItem)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
model: SortFilterProxyModel {
|
model: SortFilterProxyModel {
|
||||||
|
id: proxyModel
|
||||||
// There doesn't seem to a subscription to property change
|
// There doesn't seem to a subscription to property change
|
||||||
// events in the expression for sourceModel. This was originally
|
// events in the expression for sourceModel. This was originally
|
||||||
// masked behind an unchanging QSortFilterProxyModel object that
|
// masked behind an unchanging QSortFilterProxyModel object that
|
||||||
|
@ -213,7 +233,7 @@ JamiListView {
|
||||||
|
|
||||||
TextMessageDelegate {
|
TextMessageDelegate {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
computeChatview(this,index)
|
computeChatview(this, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,7 +243,7 @@ JamiListView {
|
||||||
|
|
||||||
GeneratedMessageDelegate {
|
GeneratedMessageDelegate {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
computeChatview(this,index)
|
computeChatview(this, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -233,7 +253,7 @@ JamiListView {
|
||||||
|
|
||||||
ContactMessageDelegate {
|
ContactMessageDelegate {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
computeChatview(this,index)
|
computeChatview(this, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -244,7 +264,7 @@ JamiListView {
|
||||||
GeneratedMessageDelegate {
|
GeneratedMessageDelegate {
|
||||||
font.bold: true
|
font.bold: true
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
computeChatview(this,index)
|
computeChatview(this, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +273,7 @@ JamiListView {
|
||||||
|
|
||||||
DataTransferMessageDelegate {
|
DataTransferMessageDelegate {
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
computeChatview(this,index)
|
computeChatview(this, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue