diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 68 |
1 files changed, 50 insertions, 18 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index dc3d167..e6d7b9a 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -353,6 +353,8 @@ namespace QuickMedia { if(create_directory_recursive(get_cache_dir().join("thumbnails")) != 0) { fprintf(stderr, "Failed to create thumbnails directory\n"); } + + main_thread_id = std::this_thread::get_id(); } Program::~Program() { @@ -586,22 +588,19 @@ namespace QuickMedia { if(matrix) { matrix->use_tor = use_tor; - { - auto window_size_u = window.getSize(); - window_size.x = window_size_u.x; - window_size.y = window_size_u.y; - sf::Text loading_text("Loading...", *FontLoader::get_font(FontLoader::FontType::LATIN), 24); - loading_text.setPosition(window_size.x * 0.5f - loading_text.getLocalBounds().width * 0.5f, window_size.y * 0.5f - loading_text.getLocalBounds().height * 0.5f); - window.clear(back_color); - window.draw(loading_text); - window.display(); - } - if(matrix->load_and_verify_cached_session() == PluginResult::OK) { + + TaskResult task_result = run_task_with_loading_screen([this]() { + return matrix->load_and_verify_cached_session() == PluginResult::OK; + }); + + if(task_result == TaskResult::TRUE) { current_page = PageType::CHAT; - } else { + } else if(task_result == TaskResult::FALSE) { fprintf(stderr, "Failed to load session cache, redirecting to login page\n"); current_page = PageType::CHAT_LOGIN; chat_login_page(); + } else { + exit(exit_code); } after_matrix_login_page(); @@ -882,6 +881,10 @@ namespace QuickMedia { return current_chat_room; } + void Program::set_go_to_previous_page() { + go_to_previous_page = true; + } + static void select_body_item_by_room(Body *body, RoomData *room) { for(size_t i = 0; i < body->items.size(); ++i) { auto &body_item = body->items[i]; @@ -1327,6 +1330,11 @@ namespace QuickMedia { } window.display(); + + if(go_to_previous_page) { + go_to_previous_page = false; + goto page_end; + } } page_end: @@ -1500,6 +1508,8 @@ namespace QuickMedia { } TaskResult Program::run_task_with_loading_screen(std::function<bool()> callback) { + assert(std::this_thread::get_id() == main_thread_id); + std::promise<bool> result_promise; std::future<bool> future = result_promise.get_future(); std::thread task_thread([](std::promise<bool> &&promise, std::function<bool()> callback) { @@ -1642,7 +1652,7 @@ namespace QuickMedia { if(err != VideoPlayer::Error::OK) { std::string err_msg = "Failed to play url: "; err_msg += video_url; - show_notification("Video player", err_msg.c_str(), Urgency::CRITICAL); + show_notification("QuickMedia", err_msg.c_str(), Urgency::CRITICAL); current_page = previous_page; } else { related_media_body->clear_items(); @@ -1658,7 +1668,7 @@ namespace QuickMedia { std::string err_msg = "Failed to extract id of youtube url "; err_msg += video_url; err_msg + ", video wont be saved in history"; - show_notification("Video player", err_msg.c_str(), Urgency::LOW); + show_notification("QuickMedia", err_msg.c_str(), Urgency::LOW); return; } @@ -1718,7 +1728,7 @@ namespace QuickMedia { // If there are no videos to play, then dont play any... if(new_video_url.empty()) { - show_notification("Video player", "No more related videos to play"); + show_notification("QuickMedia", "No more related videos to play"); current_page = previous_page; return; } @@ -1865,7 +1875,7 @@ namespace QuickMedia { VideoPlayer::Error update_err = video_player->update(); if(update_err == VideoPlayer::Error::FAIL_TO_CONNECT_TIMEOUT) { - show_notification("Video player", "Failed to connect to mpv ipc after 10 seconds", Urgency::CRITICAL); + show_notification("QuickMedia", "Failed to connect to mpv ipc after 10 seconds", Urgency::CRITICAL); current_page = previous_page; break; } else if(update_err == VideoPlayer::Error::EXITED && video_player->exit_status == 0) { @@ -1873,7 +1883,7 @@ namespace QuickMedia { current_page = previous_page; break; } else if(update_err != VideoPlayer::Error::OK) { - show_notification("Video player", "The video player failed to play the video (error code " + std::to_string((int)update_err) + ")", Urgency::CRITICAL); + show_notification("QuickMedia", "The video player failed to play the video (error code " + std::to_string((int)update_err) + ")", Urgency::CRITICAL); current_page = previous_page; break; } @@ -3278,6 +3288,16 @@ namespace QuickMedia { chat_input.set_editable(false); chat_state = ChatState::NAVIGATING; return true; + } else if(text == "/leave") { + TaskResult task_result = run_task_with_loading_screen([this, ¤t_room]() { + return matrix->leave_room(current_room->id) == PluginResult::OK; + }); + if(task_result != TaskResult::FALSE) { + go_to_previous_page = true; + chat_input.set_editable(false); + chat_state = ChatState::NAVIGATING; + } + return true; } else if(strncmp(text.c_str(), "/me ", 4) == 0) { msgtype = "m.emote"; text.erase(text.begin(), text.begin() + 4); @@ -4140,6 +4160,11 @@ namespace QuickMedia { } window.display(); + + if(go_to_previous_page) { + go_to_previous_page = false; + goto chat_page_end; + } } chat_page_end: @@ -4172,12 +4197,17 @@ namespace QuickMedia { rooms_tags_body->thumbnail_mask_shader = &circle_mask_shader; auto matrix_rooms_tag_page = std::make_unique<MatrixRoomTagsPage>(this, rooms_tags_body.get()); - MatrixQuickMedia matrix_handler(this, matrix, matrix_rooms_page.get(), matrix_rooms_tag_page.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()); + + MatrixQuickMedia matrix_handler(this, matrix, matrix_rooms_page.get(), matrix_rooms_tag_page.get(), matrix_invites_page.get()); matrix->start_sync(&matrix_handler); std::vector<Tab> tabs; tabs.push_back(Tab{std::move(rooms_body), std::move(matrix_rooms_page), create_search_bar("Search...", SEARCH_DELAY_FILTER)}); 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)}); sf::Sprite load_sprite(loading_icon); sf::Vector2u loading_icon_size = loading_icon.getSize(); @@ -4194,6 +4224,8 @@ namespace QuickMedia { window_size.y = event.size.height; sf::FloatRect visible_area(0, 0, window_size.x, window_size.y); window.setView(sf::View(visible_area)); + } else if(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) { + window.close(); } } window.clear(back_color); |