Filter out content in sync that is currently unhandled (#198)

I had a look at sync.cpp and checked which parts of the sync response
are currently handled and which not. As I think it is unnecessary to let the 
unhandled data be transmitted without being handled I added these filters.

In the same term I increased the timeout server-side to 30s as Riot
defaults to this value as well. Especially now when a lots of presence-updates 
are not send anymore this value is more relevant.

It is now also possible to use a filter that is defined in`client/sync_filter`.
Advanced users might want to set an own filter here.

[ci skip]
remotes/origin/HEAD
krombel 7 years ago committed by mujx
parent 82341247f7
commit 0570135253
  1. 3
      include/MatrixClient.h
  2. 38
      src/MatrixClient.cc

@ -159,4 +159,7 @@ private:
// Token to be used for the next sync. // Token to be used for the next sync.
QString next_batch_; QString next_batch_;
// filter to be send as filter-param for (initial) /sync requests
QString filter_;
}; };

@ -41,6 +41,32 @@ MatrixClient::MatrixClient(QString server, QObject *parent)
QSettings settings; QSettings settings;
txn_id_ = settings.value("client/transaction_id", 1).toInt(); txn_id_ = settings.value("client/transaction_id", 1).toInt();
QJsonObject default_filter{
{"room",
QJsonObject{
{"include_leave", true},
{"account_data",
QJsonObject{
{"not_types", QJsonArray{"*"}},
},
},
},
},{"account_data",
QJsonObject{
{"not_types", QJsonArray{"*"}},
},
},{"presence",
QJsonObject{
{"not_types", QJsonArray{"*"}},
},
},
};
filter_ = settings.value(
"client/sync_filter",
QJsonDocument(default_filter).toJson(QJsonDocument::Compact)
).toString();
connect(this, connect(this,
&QNetworkAccessManager::networkAccessibleChanged, &QNetworkAccessManager::networkAccessibleChanged,
this, this,
@ -194,17 +220,10 @@ MatrixClient::registerUser(const QString &user, const QString &pass, const QStri
void void
MatrixClient::sync() noexcept MatrixClient::sync() noexcept
{ {
QJsonObject filter{
{"room",
QJsonObject{
{"include_leave", true},
}},
};
QUrlQuery query; QUrlQuery query;
query.addQueryItem("set_presence", "online"); query.addQueryItem("set_presence", "online");
query.addQueryItem("filter", QJsonDocument(filter).toJson(QJsonDocument::Compact)); query.addQueryItem("filter", filter_);
query.addQueryItem("timeout", "15000"); query.addQueryItem("timeout", "30000");
query.addQueryItem("access_token", token_); query.addQueryItem("access_token", token_);
if (next_batch_.isEmpty()) { if (next_batch_.isEmpty()) {
@ -334,6 +353,7 @@ MatrixClient::initialSync() noexcept
{ {
QUrlQuery query; QUrlQuery query;
query.addQueryItem("timeout", "0"); query.addQueryItem("timeout", "0");
query.addQueryItem("filter", filter_);
query.addQueryItem("access_token", token_); query.addQueryItem("access_token", token_);
QUrl endpoint(server_); QUrl endpoint(server_);

Loading…
Cancel
Save