diff options
-rw-r--r-- | plugins/Matrix.hpp | 1 | ||||
-rw-r--r-- | src/plugins/Matrix.cpp | 55 |
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) |