add user row on voice connect

This commit is contained in:
ouwou
2022-10-12 01:51:32 -04:00
parent 78a5b9599c
commit 17e7478bb4
4 changed files with 34 additions and 9 deletions
+5
View File
@@ -2176,6 +2176,7 @@ void DiscordClient::HandleGatewayVoiceStateUpdate(const GatewayMessage &msg) {
if (old_state.has_value() && *old_state != *data.ChannelID) { if (old_state.has_value() && *old_state != *data.ChannelID) {
m_signal_voice_user_disconnect.emit(data.UserID, *old_state); m_signal_voice_user_disconnect.emit(data.UserID, *old_state);
} }
m_signal_voice_user_connect.emit(data.UserID, *data.ChannelID);
} else { } else {
const auto old_state = GetVoiceState(data.UserID); const auto old_state = GetVoiceState(data.UserID);
ClearVoiceState(data.UserID); ClearVoiceState(data.UserID);
@@ -2971,4 +2972,8 @@ DiscordClient::type_signal_voice_speaking DiscordClient::signal_voice_speaking()
DiscordClient::type_signal_voice_user_disconnect DiscordClient::signal_voice_user_disconnect() { DiscordClient::type_signal_voice_user_disconnect DiscordClient::signal_voice_user_disconnect() {
return m_signal_voice_user_disconnect; return m_signal_voice_user_disconnect;
} }
DiscordClient::type_signal_voice_user_connect DiscordClient::signal_voice_user_connect() {
return m_signal_voice_user_connect;
}
#endif #endif
+3
View File
@@ -437,6 +437,7 @@ public:
using type_signal_voice_disconnected = sigc::signal<void()>; using type_signal_voice_disconnected = sigc::signal<void()>;
using type_signal_voice_speaking = sigc::signal<void(VoiceSpeakingData)>; using type_signal_voice_speaking = sigc::signal<void(VoiceSpeakingData)>;
using type_signal_voice_user_disconnect = sigc::signal<void(Snowflake, Snowflake)>; using type_signal_voice_user_disconnect = sigc::signal<void(Snowflake, Snowflake)>;
using type_signal_voice_user_connect = sigc::signal<void(Snowflake, Snowflake)>;
#endif #endif
type_signal_gateway_ready signal_gateway_ready(); type_signal_gateway_ready signal_gateway_ready();
@@ -498,6 +499,7 @@ public:
type_signal_voice_disconnected signal_voice_disconnected(); type_signal_voice_disconnected signal_voice_disconnected();
type_signal_voice_speaking signal_voice_speaking(); type_signal_voice_speaking signal_voice_speaking();
type_signal_voice_user_disconnect signal_voice_user_disconnect(); type_signal_voice_user_disconnect signal_voice_user_disconnect();
type_signal_voice_user_connect signal_voice_user_connect();
#endif #endif
protected: protected:
@@ -560,5 +562,6 @@ protected:
type_signal_voice_disconnected m_signal_voice_disconnected; type_signal_voice_disconnected m_signal_voice_disconnected;
type_signal_voice_speaking m_signal_voice_speaking; type_signal_voice_speaking m_signal_voice_speaking;
type_signal_voice_user_disconnect m_signal_voice_user_disconnect; type_signal_voice_user_disconnect m_signal_voice_user_disconnect;
type_signal_voice_user_connect m_signal_voice_user_connect;
#endif #endif
}; };
+23 -9
View File
@@ -85,6 +85,7 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
SetUsers(discord.GetUsersInVoiceChannel(m_channel_id)); SetUsers(discord.GetUsersInVoiceChannel(m_channel_id));
discord.signal_voice_user_disconnect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserDisconnect)); discord.signal_voice_user_disconnect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserDisconnect));
discord.signal_voice_user_connect().connect(sigc::mem_fun(*this, &VoiceWindow::OnUserConnect));
m_mute.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnMuteChanged)); m_mute.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnMuteChanged));
m_deafen.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnDeafenChanged)); m_deafen.signal_toggled().connect(sigc::mem_fun(*this, &VoiceWindow::OnDeafenChanged));
@@ -104,18 +105,23 @@ VoiceWindow::VoiceWindow(Snowflake channel_id)
void VoiceWindow::SetUsers(const std::unordered_set<Snowflake> &user_ids) { void VoiceWindow::SetUsers(const std::unordered_set<Snowflake> &user_ids) {
for (auto id : user_ids) { for (auto id : user_ids) {
auto *row = Gtk::make_managed<VoiceWindowUserListEntry>(id); m_user_list.add(*CreateRow(id));
m_rows[id] = row;
row->signal_mute_cs().connect([this, id](bool is_muted) {
m_signal_mute_user_cs.emit(id, is_muted);
});
row->signal_volume().connect([this, id](double volume) {
m_signal_user_volume_changed.emit(id, volume);
});
m_user_list.add(*row);
} }
} }
Gtk::ListBoxRow *VoiceWindow::CreateRow(Snowflake id) {
auto *row = Gtk::make_managed<VoiceWindowUserListEntry>(id);
m_rows[id] = row;
row->signal_mute_cs().connect([this, id](bool is_muted) {
m_signal_mute_user_cs.emit(id, is_muted);
});
row->signal_volume().connect([this, id](double volume) {
m_signal_user_volume_changed.emit(id, volume);
});
row->show_all();
return row;
}
void VoiceWindow::OnMuteChanged() { void VoiceWindow::OnMuteChanged() {
m_signal_mute.emit(m_mute.get_active()); m_signal_mute.emit(m_mute.get_active());
} }
@@ -124,6 +130,14 @@ void VoiceWindow::OnDeafenChanged() {
m_signal_deafen.emit(m_deafen.get_active()); m_signal_deafen.emit(m_deafen.get_active());
} }
void VoiceWindow::OnUserConnect(Snowflake user_id, Snowflake to_channel_id) {
if (m_channel_id == to_channel_id) {
if (auto it = m_rows.find(user_id); it == m_rows.end()) {
m_user_list.add(*CreateRow(user_id));
}
}
}
void VoiceWindow::OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id) { void VoiceWindow::OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id) {
if (m_channel_id == from_channel_id) { if (m_channel_id == from_channel_id) {
if (auto it = m_rows.find(user_id); it != m_rows.end()) { if (auto it = m_rows.find(user_id); it != m_rows.end()) {
+3
View File
@@ -18,6 +18,9 @@ public:
private: private:
void SetUsers(const std::unordered_set<Snowflake> &user_ids); void SetUsers(const std::unordered_set<Snowflake> &user_ids);
Gtk::ListBoxRow *CreateRow(Snowflake id);
void OnUserConnect(Snowflake user_id, Snowflake to_channel_id);
void OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id); void OnUserDisconnect(Snowflake user_id, Snowflake from_channel_id);
void OnMuteChanged(); void OnMuteChanged();