Page MenuHomePhorge

D283.1771363556.diff
No OneTemporary

Size
37 KB
Referenced Files
None
Subscribers
None

D283.1771363556.diff

diff --git a/src/base/eventinterface.hpp b/src/base/eventinterface.hpp
--- a/src/base/eventinterface.hpp
+++ b/src/base/eventinterface.hpp
@@ -1,13 +1,13 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
#pragma once
#include "libkazv-config.hpp"
-#include "kazvevents.hpp"
+#include "kazv-triggers.hpp"
namespace Kazv
{
@@ -15,6 +15,6 @@
{
public:
virtual ~EventInterface() = default;
- virtual void emit(KazvEvent e) = 0;
+ virtual void emit(KazvTrigger e) = 0;
};
}
diff --git a/src/base/kazv-triggers.hpp b/src/base/kazv-triggers.hpp
new file mode 100644
--- /dev/null
+++ b/src/base/kazv-triggers.hpp
@@ -0,0 +1,104 @@
+/*
+ * 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;
+}
diff --git a/src/base/kazvevents.hpp b/src/base/kazvevents.hpp
--- a/src/base/kazvevents.hpp
+++ b/src/base/kazvevents.hpp
@@ -1,414 +1,7 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu
+ * SPDX-FileCopyrightText: 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 SyncSuccessful
- {
- std::string nextToken;
- };
-
- struct SyncFailed
- {
- };
-
- struct PostInitialFiltersSuccessful
- {
- };
-
- struct PostInitialFiltersFailed
- {
- 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;
- };
-
- struct PaginateSuccessful
- {
- std::string roomId;
- };
-
- struct PaginateFailed
- {
- std::string roomId;
- };
-
- struct CreateRoomSuccessful
- {
- std::string roomId;
- };
-
- struct CreateRoomFailed
- {
- std::string errorCode;
- std::string error;
- };
-
- struct InviteUserSuccessful
- {
- std::string roomId;
- std::string userId;
- };
-
- struct InviteUserFailed
- {
- std::string roomId;
- std::string userId;
- std::string errorCode;
- std::string error;
- };
-
- struct JoinRoomSuccessful
- {
- std::string roomIdOrAlias;
- };
-
- struct JoinRoomFailed
- {
- std::string roomIdOrAlias;
- std::string errorCode;
- std::string error;
- };
-
- struct LeaveRoomSuccessful
- {
- std::string roomId;
- };
-
- struct LeaveRoomFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct ForgetRoomSuccessful
- {
- std::string roomId;
- };
-
- struct ForgetRoomFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct SendMessageSuccessful
- {
- std::string roomId;
- std::string eventId;
- };
-
- struct SendMessageFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct SendToDeviceMessageSuccessful
- {
- immer::map<std::string, immer::flex_vector<std::string>> devicesToSend;
- std::string txnId;
- };
-
- struct SendToDeviceMessageFailed
- {
- immer::map<std::string, immer::flex_vector<std::string>> devicesToSend;
- std::string txnId;
- std::string errorCode;
- std::string error;
- };
-
- struct InvalidMessageFormat
- {
- };
-
- struct GetRoomStatesSuccessful
- {
- std::string roomId;
- };
-
- struct GetRoomStatesFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct GetStateEventSuccessful
- {
- std::string roomId;
- JsonWrap content;
- };
-
- struct GetStateEventFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct SendStateEventSuccessful
- {
- std::string roomId;
- std::string eventId;
- std::string eventType;
- std::string stateKey;
- };
-
- struct SendStateEventFailed
- {
- std::string roomId;
- std::string eventType;
- std::string stateKey;
- std::string errorCode;
- std::string error;
- };
-
- struct SetTypingSuccessful
- {
- std::string roomId;
- };
-
- struct SetTypingFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct PostReceiptSuccessful
- {
- std::string roomId;
- };
-
- struct PostReceiptFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct SetReadMarkerSuccessful
- {
- std::string roomId;
- };
-
- struct SetReadMarkerFailed
- {
- std::string roomId;
- std::string errorCode;
- std::string error;
- };
-
- struct UploadContentSuccessful
- {
- std::string mxcUri;
- std::string uploadId;
- };
-
- struct UploadContentFailed
- {
- std::string uploadId;
- std::string errorCode;
- std::string error;
- };
-
- struct DownloadContentSuccessful
- {
- std::string mxcUri;
- immer::box<Bytes> content;
- std::optional<std::string> filename;
- std::optional<std::string> contentType;
- };
-
- struct DownloadContentFailed
- {
- std::string mxcUri;
- std::string errorCode;
- std::string error;
- };
-
- struct DownloadThumbnailSuccessful
- {
- std::string mxcUri;
- immer::box<Bytes> content;
- std::optional<std::string> contentType;
- };
-
- struct DownloadThumbnailFailed
- {
- std::string mxcUri;
- std::string errorCode;
- std::string error;
- };
-
- struct UploadIdentityKeysSuccessful
- {
- };
-
- struct UploadIdentityKeysFailed
- {
- std::string errorCode;
- std::string error;
- };
-
- struct UploadOneTimeKeysSuccessful
- {
- };
-
- struct UploadOneTimeKeysFailed
- {
- std::string errorCode;
- std::string error;
- };
-
- struct ClaimKeysSuccessful
- {
- Event eventToSend;
- immer::map<std::string, immer::flex_vector<std::string>> devicesToSend;
- };
-
- struct ClaimKeysFailed
- {
- std::string errorCode;
- std::string error;
- };
-
- /**
- * 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;
- };
-
-
- struct ShouldQueryKeys
- {
- bool isInitialSync;
- };
-
- using KazvEvent = 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,
- // sync
- SyncSuccessful, SyncFailed,
- PostInitialFiltersSuccessful, PostInitialFiltersFailed,
- // paginate
- PaginateSuccessful, PaginateFailed,
- // membership
- CreateRoomSuccessful, CreateRoomFailed,
- InviteUserSuccessful, InviteUserFailed,
- JoinRoomSuccessful, JoinRoomFailed,
- LeaveRoomSuccessful, LeaveRoomFailed,
- ForgetRoomSuccessful, ForgetRoomFailed,
- // send
- SendMessageSuccessful, SendMessageFailed,
- SendToDeviceMessageSuccessful, SendToDeviceMessageFailed,
- InvalidMessageFormat,
- // states
- GetRoomStatesSuccessful, GetRoomStatesFailed,
- GetStateEventSuccessful, GetStateEventFailed,
- SendStateEventSuccessful, SendStateEventFailed,
- // ephemeral
- SetTypingSuccessful, SetTypingFailed,
- PostReceiptSuccessful, PostReceiptFailed,
- SetReadMarkerSuccessful, SetReadMarkerFailed,
- // content
- UploadContentSuccessful, UploadContentFailed,
- DownloadContentSuccessful, DownloadContentFailed,
- DownloadThumbnailSuccessful, DownloadThumbnailFailed,
- // encryption
- UploadIdentityKeysSuccessful, UploadIdentityKeysFailed,
- UploadOneTimeKeysSuccessful, UploadOneTimeKeysFailed,
- ClaimKeysSuccessful, ClaimKeysFailed,
- // storage
- SaveEventsRequested,
-
- // general
- UnrecognizedResponse,
- ShouldQueryKeys
-
- >;
-
- using KazvEventList = immer::flex_vector<KazvEvent>;
-}
+#include "kazv-triggers.hpp"
diff --git a/src/client/actions/content.cpp b/src/client/actions/content.cpp
--- a/src/client/actions/content.cpp
+++ b/src/client/actions/content.cpp
@@ -35,8 +35,7 @@
ClientResult updateClient(ClientModel m, UploadContentAction a)
{
auto job = m.job<UploadContentJob>()
- .make(a.content, a.filename, a.contentType)
- .withData(json{ {"uploadId", a.uploadId} });
+ .make(a.content, a.filename, a.contentType);
m.addJob(std::move(job));
return { std::move(m), lager::noop };
@@ -44,13 +43,10 @@
ClientResult processResponse(ClientModel m, UploadContentResponse r)
{
- auto uploadId = r.dataStr("uploadId");
if (! r.success()) {
- m.addTrigger(UploadContentFailed{uploadId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
auto mxcUri = r.contentUri();
- m.addTrigger(UploadContentSuccessful{mxcUri, uploadId});
return {
std::move(m),
[=](auto &&) {
diff --git a/src/client/actions/encryption.cpp b/src/client/actions/encryption.cpp
--- a/src/client/actions/encryption.cpp
+++ b/src/client/actions/encryption.cpp
@@ -134,24 +134,19 @@
if (is == "identityKeys") {
if (! r.success()) {
kzo.client.dbg() << "Uploading identity keys failed" << std::endl;
- m.addTrigger(UploadIdentityKeysFailed{r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
kzo.client.dbg() << "Uploading identity keys successful" << std::endl;
- m.addTrigger(UploadIdentityKeysSuccessful{});
m.identityKeysUploaded = true;
} else {
if (! r.success()) {
kzo.client.dbg() << "Uploading one-time keys failed" << std::endl;
- m.addTrigger(UploadOneTimeKeysFailed{r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
kzo.client.dbg() << "Uploading one-time keys successful" << std::endl;
- m.addTrigger(UploadOneTimeKeysSuccessful{});
-
m.withCrypto([&](auto &c) { c.markOneTimeKeysAsPublished(); });
}
@@ -555,7 +550,6 @@
if (! r.success()) {
kzo.client.dbg() << "claim keys failed" << std::endl;
- m.addTrigger(ClaimKeysFailed{r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
diff --git a/src/client/actions/ephemeral.cpp b/src/client/actions/ephemeral.cpp
--- a/src/client/actions/ephemeral.cpp
+++ b/src/client/actions/ephemeral.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu <tusooa@kazv.moe>
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -29,13 +29,9 @@
{
auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(SetTypingFailed{roomId, r.errorCode(), r.errorMessage()});
-
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(SetTypingSuccessful{roomId});
-
return { std::move(m), lager::noop };
}
@@ -63,13 +59,9 @@
{
auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(PostReceiptFailed{roomId, r.errorCode(), r.errorMessage()});
-
return { std::move(m), lager::noop };
}
- m.addTrigger(PostReceiptSuccessful{roomId});
-
return { std::move(m), lager::noop };
}
@@ -87,15 +79,9 @@
ClientResult processResponse(ClientModel m, SetReadMarkerResponse r)
{
- auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(SetReadMarkerFailed{roomId, r.errorCode(), r.errorMessage()});
-
return { std::move(m), lager::noop };
}
-
- m.addTrigger(SetReadMarkerSuccessful{roomId});
-
return { std::move(m), lager::noop };
}
}
diff --git a/src/client/actions/membership.cpp b/src/client/actions/membership.cpp
--- a/src/client/actions/membership.cpp
+++ b/src/client/actions/membership.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu <tusooa@kazv.moe>
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -89,11 +89,9 @@
{
if (! r.success()) {
kzo.client.dbg() << "Create room failed" << std::endl;
- m.addTrigger(CreateRoomFailed{r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(CreateRoomSuccessful{r.roomId()});
return { std::move(m), [=](auto &&) {
return EffectStatus(/* succ = */ true, json{
{"roomId", r.roomId()},
@@ -123,12 +121,10 @@
// Error
kzo.client.warn() << "Error inviting user " << r.errorCode() << r.errorMessage() << std::endl;
- m.addTrigger(InviteUserFailed{roomId, userId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
kzo.client.info() << "Inviting user successful" << std::endl;
- m.addTrigger(InviteUserSuccessful{roomId, userId});
return { std::move(m), lager::noop };
}
@@ -152,17 +148,11 @@
{
auto roomIdOrAlias = r.dataStr("roomIdOrAlias");
if (! r.success()) {
- m.addTrigger(JoinRoomFailed{
- roomIdOrAlias,
- r.errorCode(),
- r.errorMessage()
- });
kzo.client.warn() << "Error joining room" << r.errorCode() << r.errorMessage() << std::endl;
return { std::move(m), failWithResponse(r) };
}
kzo.client.info() << "Successfully joined room" << std::endl;
- m.addTrigger(JoinRoomSuccessful{roomIdOrAlias});
return { std::move(m), lager::noop};
}
@@ -180,18 +170,11 @@
{
auto roomIdOrAlias = r.dataStr("roomIdOrAlias");
if (! r.success()) {
- m.addTrigger(JoinRoomFailed{
- roomIdOrAlias,
- r.errorCode(),
- r.errorMessage()
- });
-
kzo.client.warn() << "Error joining room" << r.errorCode() << r.errorMessage() << std::endl;
return { std::move(m), failWithResponse(r) };
}
kzo.client.info() << "Successfully joined room" << std::endl;
- m.addTrigger(JoinRoomSuccessful{roomIdOrAlias});
return { std::move(m), lager::noop};
}
@@ -209,17 +192,11 @@
{
auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(LeaveRoomFailed{
- roomId,
- r.errorCode(),
- r.errorMessage()
- });
kzo.client.warn() << "Error leaving room" << r.errorCode() << r.errorMessage() << std::endl;
return { std::move(m), failWithResponse(r) };
}
kzo.client.info() << "Successfully left room" << std::endl;
- m.addTrigger(LeaveRoomSuccessful{roomId});
return { std::move(m), lager::noop};
}
@@ -237,17 +214,11 @@
{
auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(ForgetRoomFailed{
- roomId,
- r.errorCode(),
- r.errorMessage()
- });
kzo.client.warn() << "Error forgetting room" << r.errorCode() << r.errorMessage() << std::endl;
return { std::move(m), failWithResponse(r) };
}
kzo.client.info() << "Successfully forgot room" << std::endl;
- m.addTrigger(ForgetRoomSuccessful{roomId});
return { std::move(m), lager::noop};
}
diff --git a/src/client/actions/paginate.cpp b/src/client/actions/paginate.cpp
--- a/src/client/actions/paginate.cpp
+++ b/src/client/actions/paginate.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -56,7 +56,6 @@
if (! r.success()) {
kzo.client.dbg() << "Get room events failed" << std::endl;
- m.addTrigger(PaginateFailed{roomId});
return { m, failWithResponse(r) };
}
@@ -94,8 +93,6 @@
r.state()
}});
- m.addTrigger(PaginateSuccessful{roomId});
-
return { std::move(m), lager::noop };
} catch (const std::out_of_range &e) {
// Ignore it, the client model is modified
diff --git a/src/client/actions/send.cpp b/src/client/actions/send.cpp
--- a/src/client/actions/send.cpp
+++ b/src/client/actions/send.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu <tusooa@kazv.moe>
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -24,8 +24,10 @@
auto origJson = event.originalJson().get();
if (!origJson.contains("type") || !origJson.contains("content")) {
- m.addTrigger(InvalidMessageFormat{});
- return { std::move(m), lager::noop };
+ return { std::move(m), failEffect(
+ "MOE.KAZV.MXC.INVALID_MESSAGE_FORMAT",
+ "Invalid message format"
+ ) };
}
if (m.roomList.rooms[a.roomId].encrypted && !event.encrypted()) {
@@ -91,11 +93,9 @@
localEcho.status = LocalEchoDesc::Failed;
return RoomModel::update(std::move(room), AddLocalEchoAction{localEcho});
});
- m.addTrigger(SendMessageFailed{roomId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(SendMessageSuccessful{roomId, r.eventId()});
return { std::move(m), lager::noop };
}
@@ -211,11 +211,9 @@
auto txnId = r.dataStr("txnId");
if (! r.success()) {
- m.addTrigger(SendToDeviceMessageFailed{devicesToSend, txnId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(SendToDeviceMessageSuccessful{devicesToSend, txnId});
return { std::move(m), lager::noop };
}
diff --git a/src/client/actions/states.cpp b/src/client/actions/states.cpp
--- a/src/client/actions/states.cpp
+++ b/src/client/actions/states.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -37,12 +37,9 @@
auto roomId = r.dataStr("roomId");
if (! r.success()) {
- m.addTrigger(GetRoomStatesFailed{roomId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(GetRoomStatesSuccessful{roomId});
-
auto events = r.data();
auto action = UpdateRoomAction{
@@ -57,8 +54,6 @@
m.roomList = RoomListModel::update(std::move(m.roomList),
UpdateRoomAction{roomId, MarkMembersFullyLoadedAction{}});
- //m.addTrigger(ShouldQueryKeys{false});
-
return {std::move(m), lager::noop};
}
@@ -84,14 +79,11 @@
auto stateKey = r.dataStr("stateKey");
if (! r.success()) {
- m.addTrigger(GetStateEventFailed{roomId, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
auto content = r.jsonBody();
- m.addTrigger(GetStateEventSuccessful{roomId, content});
-
auto k = KeyOfState{type, stateKey};
auto eventJson = m.roomList[roomId].stateEvents[k]
@@ -117,8 +109,10 @@
auto event = a.event;
if (event.type() == ""s) {
- m.addTrigger(InvalidMessageFormat{});
- return { std::move(m), lager::noop };
+ return { std::move(m), failEffect(
+ "MOE.KAZV.MXC.INVALID_MESSAGE_FORMAT",
+ "Invalid message format"
+ ) };
}
auto type = event.type();
@@ -154,12 +148,9 @@
if (! r.success()) {
kzo.client.dbg() << "Send state event failed" << std::endl;
- m.addTrigger(SendStateEventFailed{roomId, eventType, stateKey, r.errorCode(), r.errorMessage()});
return { std::move(m), failWithResponse(r) };
}
- m.addTrigger(SendStateEventSuccessful{roomId, r.eventId(), eventType, stateKey});
-
return { std::move(m), lager::noop };
}
}
diff --git a/src/client/actions/sync.cpp b/src/client/actions/sync.cpp
--- a/src/client/actions/sync.cpp
+++ b/src/client/actions/sync.cpp
@@ -55,10 +55,10 @@
}
- static KazvEventList loadRoomsFromSyncInPlace(ClientModel &m, SyncJob::Rooms rooms)
+ static KazvTriggerList loadRoomsFromSyncInPlace(ClientModel &m, SyncJob::Rooms rooms)
{
auto l = std::move(m.roomList);
- auto eventsToEmit = KazvEventList{}.transient();
+ auto eventsToEmit = KazvTriggerList{}.transient();
auto pushRules = PushRulesDesc(m.accountData["m.push_rules"]);
@@ -84,8 +84,8 @@
room.timeline.events);
eventsToEmit.append(
intoImmer(
- KazvEventList{},
- zug::map([=](Event e) -> KazvEvent {
+ KazvTriggerList{},
+ zug::map([=](Event e) -> KazvTrigger {
return ReceivingRoomTimelineEvent{std::move(e), id};
}),
timelineEvents).transient());
@@ -97,8 +97,8 @@
if (room.state) {
eventsToEmit.append(
intoImmer(
- KazvEventList{},
- zug::map([=](Event e) -> KazvEvent {
+ KazvTriggerList{},
+ zug::map([=](Event e) -> KazvTrigger {
return ReceivingRoomStateEvent{std::move(e), id};
}),
room.state.value().events).transient());
@@ -117,8 +117,8 @@
if (room.accountData) {
eventsToEmit.append(
intoImmer(
- KazvEventList{},
- zug::map([=](Event e) -> KazvEvent {
+ KazvTriggerList{},
+ zug::map([=](Event e) -> KazvTrigger {
return ReceivingRoomAccountDataEvent{std::move(e), id};
}),
room.accountData.value().events).transient());
@@ -198,27 +198,27 @@
return eventsToEmit.persistent();
}
- static KazvEventList loadPresenceFromSyncInPlace(ClientModel &m, EventList presence)
+ static KazvTriggerList loadPresenceFromSyncInPlace(ClientModel &m, EventList presence)
{
auto eventsToEmit = intoImmer(
- KazvEventList{},
+ KazvTriggerList{},
zug::map([](Event e) { return ReceivingPresenceEvent{e}; }),
presence);
m.presence = merge(std::move(m.presence), presence, keyOfPresence);
return eventsToEmit;
}
- static KazvEventList loadAccountDataFromSyncInPlace(ClientModel &m, EventList accountData)
+ static KazvTriggerList loadAccountDataFromSyncInPlace(ClientModel &m, EventList accountData)
{
auto eventsToEmit = intoImmer(
- KazvEventList{},
+ KazvTriggerList{},
zug::map([](Event e) { return ReceivingPresenceEvent{e}; }),
accountData);
m.accountData = merge(std::move(m.accountData), accountData, keyOfAccountData);
return eventsToEmit;
}
- static KazvEventList loadToDeviceFromSyncInPlace(ClientModel &m, JsonWrap toDevice)
+ static KazvTriggerList loadToDeviceFromSyncInPlace(ClientModel &m, JsonWrap toDevice)
{
if (toDevice.get().contains("events")) {
auto events = toDevice.get()["events"];
@@ -234,7 +234,7 @@
m.toDevice = std::move(m.toDevice) + msgs;
return intoImmer(
- KazvEventList{},
+ KazvTriggerList{},
zug::map([](Event e) { return ReceivingToDeviceMessage{e}; }),
msgs);
}
@@ -244,7 +244,6 @@
ClientResult processResponse(ClientModel m, SyncResponse r)
{
if (! r.success()) {
- m.addTrigger(SyncFailed{});
kzo.client.dbg() << "Sync failed" << std::endl;
kzo.client.dbg() << r.statusCode << std::endl;
if (isBodyJson(r.body)) {
@@ -321,8 +320,6 @@
m = std::move(model);
}
- m.addTrigger(SyncSuccessful{r.nextBatch()});
-
return { std::move(m), lager::noop };
}
@@ -366,7 +363,6 @@
if (! r.success()) {
m.syncing = false;
kzo.client.dbg() << "posting filter failed: " << r.errorCode() << r.errorMessage() << std::endl;
- m.addTrigger(PostInitialFiltersFailed{r.errorCode(), r.errorMessage()});
return { std::move(m), lager::noop };
}
@@ -374,7 +370,6 @@
if (is == "incrementalSyncFilter") {
m.incrementalSyncFilterId = r.filterId();
- m.addTrigger(PostInitialFiltersSuccessful{});
} else {
m.initialSyncFilterId = r.filterId();
}
diff --git a/src/client/client-model.hpp b/src/client/client-model.hpp
--- a/src/client/client-model.hpp
+++ b/src/client/client-model.hpp
@@ -79,7 +79,7 @@
std::string nextTxnId{DEFTXNID};
immer::flex_vector<BaseJob> nextJobs;
- immer::flex_vector<KazvEvent> nextTriggers;
+ immer::flex_vector<KazvTrigger> nextTriggers;
EventList toDevice;
std::optional<immer::box<Crypto>> crypto;
@@ -179,11 +179,11 @@
return jobs;
};
- inline void addTrigger(KazvEvent t) {
+ inline void addTrigger(KazvTrigger t) {
addTriggers({t});
}
- inline void addTriggers(immer::flex_vector<KazvEvent> c) {
+ inline void addTriggers(immer::flex_vector<KazvTrigger> c) {
nextTriggers = std::move(nextTriggers) + c;
}
diff --git a/src/client/clientfwd.hpp b/src/client/clientfwd.hpp
--- a/src/client/clientfwd.hpp
+++ b/src/client/clientfwd.hpp
@@ -42,7 +42,6 @@
struct GetStateEventAction;
struct InviteToRoomAction;
struct JoinRoomByIdAction;
- struct EmitKazvEventsAction;
struct JoinRoomAction;
struct LeaveRoomAction;
struct ForgetRoomAction;
diff --git a/src/eventemitter/lagerstoreeventemitter.hpp b/src/eventemitter/lagerstoreeventemitter.hpp
--- a/src/eventemitter/lagerstoreeventemitter.hpp
+++ b/src/eventemitter/lagerstoreeventemitter.hpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -24,19 +24,19 @@
{
class LagerStoreEventEmitter : public EventInterface
{
- struct Model { KazvEvent curEvent; };
- struct Action { KazvEvent nextEvent; };
+ struct Model { KazvTrigger curEvent; };
+ struct Action { KazvTrigger nextEvent; };
struct ListenerHolder;
using Result = std::pair<Model,
lager::effect<Action, lager::deps<ListenerHolder &>>>;
- using SlotT = std::function<void(KazvEvent)>;
+ using SlotT = std::function<void(KazvTrigger)>;
struct Listener
{
- void emit(KazvEvent e) {
+ void emit(KazvTrigger e) {
for (const auto &slot: m_slots) {
slot(e);
}
@@ -54,7 +54,7 @@
struct ListenerHolder
{
- void sendToListeners(KazvEvent e) {
+ void sendToListeners(KazvTrigger e) {
bool needsCleanup = false;
for (auto listener : m_listeners) {
auto strongListener = listener.lock();
@@ -104,7 +104,7 @@
}) {}
~LagerStoreEventEmitter() override = default;
- void emit(KazvEvent e) override {
+ void emit(KazvTrigger e) override {
m_store.dispatch(Action{e});
}
@@ -118,7 +118,7 @@
template<class EventType, class Func>
void after(Func &&func) {
m_listener->connect(
- [f=std::forward<Func>(func)](KazvEvent e) {
+ [f=std::forward<Func>(func)](KazvTrigger e) {
if (std::holds_alternative<EventType>(e)) {
f(std::get<EventType>(e));
}
@@ -128,7 +128,7 @@
template<class Func>
void afterAll(Func &&func) {
m_listener->connect(
- [f=std::forward<Func>(func)](KazvEvent e) {
+ [f=std::forward<Func>(func)](KazvTrigger e) {
f(e);
});
}
diff --git a/src/tests/client/storage-actions-test.cpp b/src/tests/client/storage-actions-test.cpp
--- a/src/tests/client/storage-actions-test.cpp
+++ b/src/tests/client/storage-actions-test.cpp
@@ -67,7 +67,7 @@
REQUIRE(room.reverseEventRelationships.count(existingEvents[0].id()));
// should not give out any SaveEventsRequested triggers
- REQUIRE_THAT(next.nextTriggers, NoneMatch(Predicate<KazvEvent>([](const auto &t) {
+ REQUIRE_THAT(next.nextTriggers, NoneMatch(Predicate<KazvTrigger>([](const auto &t) {
return std::holds_alternative<SaveEventsRequested>(t);
})));
}
diff --git a/src/tests/client/sync-test.cpp b/src/tests/client/sync-test.cpp
--- a/src/tests/client/sync-test.cpp
+++ b/src/tests/client/sync-test.cpp
@@ -448,7 +448,7 @@
return std::any_of(
nextTriggers.begin(),
nextTriggers.end(),
- [=](const KazvEvent &t) {
+ [=](const KazvTrigger &t) {
if (!std::holds_alternative<ReceivingRoomAccountDataEvent>(t)) {
return false;
}
diff --git a/src/tests/event-emitter-test.cpp b/src/tests/event-emitter-test.cpp
--- a/src/tests/event-emitter-test.cpp
+++ b/src/tests/event-emitter-test.cpp
@@ -1,6 +1,6 @@
/*
* This file is part of libkazv.
- * SPDX-FileCopyrightText: 2020 Tusooa Zhu <tusooa@kazv.moe>
+ * SPDX-FileCopyrightText: 2020-2026 tusooa <tusooa@kazv.moe>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
@@ -26,14 +26,14 @@
auto watchable = ee.watchable();
int counter = 0;
- watchable.after<SyncSuccessful>(
+ watchable.after<ReceivingPresenceEvent>(
[&](auto) {
++counter;
});
SECTION("Event handlers should be run properly") {
- ee.emit(SyncSuccessful{});
- ee.emit(SyncFailed{});
+ ee.emit(ReceivingPresenceEvent{Event()});
+ ee.emit(ReceivingRoomTimelineEvent{Event(), ""});
ioContext.run();
@@ -42,7 +42,7 @@
SECTION("Event handlers should be called when every event fires off") {
for (int i = 0; i < 100; ++i) {
- ee.emit(SyncSuccessful{});
+ ee.emit(ReceivingPresenceEvent{Event()});
}
ioContext.run();
@@ -56,22 +56,22 @@
auto guard = boost::asio::make_work_guard(ioContext.get_executor());
auto thread = std::thread([&] { ioContext.run(); });
- ee.emit(SyncFailed{});
+ ee.emit(ReceivingRoomTimelineEvent{});
std::this_thread::sleep_for(std::chrono::milliseconds{100});
{
auto watchable2 = ee.watchable();
- watchable2.after<SyncFailed>(
+ watchable2.after<ReceivingRoomTimelineEvent>(
[&](auto) {
++counter2;
});
- ee.emit(SyncSuccessful{});
- ee.emit(SyncFailed{});
+ ee.emit(ReceivingRoomTimelineEvent{});
+ ee.emit(ReceivingPresenceEvent{});
std::this_thread::sleep_for(std::chrono::milliseconds{100});
}
- ee.emit(SyncFailed{});
+ ee.emit(ReceivingRoomTimelineEvent{});
guard.reset();

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 17, 1:25 PM (21 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1113021
Default Alt Text
D283.1771363556.diff (37 KB)

Event Timeline