diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 27 |
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; |