aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp27
1 files changed, 10 insertions, 17 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 4e84cda..db17982 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -3257,6 +3257,7 @@ namespace QuickMedia {
body_item->set_description_color(sf::Color(255, 100, 100));
else
body_item->set_description_color(sf::Color::White);
+ orig_message->replaced_by = message;
}
it = unreferenced_events.erase(it);
} else {
@@ -3292,6 +3293,7 @@ namespace QuickMedia {
body_item->set_description_color(sf::Color(255, 100, 100));
else
body_item->set_description_color(sf::Color::White);
+ orig_message->replaced_by = message;
}
} else {
unreferenced_events.push_back(message);
@@ -3745,16 +3747,19 @@ namespace QuickMedia {
if(!message)
return;
- if(matrix->is_initial_sync_finished() && message->type >= MessageType::TEXT && message->type <= MessageType::FILE && is_window_focused && chat_state != ChatState::URL_SELECTION && !setting_read_marker && read_marker_timer.getElapsedTime().asMilliseconds() >= read_marker_timeout_ms) {
+ if(matrix->is_initial_sync_finished() && message_is_timeline(message) && is_window_focused && chat_state != ChatState::URL_SELECTION && !setting_read_marker && read_marker_timer.getElapsedTime().asMilliseconds() >= read_marker_timeout_ms) {
+ Message *read_message = message;
+ if(message->replaced_by)
+ read_message = message->replaced_by.get();
// TODO: What if two messages have the same timestamp?
- if(message && !message->event_id.empty() && message->timestamp > current_room->last_read_message_timestamp) {
+ if(!read_message->event_id.empty() && read_message->timestamp > current_room->last_read_message_timestamp) {
//read_marker_timeout_ms = read_marker_timeout_ms_default;
- current_room->last_read_message_timestamp = message->timestamp;
+ current_room->last_read_message_timestamp = read_message->timestamp;
// TODO: What if the message is no longer valid?
setting_read_marker = true;
RoomData *room = current_room;
- std::string event_id = message->event_id;
- int64_t event_timestamp = message->timestamp;
+ std::string event_id = read_message->event_id;
+ int64_t event_timestamp = read_message->timestamp;
set_read_marker_future = [this, room, event_id, event_timestamp]() mutable {
if(matrix->set_read_marker(room, event_id, event_timestamp) != PluginResult::OK) {
fprintf(stderr, "Warning: failed to set read marker to %s\n", event_id.c_str());
@@ -4139,28 +4144,16 @@ namespace QuickMedia {
if(event.type == sf::Event::KeyPressed && event.key.control && event.key.alt && (chat_state == ChatState::NAVIGATING || chat_state == ChatState::URL_SELECTION)) {
if(event.key.code == sf::Keyboard::Up || (event.key.control && event.key.code == sf::Keyboard::K)) {
room_tabs[room_selected_tab].body->select_previous_item();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::Down || (event.key.control && event.key.code == sf::Keyboard::J)) {
room_tabs[room_selected_tab].body->select_next_item();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::PageUp) {
room_tabs[room_selected_tab].body->select_previous_page();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::PageDown) {
room_tabs[room_selected_tab].body->select_next_page();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::Home) {
room_tabs[room_selected_tab].body->select_first_item();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::End) {
room_tabs[room_selected_tab].body->select_last_item();
- move_room = true;
- goto chat_page_end;
} else if(event.key.code == sf::Keyboard::Escape) {
move_room = false;
goto chat_page_end;