/** This file is a part of rexy's matrix bot Copyright (C) 2019 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 . */ #ifndef MATRIX_CLIENT_HPP #define MATRIX_CLIENT_HPP #include "raii/curler.hpp" #include "raii/string.hpp" #include "raii/rjp_string.hpp" #include "raii/filerd.hpp" #include "matrix/session_info.hpp" #include "matrix/upload_info.hpp" #include "matrix/event_info.hpp" #include "matrix/client_base.hpp" #include //vector #include //shared_ptr #include //size_t namespace matrix{ class session; //main class class client : public internal::client_base { friend class ::matrix::session; private: const std::shared_ptr m_ses; public: client(std::shared_ptr&); client(const client& b) = default; client(client&& b) = default; ~client(void) = default; client& operator=(const client&) = default; client& operator=(client&&) = default; //local getter const raii::rjp_string& access_token(void)const; const raii::rjp_string& userid(void)const; const raii::string& useragent(void)const; //networked setter void set_display_name(const raii::string_base&); void set_profile_picture(const raii::string_base&); //networked getter raii::rjp_string get_display_name(void)const; raii::rjp_string get_profile_picture(void)const; raii::rjp_string room_alias_to_id(const raii::string_base& alias)const; std::vector list_rooms(void)const; //room membership raii::string create_room(const raii::string_base& name, const raii::string_base& alias)const; bool join_room(const raii::string_base& roomid)const; bool leave_room(const raii::string_base& roomid)const; bool accept_invite(const membership_info& invite)const; bool reject_invite(const membership_info& invite)const; //other network void logout(void); //upload media file_info upload_file(const raii::string_base& filename)const; file_info upload_file(const raii::string_base& filename, const raii::string_base& alias)const; image_info upload_image(const raii::string_base& filename)const; image_info upload_image(const raii::string_base& filename, const raii::string_base& alias)const; video_info upload_video(const raii::string_base& filename)const; video_info upload_video(const raii::string_base& filename, const raii::string_base& alias)const; audio_info upload_audio(const raii::string_base& filename)const; audio_info upload_audio(const raii::string_base& filename, const raii::string_base& alias)const; //send messages raii::rjp_string send_image(const raii::string_base& room, const image_info& image)const; raii::rjp_string send_video(const raii::string_base& room, const video_info& video)const; raii::rjp_string send_message(const raii::string_base& room, const raii::string_base& text)const; raii::rjp_string send_audio(const raii::string_base& room, const audio_info& audio)const; raii::rjp_string send_file(const raii::string_base& room, const file_info& file)const; void send_typing(const raii::string_base& room, bool active, int timeout = 5000)const; raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const; raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid)const; private: void _send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const; raii::rjp_string _upload_file(raii::filerd& fp, const raii::curl_llist& header)const; raii::rjp_string _send_message(const raii::string_base& room, const raii::string_base& msg)const; }; } #endif