matrix state sync setup
This commit is contained in:
parent
e12acfe8bc
commit
02c02115c2
@ -93,7 +93,6 @@ namespace matrix{
|
|||||||
mat_url_list m_urls;
|
mat_url_list m_urls;
|
||||||
|
|
||||||
raii::rjp_string m_next_batch; //string which tracks where we are in the server history
|
raii::rjp_string m_next_batch; //string which tracks where we are in the server history
|
||||||
size_t m_sync_timeout; //max time to wait during sync in milliseconds
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
bot(const auth_data& a, const raii::string_base& useragent);
|
bot(const auth_data& a, const raii::string_base& useragent);
|
||||||
@ -143,7 +142,7 @@ namespace matrix{
|
|||||||
raii::rjp_string send_audio(const raii::string_base& room, const audio_info& audio);
|
raii::rjp_string send_audio(const raii::string_base& room, const audio_info& audio);
|
||||||
raii::rjp_string send_file(const raii::string_base& room, const file_info& file);
|
raii::rjp_string send_file(const raii::string_base& room, const file_info& file);
|
||||||
|
|
||||||
void sync(void);
|
raii::string sync(size_t timeout);
|
||||||
void logout(void);
|
void logout(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@ -54,6 +54,10 @@ namespace raii{
|
|||||||
return string(tmp, len);
|
return string(tmp, len);
|
||||||
}
|
}
|
||||||
string json_escape(const string_base& str);
|
string json_escape(const string_base& str);
|
||||||
|
|
||||||
|
|
||||||
|
size_t intlen(int i);
|
||||||
|
raii::string itostr(int i);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -23,43 +23,6 @@
|
|||||||
|
|
||||||
namespace matrix::detail{
|
namespace matrix::detail{
|
||||||
|
|
||||||
//shamelessly stolen from stackoverflow (of all the things to need to steal)
|
|
||||||
constexpr static size_t intlen(int i){
|
|
||||||
if(i >= 100000){
|
|
||||||
if(i >= 10000000){
|
|
||||||
if(i >= 1000000000) return 10;
|
|
||||||
if(i >= 100000000) return 9;
|
|
||||||
return 8;
|
|
||||||
}
|
|
||||||
if(i >= 1000000) return 7;
|
|
||||||
return 6;
|
|
||||||
}else{
|
|
||||||
if(i >= 1000){
|
|
||||||
if(i >= 10000) return 5;
|
|
||||||
return 4;
|
|
||||||
}else{
|
|
||||||
if(i >= 100) return 3;
|
|
||||||
if(i >= 10) return 2;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static raii::string itostr(int i){
|
|
||||||
if(i == 0)
|
|
||||||
return raii::string("0");
|
|
||||||
int place = intlen(i);
|
|
||||||
raii::string ret(place);
|
|
||||||
char* buf = ret.get();
|
|
||||||
buf[place] = 0;
|
|
||||||
while(i != 0){
|
|
||||||
int rem = i % 10;
|
|
||||||
buf[--place] = rem + '0';
|
|
||||||
i /= 10;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
raii::string _image_body(const image_info& image){
|
raii::string _image_body(const image_info& image){
|
||||||
raii::string url = raii::json_escape(image.fileurl);
|
raii::string url = raii::json_escape(image.fileurl);
|
||||||
const raii::string_base* thumburl;
|
const raii::string_base* thumburl;
|
||||||
@ -73,17 +36,17 @@ namespace matrix::detail{
|
|||||||
"{"
|
"{"
|
||||||
"\"body\":\"" + raii::json_escape(image.filename) + "\","
|
"\"body\":\"" + raii::json_escape(image.filename) + "\","
|
||||||
"\"info\":{"
|
"\"info\":{"
|
||||||
"\"h\":" + itostr(image.height) + ","
|
"\"h\":" + raii::itostr(image.height) + ","
|
||||||
"\"mimetype\":\"" + image.mimetype + "\","
|
"\"mimetype\":\"" + image.mimetype + "\","
|
||||||
"\"size\":" + itostr(image.filesize) + ","
|
"\"size\":" + raii::itostr(image.filesize) + ","
|
||||||
"\"thumnail_info\":{"
|
"\"thumnail_info\":{"
|
||||||
"\"h\":" + itostr(image.thumb_height) + ","
|
"\"h\":" + raii::itostr(image.thumb_height) + ","
|
||||||
"\"mimetype\":\"" + image.mimetype + "\","
|
"\"mimetype\":\"" + image.mimetype + "\","
|
||||||
"\"size\":" + itostr(image.thumbsize) + ","
|
"\"size\":" + raii::itostr(image.thumbsize) + ","
|
||||||
"\"w\":" + itostr(image.thumb_width) +
|
"\"w\":" + raii::itostr(image.thumb_width) +
|
||||||
"},"
|
"},"
|
||||||
"\"thumbnail_url\":\"" + (*thumburl) + "\","
|
"\"thumbnail_url\":\"" + (*thumburl) + "\","
|
||||||
"\"w\":" + itostr(image.width) +
|
"\"w\":" + raii::itostr(image.width) +
|
||||||
"},"
|
"},"
|
||||||
"\"msgtype\":\"m.image\","
|
"\"msgtype\":\"m.image\","
|
||||||
"\"url\":\"" + url + "\""
|
"\"url\":\"" + url + "\""
|
||||||
@ -95,17 +58,17 @@ namespace matrix::detail{
|
|||||||
"{"
|
"{"
|
||||||
"\"body\":\"" + raii::json_escape(video.filename) + "\","
|
"\"body\":\"" + raii::json_escape(video.filename) + "\","
|
||||||
"\"info\":{"
|
"\"info\":{"
|
||||||
"\"h\":" + itostr(video.height) + ","
|
"\"h\":" + raii::itostr(video.height) + ","
|
||||||
"\"mimetype\":\"" + video.mimetype + "\","
|
"\"mimetype\":\"" + video.mimetype + "\","
|
||||||
"\"size\":" + itostr(video.filesize) + ","
|
"\"size\":" + raii::itostr(video.filesize) + ","
|
||||||
"\"thumnail_info\":{"
|
"\"thumnail_info\":{"
|
||||||
"\"h\":" + itostr(video.thumb_height) + ","
|
"\"h\":" + raii::itostr(video.thumb_height) + ","
|
||||||
"\"mimetype\":\"image/jpeg\","
|
"\"mimetype\":\"image/jpeg\","
|
||||||
"\"size\":" + itostr(video.thumbsize) + ","
|
"\"size\":" + raii::itostr(video.thumbsize) + ","
|
||||||
"\"w\":" + itostr(video.thumb_width) +
|
"\"w\":" + raii::itostr(video.thumb_width) +
|
||||||
"},"
|
"},"
|
||||||
"\"thumbnail_url\":\"" + video.thumburl + "\","
|
"\"thumbnail_url\":\"" + video.thumburl + "\","
|
||||||
"\"w\":" + itostr(video.width) +
|
"\"w\":" + raii::itostr(video.width) +
|
||||||
"},"
|
"},"
|
||||||
"\"msgtype\":\"m.video\","
|
"\"msgtype\":\"m.video\","
|
||||||
"\"url\":\"" + raii::json_escape(video.fileurl) + "\""
|
"\"url\":\"" + raii::json_escape(video.fileurl) + "\""
|
||||||
@ -116,7 +79,7 @@ namespace matrix::detail{
|
|||||||
"{"
|
"{"
|
||||||
"\"body\":\"" + raii::json_escape(file.filename) + "\","
|
"\"body\":\"" + raii::json_escape(file.filename) + "\","
|
||||||
"\"info\":{"
|
"\"info\":{"
|
||||||
"\"size\":" + itostr(file.filesize) +
|
"\"size\":" + raii::itostr(file.filesize) +
|
||||||
"},"
|
"},"
|
||||||
"\"msgtype\":\"m.file\","
|
"\"msgtype\":\"m.file\","
|
||||||
"\"body\":\"" + file.filename + "\","
|
"\"body\":\"" + file.filename + "\","
|
||||||
@ -130,7 +93,7 @@ namespace matrix::detail{
|
|||||||
"\"body\":\"" + raii::json_escape(audio.filename) + "\","
|
"\"body\":\"" + raii::json_escape(audio.filename) + "\","
|
||||||
"\"info\":{"
|
"\"info\":{"
|
||||||
"\"mimetype\":\"" + raii::json_escape(audio.mimetype) + "\","
|
"\"mimetype\":\"" + raii::json_escape(audio.mimetype) + "\","
|
||||||
"\"size\":" + itostr(audio.filesize) +
|
"\"size\":" + raii::itostr(audio.filesize) +
|
||||||
"},"
|
"},"
|
||||||
"\"msgtype\":\"m.audio\","
|
"\"msgtype\":\"m.audio\","
|
||||||
"\"body\":\"" + audio.filename + "\","
|
"\"body\":\"" + audio.filename + "\","
|
||||||
|
|||||||
@ -417,6 +417,24 @@ namespace matrix{
|
|||||||
_get_curl(raii::string("https://" + m_homeserver + "/_matrix/client/r0/logout?access_token=" + m_access_token));
|
_get_curl(raii::string("https://" + m_homeserver + "/_matrix/client/r0/logout?access_token=" + m_access_token));
|
||||||
m_urls.invalidate_accesstoken();
|
m_urls.invalidate_accesstoken();
|
||||||
}
|
}
|
||||||
|
raii::string bot::sync(size_t timeout){
|
||||||
|
raii::string url;
|
||||||
|
if(m_next_batch)
|
||||||
|
url = "https://" + m_homeserver + "/_matrix/client/r0/sync?access_token=" + m_access_token + "&timeout=" + raii::itostr(timeout) + "&since=" + m_next_batch;
|
||||||
|
else
|
||||||
|
url = "https://" + m_homeserver + "/_matrix/client/r0/sync?access_token=" + m_access_token + "&timeout=" + raii::itostr(timeout);
|
||||||
|
raii::string reply = _get_curl(url);
|
||||||
|
|
||||||
|
raii::rjp_ptr root(rjp_parse(reply));
|
||||||
|
if(!root)
|
||||||
|
return reply;
|
||||||
|
|
||||||
|
RJP_search_res res = rjp_search_member(root.get(), "next_batch", 0);
|
||||||
|
if(!res.value)
|
||||||
|
return reply;
|
||||||
|
m_next_batch = res.value;
|
||||||
|
return reply;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -89,4 +89,43 @@ namespace raii{
|
|||||||
tmp[len] = 0;
|
tmp[len] = 0;
|
||||||
return string(tmp, len);
|
return string(tmp, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//shamelessly stolen from stackoverflow (of all the things to need to steal)
|
||||||
|
size_t intlen(int i){
|
||||||
|
if(i >= 100000){
|
||||||
|
if(i >= 10000000){
|
||||||
|
if(i >= 1000000000) return 10;
|
||||||
|
if(i >= 100000000) return 9;
|
||||||
|
return 8;
|
||||||
|
}
|
||||||
|
if(i >= 1000000) return 7;
|
||||||
|
return 6;
|
||||||
|
}else{
|
||||||
|
if(i >= 1000){
|
||||||
|
if(i >= 10000) return 5;
|
||||||
|
return 4;
|
||||||
|
}else{
|
||||||
|
if(i >= 100) return 3;
|
||||||
|
if(i >= 10) return 2;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
raii::string itostr(int i){
|
||||||
|
if(i == 0)
|
||||||
|
return raii::string("0");
|
||||||
|
int place = intlen(i);
|
||||||
|
raii::string ret(place);
|
||||||
|
char* buf = ret.get();
|
||||||
|
buf[place] = 0;
|
||||||
|
while(i != 0){
|
||||||
|
int rem = i % 10;
|
||||||
|
buf[--place] = rem + '0';
|
||||||
|
i /= 10;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user