Simplify url generation internally. Remove matrix::syncer; moved functionality to matrix::client
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
#include "matrix/roomcxn.hpp"
|
||||
#include "matrix/netreturn.hpp"
|
||||
#include "matrix/rest/client_url_list.hpp"
|
||||
#include "matrix/sync_response.hpp"
|
||||
#include <vector> //vector
|
||||
#include <memory> //shared_ptr
|
||||
#include <cstdlib> //size_t
|
||||
@@ -140,7 +141,7 @@ namespace matrix{
|
||||
raii::binary download_file(const raii::string_base& url);
|
||||
template<class DLHandler>
|
||||
bool download_file(const raii::string_base& url, DLHandler&& dl){
|
||||
_get_curl_setup(m_urls->file_download(m_ses->homeserver, url));
|
||||
_get_curl_setup(m_urls->file_download(*m_ses, url));
|
||||
m_curl.setwritefun(_download_dispatch<DLHandler>);
|
||||
m_curl.setwritedata(&dl);
|
||||
if(!_perform_curl())
|
||||
@@ -152,6 +153,10 @@ namespace matrix{
|
||||
raii::string url = "mxc://"_ss + server + "/"_ss + media_id;
|
||||
return download_file(url, std::forward<DLHandler>(dl));
|
||||
}
|
||||
|
||||
netreturn<sync::client_response> sync(size_t timeout);
|
||||
netreturn<sync::client_response> sync(size_t timeout, const sync::client_response&);
|
||||
|
||||
private:
|
||||
template<class DLHandler>
|
||||
static size_t _download_dispatch(char* ptr, size_t size, size_t nmemb, void* userdata){
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#define MATRIX_HPP
|
||||
|
||||
#include "matrix/client.hpp"
|
||||
#include "matrix/syncer.hpp"
|
||||
#include "matrix/session.hpp"
|
||||
#include "matrix/roomcxn.hpp"
|
||||
|
||||
|
||||
@@ -62,12 +62,15 @@ namespace matrix{
|
||||
netreturn_base(std::move(n)){}
|
||||
netreturn(const netreturn_base& n):
|
||||
netreturn_base(n){}
|
||||
Retval& value(void){
|
||||
Retval& value(void)&{
|
||||
return m_ret;
|
||||
}
|
||||
const Retval& value(void)const{
|
||||
const Retval& value(void)const&{
|
||||
return m_ret;
|
||||
}
|
||||
Retval&& value(void)&&{
|
||||
return std::move(m_ret);
|
||||
}
|
||||
};
|
||||
template<>
|
||||
class netreturn<void> : public netreturn_base
|
||||
|
||||
@@ -48,11 +48,10 @@ namespace matrix::rest{
|
||||
const raii::string& alias_lookup(void)const;
|
||||
const raii::string& displayname(void)const;
|
||||
const raii::string& profile_picture(void)const;
|
||||
raii::string file_download(const raii::string_base& homeserver, const raii::string_base& mediaid);
|
||||
raii::string file_thumbnail(const raii::string_base& homeserver, const raii::string_base& fileurl, int width, int height, const raii::string_base& method)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 file_download(const session_info& session, const raii::string_base& mediaid);
|
||||
raii::string file_thumbnail(const session_info& session, const raii::string_base& fileurl, int width, int height, const raii::string_base& method)const;
|
||||
raii::string presence(const session_info& session, const raii::string_base& userid)const;
|
||||
raii::string sync(const session_info& session, const raii::rjp_string& batch, const raii::string& timeout);
|
||||
|
||||
void repopulate(const session_info&);
|
||||
void invalidate(void);
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#define MATRIX_ROOM_URL_LIST_HPP
|
||||
|
||||
#include "raii/string.hpp"
|
||||
#include "matrix/session_info.hpp"
|
||||
|
||||
namespace matrix{
|
||||
|
||||
@@ -33,25 +34,27 @@ namespace matrix{
|
||||
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);
|
||||
raii::string join(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const;
|
||||
raii::string leave(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const;
|
||||
raii::string forget(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const;
|
||||
raii::string upgrade(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)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;
|
||||
room_url_list(const session_info& session, const raii::string_base& roomid);
|
||||
raii::string join(const session_info& session, const raii::string_base& roomid)const;
|
||||
raii::string leave(const session_info& session, const raii::string_base& roomid)const;
|
||||
raii::string forget(const session_info& session, const raii::string_base& roomid)const;
|
||||
raii::string upgrade(const session_info& session, const raii::string_base& roomid)const;
|
||||
raii::string read_receipt(const session_info& session, const raii::string_base& roomid, const raii::string_base& eventid)const;
|
||||
raii::string send(const session_info& session, const raii::string_base& roomid, const raii::string_base& eventtype)const;
|
||||
raii::string redact(const session_info& session, 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;
|
||||
raii::string messages(const raii::string_base& homeserver, const raii::string_base& access_token,
|
||||
const raii::string_base& roomid, const raii::string_base& from, const raii::string_base& to,
|
||||
const raii::string_base& dir, int limit)const;
|
||||
raii::string messages(const session_info& session, const raii::string_base& roomid,
|
||||
const raii::string_base& from, const raii::string_base& to,
|
||||
const raii::string_base& dir, int limit)const;
|
||||
|
||||
void repopulate(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& userid, const raii::string_base& roomid);
|
||||
raii::string power_level(const session_info& session, const raii::string_base& roomid)const;
|
||||
|
||||
void repopulate(const session_info& session, const raii::string_base& roomid);
|
||||
void invalidate_accesstoken(void);
|
||||
private:
|
||||
static constexpr const char* s_proto = "https://";
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#define MATRIX_SESSION_HPP
|
||||
|
||||
#include "matrix/client.hpp"
|
||||
#include "matrix/syncer.hpp"
|
||||
#include "matrix/session_info.hpp"
|
||||
#include "matrix/auth.hpp"
|
||||
#include "raii/curler.hpp"
|
||||
@@ -119,13 +118,6 @@ namespace matrix{
|
||||
* Returns: a new matrix::client.
|
||||
*/
|
||||
client spawn_client(void)const;
|
||||
/*
|
||||
* Create a matrix::syncer which shares login details with this session.
|
||||
* Note the syncer and session will share memory for generated urls, homeserver, access_token, and
|
||||
* useragent. Changing any of these fields after spawning a syncer MUST be synchronized across threads.
|
||||
* Returns: a new matrix::syncer.
|
||||
*/
|
||||
syncer spawn_syncer(void)const;
|
||||
|
||||
/*
|
||||
* NOT thread safe.
|
||||
|
||||
@@ -117,14 +117,14 @@ namespace matrix::sync{
|
||||
/*
|
||||
Class returned by a sync. Makes for theoretically easier processing than a pure raw response
|
||||
*/
|
||||
class response
|
||||
class client_response
|
||||
{
|
||||
private:
|
||||
raii::rjp_ptr m_root = nullptr;
|
||||
public:
|
||||
constexpr response(void) = default;
|
||||
response(const raii::string_base& src);
|
||||
response(RJP_value* root);
|
||||
constexpr client_response(void) = default;
|
||||
client_response(const raii::string_base& src);
|
||||
client_response(RJP_value* root);
|
||||
|
||||
room_list room_join_events(void)const;
|
||||
room_list room_invite_events(void)const;
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
/**
|
||||
This file is a part of 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef MATRIX_SYNCER_HPP
|
||||
#define MATRIX_SYNCER_HPP
|
||||
|
||||
#include "raii/curler.hpp"
|
||||
#include "raii/rjp_string.hpp"
|
||||
#include "raii/string.hpp"
|
||||
#include "matrix/session_info.hpp"
|
||||
#include "matrix/connection.hpp"
|
||||
#include "matrix/sync_response.hpp"
|
||||
#include "matrix/netreturn.hpp"
|
||||
#include <cstdlib> //size_t
|
||||
#include <memory> //shared_ptr
|
||||
|
||||
namespace matrix{
|
||||
|
||||
//Specialized class used for syncing up with homeserver.
|
||||
//Designed to be run on a dedicated thread.
|
||||
//Shares state with spawning session.
|
||||
class syncer : public connection
|
||||
{
|
||||
private:
|
||||
raii::rjp_string m_next_batch; //string which tracks where we are in the server history
|
||||
|
||||
public:
|
||||
syncer(const std::shared_ptr<session_info>&);
|
||||
|
||||
//Copy and move ctor
|
||||
syncer(const syncer& b) = default;
|
||||
syncer(syncer&& b) = default;
|
||||
//Dtor
|
||||
~syncer(void) = default;
|
||||
|
||||
//Copy and move assignment
|
||||
syncer& operator=(const syncer&) = default;
|
||||
syncer& operator=(syncer&&) = default;
|
||||
|
||||
/*
|
||||
* Sync state with the homeserver. Will wait for up to timeout ms.
|
||||
* Returns: the raw json response from the homeserver.
|
||||
*/
|
||||
netreturn<sync::response> sync(size_t timeout);
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user