aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-11-07 22:47:43 +0100
committerdec05eba <dec05eba@protonmail.com>2020-11-07 22:47:43 +0100
commit00436ad621b8cb35696466e68097bc0d56f22fdf (patch)
tree0ccc1e370e6f1cee3b84edc734ec4cc1fdd24d53
parent9ce78a45ad14bba4a3caf554d589f4b3ce5f4050 (diff)
Cache read tag
-rw-r--r--plugins/Matrix.hpp1
-rw-r--r--src/plugins/Matrix.cpp55
2 files changed, 3 insertions, 53 deletions
diff --git a/plugins/Matrix.hpp b/plugins/Matrix.hpp
index 812c1a0..e4e1583 100644
--- a/plugins/Matrix.hpp
+++ b/plugins/Matrix.hpp
@@ -461,7 +461,6 @@ namespace QuickMedia {
PluginResult get_previous_room_messages(RoomData *room_data, bool latest_messages);
void events_add_user_info(const rapidjson::Value &events_json, RoomData *room_data);
std::shared_ptr<UserInfo> parse_user_info(const rapidjson::Value &json, const std::string &user_id, RoomData *room_data);
- void events_add_user_read_markers(const rapidjson::Value &events_json, RoomData *room_data);
void events_set_user_read_marker(const rapidjson::Value &events_json, RoomData *room_data, std::shared_ptr<UserInfo> &me);
void events_add_messages(const rapidjson::Value &events_json, RoomData *room_data, MessageDirection message_dir, bool has_unread_notifications);
void events_set_room_name(const rapidjson::Value &events_json, RoomData *room_data);
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index f62088a..c1f2b3c 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -22,7 +22,8 @@ static const char* SERVICE_NAME = "matrix";
static const char* OTHERS_ROOM_TAG = "tld.name.others";
// Filter without account data
static const char* INITIAL_FILTER = "{\"presence\":{\"limit\":0,\"types\":[\"\"]},\"account_data\":{\"limit\":0,\"types\":[\"\"]},\"room\":{\"state\":{\"not_types\":[\"m.room.related_groups\",\"m.room.power_levels\",\"m.room.join_rules\",\"m.room.history_visibility\"],\"lazy_load_members\":true},\"timeline\":{\"limit\":1,\"lazy_load_members\":true},\"ephemeral\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true},\"account_data\":{\"limit\":1,\"types\":[\"m.fully_read\",\"m.tag\"],\"lazy_load_members\":true}}}";
-static const char* CONTINUE_FILTER = "{\"presence\":{\"limit\":0,\"types\":[\"\"]},\"account_data\":{\"limit\":0,\"types\":[\"\"]},\"room\":{\"state\":{\"not_types\":[\"m.room.related_groups\",\"m.room.power_levels\",\"m.room.join_rules\",\"m.room.history_visibility\"],\"lazy_load_members\":true},\"timeline\":{\"limit\":20,\"lazy_load_members\":true},\"ephemeral\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true},\"account_data\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true}}}";
+static const char* ADDITIONAL_MESSAGES_FILTER = "{\"presence\":{\"limit\":0,\"types\":[\"\"]},\"account_data\":{\"limit\":0,\"types\":[\"\"]},\"room\":{\"state\":{\"not_types\":[\"m.room.related_groups\",\"m.room.power_levels\",\"m.room.join_rules\",\"m.room.history_visibility\"],\"lazy_load_members\":true},\"timeline\":{\"limit\":20,\"lazy_load_members\":true},\"ephemeral\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true},\"account_data\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true}}}";
+static const char* CONTINUE_FILTER = "{\"presence\":{\"limit\":0,\"types\":[\"\"]},\"account_data\":{\"limit\":0,\"types\":[\"\"]},\"room\":{\"state\":{\"not_types\":[\"m.room.related_groups\",\"m.room.power_levels\",\"m.room.join_rules\",\"m.room.history_visibility\"],\"lazy_load_members\":true},\"timeline\":{\"lazy_load_members\":true},\"ephemeral\":{\"limit\":0,\"types\":[\"\"],\"lazy_load_members\":true},\"account_data\":{\"types\":[\"m.fully_read\",\"m.tag\"],\"lazy_load_members\":true}}}";
static rapidjson::Value nullValue(rapidjson::kNullType);
static const rapidjson::Value& GetMember(const rapidjson::Value &obj, const char *key) {
@@ -921,7 +922,7 @@ namespace QuickMedia {
};
char url[1024];
- std::string filter_encoded = url_param_encode(CONTINUE_FILTER);
+ std::string filter_encoded = url_param_encode(ADDITIONAL_MESSAGES_FILTER);
snprintf(url, sizeof(url), "%s/_matrix/client/r0/sync?filter=%s&timeout=0", homeserver.c_str(), filter_encoded.c_str());
rapidjson::Document json_root;
@@ -1434,56 +1435,6 @@ namespace QuickMedia {
return user_info;
}
- void Matrix::events_add_user_read_markers(const rapidjson::Value &events_json, RoomData *room_data) {
- if(!events_json.IsArray())
- return;
-
- for(const rapidjson::Value &event_item_json : events_json.GetArray()) {
- if(!event_item_json.IsObject())
- continue;
-
- const rapidjson::Value &type_json = GetMember(event_item_json, "type");
- if(!type_json.IsString() || strcmp(type_json.GetString(), "m.receipt") != 0)
- continue;
-
- const rapidjson::Value &content_json = GetMember(event_item_json, "content");
- if(!content_json.IsObject())
- continue;
-
- for(auto const &it2 : content_json.GetObject()) {
- if(!it2.value.IsObject())
- continue;
-
- const rapidjson::Value &event_id_json = it2.name;
- if(!event_id_json.IsString())
- continue;
-
- const rapidjson::Value &read_json = GetMember(it2.value, "m.read");
- if(!read_json.IsObject())
- continue;
-
- std::string event_id_str = event_id_json.GetString();
-
- for(auto const &it3 : read_json.GetObject()) {
- if(!it3.value.IsObject())
- continue;
-
- const rapidjson::Value &user_id_json = it3.name;
- if(!user_id_json.IsString())
- continue;
-
- auto user = get_user_by_id(room_data, user_id_json.GetString());
- if(!user) {
- fprintf(stderr, "Read receipt for unknown user: %s, ignoring...\n", user_id_json.GetString());
- continue;
- }
-
- room_data->set_user_read_marker(user, event_id_str);
- }
- }
- }
- }
-
void Matrix::events_set_user_read_marker(const rapidjson::Value &events_json, RoomData *room_data, std::shared_ptr<UserInfo> &me) {
assert(me); // TODO: Remove read marker from user and set it for the room instead. We need that in the matrix pages also
if(!events_json.IsArray() || !me)