From 0cd0260f2e4cfe11678cdac4f965c9abf64b3592 Mon Sep 17 00:00:00 2001 From: ouwou <26526779+ouwou@users.noreply.github.com> Date: Wed, 19 Aug 2020 02:05:26 -0400 Subject: disconnecting clears the channel listing --- abaddon.cpp | 10 +++++----- components/channels.cpp | 12 ++++++++++++ components/channels.hpp | 1 + windows/mainwindow.cpp | 12 ++++++++++-- windows/mainwindow.hpp | 2 +- 5 files changed, 29 insertions(+), 8 deletions(-) diff --git a/abaddon.cpp b/abaddon.cpp index 00bf202..1105ac3 100644 --- a/abaddon.cpp +++ b/abaddon.cpp @@ -27,7 +27,7 @@ int Abaddon::StartGTK() { m_main_window->SetAbaddon(this); m_main_window->set_title("Abaddon"); m_main_window->show(); - m_main_window->UpdateMenuStatus(); + m_main_window->UpdateComponents(); m_gtk_app->signal_shutdown().connect([&]() { StopDiscord(); @@ -70,19 +70,19 @@ const DiscordClient &Abaddon::GetDiscordClient() const { } void Abaddon::DiscordNotifyReady() { - m_main_window->UpdateChannelListing(); + m_main_window->UpdateComponents(); } void Abaddon::ActionConnect() { if (!m_discord.IsStarted()) StartDiscord(); - m_main_window->UpdateMenuStatus(); + m_main_window->UpdateComponents(); } void Abaddon::ActionDisconnect() { if (m_discord.IsStarted()) StopDiscord(); - m_main_window->UpdateMenuStatus(); + m_main_window->UpdateComponents(); } void Abaddon::ActionSetToken() { @@ -90,7 +90,7 @@ void Abaddon::ActionSetToken() { auto response = dlg.run(); if (response == Gtk::RESPONSE_OK) { m_discord_token = dlg.GetToken(); - m_main_window->UpdateMenuStatus(); + m_main_window->UpdateComponents(); m_settings.SetSetting("discord", "token", m_discord_token); } } diff --git a/components/channels.cpp b/components/channels.cpp index 10a9452..e26618c 100644 --- a/components/channels.cpp +++ b/components/channels.cpp @@ -31,6 +31,12 @@ void ChannelList::SetListingFromGuilds(const DiscordClient::Guilds_t &guilds) { m_update_dispatcher.emit(); } +void ChannelList::ClearListing() { + std::scoped_lock guard(m_update_mutex); + m_update_queue.push(DiscordClient::Guilds_t()); + m_update_dispatcher.emit(); +} + void ChannelList::on_row_activated(Gtk::ListBoxRow *row) { auto &info = m_infos[row]; bool new_collapsed = !info.IsUserCollapsed; @@ -77,6 +83,12 @@ void ChannelList::SetListingFromGuildsInternal() { it++; } + if (guilds->empty()) { + std::scoped_lock guard(m_update_mutex); + m_update_queue.pop(); + return; + } + auto &settings = m_abaddon->GetDiscordClient().GetUserSettings(); std::vector> sorted_guilds; diff --git a/components/channels.hpp b/components/channels.hpp index a4ad583..d15846d 100644 --- a/components/channels.hpp +++ b/components/channels.hpp @@ -12,6 +12,7 @@ public: ChannelList(); Gtk::Widget *GetRoot() const; void SetListingFromGuilds(const DiscordClient::Guilds_t &guilds); + void ClearListing(); void SetAbaddon(Abaddon *ptr); diff --git a/windows/mainwindow.cpp b/windows/mainwindow.cpp index 218af71..cbb6e8a 100644 --- a/windows/mainwindow.cpp +++ b/windows/mainwindow.cpp @@ -47,14 +47,22 @@ MainWindow::MainWindow() show_all_children(); } -void MainWindow::UpdateMenuStatus() { +void MainWindow::UpdateComponents() { + bool discord_active = m_abaddon->IsDiscordActive(); + + // menu // Connect std::string token = m_abaddon->GetDiscordToken(); - bool discord_active = m_abaddon->IsDiscordActive(); m_menu_discord_connect.set_sensitive(token.size() > 0 && !discord_active); // Disconnect m_menu_discord_disconnect.set_sensitive(discord_active); + + // channel listing + if (!discord_active) + m_channel_list.ClearListing(); + else + UpdateChannelListing(); } void MainWindow::UpdateChannelListing() { diff --git a/windows/mainwindow.hpp b/windows/mainwindow.hpp index e1e4a64..c315c32 100644 --- a/windows/mainwindow.hpp +++ b/windows/mainwindow.hpp @@ -8,7 +8,7 @@ public: MainWindow(); void SetAbaddon(Abaddon *ptr); - void UpdateMenuStatus(); + void UpdateComponents(); void UpdateChannelListing(); protected: -- cgit v1.2.3