aboutsummaryrefslogtreecommitdiff
path: root/lib/room.cpp
AgeCommit message (Collapse)Author
2022-02-27Apply suggestionsTobias Fella
2022-02-26Check that decrypted events are for the current roomTobias Fella
2022-02-13Merge branch 'dev'Alexey Rusakov
The result is FTBFS as yet; next commits will fix that, along with a few other things.
2022-02-12Replace QPair with std::pairTobias Fella
2022-02-11Implement more suggestionsTobias Fella
2022-01-23Refactor Room::setState()Alexey Rusakov
There are two important aspects here: - Introducing Room::setState(evtType, stateKey, contentJson). These components are ultimately what is getting sent to the homeserver, so it makes sense to expose a respective `setState()` overload. Unlike setState(event) the new overload can be Q_INVOKABLE. - Room::setState() is no more const. Although it doesn't cause any changes in Room class (and only transient changes in Room::Private), it ultimately initiates a change in the room state, so calling it const has always been a bit of hypocrisy. If you relied on that, you most likely do something wrong (see the fix to User::rename() in this very commit for a simple example of such wrongness). Also: the backend is simplified by calling the original templated Room::setState() instead of calling Room::Private::requestSetState() that does exactly the same thing.
2022-01-23RoomStateViewAlexey Rusakov
This class is called to provide an arbitrary snapshot of a room state; as the first step, Room::currentState() returns an instance of this class that stores, well, the current state. Implelementation-wise it's the same hash map of two-part state event keys to const event pointers; however, RoomStateView provides additional operations: - get(), that deprecates Room::getCurrentState(), returns a pointer to a particular event if the current state has it. Unlike the original method, the pointer returned from this one can be nullptr; this is done to get rid of stubbed state events that have to be created everytime a "state miss" occurred (i.e., when getCurrentState() does not find an existing event in the current state). - eventsOfType() - this is a new place for Room::stateEventsOfType() introduced recently. - query() - this is a way to specify a piece of the state content that you need to retrieve by passing a member function or a function object that retrieves it. That is especially convenient with member functions of the event class; just pass the pointer to this member function, and query() will parse the event type it has to retrieve out of it and call that member function on the event object. Returns an Omittable<>; if the respective piece of state doesn't exist, you'll get `Quotient::none` (the same as `std::nullopt`). - queryOr() - the same but with the fallback value; instead of an Omittable<>, the fallback value will be returned if the needed event is not found.
2022-01-21Redo EventRelation; deprecate RelatesToAlexey Rusakov
RelatesTo and EventRelation have been two means to the same end in two different contexts. (Modernised) EventRelation is the one used now both for ReactionEvent and EventContent::TextContent. The modernisation mostly boils down to using inline variables instead of functions to return relation types and switching to QLatin1String from const char* (because we know exactly that those constants are Latin-1 and QLatin1String is more efficient than const char* to compare/convert to QString).
2022-01-06Cleanup Room::pinnedEvents()Alexey Rusakov
Use 'auto'; range-for instead of an iterator loop.
2022-01-01OtherChange is Change::Other now Alexey Rusakov
`Room::Change` has been changed to be an enum class recently; and it's values are no more suffixed with `Change`.
2021-12-27Merge branch 'dev' into pinnedarawaaa
2021-12-10Remove data from database when leaving roomTobias Fella
2021-12-10Apply suggestions from code reviewTobias Fella
Co-authored-by: Alexey Rusakov <Kitsune-Ral@users.sf.net>
2021-12-10Use individual databases for each connectionTobias Fella
2021-12-09Ifdef all the thingsTobias Fella
2021-12-08Store encryptedevent in decrypted roomeventsTobias Fella
2021-12-07Maintain list of undecrypted events to speed up decryption of oldTobias Fella
messages
2021-12-07FixesTobias Fella
2021-12-07Rename "crypto" -> "e2ee"Tobias Fella
2021-12-07Port E2EE to database instead of JSON filesTobias Fella
2021-12-02visit(Event, ...) -> switchOnType()Alexey Rusakov
It has not much to do with the Visitor design pattern; also, std::visit() has different conventions on the order of parameters.
2021-12-01More improvementsTobias Fella
2021-12-01Apply even more suggestionsTobias Fella
2021-12-01Apply more suggestionsTobias Fella
2021-12-01Apply suggestions from code reviewTobias Fella
Co-authored-by: Alexey Rusakov <Kitsune-Ral@users.sf.net>
2021-12-01Use UnorderedMap instead of std::mapTobias Fella
2021-12-01Add function to decrypt notificationsTobias Fella
2021-12-01Move non-cache data to a non-cache locationTobias Fella
2021-12-01Various improvements and fixesTobias Fella
2021-12-01Try decrypting existing messages when a new key is addedTobias Fella
2021-12-01Add mxc protocol to the networkaccessmanagerTobias Fella
2021-12-01Handle encrypted file download through existing APITobias Fella
2021-12-01Implement download and decryption of encrypted filesTobias Fella
2021-12-01Store pickling key in qtkeychain and pickle encryptedTobias Fella
2021-12-01Various fixesTobias Fella
2021-12-01Implement (meg)olm key caching, megolm decrypting, EncryptedEventTobias Fella
decryption, handling of encrypted redactions and replies
2021-12-01Fix build without E2EETobias Fella
2021-12-01Fix setting encrypted flag in roomsCarl Schwan
2021-12-01Update tracked users list when new user joins encrypted roomTobias Fella
2021-12-01Start tracking user's devices when a a room starts being encryptedTobias Fella
2021-12-01Apply a few more commentsCarl Schwan
2021-12-01Apply suggestions from code reviewCarl Schwan
Co-authored-by: Nicolas Fella <6377822+nicolasfella@users.noreply.github.com>
2021-12-01E2EE: initial port to internal olm wrapperAlexey Andreyev
Remove qtolm git module. Update CMakeLists.txt. Rename olm to crypto subdir to prevent disambiguation. Rename internal files accordingly. Comment out not ported E2EE API usage.
2021-12-01Remove duplicated fileCarl Schwan
2021-11-29Track room stubbed state size in logsAlexey Rusakov
2021-11-27Code cleanupAlexey Rusakov
2021-11-27Event::content() -> contentPart()Alexey Rusakov
There's a clash between Event::content() (a template function) and RoomMessageEvent::content() (plain member). Out of these two, the name more fits to the RME's member function - strictly speaking, Event::content() retrieves a part of content, and so is renamed. In addition, contentPart() defaults to QJsonValue now, which is pretty intuitive (the function returns values from a JSON object) and allows to implement more elaborate logic such as if (const auto v = contentPart<>("key"_ls); v.isObject()) { // foo } else if (v.isString()) { // bar } else { // boo }
2021-11-27Merge pull request #518 from Smittyvb/room-stateEventsAlexey Rusakov
2021-11-26Add Room::{stateEventsOfType,currentState}Smitty
This is useful for implementing Spaces support, where all events of type `m.space.child` are needed, and we don't know their state keys in advance.
2021-11-26Fix crashing on invalid member and encryption eventsAlexey Rusakov
The problem is in Room::processStateEvent(): after potentially-inserting-nullptr into currentState, pre-check failure (that may occur on member and trigger events for now) leaves that nullptr in the hash map. Basically anything that uses currentState (e.g., Room::toJson) assumes that currentState has no nullptrs - which leads to either an assertion failure, or nullptr dereferencing. The fix removes the nullptr placeholder if the pre-checks failed.