Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F43098560
D283.1771363556.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
37 KB
Referenced Files
None
Subscribers
None
D283.1771363556.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D283: [Breaking] Remove legacy trigger types
Attached
Detach File
Event Timeline
Log In to Comment