Changeset View
Changeset View
Standalone View
Standalone View
src/client/actions/states.cpp
| /* | /* | ||||
| * This file is part of libkazv. | * 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 | * SPDX-License-Identifier: AGPL-3.0-or-later | ||||
| */ | */ | ||||
| #include <libkazv-config.hpp> | #include <libkazv-config.hpp> | ||||
| #include <debug.hpp> | #include <debug.hpp> | ||||
| Show All 20 Lines | ClientResult updateClient(ClientModel m, GetRoomStatesAction a) | ||||
| return { std::move(m), lager::noop }; | return { std::move(m), lager::noop }; | ||||
| } | } | ||||
| ClientResult processResponse(ClientModel m, GetRoomStateResponse r) | ClientResult processResponse(ClientModel m, GetRoomStateResponse r) | ||||
| { | { | ||||
| auto roomId = r.dataStr("roomId"); | auto roomId = r.dataStr("roomId"); | ||||
| if (! r.success()) { | if (! r.success()) { | ||||
| m.addTrigger(GetRoomStatesFailed{roomId, r.errorCode(), r.errorMessage()}); | |||||
| return { std::move(m), failWithResponse(r) }; | return { std::move(m), failWithResponse(r) }; | ||||
| } | } | ||||
| m.addTrigger(GetRoomStatesSuccessful{roomId}); | |||||
| auto events = r.data(); | auto events = r.data(); | ||||
| auto action = UpdateRoomAction{ | auto action = UpdateRoomAction{ | ||||
| roomId, | roomId, | ||||
| AddStateEventsAction{std::move(events)} | AddStateEventsAction{std::move(events)} | ||||
| }; | }; | ||||
| m.roomList = RoomListModel::update(std::move(m.roomList), action); | m.roomList = RoomListModel::update(std::move(m.roomList), action); | ||||
| if (m.crypto && m.roomList[roomId].encrypted) { | if (m.crypto && m.roomList[roomId].encrypted) { | ||||
| m.deviceLists.track(m.roomList[roomId].joinedMemberIds()); | m.deviceLists.track(m.roomList[roomId].joinedMemberIds()); | ||||
| } | } | ||||
| m.roomList = RoomListModel::update(std::move(m.roomList), | m.roomList = RoomListModel::update(std::move(m.roomList), | ||||
| UpdateRoomAction{roomId, MarkMembersFullyLoadedAction{}}); | UpdateRoomAction{roomId, MarkMembersFullyLoadedAction{}}); | ||||
| //m.addTrigger(ShouldQueryKeys{false}); | |||||
| return {std::move(m), lager::noop}; | return {std::move(m), lager::noop}; | ||||
| } | } | ||||
| ClientResult updateClient(ClientModel m, GetStateEventAction a) | ClientResult updateClient(ClientModel m, GetStateEventAction a) | ||||
| { | { | ||||
| auto job = m.job<GetRoomStateWithKeyJob>() | auto job = m.job<GetRoomStateWithKeyJob>() | ||||
| .make(a.roomId, a.type, a.stateKey) | .make(a.roomId, a.type, a.stateKey) | ||||
| .withData(json{ | .withData(json{ | ||||
| Show All 9 Lines | namespace Kazv | ||||
| ClientResult processResponse(ClientModel m, GetRoomStateWithKeyResponse r) | ClientResult processResponse(ClientModel m, GetRoomStateWithKeyResponse r) | ||||
| { | { | ||||
| auto roomId = r.dataStr("roomId"); | auto roomId = r.dataStr("roomId"); | ||||
| auto type = r.dataStr("type"); | auto type = r.dataStr("type"); | ||||
| auto stateKey = r.dataStr("stateKey"); | auto stateKey = r.dataStr("stateKey"); | ||||
| if (! r.success()) { | if (! r.success()) { | ||||
| m.addTrigger(GetStateEventFailed{roomId, r.errorCode(), r.errorMessage()}); | |||||
| return { std::move(m), failWithResponse(r) }; | return { std::move(m), failWithResponse(r) }; | ||||
| } | } | ||||
| auto content = r.jsonBody(); | auto content = r.jsonBody(); | ||||
| m.addTrigger(GetStateEventSuccessful{roomId, content}); | |||||
| auto k = KeyOfState{type, stateKey}; | auto k = KeyOfState{type, stateKey}; | ||||
| auto eventJson = m.roomList[roomId].stateEvents[k] | auto eventJson = m.roomList[roomId].stateEvents[k] | ||||
| .originalJson().get(); | .originalJson().get(); | ||||
| eventJson["content"] = content; | eventJson["content"] = content; | ||||
| eventJson["type"] = type; | eventJson["type"] = type; | ||||
| eventJson["state_key"] = stateKey; | eventJson["state_key"] = stateKey; | ||||
| Show All 9 Lines | namespace Kazv | ||||
| } | } | ||||
| ClientResult updateClient(ClientModel m, SendStateEventAction a) | ClientResult updateClient(ClientModel m, SendStateEventAction a) | ||||
| { | { | ||||
| auto event = a.event; | auto event = a.event; | ||||
| if (event.type() == ""s) { | if (event.type() == ""s) { | ||||
| m.addTrigger(InvalidMessageFormat{}); | return { std::move(m), failEffect( | ||||
| return { std::move(m), lager::noop }; | "MOE.KAZV.MXC.INVALID_MESSAGE_FORMAT", | ||||
| "Invalid message format" | |||||
| ) }; | |||||
| } | } | ||||
| auto type = event.type(); | auto type = event.type(); | ||||
| auto content = event.content(); | auto content = event.content(); | ||||
| auto stateKey = event.stateKey(); | auto stateKey = event.stateKey(); | ||||
| kzo.client.dbg() << "Sending state event of type " << type | kzo.client.dbg() << "Sending state event of type " << type | ||||
| << " with content " << content.get().dump() | << " with content " << content.get().dump() | ||||
| Show All 19 Lines | namespace Kazv | ||||
| ClientResult processResponse(ClientModel m, SetRoomStateWithKeyResponse r) | ClientResult processResponse(ClientModel m, SetRoomStateWithKeyResponse r) | ||||
| { | { | ||||
| auto roomId = r.dataStr("roomId"); | auto roomId = r.dataStr("roomId"); | ||||
| auto eventType = r.dataStr("eventType"); | auto eventType = r.dataStr("eventType"); | ||||
| auto stateKey = r.dataStr("stateKey"); | auto stateKey = r.dataStr("stateKey"); | ||||
| if (! r.success()) { | if (! r.success()) { | ||||
| kzo.client.dbg() << "Send state event failed" << std::endl; | 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) }; | return { std::move(m), failWithResponse(r) }; | ||||
| } | } | ||||
| m.addTrigger(SendStateEventSuccessful{roomId, r.eventId(), eventType, stateKey}); | |||||
| return { std::move(m), lager::noop }; | return { std::move(m), lager::noop }; | ||||
| } | } | ||||
| } | } | ||||