aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp44
1 files changed, 34 insertions, 10 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp
index eb82a54..e2ee0ec 100644
--- a/src/QuickMedia.cpp
+++ b/src/QuickMedia.cpp
@@ -745,6 +745,7 @@ namespace QuickMedia {
{"//div[id='book_list']//div[class='media']//img", "src", nullptr},
{"//div[id='single_book']//div[class='cover']//img", "src", nullptr}
})
+ .authors_handler("//div[id='single_book']//a[class='author']", "text", "href", "/author/")
.list_chapters_handler("//div[class='chapters']//div[class='chapter']//a", "text", "href", "/manga/")
.list_chapters_uploaded_time_handler("//div[class='chapters']//div[class='update_time']", "text", nullptr)
.list_page_images_custom_handler([](const std::string &html_source) {
@@ -1271,8 +1272,12 @@ namespace QuickMedia {
std::string err_msg;
if(matrix->did_initial_sync_fail(err_msg)) {
show_notification("QuickMedia", "Initial matrix sync failed, error: " + err_msg, Urgency::CRITICAL);
+ matrix->logout();
+ current_page = PageType::CHAT_LOGIN;
+ chat_login_page();
+ after_matrix_login_page();
window.close();
- exit(0);
+ exit(exit_code);
}
}
}
@@ -1703,9 +1708,10 @@ namespace QuickMedia {
FetchResult fetch_result = associated_data.fetch_future.get();
tabs[i].body->items = std::move(fetch_result.body_items);
if(tabs[i].search_bar) tabs[i].body->filter_search_fuzzy(tabs[i].search_bar->get_text());
+ LazyFetchPage *lazy_fetch_page = static_cast<LazyFetchPage*>(tabs[i].page.get());
if(fetch_result.result != PluginResult::OK)
associated_data.search_result_text.setString("Failed to fetch page!");
- else if(tabs[i].body->items.empty())
+ else if(tabs[i].body->items.empty() && !lazy_fetch_page->lazy_fetch_is_loader())
associated_data.search_result_text.setString("No results found");
else
associated_data.search_result_text.setString("");
@@ -4024,7 +4030,12 @@ namespace QuickMedia {
show_notification("QuickMedia", "Error: invalid command: " + text + ", expected /upload, /logout, /me or /react", Urgency::NORMAL);
return false;
}
- }
+ } else if(chat_state == ChatState::REPLYING && text[0] == '/') {
+ if(strncmp(text.c_str(), "/react ", 7) == 0) {
+ msgtype = "m.reaction";
+ text.erase(text.begin(), text.begin() + 7);
+ }
+ }
auto message = std::make_shared<Message>();
message->user = matrix->get_me(current_room);
@@ -4042,10 +4053,14 @@ namespace QuickMedia {
if(tabs[MESSAGES_TAB_INDEX].body->is_selected_item_last_visible_item() && selected_tab == MESSAGES_TAB_INDEX)
scroll_to_end = true;
- if(chat_state == ChatState::TYPING_MESSAGE) {
+ if(chat_state == ChatState::TYPING_MESSAGE || (chat_state == ChatState::REPLYING && msgtype == "m.reaction")) {
BodyItem *selected_item = tabs[MESSAGES_TAB_INDEX].body->get_selected();
+ if(chat_state == ChatState::REPLYING)
+ selected_item = currently_operating_on_item.get();
if(msgtype == "m.reaction" && selected_item) {
void *related_to_message = selected_item->userdata;
+ if(chat_state == ChatState::REPLYING)
+ related_to_message = currently_operating_on_item->userdata;
message->type = MessageType::REACTION;
message->related_event_type = RelatedEventType::REACTION;
message->related_event_id = static_cast<Message*>(related_to_message)->event_id;
@@ -4903,7 +4918,7 @@ namespace QuickMedia {
chat_login_page();
if(current_page == PageType::CHAT)
after_matrix_login_page();
- exit(0);
+ exit(exit_code);
break;
}
default:
@@ -4956,14 +4971,11 @@ namespace QuickMedia {
if(redraw) {
redraw = false;
- float room_name_padding_y = 0.0f;
- float padding_bottom = 0.0f;
if(selected_tab == MESSAGES_TAB_INDEX || selected_tab == PINNED_TAB_INDEX) {
- room_name_padding_y = std::floor(10.0f * get_ui_scale() + room_name_total_height);
tab_vertical_offset = std::floor(10.0f * get_ui_scale());
}
- tab_shade_height = std::floor(tab_vertical_offset) + Tabs::get_height() + room_name_padding_y + padding_bottom;
+ tab_shade_height = std::floor(tab_vertical_offset) + Tabs::get_height() + room_name_padding_y;
float body_padding_horizontal = 10.0f;
float body_padding_vertical = std::floor(10.0f);
@@ -5237,6 +5249,10 @@ namespace QuickMedia {
std::string err_msg;
if(matrix->did_initial_sync_fail(err_msg)) {
show_notification("QuickMedia", "Initial matrix sync failed, error: " + err_msg, Urgency::CRITICAL);
+ matrix->logout();
+ current_page = PageType::CHAT_LOGIN;
+ chat_login_page();
+ after_matrix_login_page();
window.close();
goto chat_page_end;
}
@@ -5255,6 +5271,10 @@ namespace QuickMedia {
std::this_thread::sleep_for(std::chrono::milliseconds(10));
if(matrix->did_initial_sync_fail(err_msg)) {
show_notification("QuickMedia", "Initial matrix sync failed, error: " + err_msg, Urgency::CRITICAL);
+ matrix->logout();
+ current_page = PageType::CHAT_LOGIN;
+ chat_login_page();
+ after_matrix_login_page();
window.close();
goto chat_page_end;
}
@@ -5344,7 +5364,11 @@ namespace QuickMedia {
MatrixQuickMedia matrix_handler(this, matrix, matrix_rooms_page.get(), matrix_rooms_tag_page.get(), matrix_invites_page.get());
bool sync_cached = false;
- matrix->start_sync(&matrix_handler, sync_cached);
+ if(!matrix->start_sync(&matrix_handler, sync_cached)) {
+ show_notification("QuickMedia", "Failed to start sync", Urgency::CRITICAL);
+ exit_code = 1;
+ return;
+ }
is_login_sync = !sync_cached;
std::vector<Tab> tabs;