Simplify url generation internally. Remove matrix::syncer; moved functionality to matrix::client

This commit is contained in:
rexy712
2020-01-03 15:43:05 -08:00
parent 232b669d44
commit 9cf6905ea3
16 changed files with 160 additions and 271 deletions

View File

@@ -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){

View File

@@ -20,7 +20,6 @@
#define MATRIX_HPP
#include "matrix/client.hpp"
#include "matrix/syncer.hpp"
#include "matrix/session.hpp"
#include "matrix/roomcxn.hpp"

View File

@@ -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

View File

@@ -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);

View File

@@ -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://";

View File

@@ -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.

View File

@@ -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;

View File

@@ -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