mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-27 16:16:35 +03:00
add user row on voice connect
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user