disconnecting clears the channel listing

This commit is contained in:
ouwou 2020-08-19 02:05:26 -04:00
parent 69404a97cd
commit 0cd0260f2e
5 changed files with 29 additions and 8 deletions

View File

@ -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);
}
}

View File

@ -31,6 +31,12 @@ void ChannelList::SetListingFromGuilds(const DiscordClient::Guilds_t &guilds) {
m_update_dispatcher.emit();
}
void ChannelList::ClearListing() {
std::scoped_lock<std::mutex> 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<std::mutex> guard(m_update_mutex);
m_update_queue.pop();
return;
}
auto &settings = m_abaddon->GetDiscordClient().GetUserSettings();
std::vector<std::pair<Snowflake, GuildData>> sorted_guilds;

View File

@ -12,6 +12,7 @@ public:
ChannelList();
Gtk::Widget *GetRoot() const;
void SetListingFromGuilds(const DiscordClient::Guilds_t &guilds);
void ClearListing();
void SetAbaddon(Abaddon *ptr);

View File

@ -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() {

View File

@ -8,7 +8,7 @@ public:
MainWindow();
void SetAbaddon(Abaddon *ptr);
void UpdateMenuStatus();
void UpdateComponents();
void UpdateChannelListing();
protected: