aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-11-23 18:48:43 +0100
committerdec05eba <dec05eba@protonmail.com>2020-11-23 19:18:58 +0100
commitfd699d287de23771c17e395d79aa38287453a850 (patch)
tree36c1d2c47a2cb6426882aeeda65ad1d4851523e2 /src/QuickMedia.cpp
parent5c0dd4a6885da32c52d4d03235507a5492919dd3 (diff)
Matrix: readd additional messages sync, remove reply/edit formatting from room description
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp78
1 files changed, 32 insertions, 46 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 0e1c295..bbc3971 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -3037,25 +3037,6 @@ namespace QuickMedia {
sf::Text text;
};
- static std::string remove_reply_formatting(const std::string &str) {
- if(strncmp(str.c_str(), "> <@", 4) == 0) {
- size_t index = str.find("> ", 4);
- if(index != std::string::npos) {
- size_t msg_begin = str.find("\n\n", index + 2);
- if(msg_begin != std::string::npos)
- return str.substr(msg_begin + 2);
- }
- }
- return str;
- }
-
- static std::string message_get_body_remove_formatting(Message *message) {
- if(message->related_event_type == RelatedEventType::REPLY || message->related_event_type == RelatedEventType::EDIT)
- return remove_reply_formatting(message->body);
- else
- return message->body;
- }
-
static const sf::Vector2i CHAT_MESSAGE_THUMBNAIL_MAX_SIZE(600, 337);
static std::shared_ptr<BodyItem> message_to_body_item(RoomData *room, Message *message, const std::string &my_display_name, const std::string &my_user_id) {
@@ -3774,15 +3755,13 @@ namespace QuickMedia {
//tabs[MESSAGES_TAB_INDEX].body->set_page_scroll(window_size.y);
bool fetched_enough_messages = false;
- bool initial_prev_messages_fetch = true;
- auto fetch_more_previous_messages_if_needed = [this, &tabs, &current_room, &fetched_enough_messages, &previous_messages_future, &initial_prev_messages_fetch]() {
+ auto fetch_more_previous_messages_if_needed = [this, &tabs, &current_room, &fetched_enough_messages, &previous_messages_future]() {
if(!fetched_enough_messages && !previous_messages_future.valid()) {
- bool fetch_latest_messages = !matrix->is_initial_sync_finished() && initial_prev_messages_fetch;
if(!tabs[MESSAGES_TAB_INDEX].body->is_body_full_with_items()) {
- previous_messages_future = [this, &current_room, fetch_latest_messages]() {
+ previous_messages_future = [this, &current_room]() {
Messages messages;
- if(matrix->get_previous_room_messages(current_room, messages, fetch_latest_messages) != PluginResult::OK)
+ if(matrix->get_previous_room_messages(current_room, messages, true) != PluginResult::OK)
fprintf(stderr, "Failed to get previous matrix messages in room: %s\n", current_room->id.c_str());
return messages;
};
@@ -3873,6 +3852,12 @@ namespace QuickMedia {
if(tabs[MESSAGES_TAB_INDEX].body->is_selected_item_last_visible_item() && selected_tab == MESSAGES_TAB_INDEX && chat_state != ChatState::TYPING_MESSAGE)
scroll_to_end = true;
+ if(current_room->initial_prev_messages_fetch) {
+ current_room->initial_prev_messages_fetch = false;
+ if(selected_tab == MESSAGES_TAB_INDEX)
+ scroll_to_end = true;
+ }
+
BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected();
tabs[MESSAGES_TAB_INDEX].body->insert_items_by_timestamps(messages_to_body_items(current_room, messages, current_room->get_user_display_name(me), me->user_id));
if(selected_item && !scroll_to_end) {
@@ -4474,9 +4459,6 @@ namespace QuickMedia {
filter_sent_messages(new_messages);
filter_existing_messages(new_messages);
fprintf(stderr, "Finished fetching older messages, num new messages: %zu\n", new_messages.size());
- bool move_to_bottom = false;
- if(initial_prev_messages_fetch)
- move_to_bottom = tabs[MESSAGES_TAB_INDEX].body->no_items_visible();
size_t num_new_messages = new_messages.size();
if(num_new_messages > 0) {
BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected();
@@ -4492,13 +4474,10 @@ namespace QuickMedia {
// TODO: Do not loop all items, only loop the new items
resolve_unreferenced_events_with_body_items(tabs[MESSAGES_TAB_INDEX].body->items.data(), tabs[MESSAGES_TAB_INDEX].body->items.size());
}
- if(initial_prev_messages_fetch) {
- initial_prev_messages_fetch = false;
- // XXX: Hack to scroll up while keeping the selected item (usually the last one) visible
- if(move_to_bottom) {
+ if(num_new_messages > 0 && current_room->initial_prev_messages_fetch) {
+ current_room->initial_prev_messages_fetch = false;
+ if(selected_tab == MESSAGES_TAB_INDEX)
tabs[MESSAGES_TAB_INDEX].body->select_last_item();
- //tabs[MESSAGES_TAB_INDEX].body->set_page_scroll(window_size.y);
- }
}
}
@@ -4567,18 +4546,6 @@ namespace QuickMedia {
window.draw(room_name_text);
}
- gradient_points[0].position.x = 0.0f;
- gradient_points[0].position.y = tab_shade_height;
-
- gradient_points[1].position.x = window_size.x;
- gradient_points[1].position.y = tab_shade_height;
-
- gradient_points[2].position.x = window_size.x;
- gradient_points[2].position.y = tab_shade_height + gradient_height;
-
- gradient_points[3].position.x = 0.0f;
- gradient_points[3].position.y = tab_shade_height + gradient_height;
-
int i = 0;
for(ChatTab &tab : tabs) {
if(i == selected_tab) {
@@ -4597,6 +4564,18 @@ namespace QuickMedia {
gradient_inc += (frame_time_ms * 0.5);
sf::Color top_color = interpolate_colors(back_color, sf::Color(175, 180, 188), progress);
+ gradient_points[0].position.x = 0.0f;
+ gradient_points[0].position.y = tab_shade_height;
+
+ gradient_points[1].position.x = window_size.x;
+ gradient_points[1].position.y = tab_shade_height;
+
+ gradient_points[2].position.x = window_size.x;
+ gradient_points[2].position.y = tab_shade_height + gradient_height;
+
+ gradient_points[3].position.x = 0.0f;
+ gradient_points[3].position.y = tab_shade_height + gradient_height;
+
gradient_points[0].color = top_color;
gradient_points[1].color = top_color;
gradient_points[2].color = back_color;
@@ -4709,7 +4688,9 @@ namespace QuickMedia {
}
}
- current_room = matrix->get_room_by_id(current_room->id);
+
+ RoomData *new_room = matrix->get_room_by_id(current_room->id);
+ assert(new_room == current_room);
if(current_room) {
//all_messages.clear();
tabs[MESSAGES_TAB_INDEX].body->clear_items();
@@ -4726,6 +4707,11 @@ namespace QuickMedia {
modify_related_messages_in_current_room(all_messages_new);
unresolved_reactions.clear();
process_reactions(all_messages_new);
+ if(current_room->initial_prev_messages_fetch) {
+ current_room->initial_prev_messages_fetch = false;
+ if(selected_tab == MESSAGES_TAB_INDEX)
+ tabs[MESSAGES_TAB_INDEX].body->select_last_item();
+ }
std::vector<std::string> pinned_events;
matrix->get_all_pinned_events(current_room, pinned_events);