aboutsummaryrefslogtreecommitdiff
path: root/room.h
AgeCommit message (Collapse)Author
2016-10-21Room::markMessagesAsRead correctly handles local user's messages nowKitsune Ral
setLastReadEvent() is called in any case (read marks a stored in a hashmap so it's a constant time operation anyway); postReceipt() is now called for the nearest previous non-local message.
2016-10-20Room: added setLastReadEvent accessor and a signal for it; don't post ↵Kitsune Ral
receipts for own messages to the server As discussed with Matthew in #quaternion: https://matrix.to/#/!PCzUtxtOjUySxSelof:matrix.org/$14768896199130qcJqe:matrix.org
2016-10-07Fixed massive leaks of Event objectsKitsune Ral
2016-09-16Group processing of state events as wellKitsune Ral
2016-09-16Room: change the way messages are orderedKitsune Ral
This replaces the one-by-one timestamp-ordering algorithm of adding new messages with copying the whole group of just-arrived messages to either the beginning or the end of the timeline. Since origin timestamps do not provide a reasonable order, findInsertionPos() is entirely deleted. processMessageEvent() is replaced by two functions: addNewMessageEvents() appends at messageEvents.end() while addHistoricalMessageEvents() inserts them at messageEvents.begin(). There's no official way to insert messages in the middle; cases when getPreviousContent() is called in parallel or a RoomMessagesJob runs on a gap somewhere in the middle of the timeline weren't considered before this commit and aren't considered in it. The new ordering requires you to understand where you have got your events from (or rather, where you want to insert them). In particular, updateData() that processes /sync results uses addNewMessageEvents(); getPreviousContent() calls addHistoricalMessageEvents(). In order to notify clients, a single newMessages() signal gives way to 3 new signals: 2 aboutToAdd*Messages() and a common addedMessages(). In addition, clients can derive from Room and use doAdd*Messages() virtual functions to alter/extend the behaviour.
2016-09-14Room::messageEvents: switch to an alias instead of explicit QList<>Kitsune Ral
To facilitate a possible change of a container type.
2016-08-31Room: Drop unused codeKitsune Ral
2016-08-23Fix compilation with Qt 5.2.1Kitsune Ral
2016-07-29Added roomMembername() overload for userId, in addition to User*Kitsune Ral
2016-05-02Actually connect User::nameChanged to Room; make a new Room::memberRenamed ↵Kitsune Ral
signal, which clients should use in the room context. Processing changes of user displaynames is tricky: we have to not only deal with the currently renamed user but also with its past and new namesakes which might change representation due to that renaming. So in the worst case a single User::nameChanged signal may lead to three Room::memberRenamed references (and 3 user displaynames updated in the UI, respectively). And the newly added users should be taken care of in a similar manner, of course.
2016-05-02Calculate room displayname according to CS spec, with a new signal fired on ↵Kitsune Ral
a displayname update. This changes the way displayname is supplied to a client application - instead of calculating immediately, displayname becomes a separate stored value that is refreshed with every change of the list of members, or the name, or the canonical alias. displaynameChanged signal is supplied to subscribe to these updates: in case of displaying a room in the roomlist a client should use this new signal instead of Room::namesChanged. The displaname calculation algorithm is described in section 11.2.2.5 of the CS spec: https://matrix.org/docs/spec/r0.0.1/client_server.html#calculating-the-display-name-for-a-room
2016-05-02Introduced Room::roomMemberName(User*) that follows CS spec section 11.2.2.3Kitsune Ral
2016-05-02Change the way room members are stored to the one recommended by the CS spec.Kitsune Ral
According to section 11.2.2.3 of the CS spec, clients SHOULD follow a certain algorithm of making a non-ambiguous display name of a user in the room context. This algorithm implies checking whether other room members have the same display name. This commit prepares for implementation of the algorithm: 1. Use a hash map instead of a list to store room members. The external Room::users() API is kept intact. 2. Convenience CRUD methods are implemented to deal with the hash map. 3. An additional slot for user renaming is introduced (because renaming affects the hash map). Binding of actual signals is left for the next commit. 4. nullptr is the recommended representation of a null pointer since C++11. Use that and mandate compiler support of that.
2016-05-02Store left room members as well.Kitsune Ral
In particular, this will be needed to render room names according to the CS spec.
2016-04-23Room: Q_INVOKABLEDavid A Roberts
2016-04-08Rename Room::messages to Room::messageEventsKitsune Ral
Originally by Felx Rohrbach (kde@fxrh.de)
2016-04-05Imported the current source tree from Quaternion/lib.Kitsune Ral