diff --git a/include/matrix/events.hpp b/include/matrix/events.hpp index e4f3f35..375a737 100644 --- a/include/matrix/events.hpp +++ b/include/matrix/events.hpp @@ -31,10 +31,10 @@ namespace matrix::sync{ class event { protected: - RJP_value* m_event; + RJP_value* m_type; + RJP_value* m_content; public: - constexpr explicit event(RJP_value* ev): - m_event(ev){} + explicit event(RJP_value* ev); constexpr event(const event&) = default; ~event(void) = default; constexpr event& operator=(const event&) = default; @@ -66,10 +66,14 @@ namespace matrix::sync{ */ class room_event : public room_event_base, public event { + protected: + RJP_value* m_id; + RJP_value* m_sender; + RJP_value* m_unsigned; + RJP_value* m_redacts; + int m_origin_server_ts; public: - constexpr room_event(RJP_value* ev, const raii::string_base& roomid): - room_event_base(roomid), event(ev){} - + room_event(RJP_value* ev, const raii::string_base& roomid); raii::static_string eventid(void)const&; raii::rjp_string eventid(void)&&; raii::static_string sender(void)const&; @@ -88,9 +92,11 @@ namespace matrix::sync{ */ class room_state_event : public room_event { + protected: + RJP_value* m_state_key; + RJP_value* m_prev_content; public: - constexpr room_state_event(RJP_value* ev, const raii::string_base& roomid): - room_event(ev, roomid){} + room_state_event(RJP_value* ev, const raii::string_base& roomid); raii::static_string state_key(void)const&; raii::rjp_string state_key(void)&&; @@ -104,8 +110,7 @@ namespace matrix::sync{ class room_ephemeral_event : public room_event_base, public event { public: - constexpr room_ephemeral_event(RJP_value* ev, const raii::string_base& roomid): - room_event_base(roomid),event(ev){} + room_ephemeral_event(RJP_value* ev, const raii::string_base& roomid); }; } diff --git a/include/matrix/json_targets.hpp b/include/matrix/json_targets.hpp index e586457..402f1d0 100644 --- a/include/matrix/json_targets.hpp +++ b/include/matrix/json_targets.hpp @@ -8,34 +8,61 @@ namespace matrix::json{ constexpr raii::static_string True(void){return "true"_ss;} constexpr raii::static_string False(void){return "false"_ss;} constexpr raii::static_string reason(void){return "reason"_ss;} - constexpr raii::static_string error(void){return "error"_ss;} - constexpr raii::static_string errcode(void){return "errcode"_ss;} - constexpr raii::static_string retry_after(void){return "retry_after_ms"_ss;} namespace keys{ - namespace message{ - constexpr raii::static_string body(void){return "body"_ss;} - constexpr raii::static_string info(void){return "info"_ss;} - namespace infobody{ - constexpr raii::static_string height(void){return "h"_ss;} - constexpr raii::static_string width(void){return "w"_ss;} - constexpr raii::static_string mimetype(void){return "mimetype"_ss;} - constexpr raii::static_string size(void){return "size"_ss;} - constexpr raii::static_string thumbinfo(void){return "thumbnail_info"_ss;} - namespace thumbnail{ - constexpr raii::static_string height(void){return message::infobody::height();} - constexpr raii::static_string width(void){return message::infobody::width();} - constexpr raii::static_string mimetype(void){return message::infobody::mimetype();} - constexpr raii::static_string size(void){return message::infobody::size();} + constexpr raii::static_string error(void){return "error"_ss;} + constexpr raii::static_string errcode(void){return "errcode"_ss;} + constexpr raii::static_string retry_after(void){return "retry_after_ms"_ss;} + constexpr raii::static_string joined(void){return "joined"_ss;} + constexpr raii::static_string chunk(void){return "chunk"_ss;} + constexpr raii::static_string newversion(void){return "new_version"_ss;} + constexpr raii::static_string presence(void){return "presence"_ss;} + constexpr raii::static_string displayname(void){return "displayname"_ss;} + constexpr raii::static_string avatarurl(void){return "avatar_url"_ss;} + constexpr raii::static_string joinedrooms(void){return "joined_rooms"_ss;} + constexpr raii::static_string contenturi(void){return "content_uri"_ss;} + constexpr raii::static_string name(void){return "name"_ss;} + constexpr raii::static_string roomaliasname(void){return "room_alias_name"_ss;} + constexpr raii::static_string typing(void){return "typing"_ss;} + constexpr raii::static_string timeout(void){return "timeout"_ss;} + constexpr raii::static_string session(void){return "session"_ss;} + + namespace event{ + constexpr raii::static_string type(void){return "type"_ss;} + constexpr raii::static_string content(void){return "content"_ss;} + constexpr raii::static_string eventid(void){return "event_id"_ss;} + constexpr raii::static_string sender(void){return "sender"_ss;} + constexpr raii::static_string origin_server_ts(void){return "origin_server_ts"_ss;} + constexpr raii::static_string roomid(void){return "room_id"_ss;} + constexpr raii::static_string extra(void){return "unsigned"_ss;} + constexpr raii::static_string state_key(void){return "state_key"_ss;} + constexpr raii::static_string prev_content(void){return "prev_content"_ss;} + constexpr raii::static_string redacts(void){return "redacts"_ss;} + + namespace contentbody{ + constexpr raii::static_string body(void){return "body"_ss;} + constexpr raii::static_string info(void){return "info"_ss;} + namespace infobody{ + constexpr raii::static_string height(void){return "h"_ss;} + constexpr raii::static_string width(void){return "w"_ss;} + constexpr raii::static_string mimetype(void){return "mimetype"_ss;} + constexpr raii::static_string size(void){return "size"_ss;} + constexpr raii::static_string thumbinfo(void){return "thumbnail_info"_ss;} + namespace thumbnail{ + constexpr raii::static_string height(void){return infobody::height();} + constexpr raii::static_string width(void){return infobody::width();} + constexpr raii::static_string mimetype(void){return infobody::mimetype();} + constexpr raii::static_string size(void){return infobody::size();} + } + constexpr raii::static_string thumburl(void){return "thumbnail_url"_ss;} } - constexpr raii::static_string thumburl(void){return "thumbnail_url"_ss;} + constexpr raii::static_string msgtype(void){return "msgtype"_ss;} + constexpr raii::static_string url(void){return "url"_ss;} } - constexpr raii::static_string msgtype(void){return "msgtype"_ss;} - constexpr raii::static_string url(void){return "url"_ss;} } namespace auth{ - constexpr raii::static_string type(void){return "type"_ss;} + constexpr raii::static_string type(void){return event::type();} constexpr raii::static_string medium(void){return "medium"_ss;} constexpr raii::static_string address(void){return "address"_ss;} constexpr raii::static_string identifier(void){return "identifier"_ss;} @@ -67,27 +94,6 @@ namespace matrix::json{ constexpr raii::static_string password(void){return auth::password();} } } - namespace rooms{ - constexpr raii::static_string joined(void){return "joined"_ss;} - constexpr raii::static_string eventid(void){return "event_id"_ss;} - constexpr raii::static_string chunk(void){return "chunk"_ss;} - constexpr raii::static_string newversion(void){return "new_version"_ss;} - } - namespace client{ - constexpr raii::static_string presence(void){return "presence"_ss;} - constexpr raii::static_string displayname(void){return "displayname"_ss;} - constexpr raii::static_string avatarurl(void){return "avatar_url"_ss;} - constexpr raii::static_string roomid(void){return "room_id"_ss;} - constexpr raii::static_string joinedrooms(void){return "joined_rooms"_ss;} - constexpr raii::static_string contenturi(void){return "content_uri"_ss;} - constexpr raii::static_string name(void){return "name"_ss;} - constexpr raii::static_string roomaliasname(void){return "room_alias_name"_ss;} - constexpr raii::static_string typing(void){return "typing"_ss;} - constexpr raii::static_string timeout(void){return "timeout"_ss;} - } - namespace session{ - constexpr raii::static_string session(void){return "session"_ss;} - } } namespace stdstrings{ namespace error{ diff --git a/src/matrix/client.cpp b/src/matrix/client.cpp index e54ac13..f3a9263 100644 --- a/src/matrix/client.cpp +++ b/src/matrix/client.cpp @@ -45,19 +45,19 @@ namespace matrix{ return netreturn(raii::string(), raii::string(), http_status()); } netreturn client::get_presence(const raii::string_base& userid){ - return _get_and_find(m_urls->presence(*m_ses, userid), json::keys::client::presence()); + return _get_and_find(m_urls->presence(*m_ses, userid), json::keys::presence()); } //networked getter netreturn client::get_display_name(void)const{ - return _get_and_find(m_urls->displayname(), json::keys::client::displayname()); + return _get_and_find(m_urls->displayname(), json::keys::displayname()); } netreturn client::get_profile_picture(void)const{ - return _get_and_find(m_urls->profile_picture(), json::keys::client::avatarurl()); + return _get_and_find(m_urls->profile_picture(), json::keys::avatarurl()); } netreturn client::room_alias_to_id(const raii::string_base& alias)const{ auto tmp = m_curl.encode(alias, alias.length()); - return _get_and_find(raii::string(m_urls->alias_lookup() + tmp), json::keys::client::roomid()); + return _get_and_find(raii::string(m_urls->alias_lookup() + tmp), json::keys::event::roomid()); } netreturn> client::list_rooms(void)const{ raii::string reply = _get_curl(m_urls->room_list()); @@ -69,7 +69,7 @@ namespace matrix{ if(!root) return retval; - RJP_search_res res = rjp_search_member(root.get(), json::keys::client::joinedrooms(), 0); + RJP_search_res res = rjp_search_member(root.get(), json::keys::joinedrooms(), 0); if(!res.value) return retval; @@ -81,7 +81,7 @@ namespace matrix{ //room membership netreturn client::create_room(const raii::string_base& name, const raii::string_base& alias)const{ - return _post_and_find(json::_create_room(name, alias), m_urls->create_room(), raii::curl_llist(), json::keys::client::roomid()); + return _post_and_find(json::_create_room(name, alias), m_urls->create_room(), raii::curl_llist(), json::keys::event::roomid()); } roomcxn client::spawn_room(const raii::string_base& roomid)const{ return roomcxn(m_ses, roomid); @@ -225,7 +225,7 @@ namespace matrix{ netreturn retval = _create_netreturn(root, http_status()); if(!root) return retval; - RJP_search_res res = rjp_search_member(root.get(), json::keys::client::contenturi(), 0); + RJP_search_res res = rjp_search_member(root.get(), json::keys::contenturi(), 0); if(!res.value) return retval; retval.value().m_fileurl = res.value; diff --git a/src/matrix/events.cpp b/src/matrix/events.cpp index ed63910..5235a00 100644 --- a/src/matrix/events.cpp +++ b/src/matrix/events.cpp @@ -17,93 +17,92 @@ */ #include "matrix/events.hpp" +#include "matrix/json_targets.hpp" namespace matrix::sync{ //Event base + event::event(RJP_value* ev): + m_type(rjp_search_member(ev, json::keys::event::type(), 0).value), + m_content(rjp_search_member(ev, json::keys::event::content(), 0).value){} raii::static_string event::type(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "type", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + return raii::static_string(rjp_value_string(m_type), rjp_value_string_length(m_type)); } raii::rjp_string event::type(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "type", 0); - return raii::rjp_string(res.value); + return raii::rjp_string(std::exchange(m_type, nullptr)); } const RJP_value* event::content(void)const{ - RJP_search_res res = rjp_search_member(m_event, "content", 0); - return res.value; + return m_content; } RJP_value* event::content(void){ - RJP_search_res res = rjp_search_member(m_event, "content", 0); - return res.value; + return m_content; } //Room event + room_event::room_event(RJP_value* ev, const raii::string_base& roomid): + room_event_base(roomid), event(ev), + m_id(rjp_search_member(ev, json::keys::event::eventid(), 0).value), + m_sender(rjp_search_member(ev, json::keys::event::sender(), 0).value), + m_unsigned(rjp_search_member(ev, json::keys::event::extra(), 0).value), + m_redacts(rjp_search_member(ev, json::keys::event::redacts(), 0).value), + m_origin_server_ts(rjp_value_integer(rjp_search_member(ev, json::keys::event::origin_server_ts(), 0).value)){} raii::static_string room_event::eventid(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "event_id", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + return raii::static_string(rjp_value_string(m_id), rjp_value_string_length(m_id)); } + raii::rjp_string room_event::eventid(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "event_id", 0); - return raii::rjp_string(res.value); + return raii::rjp_string(std::exchange(m_id, nullptr)); } raii::static_string room_event::sender(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "sender", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + return raii::static_string(rjp_value_string(m_sender), rjp_value_string_length(m_sender)); } raii::rjp_string room_event::sender(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "sender", 0); - return raii::rjp_string(res.value); + return raii::rjp_string(std::exchange(m_sender, nullptr)); } int room_event::origin_server_ts(void)const{ - RJP_search_res res = rjp_search_member(m_event, "origin_server_ts", 0); - return rjp_value_integer(res.value); + return m_origin_server_ts; } const RJP_value* room_event::extra(void)const{ - RJP_search_res res = rjp_search_member(m_event, "unsigned", 0); - return res.value; + return m_unsigned; } RJP_value* room_event::extra(void){ - RJP_search_res res = rjp_search_member(m_event, "unsigned", 0); - return res.value; + return m_unsigned; } raii::static_string room_event::redacts(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "redacts", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + if(!m_redacts) + return raii::static_string(); + return raii::static_string(rjp_value_string(m_redacts), rjp_value_string_length(m_redacts)); } raii::rjp_string room_event::redacts(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "redacts", 0); - return raii::rjp_string(res.value); + if(!m_redacts) + return raii::rjp_string(); + return raii::rjp_string(std::exchange(m_redacts, nullptr)); } //Room state event + room_state_event::room_state_event(RJP_value* ev, const raii::string_base& roomid): + room_event(ev, roomid), + m_state_key(rjp_search_member(ev, json::keys::event::state_key(), 0).value), + m_prev_content(rjp_search_member(ev, json::keys::event::prev_content(), 0).value) + { + if(!m_prev_content && m_unsigned){ + m_prev_content = rjp_search_member(m_unsigned, json::keys::event::prev_content(), 0).value; + } + } raii::static_string room_state_event::state_key(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "state_key", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + return raii::static_string(rjp_value_string(m_state_key), rjp_value_string_length(m_state_key)); } raii::rjp_string room_state_event::state_key(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "state_key", 0); - return raii::rjp_string(res.value); + return raii::rjp_string(std::exchange(m_state_key, nullptr)); } raii::static_string room_state_event::prev_content(void)const&{ - RJP_search_res res = rjp_search_member(m_event, "prev_content", 0); - if(res.value) - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); - res = rjp_search_member(m_event, "unsigned", 0); - if(!res.value) - return raii::static_string{}; - res = rjp_search_member(res.value, "prev_content", 0); - return raii::static_string(rjp_value_string(res.value), rjp_value_string_length(res.value)); + return raii::static_string(rjp_value_string(m_prev_content), rjp_value_string_length(m_prev_content)); } raii::rjp_string room_state_event::prev_content(void)&&{ - RJP_search_res res = rjp_search_member(m_event, "prev_content", 0); - if(res.value) - return raii::rjp_string(res.value); - res = rjp_search_member(m_event, "unsigned", 0); - if(!res.value) - return raii::static_string{}; - res = rjp_search_member(res.value, "prev_content", 0); - return raii::rjp_string(res.value); + return raii::rjp_string(std::exchange(m_prev_content, nullptr)); } + room_ephemeral_event::room_ephemeral_event(RJP_value* ev, const raii::string_base& roomid): + room_event_base(roomid), event(ev){} + } diff --git a/src/matrix/fat_strings.cpp b/src/matrix/fat_strings.cpp index 59529e7..aab5d2c 100644 --- a/src/matrix/fat_strings.cpp +++ b/src/matrix/fat_strings.cpp @@ -68,76 +68,76 @@ namespace matrix::json{ return raii::string( object( - member(json::keys::message::body(), quote(raii::json_escape(image.name()))), - member(json::keys::message::info(), object( - member(json::keys::message::infobody::height(), raii::itostr(image.height())), - member(json::keys::message::infobody::mimetype(), quote(image.mimetype())), - member(json::keys::message::infobody::size(), raii::itostr(image.size())), - member(json::keys::message::infobody::thumbinfo(), object( - member(json::keys::message::infobody::thumbnail::height(), raii::itostr(image.thumb_height())), - member(json::keys::message::infobody::thumbnail::mimetype(), quote(image.thumb_mimetype())), - member(json::keys::message::infobody::thumbnail::size(), raii::itostr(image.thumb_size())), - member(json::keys::message::infobody::thumbnail::width(), raii::itostr(image.thumb_width())) + member(json::keys::event::contentbody::body(), quote(raii::json_escape(image.name()))), + member(json::keys::event::contentbody::info(), object( + member(json::keys::event::contentbody::infobody::height(), raii::itostr(image.height())), + member(json::keys::event::contentbody::infobody::mimetype(), quote(image.mimetype())), + member(json::keys::event::contentbody::infobody::size(), raii::itostr(image.size())), + member(json::keys::event::contentbody::infobody::thumbinfo(), object( + member(json::keys::event::contentbody::infobody::thumbnail::height(), raii::itostr(image.thumb_height())), + member(json::keys::event::contentbody::infobody::thumbnail::mimetype(), quote(image.thumb_mimetype())), + member(json::keys::event::contentbody::infobody::thumbnail::size(), raii::itostr(image.thumb_size())), + member(json::keys::event::contentbody::infobody::thumbnail::width(), raii::itostr(image.thumb_width())) )), - member(json::keys::message::infobody::thumburl(), quote(raii::json_escape(*thumburl))), - member(json::keys::message::infobody::width(), raii::itostr(image.width())) + member(json::keys::event::contentbody::infobody::thumburl(), quote(raii::json_escape(*thumburl))), + member(json::keys::event::contentbody::infobody::width(), raii::itostr(image.width())) )), - member(json::keys::message::msgtype(), quote("m.image"_ss)), - member(json::keys::message::url(), quote(raii::json_escape(url))) + member(json::keys::event::contentbody::msgtype(), quote("m.image"_ss)), + member(json::keys::event::contentbody::url(), quote(raii::json_escape(url))) )); } raii::string _video_body(const uploaded_video& video){ return raii::string( object( - member(json::keys::message::body(), quote(raii::json_escape(video.name()))), - member(json::keys::message::info(), object( - member(json::keys::message::infobody::height(), raii::itostr(video.height())), - member(json::keys::message::infobody::mimetype(), quote(video.mimetype())), - member(json::keys::message::infobody::size(), raii::itostr(video.size())), - member(json::keys::message::infobody::thumbinfo(), object( - member(json::keys::message::infobody::thumbnail::height(), raii::itostr(video.thumb_height())), - member(json::keys::message::infobody::thumbnail::mimetype(), quote(video.thumb_mimetype())), - member(json::keys::message::infobody::thumbnail::size(), raii::itostr(video.thumb_size())), - member(json::keys::message::infobody::thumbnail::width(), raii::itostr(video.thumb_width())) + member(json::keys::event::contentbody::body(), quote(raii::json_escape(video.name()))), + member(json::keys::event::contentbody::info(), object( + member(json::keys::event::contentbody::infobody::height(), raii::itostr(video.height())), + member(json::keys::event::contentbody::infobody::mimetype(), quote(video.mimetype())), + member(json::keys::event::contentbody::infobody::size(), raii::itostr(video.size())), + member(json::keys::event::contentbody::infobody::thumbinfo(), object( + member(json::keys::event::contentbody::infobody::thumbnail::height(), raii::itostr(video.thumb_height())), + member(json::keys::event::contentbody::infobody::thumbnail::mimetype(), quote(video.thumb_mimetype())), + member(json::keys::event::contentbody::infobody::thumbnail::size(), raii::itostr(video.thumb_size())), + member(json::keys::event::contentbody::infobody::thumbnail::width(), raii::itostr(video.thumb_width())) )), - member(json::keys::message::infobody::thumburl(), quote(raii::json_escape(video.thumb_url()))), - member(json::keys::message::infobody::width(), raii::itostr(video.width())) + member(json::keys::event::contentbody::infobody::thumburl(), quote(raii::json_escape(video.thumb_url()))), + member(json::keys::event::contentbody::infobody::width(), raii::itostr(video.width())) )), - member(json::keys::message::msgtype(), quote("m.video"_ss)), - member(json::keys::message::url(), quote(raii::json_escape(video.url()))) + member(json::keys::event::contentbody::msgtype(), quote("m.video"_ss)), + member(json::keys::event::contentbody::url(), quote(raii::json_escape(video.url()))) )); } raii::string _file_body(const uploaded_file& file){ return raii::string( object( - member(json::keys::message::body(), quote(raii::json_escape(file.name()))), - member(json::keys::message::info(), object( - member(json::keys::message::infobody::size(), raii::itostr(file.size())) + member(json::keys::event::contentbody::body(), quote(raii::json_escape(file.name()))), + member(json::keys::event::contentbody::info(), object( + member(json::keys::event::contentbody::infobody::size(), raii::itostr(file.size())) )), - member(json::keys::message::msgtype(), quote("m.file"_ss)), - member(json::keys::message::url(), quote(raii::json_escape(file.url()))) + member(json::keys::event::contentbody::msgtype(), quote("m.file"_ss)), + member(json::keys::event::contentbody::url(), quote(raii::json_escape(file.url()))) )); } raii::string _audio_body(const uploaded_audio& audio){ return raii::string( object( - member(json::keys::message::body(), quote(raii::json_escape(audio.name()))), - member(json::keys::message::info(), object( - member(json::keys::message::infobody::mimetype(), quote(audio.mimetype())), - member(json::keys::message::infobody::size(), raii::itostr(audio.size())) + member(json::keys::event::contentbody::body(), quote(raii::json_escape(audio.name()))), + member(json::keys::event::contentbody::info(), object( + member(json::keys::event::contentbody::infobody::mimetype(), quote(audio.mimetype())), + member(json::keys::event::contentbody::infobody::size(), raii::itostr(audio.size())) )), - member(json::keys::message::msgtype(), quote("m.audio"_ss)), - member(json::keys::message::url(), quote(raii::json_escape(audio.url()))) + member(json::keys::event::contentbody::msgtype(), quote("m.audio"_ss)), + member(json::keys::event::contentbody::url(), quote(raii::json_escape(audio.url()))) )); } raii::string _message_body(const raii::string_base& msg){ return raii::string( object( - member(json::keys::message::body(), quote(raii::json_escape(msg))), - member(json::keys::message::msgtype(), quote("m.text"_ss)) + member(json::keys::event::contentbody::body(), quote(raii::json_escape(msg))), + member(json::keys::event::contentbody::msgtype(), quote("m.text"_ss)) )); } raii::string _login_password(const raii::string_base& username, const raii::string_base& password){ @@ -166,32 +166,32 @@ namespace matrix::json{ raii::string _displayname_set(const raii::string_base& newname){ return raii::string( object( - member(json::keys::client::displayname(), quote(raii::json_escape(newname))) + member(json::keys::displayname(), quote(raii::json_escape(newname))) )); } raii::string _avatar_set(const raii::string_base& mediaurl){ return raii::string( object( - member(json::keys::client::avatarurl(), quote(raii::json_escape(mediaurl))) + member(json::keys::avatarurl(), quote(raii::json_escape(mediaurl))) )); } raii::string _presence_set(const raii::string_base& status){ return raii::string( object( - member(json::keys::client::presence(), quote(status)) + member(json::keys::presence(), quote(status)) )); } raii::string _create_room(const raii::string_base& name, const raii::string_base& alias){ if(alias){ return raii::string( object( - member(json::keys::client::name(), quote(raii::json_escape(name))), - member(json::keys::client::roomaliasname(), quote(raii::json_escape(alias))) + member(json::keys::name(), quote(raii::json_escape(name))), + member(json::keys::roomaliasname(), quote(raii::json_escape(alias))) )); }else{ return raii::string( object( - member(json::keys::client::name(), quote(raii::json_escape(name))) + member(json::keys::name(), quote(raii::json_escape(name))) )); } } @@ -211,8 +211,8 @@ namespace matrix::json{ raii::string _typing(bool active, int timeout){ return raii::string( object( - member(json::keys::client::typing(), active ? json::True() : json::False()), - member(json::keys::client::timeout(), raii::itostr(timeout)) + member(json::keys::typing(), active ? json::True() : json::False()), + member(json::keys::timeout(), raii::itostr(timeout)) )); } raii::string _redact(const raii::string_base& reason){ @@ -224,7 +224,7 @@ namespace matrix::json{ raii::string _room_upgrade(int version){ return raii::string( object( - member(json::keys::rooms::newversion(), raii::itostr(version)) + member(json::keys::newversion(), raii::itostr(version)) )); } } diff --git a/src/matrix/roomcxn.cpp b/src/matrix/roomcxn.cpp index 61b7811..80ce5da 100644 --- a/src/matrix/roomcxn.cpp +++ b/src/matrix/roomcxn.cpp @@ -59,7 +59,7 @@ namespace matrix{ if(!resp) return _create_netreturn(resp, http_status()); raii::rjp_ptr root(rjp_parse(resp.get())); if(!root) return _create_netreturn(root, http_status()); - RJP_search_res res = rjp_search_member(root.get(), json::keys::rooms::joined(), 0); + RJP_search_res res = rjp_search_member(root.get(), json::keys::joined(), 0); if(!res.value) return _create_netreturn(root, http_status()); for(RJP_value* mem = rjp_get_member(res.value);mem;mem = rjp_next_member(mem)){ @@ -108,7 +108,7 @@ namespace matrix{ raii::rjp_ptr root(rjp_parse(reply)); netreturn retval = _create_netreturn(root, http_status()); - retval.value() = _curl_reply_search(root, json::keys::rooms::eventid()); + retval.value() = _curl_reply_search(root, json::keys::event::eventid()); return retval; } netreturn roomcxn::send_message(const raii::string_base& text)const{ @@ -134,7 +134,7 @@ namespace matrix{ } netreturn roomcxn::redact_event(const raii::string_base& eventid, const raii::string_base& reason)const{ - return _put_and_find(json::_redact(reason), m_urls.redact(*m_ses, m_curl.encode(m_roomid), m_curl.encode(eventid)), raii::curl_llist(), json::keys::rooms::eventid()); + return _put_and_find(json::_redact(reason), m_urls.redact(*m_ses, m_curl.encode(m_roomid), m_curl.encode(eventid)), raii::curl_llist(), json::keys::event::eventid()); } netreturn roomcxn::redact_event(const raii::string_base& eventid)const{ return redact_event(eventid, "No reason given"_ss); @@ -146,7 +146,7 @@ namespace matrix{ if(!root.get()) _create_netreturn(root, http_status()); netreturn retval = _create_netreturn(root, http_status()); - RJP_value* chunk = rjp_search_member(root.get(), json::keys::rooms::chunk(), 0).value; + RJP_value* chunk = rjp_search_member(root.get(), json::keys::chunk(), 0).value; if(!chunk) return retval; retval.value() = sync::roomcxn_message_event_list(root, rjp_get_element(chunk), m_roomid); return retval; @@ -168,7 +168,7 @@ namespace matrix{ m_urls.repopulate(*m_ses, m_roomid); } netreturn roomcxn::upgrade(int version)const{ - return _post_and_find(json::_room_upgrade(version), m_urls.upgrade(*m_ses, m_roomid), raii::curl_llist(), json::keys::rooms::eventid()); + return _post_and_find(json::_room_upgrade(version), m_urls.upgrade(*m_ses, m_roomid), raii::curl_llist(), json::keys::event::eventid()); } netreturn roomcxn::_send_message(const raii::string_base& msg)const{ diff --git a/src/matrix/session.cpp b/src/matrix/session.cpp index bed8b06..df91e09 100644 --- a/src/matrix/session.cpp +++ b/src/matrix/session.cpp @@ -88,7 +88,7 @@ namespace matrix{ return retval; //attempt to change password via username/password login - RJP_search_res res = rjp_search_member(root.get(), json::keys::session::session(), 0); + RJP_search_res res = rjp_search_member(root.get(), json::keys::session(), 0); raii::string request = json::_change_psk_password(m_ses->userid, newpass, oldpass, raii::rjp_string(res.value)); reply = _post_curl(request, rest::session_urls::password(*m_ses), raii::curl_llist()); return _create_netreturn(reply, http_status()); diff --git a/src/test.cpp b/src/test.cpp index d358529..b92d89c 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -64,29 +64,38 @@ void write_to_auth_file(const char* filename, const matrix::auth_data& auth){ fp.write(output); } -int main(){ +matrix::session login_to_homeserver(void){ matrix::auth_data auth = read_auth_file("auth_file"); + //login to homeserver matrix::session ses(auth); if(!ses.valid()){ fprintf(stderr, "Failed to init matrix session!\n"); - return 1; + std::exit(1); } if(!auth.access_token){ auth.access_token = ses.access_token(); write_to_auth_file("auth_file", auth); } fprintf(stderr, "Succ\n"); + return ses; +} - std::atomic_bool should_quit = false; +int main(){ + matrix::session ses = login_to_homeserver(); auto client = ses.spawn_client(); auto sync_res = client.sync(0).value(); while(true){ sync_res = client.sync(30000, sync_res).value(); for(auto room : sync_res.room_join_events()){ + auto r = client.spawn_room(room.roomid()); for(auto event : room.timeline_events()){ - printf("%s\n", event.sender().get()); + if(event.sender() != client.userid()){ + printf("%s : %s : %s\n", room.roomid().get(), event.type().get(), event.sender().get()); + r.send_read_receipt(event.eventid()); + r.send_message("test"_ss); + } } } }