2020-02-24 14:29:46 -08:00

103 lines
4.2 KiB
C++

/**
This file is a part of rexy's matrix client
Copyright (C) 2019-2020 rexy712
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef MATRIX_ROOMCXN_HPP
#define MATRIX_ROOMCXN_HPP
#include "matrix/connection.hpp"
#include "matrix/upload_info.hpp"
#include "raii/string.hpp"
#include "raii/rjp_string.hpp"
#include "matrix/rest/room_url_list.hpp"
#include "matrix/iterable.hpp"
#include "matrix/netreturn.hpp"
#include <vector>
namespace matrix{
class roomcxn : public connection
{
private:
raii::string m_roomid;
room_url_list m_urls;
public:
roomcxn(const std::shared_ptr<session_info>&, const raii::string_base& roomid);
roomcxn(const std::shared_ptr<session_info>& ses, raii::string&& roomid);
roomcxn(const roomcxn&) = default;
roomcxn(roomcxn&&) = default;
~roomcxn(void) = default;
roomcxn& operator=(const roomcxn&) = default;
roomcxn& operator=(roomcxn&&) = default;
//membership
netreturn<void> join(void)const;
netreturn<void> leave(void)const;
netreturn<void> forget(void)const;
[[deprecated("Use roomcxn::join_room instead")]]
netreturn<void> accept_invite(void)const;
[[deprecated("Use roomcxn::leave_room instead")]]
netreturn<void> reject_invite(void)const;
netreturn<std::vector<raii::rjp_string>> members(void)const;
//member management
netreturn<void> invite(const raii::string_base& userid);
[[deprecated("Use roomcxn::kick instead")]]
netreturn<void> uninvite(const raii::string_base& userid, const raii::string_base& reason = raii::string());
netreturn<void> kick(const raii::string_base& userid, const raii::string_base& reason = raii::string());
netreturn<void> ban(const raii::string_base& userid, const raii::string_base& reason = raii::string());
netreturn<void> unban(const raii::string_base& userid);
//sending events
netreturn<raii::rjp_string> send_custom_event(const raii::string_base& event, const raii::string_base& eventtype)const;
netreturn<raii::rjp_string> send_message(const raii::string_base& text)const;
netreturn<raii::rjp_string> send_notice(const raii::string_base& text)const;
netreturn<raii::rjp_string> send_file(const uploaded_file& file)const;
netreturn<raii::rjp_string> send_image(const uploaded_image& image)const;
netreturn<raii::rjp_string> send_video(const uploaded_video& video)const;
netreturn<raii::rjp_string> send_audio(const uploaded_audio& audio)const;
netreturn<raii::rjp_string> forward_event(const sync::room_event&)const;
netreturn<void> send_typing(bool active, int timeout = 5000)const;
netreturn<void> send_read_receipt(const raii::string_base& eventid)const;
netreturn<sync::roomcxn_message_event_list> get_event(const raii::string_base& eventid)const;
netreturn<raii::rjp_string> redact_event(const raii::string_base& eventid, const raii::string_base& reason)const;
netreturn<raii::rjp_string> redact_event(const raii::string_base& eventid)const;
//recieve events
netreturn<sync::roomcxn_message_event_list> get_events_forward(int amount);
netreturn<sync::roomcxn_message_event_list> get_events_backward(int amount);
netreturn<sync::roomcxn_message_event_list> get_events_forward(int amount, const raii::string_base& from, const raii::string_base& to);
netreturn<sync::roomcxn_message_event_list> get_events_backward(int amount, const raii::string_base& from, const raii::string_base& to);
//meta stuff
void regenerate_urls(void);
netreturn<raii::rjp_string> upgrade(int version)const;
private:
netreturn<sync::roomcxn_message_event_list> _get_events(int amount, raii::static_string direction, const raii::string_base& from, const raii::string_base& to);
netreturn<raii::rjp_string> _send_message(const raii::string_base& msg)const;
};
}
#endif