Fix TimelineEnd/TimelineBeginning models properly this time

Amends 3b00e14a9d with a fix that's more
sensible, as we need to take into account the various checks before
mindlessly inserting roles.
This commit is contained in:
Joshua Goins
2026-02-21 11:53:47 -05:00
parent b7688d4373
commit a27c8971b9

View File

@@ -79,9 +79,10 @@ void TimelineBeginningModel::setRoom(NeoChatRoom *room)
if (m_room != nullptr) { if (m_room != nullptr) {
Quotient::connectUntil(m_room.get(), &Quotient::Room::eventsHistoryJobChanged, this, [this]() { Quotient::connectUntil(m_room.get(), &Quotient::Room::eventsHistoryJobChanged, this, [this]() {
if (m_room && m_room->allHistoryLoaded()) { if (m_room && m_room->allHistoryLoaded()) {
Q_EMIT dataChanged(index(0, 0), index(0, 0), {DelegateTypeRole}); if (!m_room->successorId().isEmpty()) {
beginInsertRows({}, 1, 1); beginInsertRows({}, 1, 1);
endInsertRows(); endInsertRows();
}
return true; return true;
} }
return false; return false;
@@ -147,14 +148,16 @@ void TimelineEndModel::setRoom(NeoChatRoom *room)
m_room = room; m_room = room;
if (m_room != nullptr) { if (m_room != nullptr) {
connect(m_room, &Quotient::Room::eventsHistoryJobChanged, this, [this]() { Quotient::connectUntil(m_room.get(), &Quotient::Room::eventsHistoryJobChanged, this, [this]() {
if (m_room->allHistoryLoaded()) { if (m_room && m_room->allHistoryLoaded()) {
// HACK: We have to do it this way because DelegateChooser doesn't update dynamically. Q_EMIT dataChanged(index(0, 0), index(0, 0), {DelegateTypeRole});
beginRemoveRows({}, 0, 0); if (!m_room->predecessorId().isEmpty()) {
endRemoveRows(); beginInsertRows({}, 1, 1);
beginInsertRows({}, 0, 0); endInsertRows();
endInsertRows(); }
return true;
} }
return false;
}); });
} }
@@ -171,9 +174,8 @@ QVariant TimelineEndModel::data(const QModelIndex &idx, int role) const
if (role == DelegateTypeRole) { if (role == DelegateTypeRole) {
if (idx.row() == 1 || rowCount() == 1) { if (idx.row() == 1 || rowCount() == 1) {
return m_room->allHistoryLoaded() ? DelegateType::TimelineEnd : DelegateType::Loading; return m_room->allHistoryLoaded() ? DelegateType::TimelineEnd : DelegateType::Loading;
} else {
return DelegateType::Predecessor;
} }
return DelegateType::Predecessor;
} }
if (role == MessageModel::RoomRole) { if (role == MessageModel::RoomRole) {