diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 315fef0..d0eadb4 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -3199,7 +3199,7 @@ namespace QuickMedia { auto find_body_item_by_event_id = [](std::shared_ptr<BodyItem> *body_items, size_t num_body_items, const std::string &event_id, size_t *index_result = nullptr) -> std::shared_ptr<BodyItem> { for(size_t i = 0; i < num_body_items; ++i) { auto &body_item = body_items[i]; - if(static_cast<Message*>(body_item->userdata)->event_id == event_id) { + if(body_item->userdata && static_cast<Message*>(body_item->userdata)->event_id == event_id) { if(index_result) *index_result = i; return body_item; @@ -3610,6 +3610,8 @@ namespace QuickMedia { return; Message *message = static_cast<Message*>(body_item->userdata); + if(!message) + return; assert(message); #if 0 @@ -3848,7 +3850,7 @@ namespace QuickMedia { for(auto &message_body_items : tabs[MESSAGES_TAB_INDEX].body->items) { Message *message = static_cast<Message*>(message_body_items->userdata); - if(message->user != user) + if(!message || message->user != user) continue; message_body_items->set_author(user_display_name); @@ -3885,6 +3887,9 @@ namespace QuickMedia { fprintf(stderr, "updated messages author for all users in room: %s\n", current_room->id.c_str()); for(auto &message_body_items : tabs[MESSAGES_TAB_INDEX].body->items) { Message *message = static_cast<Message*>(message_body_items->userdata); + if(!message) + continue; + message_body_items->set_author(current_room->get_user_display_name(message->user)); if(!is_visual_media_message_type(message->type)) { message_body_items->thumbnail_url = current_room->get_user_avatar_url(message->user); @@ -4326,6 +4331,7 @@ namespace QuickMedia { } else if(provisional_message->body_item) { provisional_message->body_item->set_description("Failed to send: " + provisional_message->body_item->get_description()); provisional_message->body_item->set_description_color(sf::Color::Red); + provisional_message->body_item->userdata = nullptr; } } @@ -4543,9 +4549,10 @@ namespace QuickMedia { // TODO: What if the message is no longer valid? setting_read_marker = true; RoomData *room = current_room; - set_read_marker_future = [this, room, message]() mutable { - if(matrix->set_read_marker(room, message) != PluginResult::OK) { - fprintf(stderr, "Warning: failed to set read marker to %s\n", message->event_id.c_str()); + std::string event_id = message->event_id; + set_read_marker_future = [this, room, event_id]() mutable { + if(matrix->set_read_marker(room, event_id) != PluginResult::OK) { + fprintf(stderr, "Warning: failed to set read marker to %s\n", event_id.c_str()); } }; } |