Changeset View
Changeset View
Standalone View
Standalone View
src/matrix-room-state.cpp
- This file was added.
| /* | |||||
| * This file is part of kazv. | |||||
| * SPDX-FileCopyrightText: 2020-2025 tusooa <tusooa@kazv.moe> | |||||
| * SPDX-License-Identifier: AGPL-3.0-or-later | |||||
| */ | |||||
| #include <kazv-defs.hpp> | |||||
| #include "matrix-room-state.hpp" | |||||
| #include "matrix-event-list.hpp" | |||||
| using namespace Kazv; | |||||
| MatrixRoomState::MatrixRoomState(lager::reader<immer::map<KeyOfState, Event>> state, QObject *parent) | |||||
| : KazvAbstractListModel(parent) | |||||
| , m_state(state) | |||||
| , LAGER_QT(types)(m_state.map([](const immer::map<KeyOfState, Event> &s) { | |||||
| QStringList res; | |||||
| for (const auto &[k, v] : s) { | |||||
| auto type = QString::fromStdString(k.type); | |||||
| if (std::find(res.cbegin(), res.cend(), type) == res.cend()) { | |||||
| res.push_back(type); | |||||
| } | |||||
| } | |||||
| return res; | |||||
| })) | |||||
| { | |||||
| initCountCursor(LAGER_QT(types).map([](const QStringList &l) { | |||||
| return static_cast<int>(l.size()); | |||||
| })); | |||||
| } | |||||
| MatrixRoomState::~MatrixRoomState() = default; | |||||
| MatrixEventList *MatrixRoomState::eventsForType(const QString &type) const | |||||
| { | |||||
| return new MatrixEventList(m_state.map([wantedType=type.toStdString()](const immer::map<KeyOfState, Event> &s) { | |||||
| EventList res; | |||||
| for (const auto &[k, v] : s) { | |||||
| if (k.type == wantedType) { | |||||
| res = std::move(res).push_back(v); | |||||
| } | |||||
| } | |||||
| return res; | |||||
| })); | |||||
| } | |||||