From 76e1aebbe075287a8297194b38343467c76dd964 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 26 Apr 2021 18:37:00 +0200 Subject: Fix soundcloud (fetch client id), add authors to mangakatana, some other fixes --- src/QuickMedia.cpp | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'src/QuickMedia.cpp') 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(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->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(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 tabs; -- cgit v1.2.3