aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp41
1 files changed, 32 insertions, 9 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 865f6fe..5d980f3 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -981,6 +981,11 @@ namespace QuickMedia {
if(after_submit_handler)
after_submit_handler();
+ if(tabs[selected_tab].page->clear_search_after_submit() && tabs[selected_tab].search_bar) {
+ tabs[selected_tab].search_bar->clear();
+ tabs[selected_tab].search_bar->onTextUpdateCallback("");
+ }
+
if(tabs[selected_tab].page->is_single_page()) {
tabs[selected_tab].search_bar->clear();
if(new_tabs.size() == 1)
@@ -3224,16 +3229,27 @@ namespace QuickMedia {
}
};
- auto process_pinned_events = [&tabs](const std::optional<std::vector<std::string>> &pinned_events) {
- if(!pinned_events || pinned_events->empty())
+ auto pinned_body_items_contains_event = [&tabs](const std::string &event_id) {
+ for(auto &body_item : tabs[PINNED_TAB_INDEX].body->items) {
+ if(static_cast<PinnedEventData*>(body_item->userdata)->event_id == event_id)
+ return true;
+ }
+ return false;
+ };
+
+ auto process_pinned_events = [&tabs, &pinned_body_items_contains_event](const std::optional<std::vector<std::string>> &pinned_events) {
+ if(!pinned_events)
return;
bool empty_before = tabs[PINNED_TAB_INDEX].body->items.empty();
int selected_before = tabs[PINNED_TAB_INDEX].body->get_selected_item();
- tabs[PINNED_TAB_INDEX].body->items.clear();
+ auto prev_pinned_body_items = tabs[PINNED_TAB_INDEX].body->items;
// TODO: Add message to rooms messages when there are new pinned events
for(const std::string &event : pinned_events.value()) {
+ if(pinned_body_items_contains_event(event))
+ continue;
+
auto body = BodyItem::create("");
body->set_description("Loading message...");
PinnedEventData *event_data = new PinnedEventData();
@@ -3243,6 +3259,11 @@ namespace QuickMedia {
tabs[PINNED_TAB_INDEX].body->items.push_back(std::move(body));
}
+ for(auto &prev_body_item : prev_pinned_body_items) {
+ if(!pinned_body_items_contains_event(static_cast<PinnedEventData*>(prev_body_item->userdata)->event_id))
+ delete (PinnedEventData*)prev_body_item->userdata;
+ }
+
if(empty_before)
tabs[PINNED_TAB_INDEX].body->select_last_item();
else
@@ -3610,7 +3631,7 @@ namespace QuickMedia {
return false;
};
- auto cleanup_tasks = [&set_read_marker_future, &fetch_message_future, &typing_state_queue, &typing_state_thread, &post_task_queue, &post_thread, &unreferenced_event_by_room, &tabs]() {
+ auto cleanup_tasks = [&set_read_marker_future, &fetch_message_future, &typing_state_queue, &typing_state_thread, &post_task_queue, &post_thread, &tabs]() {
set_read_marker_future.cancel();
fetch_message_future.cancel();
typing_state_queue.close();
@@ -3630,6 +3651,7 @@ namespace QuickMedia {
for(auto &body_item : tabs[PINNED_TAB_INDEX].body->items) {
delete (PinnedEventData*)body_item->userdata;
}
+ tabs[PINNED_TAB_INDEX].body->clear_items();
}
//tabs.clear();
@@ -4281,7 +4303,6 @@ namespace QuickMedia {
std::vector<std::string> pinned_events;
matrix->get_all_pinned_events(current_room, pinned_events);
process_pinned_events(std::move(pinned_events));
- tabs[PINNED_TAB_INDEX].body->select_last_item();
typing_state_queue.restart();
typing_state_thread = std::thread(typing_state_handler);
post_task_queue.restart();
@@ -4314,11 +4335,13 @@ namespace QuickMedia {
auto rooms_tags_body = create_body();
rooms_tags_body->thumbnail_mask_shader = &circle_mask_shader;
- auto matrix_rooms_tag_page = std::make_unique<MatrixRoomTagsPage>(this, rooms_tags_body.get());
+ auto matrix_rooms_tage_page_search_bar = create_search_bar("Search...", SEARCH_DELAY_FILTER);
+ auto matrix_rooms_tag_page = std::make_unique<MatrixRoomTagsPage>(this, rooms_tags_body.get(), matrix_rooms_tage_page_search_bar.get());
auto invites_body = create_body();
invites_body->thumbnail_mask_shader = &circle_mask_shader;
- auto matrix_invites_page = std::make_unique<MatrixInvitesPage>(this, matrix, invites_body.get());
+ auto matrix_invites_page_search_bar = create_search_bar("Search...", SEARCH_DELAY_FILTER);
+ auto matrix_invites_page = std::make_unique<MatrixInvitesPage>(this, matrix, invites_body.get(), matrix_invites_page_search_bar.get());
MatrixQuickMedia matrix_handler(this, matrix, matrix_rooms_page.get(), matrix_rooms_tag_page.get(), matrix_invites_page.get());
bool sync_cached = false;
@@ -4327,8 +4350,8 @@ namespace QuickMedia {
std::vector<Tab> tabs;
tabs.push_back(Tab{std::move(rooms_body), std::move(matrix_rooms_page), std::move(matrix_rooms_page_search_bar)});
- tabs.push_back(Tab{std::move(rooms_tags_body), std::move(matrix_rooms_tag_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)});
- tabs.push_back(Tab{std::move(invites_body), std::move(matrix_invites_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)});
+ tabs.push_back(Tab{std::move(rooms_tags_body), std::move(matrix_rooms_tag_page), std::move(matrix_rooms_tage_page_search_bar)});
+ tabs.push_back(Tab{std::move(invites_body), std::move(matrix_invites_page), std::move(matrix_invites_page_search_bar)});
while(window.isOpen()) {
page_loop(tabs);