aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2022-11-13 22:25:03 +0100
committerdec05eba <dec05eba@protonmail.com>2022-11-13 22:25:03 +0100
commita98911daeb80ab8028dfd425d07d19471e936448 (patch)
tree18196ac23e86b8166e39b691a5adf76c1ff98c6a /src/QuickMedia.cpp
parentaea90e2c43d6dbf8b8276e1209f4d4abe1cea128 (diff)
Matrix: allow pinning a message if no message has ever been pinned before in the room, fix get_previous_message spam when reaching top sometimes, fit card view cutting off bottom text (description)
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp41
1 files changed, 33 insertions, 8 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index 74cd4a1..ea74c09 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -6214,6 +6214,7 @@ namespace QuickMedia {
Messages messages;
MessageDirection message_dir;
bool reached_end = false;
+ bool success = true;
};
AsyncTask<FetchMessagesResult> fetch_messages_future;
MessageDirection fetch_messages_dir = MessageDirection::BEFORE;
@@ -6739,49 +6740,68 @@ namespace QuickMedia {
move_room = true;
};
- std::function<void()> on_top_reached = [this, &fetch_messages_future, &fetch_messages_dir, &ui_tabs, &MESSAGES_TAB_INDEX, &gradient_inc, current_room, &before_token, &after_token, &fetched_enough_messages_top] {
+ mgl::Clock fetch_previous_messages_retry_timer;
+ double fetch_previous_messages_timeout = 0.0;
+
+ std::function<void()> on_top_reached = [&] {
const int selected_tab = ui_tabs.get_selected();
if(fetched_enough_messages_top || fetch_messages_future.valid() || selected_tab != MESSAGES_TAB_INDEX)
return;
+ if(fetch_previous_messages_retry_timer.get_elapsed_time_seconds() < fetch_previous_messages_timeout)
+ return;
+
+ fetch_previous_messages_retry_timer.restart();
gradient_inc = 0;
if(before_token.empty() && after_token.empty()) {
fetch_messages_dir = MessageDirection::BEFORE;
- fetch_messages_future = AsyncTask<FetchMessagesResult>([this, current_room]() {
+ fetch_messages_future = AsyncTask<FetchMessagesResult>([&]() {
FetchMessagesResult messages;
messages.message_dir = MessageDirection::BEFORE;
messages.reached_end = false;
- if(matrix->get_previous_room_messages(current_room, messages.messages, false, &messages.reached_end) != PluginResult::OK)
+ if(matrix->get_previous_room_messages(current_room, messages.messages, false, &messages.reached_end) != PluginResult::OK) {
fprintf(stderr, "Failed to get previous matrix messages in room: %s\n", current_room->id.c_str());
+ messages.success = false;
+ } else {
+ messages.success = true;
+ }
return messages;
});
} else if(!before_token.empty()) {
fetch_messages_dir = MessageDirection::BEFORE;
- fetch_messages_future = AsyncTask<FetchMessagesResult>([this, current_room, &before_token]() {
+ fetch_messages_future = AsyncTask<FetchMessagesResult>([&]() {
std::string token = before_token;
FetchMessagesResult messages;
messages.message_dir = MessageDirection::BEFORE;
messages.reached_end = false;
- if(matrix->get_messages_in_direction(current_room, token, MessageDirection::BEFORE, messages.messages, before_token) != PluginResult::OK)
+ if(matrix->get_messages_in_direction(current_room, token, MessageDirection::BEFORE, messages.messages, before_token) != PluginResult::OK) {
fprintf(stderr, "Failed to get previous matrix messages in room: %s\n", current_room->id.c_str());
+ messages.success = false;
+ } else {
+ messages.success = true;
+ }
messages.reached_end = before_token.empty();
return messages;
});
}
};
- std::function<void()> on_bottom_reached = [this, &fetch_messages_future, &fetch_messages_dir, &ui_tabs, &MESSAGES_TAB_INDEX, &gradient_inc, current_room, &after_token, &fetched_enough_messages_bottom] {
+ std::function<void()> on_bottom_reached = [&] {
const int selected_tab = ui_tabs.get_selected();
if(!fetched_enough_messages_bottom && !after_token.empty() && !fetch_messages_future.valid() && selected_tab == MESSAGES_TAB_INDEX) {
fetch_messages_dir = MessageDirection::AFTER;
gradient_inc = 0;
- fetch_messages_future = AsyncTask<FetchMessagesResult>([this, current_room, &after_token]() {
+ fetch_messages_future = AsyncTask<FetchMessagesResult>([&]() {
std::string token = after_token;
FetchMessagesResult messages;
messages.message_dir = MessageDirection::AFTER;
messages.reached_end = false;
- if(matrix->get_messages_in_direction(current_room, token, MessageDirection::AFTER, messages.messages, after_token) != PluginResult::OK)
+ if(matrix->get_messages_in_direction(current_room, token, MessageDirection::AFTER, messages.messages, after_token) != PluginResult::OK) {
fprintf(stderr, "Failed to get next matrix messages in room: %s\n", current_room->id.c_str());
+ messages.success = false;
+ } else {
+ messages.success = true;
+ }
messages.reached_end = after_token.empty();
return messages;
});
@@ -7425,6 +7445,11 @@ namespace QuickMedia {
FetchMessagesResult new_messages_result = fetch_messages_future.get();
all_messages.insert(all_messages.end(), new_messages_result.messages.begin(), new_messages_result.messages.end());
+ if(new_messages_result.success)
+ fetch_previous_messages_timeout = 0.0;
+ else
+ fetch_previous_messages_timeout = 4.0;
+
if(new_messages_result.message_dir == MessageDirection::BEFORE)
fetched_enough_messages_top = new_messages_result.reached_end;
if(new_messages_result.message_dir == MessageDirection::AFTER)