Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Cache_p.h 30.52 KiB
// SPDX-FileCopyrightText: 2017 Konstantinos Sideris <siderisk@auth.gr>
// SPDX-FileCopyrightText: 2019 The nheko authors
// SPDX-FileCopyrightText: 2021 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later

#pragma once

#include <limits>
#include <optional>

#include <QDateTime>
#include <QDir>
#include <QImage>
#include <QString>

#if __has_include(<lmdbxx/lmdb++.h>)
#include <lmdbxx/lmdb++.h>
#else
#include <lmdb++.h>
#endif
#include <nlohmann/json.hpp>

#include <mtx/responses/messages.hpp>
#include <mtx/responses/notifications.hpp>
#include <mtx/responses/sync.hpp>
#include <mtxclient/crypto/client.hpp>
#include <mtxclient/http/client.hpp>

#include "CacheCryptoStructs.h"
#include "CacheStructs.h"

class Cache : public QObject
{
        Q_OBJECT

public:
        Cache(const QString &userId, QObject *parent = nullptr);

        std::string displayName(const std::string &room_id, const std::string &user_id);
        QString displayName(const QString &room_id, const QString &user_id);
        QString avatarUrl(const QString &room_id, const QString &user_id);

        // presence
        mtx::presence::PresenceState presenceState(const std::string &user_id);
        std::string statusMessage(const std::string &user_id);

        // user cache stores user keys
        std::optional<UserKeyCache> userKeys(const std::string &user_id);
        std::map<std::string, std::optional<UserKeyCache>> getMembersWithKeys(
          const std::string &room_id);
        void updateUserKeys(const std::string &sync_token,
                            const mtx::responses::QueryKeys &keyQuery);
        void markUserKeysOutOfDate(lmdb::txn &txn,
                                   lmdb::dbi &db,
                                   const std::vector<std::string> &user_ids,
                                   const std::string &sync_token);
        void deleteUserKeys(lmdb::txn &txn,
                            lmdb::dbi &db,
                            const std::vector<std::string> &user_ids);
        void query_keys(const std::string &user_id,
                        std::function<void(const UserKeyCache &, mtx::http::RequestErr)> cb);

        // device & user verification cache
        VerificationStatus verificationStatus(const std::string &user_id);
        void markDeviceVerified(const std::string &user_id, const std::string &device);
        void markDeviceUnverified(const std::string &user_id, const std::string &device);

        std::vector<std::string> joinedRooms();