summaryrefslogtreecommitdiff
path: root/src/abaddon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/abaddon.cpp')
-rw-r--r--src/abaddon.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index 02dcd08..bdedc7c 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -3,6 +3,7 @@
#include <string>
#include <algorithm>
#include "platform.hpp"
+#include "audio/manager.hpp"
#include "discord/discord.hpp"
#include "dialogs/token.hpp"
#include "dialogs/editmessage.hpp"
@@ -219,6 +220,16 @@ int Abaddon::StartGTK() {
return 1;
}
+#ifdef WITH_VOICE
+ m_audio = std::make_unique<AudioManager>();
+ if (!m_audio->OK()) {
+ Gtk::MessageDialog dlg(*m_main_window, "The audio engine could not be initialized!", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
+ dlg.set_position(Gtk::WIN_POS_CENTER);
+ dlg.run();
+ return 1;
+ }
+#endif
+
// store must be checked before this can be called
m_main_window->UpdateComponents();
@@ -239,6 +250,11 @@ int Abaddon::StartGTK() {
m_main_window->GetChannelList()->signal_action_guild_leave().connect(sigc::mem_fun(*this, &Abaddon::ActionLeaveGuild));
m_main_window->GetChannelList()->signal_action_guild_settings().connect(sigc::mem_fun(*this, &Abaddon::ActionGuildSettings));
+#ifdef WITH_VOICE
+ m_main_window->GetChannelList()->signal_action_join_voice_channel().connect(sigc::mem_fun(*this, &Abaddon::ActionJoinVoiceChannel));
+ m_main_window->GetChannelList()->signal_action_disconnect_voice().connect(sigc::mem_fun(*this, &Abaddon::ActionDisconnectVoice));
+#endif
+
m_main_window->GetChatWindow()->signal_action_message_edit().connect(sigc::mem_fun(*this, &Abaddon::ActionChatEditMessage));
m_main_window->GetChatWindow()->signal_action_chat_submit().connect(sigc::mem_fun(*this, &Abaddon::ActionChatInputSubmit));
m_main_window->GetChatWindow()->signal_action_chat_load_history().connect(sigc::mem_fun(*this, &Abaddon::ActionChatLoadHistory));
@@ -912,6 +928,16 @@ void Abaddon::ActionViewThreads(Snowflake channel_id) {
window->show();
}
+#ifdef WITH_VOICE
+void Abaddon::ActionJoinVoiceChannel(Snowflake channel_id) {
+ m_discord.ConnectToVoice(channel_id);
+}
+
+void Abaddon::ActionDisconnectVoice() {
+ m_discord.DisconnectFromVoice();
+}
+#endif
+
std::optional<Glib::ustring> Abaddon::ShowTextPrompt(const Glib::ustring &prompt, const Glib::ustring &title, const Glib::ustring &placeholder, Gtk::Window *window) {
TextInputDialog dlg(prompt, title, placeholder, window != nullptr ? *window : *m_main_window);
const auto code = dlg.run();
@@ -951,15 +977,24 @@ EmojiResource &Abaddon::GetEmojis() {
return m_emojis;
}
+#ifdef WITH_VOICE
+AudioManager &Abaddon::GetAudio() {
+ return *m_audio;
+}
+#endif
+
void Abaddon::on_tray_click() {
m_main_window->set_visible(!m_main_window->is_visible());
}
+
void Abaddon::on_tray_menu_click() {
m_gtk_app->quit();
}
+
void Abaddon::on_tray_popup_menu(int button, int activate_time) {
m_tray->popup_menu_at_position(*m_tray_menu, button, activate_time);
}
+
void Abaddon::on_window_hide() {
if (!m_settings.GetSettings().HideToTray) {
m_gtk_app->quit();