Init scroll to eventid.

square-messages
Black Hat 2018-10-22 09:48:37 +08:00
parent ffbfa977b5
commit fce213a432
6 changed files with 25 additions and 5 deletions

View File

@ -29,10 +29,8 @@ Page {
anchors.fill: parent
RoomListPanel {
// Layout.fillHeight: true
width: page.width * 0.35
Layout.minimumWidth: 64
// Layout.maximumWidth: 360
id: roomListForm
@ -47,18 +45,21 @@ Page {
z: source.z - 1
source: parent
elevation: 2
elevation: 4
}
}
RoomPanel {
Layout.fillWidth: true
Layout.minimumWidth: 360
// Layout.fillHeight: true
Layout.minimumWidth: 480
id: roomForm
currentRoom: roomListForm.enteredRoom
}
}
function goToEvent(eventID) {
roomForm.goToEvent(eventID)
}
}

View File

@ -40,4 +40,10 @@ RoomPanelForm {
}
goTopFab.onClicked: messageListView.positionViewAtBeginning()
function goToEvent(eventID) {
var index = messageEventModel.eventIDToIndex(eventID)
if (index === -1) return
messageListView.currentIndex = sortedMessageEventModel.mapFromSource(index)
}
}

View File

@ -22,6 +22,7 @@ Item {
property alias roomHeader: roomHeader
property alias messageListView: messageListView
property alias goTopFab: goTopFab
property alias messageEventModel: messageEventModel
property alias sortedMessageEventModel: sortedMessageEventModel
property alias roomDrawer: roomDrawer

View File

@ -55,6 +55,7 @@ ApplicationWindow {
onNotificationClicked: {
roomPage.enteredRoom = currentConnection.room(roomId)
roomPage.goToEvent(eventId)
showWindow()
}
onErrorOccured: {

View File

@ -470,3 +470,12 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
return {};
}
int MessageEventModel::eventIDToIndex(const QString& eventID) {
const auto it = m_currentRoom->findInTimeline(eventID);
if (it == m_currentRoom->timelineEdge()) {
qWarning() << "Trying to find inexistent event:" << eventID;
return -1;
}
return it - m_currentRoom->messageEvents().rbegin() + timelineBaseIndex();
}

View File

@ -45,6 +45,8 @@ class MessageEventModel : public QAbstractListModel {
int role = Qt::DisplayRole) const override;
QHash<int, QByteArray> roleNames() const override;
Q_INVOKABLE int eventIDToIndex(const QString& eventID);
private slots:
int refreshEvent(const QString& eventId);
void refreshRow(int row);