diff --git a/include/matrix/client.hpp b/include/matrix/client.hpp index 840271e..bd0b8c1 100644 --- a/include/matrix/client.hpp +++ b/include/matrix/client.hpp @@ -19,13 +19,13 @@ #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/connection.hpp" +#include "matrix/roomcxn.hpp" #include //vector #include //shared_ptr #include //size_t @@ -52,7 +52,6 @@ namespace matrix{ 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; @@ -61,13 +60,9 @@ namespace matrix{ //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; - [[deprecated("Use client::join_room instead")]] - bool accept_invite(const raii::string_base& roomid)const; - [[deprecated("Use client::leave_room instead")]] - bool reject_invite(const raii::string_base& roomid)const; + roomcxn spawn_room(const raii::string_base& roomid)const; + roomcxn spawn_room(raii::string&& roomid)const; //other network void logout(void); @@ -82,23 +77,8 @@ namespace matrix{ 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_custom_event(const raii::string_base& room, const raii::string_base& event)const; - raii::rjp_string send_message(const raii::string_base& room, const raii::string_base& text)const; - raii::rjp_string send_file(const raii::string_base& room, const file_info& file)const; - 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_audio(const raii::string_base& room, const audio_info& audio)const; - void send_typing(const raii::string_base& room, bool active, int timeout = 5000)const; - void send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)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: 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; }; } diff --git a/include/matrix/matrix.hpp b/include/matrix/matrix.hpp index e6ac037..1ebcdca 100644 --- a/include/matrix/matrix.hpp +++ b/include/matrix/matrix.hpp @@ -22,5 +22,6 @@ #include "matrix/client.hpp" #include "matrix/syncer.hpp" #include "matrix/session.hpp" +#include "matrix/roomcxn.hpp" #endif diff --git a/include/matrix/room_url_list.hpp b/include/matrix/room_url_list.hpp new file mode 100644 index 0000000..8340c4c --- /dev/null +++ b/include/matrix/room_url_list.hpp @@ -0,0 +1,59 @@ +/** + This file is a part of r0nk, atlas_moon, and rexy's matrix client + 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_ROOM_URL_LIST_HPP +#define MATRIX_ROOM_URL_LIST_HPP + +#include "raii/string.hpp" + +namespace matrix{ + + class room_url_list + { + private: + raii::string m_join; + raii::string m_leave; + raii::string m_typing; + raii::string m_kick; + raii::string m_ban; + raii::string m_unban; + raii::string m_invite; + raii::string m_members; + public: + room_url_list(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& userid); + const raii::string& join_room(void)const; + const raii::string& leave_room(void)const; + raii::string read_receipt(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const; + raii::string send(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventtype)const; + raii::string redact(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const; + const raii::string& typing(void)const; + const raii::string& kick(void)const; + const raii::string& ban(void)const; + const raii::string& unban(void)const; + const raii::string& invite(void)const; + const raii::string& room_members(void)const; + + void repopulate(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& userid, const raii::string_base& roomid); + void invalidate_accesstoken(void); + private: + static constexpr const char* s_proto = "https://"; + }; + +} + +#endif diff --git a/include/matrix/roomcxn.hpp b/include/matrix/roomcxn.hpp new file mode 100644 index 0000000..ec9e3df --- /dev/null +++ b/include/matrix/roomcxn.hpp @@ -0,0 +1,74 @@ +/** + This file is a part of r0nk, atlas_moon, and rexy's matrix client + 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_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/room_url_list.hpp" + +namespace matrix{ + + class roomcxn : public connection + { + private: + raii::string m_roomid; + room_url_list m_urls; + + public: + roomcxn(const std::shared_ptr&, const raii::string_base& roomid); + roomcxn(const std::shared_ptr& ses, raii::string&& roomid); + + roomcxn(const roomcxn&) = default; + roomcxn(roomcxn&&) = default; + ~roomcxn(void) = default; + + roomcxn& operator=(const roomcxn&) = default; + roomcxn& operator=(roomcxn&&) = default; + + bool join_room(void)const; + bool leave_room(void)const; + + [[deprecated("Use client::join_room instead")]] + bool accept_invite(void)const; + [[deprecated("Use client::leave_room instead")]] + bool reject_invite(void)const; + + + raii::rjp_string send_custom_event(const raii::string_base& event, const raii::string_base& eventtype)const; + raii::rjp_string send_message(const raii::string_base& text)const; + raii::rjp_string send_file(const file_info& file)const; + raii::rjp_string send_image(const image_info& image)const; + raii::rjp_string send_video(const video_info& video)const; + raii::rjp_string send_audio(const audio_info& audio)const; + bool send_typing(bool active, int timeout = 5000)const; + bool send_read_receipt(const raii::string_base& eventid)const; + + raii::rjp_string redact_event(const raii::string_base& eventid, const raii::string_base& reason)const; + raii::rjp_string redact_event(const raii::string_base& eventid)const; + + private: + raii::rjp_string _send_message(const raii::string_base& msg)const; + }; + +} + +#endif diff --git a/include/matrix/session.hpp b/include/matrix/session.hpp index d83b699..85facfa 100644 --- a/include/matrix/session.hpp +++ b/include/matrix/session.hpp @@ -39,8 +39,8 @@ namespace matrix{ bool valid(void)const; - client create_client(void)const; - syncer create_syncer(void)const; + client spawn_client(void)const; + syncer spawn_syncer(void)const; void invalidate(void); private: diff --git a/include/matrix/url_list.hpp b/include/matrix/url_list.hpp index 57d69d6..d4b2b1c 100644 --- a/include/matrix/url_list.hpp +++ b/include/matrix/url_list.hpp @@ -53,20 +53,9 @@ namespace matrix{ const raii::string& displayname(void)const; const raii::string& profile_picture(void)const; raii::string logout(const raii::string_base& homeserver, const raii::string_base& access_token)const; - raii::string join_room(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string leave_room(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; raii::string sync(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& next_batch, const raii::string_base& timeout)const; - raii::string read_receipt(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const; - raii::string send(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string redact(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const; raii::string power_level(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; raii::string presence(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& userid)const; - raii::string typing(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& userid)const; - raii::string kick(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string ban(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string unban(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string invite(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; - raii::string room_members(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const; raii::string password(const raii::string_base& homeserver, const raii::string_base& access_token)const; diff --git a/src/matrix/client.cpp b/src/matrix/client.cpp index d1698ab..7e691c0 100644 --- a/src/matrix/client.cpp +++ b/src/matrix/client.cpp @@ -98,17 +98,11 @@ namespace matrix{ return _post_curl(postdata, m_ses->urls.create_room(), raii::curl_llist()); } - bool client::join_room(const raii::string_base& roomid)const{ - return _post_curl(raii::string(), m_ses->urls.join_room(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid)), raii::curl_llist()); + roomcxn client::spawn_room(const raii::string_base& roomid)const{ + return roomcxn(m_ses, roomid); } - bool client::leave_room(const raii::string_base& roomid)const{ - return _post_curl(raii::string(), m_ses->urls.leave_room(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid)), raii::curl_llist()); - } - bool client::accept_invite(const raii::string_base& roomid)const{ - return join_room(roomid); - } - bool client::reject_invite(const raii::string_base& roomid)const{ - return leave_room(roomid); + roomcxn client::spawn_room(raii::string&& roomid)const{ + return roomcxn(m_ses, std::move(roomid)); } //other network @@ -254,49 +248,6 @@ namespace matrix{ #endif //HAS_FFMPEG - //send messages - raii::rjp_string client::send_custom_event(const raii::string_base& room, const raii::string_base& event)const{ - return _send_message(room, event); - } - raii::rjp_string client::send_message(const raii::string_base& room, const raii::string_base& text)const{ - return _send_message(room, detail::_message_body(text)); - } - raii::rjp_string client::send_file(const raii::string_base& room, const file_info& file)const{ - return _send_message(room, detail::_file_body(file)); - } - raii::rjp_string client::send_image(const raii::string_base& room, const image_info& image)const{ - return _send_message(room, detail::_image_body(image)); - } - raii::rjp_string client::send_video(const raii::string_base& room, const video_info& video)const{ - return _send_message(room, detail::_video_body(video)); - } - raii::rjp_string client::send_audio(const raii::string_base& room, const audio_info& audio)const{ - return _send_message(room, detail::_audio_body(audio)); - } - void client::send_typing(const raii::string_base& room, bool active, int timeout)const{ - if(active) - _put_curl(raii::string("{\"timeout\":" + raii::itostr(timeout) + ",\"typing\":true}"), m_ses->urls.typing(m_ses->homeserver, m_ses->access_token, m_curl.encode(room), m_curl.encode(m_ses->userid)), raii::curl_llist()); - else - _put_curl("{\"typing\":false}"_ss, m_ses->urls.typing(m_ses->homeserver, m_ses->access_token, m_curl.encode(room), m_curl.encode(m_ses->userid)), raii::curl_llist()); - } - void client::send_read_receipt(const raii::string_base& roomid, const raii::string_base& eventid)const{ - _post_curl(""_ss, m_ses->urls.read_receipt(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); - } - - raii::rjp_string client::redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const{ - auto ret = _put_curl(raii::string("{\"reason\":\"" + reason + "\"}"), m_ses->urls.redact(m_ses->homeserver, m_ses->access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); - if(!ret) return {}; - raii::rjp_ptr root(rjp_parse(ret.get())); - if(!root) return {}; - - RJP_search_res res = rjp_search_member(root.get(), "event_id", 0); - if(!res.value) return {}; - return raii::rjp_string(res.value); - } - raii::rjp_string client::redact_event(const raii::string_base& roomid, const raii::string_base& eventid)const{ - return redact_event(roomid, eventid, ""_ss); - } - /******************************* Internal functions ********************************/ @@ -327,12 +278,4 @@ namespace matrix{ return res.value; } - raii::rjp_string client::_send_message(const raii::string_base& room, const raii::string_base& msg)const{ - raii::rjp_string reply = _post_and_find( - msg, - m_ses->urls.send(m_ses->homeserver, m_ses->access_token, m_curl.encode(room)), - raii::curl_llist(), - "event_id"_ss); - return reply; - } } diff --git a/src/matrix/room_url_list.cpp b/src/matrix/room_url_list.cpp new file mode 100644 index 0000000..237ba18 --- /dev/null +++ b/src/matrix/room_url_list.cpp @@ -0,0 +1,70 @@ +/** + This file is a part of r0nk, atlas_moon, and rexy's matrix client + 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 . +*/ + +#include "matrix/room_url_list.hpp" + +namespace matrix{ + + room_url_list::room_url_list(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& userid): + m_join(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/join?access_token=" + access_token), + m_leave(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/leave?access_token=" + access_token), + m_typing(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/typing/" + userid + "?access_token=" + access_token), + m_kick(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/kick?access_token=" + access_token), + m_ban(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/ban?access_token=" + access_token), + m_unban(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/unban?access_token=" + access_token), + m_invite(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/invite?access_token=" + access_token), + m_members(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/members?access_token=" + access_token){} + const raii::string& room_url_list::join_room(void)const{ + return m_join; + } + const raii::string& room_url_list::leave_room(void)const{ + return m_leave; + } + raii::string room_url_list::read_receipt(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const{ + return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/receipt/m.read/" + eventid + "?access_token=" + access_token); + } + raii::string room_url_list::send(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventtype)const{ + return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/send/" + eventtype + "?access_token=" + access_token); + } + raii::string room_url_list::redact(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const{ + return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/redact/" + eventid + "/0?access_token=" + access_token); + } + /*raii::string room_url_list::power_level(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ + return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/state/m.room.power_levels?access_token=" + access_token); + }*/ + const raii::string& room_url_list::typing(void)const{ + return m_typing; + } + const raii::string& room_url_list::kick(void)const{ + return m_kick; + } + const raii::string& room_url_list::ban(void)const{ + return m_ban; + } + const raii::string& room_url_list::unban(void)const{ + return m_unban; + } + const raii::string& room_url_list::invite(void)const{ + return m_invite; + } + const raii::string& room_url_list::room_members(void)const{ + return m_members; + } + + +} diff --git a/src/matrix/roomcxn.cpp b/src/matrix/roomcxn.cpp new file mode 100644 index 0000000..4248933 --- /dev/null +++ b/src/matrix/roomcxn.cpp @@ -0,0 +1,98 @@ +/** + This file is a part of r0nk, atlas_moon, and rexy's matrix client + 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 . +*/ + +#include "matrix/roomcxn.hpp" +#include "raii/static_string.hpp" +#include "matrix/fat_strings.hpp" +#include "raii/util.hpp" +#include "raii/rjp_ptr.hpp" +#include //move + + +namespace matrix{ + + roomcxn::roomcxn(const std::shared_ptr& ses, const raii::string_base& roomid): + roomcxn(ses, raii::string(roomid)){} + roomcxn::roomcxn(const std::shared_ptr& ses, raii::string&& roomid): + connection(ses), + m_roomid(std::move(roomid)), + m_urls(ses->homeserver, ses->access_token, m_curl.encode(m_roomid), ses->userid){} + + bool roomcxn::join_room(void)const{ + return _post_curl(raii::string(), m_urls.join_room(), raii::curl_llist()); + } + bool roomcxn::leave_room(void)const{ + return _post_curl(raii::string(), m_urls.leave_room(), raii::curl_llist()); + } + bool roomcxn::accept_invite(void)const{ + return join_room(); + } + bool roomcxn::reject_invite(void)const{ + return leave_room(); + } + + raii::rjp_string roomcxn::send_custom_event(const raii::string_base& event, const raii::string_base& eventtype)const{ + return _post_and_find( + event, + m_urls.send(m_ses->homeserver, m_ses->access_token, m_curl.encode(m_roomid), eventtype), + raii::curl_llist(), + "event_id"_ss); + } + raii::rjp_string roomcxn::send_message(const raii::string_base& text)const{ + return _send_message(detail::_message_body(text)); + } + raii::rjp_string roomcxn::send_file(const file_info& file)const{ + return _send_message(detail::_file_body(file)); + } + raii::rjp_string roomcxn::send_image(const image_info& image)const{ + return _send_message(detail::_image_body(image)); + } + raii::rjp_string roomcxn::send_video(const video_info& video)const{ + return _send_message(detail::_video_body(video)); + } + raii::rjp_string roomcxn::send_audio(const audio_info& audio)const{ + return _send_message(detail::_audio_body(audio)); + } + bool roomcxn::send_typing(bool active, int timeout)const{ + if(active) + return _put_curl(raii::string("{\"timeout\":" + raii::itostr(timeout) + ",\"typing\":true}"), m_urls.typing(), raii::curl_llist()); + else + return _put_curl("{\"typing\":false}"_ss, m_urls.typing(), raii::curl_llist()); + } + bool roomcxn::send_read_receipt(const raii::string_base& eventid)const{ + return _post_curl(""_ss, m_urls.read_receipt(m_ses->homeserver, m_ses->access_token, m_curl.encode(m_roomid), m_curl.encode(eventid)), raii::curl_llist()); + } + + raii::rjp_string roomcxn::redact_event(const raii::string_base& eventid, const raii::string_base& reason)const{ + auto ret = _put_curl(raii::string("{\"reason\":\"" + reason + "\"}"), m_urls.redact(m_ses->homeserver, m_ses->access_token, m_curl.encode(m_roomid), m_curl.encode(eventid)), raii::curl_llist()); + if(!ret) return {}; + raii::rjp_ptr root(rjp_parse(ret.get())); + if(!root) return {}; + + RJP_search_res res = rjp_search_member(root.get(), "event_id", 0); + if(!res.value) return {}; + return raii::rjp_string(res.value); + } + raii::rjp_string roomcxn::redact_event(const raii::string_base& eventid)const{ + return redact_event(eventid, "No reason given"_ss); + } + + raii::rjp_string roomcxn::_send_message(const raii::string_base& msg)const{ + return send_custom_event(msg, "m.room.message"_ss); + } +} diff --git a/src/matrix/session.cpp b/src/matrix/session.cpp index 89f7f9a..bdec3e0 100644 --- a/src/matrix/session.cpp +++ b/src/matrix/session.cpp @@ -41,10 +41,10 @@ namespace matrix{ bool session::valid(void)const{ return m_ses->access_token; } - client session::create_client(void)const{ + client session::spawn_client(void)const{ return client(m_ses); } - syncer session::create_syncer(void)const{ + syncer session::spawn_syncer(void)const{ return syncer(m_ses); } void session::invalidate(void){ diff --git a/src/matrix/url_list.cpp b/src/matrix/url_list.cpp index 9cd9673..c164b36 100644 --- a/src/matrix/url_list.cpp +++ b/src/matrix/url_list.cpp @@ -80,50 +80,14 @@ namespace matrix{ raii::string mat_url_list::logout(const raii::string_base& homeserver, const raii::string_base& access_token)const{ return raii::string(s_proto + homeserver + "/_matrix/client/r0/logout?access_token=" + access_token); } - raii::string mat_url_list::join_room(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/join?access_token=" + access_token); - } - raii::string mat_url_list::leave_room(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/leave?access_token=" + access_token); - } raii::string mat_url_list::sync(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& next_batch, const raii::string_base& timeout)const{ if(!next_batch) return raii::string(s_proto + homeserver + "/_matrix/client/r0/sync?access_token=" + access_token + "&timeout=" + timeout); return raii::string(s_proto + homeserver + "/_matrix/client/r0/sync?access_token=" + access_token + "&timeout=" + timeout + "&since=" + next_batch); } - raii::string mat_url_list::read_receipt(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/receipt/m.read/" + eventid + "?access_token=" + access_token); - } - raii::string mat_url_list::send(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/send/m.room.message?access_token=" + access_token); - } - raii::string mat_url_list::redact(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/redact/" + eventid + "/0?access_token=" + access_token); - } - raii::string mat_url_list::power_level(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/state/m.room.power_levels?access_token=" + access_token); - } raii::string mat_url_list::presence(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& userid)const{ return raii::string(s_proto + homeserver + "/_matrix/client/r0/presence/" + userid + "/status?access_token=" + access_token); } - raii::string mat_url_list::typing(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& userid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/typing/" + userid + "?access_token=" + access_token); - } - raii::string mat_url_list::kick(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/kick?access_token=" + access_token); - } - raii::string mat_url_list::ban(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/ban?access_token=" + access_token); - } - raii::string mat_url_list::unban(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/unban?access_token=" + access_token); - } - raii::string mat_url_list::invite(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/invite?access_token=" + access_token); - } - raii::string mat_url_list::room_members(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/members?access_token=" + access_token); - } raii::string mat_url_list::password(const raii::string_base& homeserver, const raii::string_base& access_token)const{ return raii::string(s_proto + homeserver + "/_matrix/client/r0/account/password?access_token=" + access_token); } diff --git a/src/test.cpp b/src/test.cpp index 41a7f48..3771913 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -34,7 +34,8 @@ void sync_fn(matrix::syncer syn, std::atomic_bool& should_quit){ printf("%s\n", sync_reply.get()); } } -void keyboard_fn(matrix::client client, std::atomic_bool& should_quit){ + +void keyboard_fn(matrix::roomcxn cxn, std::atomic_bool& should_quit){ char buffer[2048]; while(!should_quit){ fgets(buffer, 2048, stdin); @@ -42,7 +43,7 @@ void keyboard_fn(matrix::client client, std::atomic_bool& should_quit){ should_quit = true; break; } - client.send_message("!cEIFONpAlHTbGBUFAE:rexy712.chickenkiller.com"_ss , raii::static_string(buffer)); + cxn.send_message(raii::static_string(buffer)); } } @@ -61,8 +62,9 @@ int main(){ fprintf(stderr, "Succ\n"); std::atomic_bool should_quit = false; - std::thread sync_thread(sync_fn, ses.create_syncer(), std::ref(should_quit)); - std::thread key_thread(keyboard_fn, ses.create_client(), std::ref(should_quit)); + + std::thread sync_thread(sync_fn, ses.spawn_syncer(), std::ref(should_quit)); + std::thread key_thread(keyboard_fn, ses.spawn_client().spawn_room("!cEIFONpAlHTbGBUFAE:rexy712.chickenkiller.com"_ss), std::ref(should_quit)); //one of these threads will always hang until another input is recieved sync_thread.join();