aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp68
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, &current_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);