Changeset View
Changeset View
Standalone View
Standalone View
src/base/kazv-triggers.hpp
- This file was added.
| /* | |||||
| * This file is part of libkazv. | |||||
| * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe> | |||||
| * SPDX-License-Identifier: AGPL-3.0-or-later | |||||
| */ | |||||
| #pragma once | |||||
| #include "libkazv-config.hpp" | |||||
| #include <variant> | |||||
| #include "types.hpp" | |||||
| #include "event.hpp" | |||||
| #include "basejob.hpp" | |||||
| namespace Kazv | |||||
| { | |||||
| struct LoginSuccessful {}; | |||||
| struct LoginFailed | |||||
| { | |||||
| std::string errorCode; | |||||
| std::string error; | |||||
| }; | |||||
| struct ReceivingPresenceEvent { Event event; }; | |||||
| struct ReceivingAccountDataEvent { Event event; }; | |||||
| struct ReceivingRoomStateEvent { | |||||
| Event event; | |||||
| std::string roomId; | |||||
| }; | |||||
| struct ReceivingRoomTimelineEvent { | |||||
| Event event; | |||||
| std::string roomId; | |||||
| }; | |||||
| struct ReceivingRoomAccountDataEvent { | |||||
| Event event; | |||||
| std::string roomId; | |||||
| }; | |||||
| struct ReceivingToDeviceMessage | |||||
| { | |||||
| Event event; | |||||
| }; | |||||
| struct RoomMembershipChanged { | |||||
| RoomMembership membership; | |||||
| std::string roomId; | |||||
| }; | |||||
| /** | |||||
| * Indicate that there are events to be saved. | |||||
| */ | |||||
| struct SaveEventsRequested | |||||
| { | |||||
| /** | |||||
| * The events to be saved in the timeline. | |||||
| * The events saved in the timeline part of the storage can be considered continuous, i.e. they can be | |||||
| * loaded to fully re-construct the timeline. There can be gaps, | |||||
| * but all gaps are properly recorded in the client state so that | |||||
| * it can be easily paginated. | |||||
| */ | |||||
| immer::map<std::string /* roomId */, EventList> timelineEvents; | |||||
| /** | |||||
| * The events that should be saved, but not in the timeline. | |||||
| */ | |||||
| immer::map<std::string /* roomId */, EventList> nonTimelineEvents; | |||||
| }; | |||||
| struct UnrecognizedResponse | |||||
| { | |||||
| Response response; | |||||
| }; | |||||
| using KazvTrigger = std::variant< | |||||
| // use this for placeholder of "no events yet" | |||||
| // otherwise the first LoginSuccessful event cannot be detected | |||||
| std::monostate, | |||||
| // matrix events | |||||
| ReceivingPresenceEvent, | |||||
| ReceivingAccountDataEvent, | |||||
| ReceivingRoomTimelineEvent, | |||||
| ReceivingRoomStateEvent, | |||||
| RoomMembershipChanged, | |||||
| ReceivingRoomAccountDataEvent, | |||||
| ReceivingToDeviceMessage, | |||||
| // auth | |||||
| LoginSuccessful, LoginFailed, | |||||
| // storage | |||||
| SaveEventsRequested, | |||||
| // general | |||||
| UnrecognizedResponse | |||||
| >; | |||||
| using KazvEvent [[deprecated("renamed to KazvTrigger")]] = KazvTrigger; | |||||
| using KazvTriggerList = immer::flex_vector<KazvTrigger>; | |||||
| using KazvEventList [[deprecated("renamed to KazvTriggerList")]] = KazvTriggerList; | |||||
| } | |||||