summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2024-03-06 00:58:01 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2024-03-06 00:58:01 -0500
commitcb6436f527f832cf74aecda2911d8e607534d8f3 (patch)
tree87366f507c2a6b56d06f360c6971d7c3d190a61d
parent3c54ff85622ff7210f8acee00e075b12128567a9 (diff)
parent91e89c06958f1e058de445f9b53205e7eb341d3a (diff)
downloadabaddon-portaudio-cb6436f527f832cf74aecda2911d8e607534d8f3.tar.gz
abaddon-portaudio-cb6436f527f832cf74aecda2911d8e607534d8f3.zip
Merge branch 'master' into classic-channels
-rw-r--r--.clang-format2
-rw-r--r--CMakeLists.txt25
-rw-r--r--src/abaddon.cpp31
-rw-r--r--src/audio/manager.cpp38
-rw-r--r--src/audio/manager.hpp4
-rw-r--r--src/settings.cpp1
-rw-r--r--src/settings.hpp1
7 files changed, 84 insertions, 18 deletions
diff --git a/.clang-format b/.clang-format
index 6bd8ca0..6e9ec33 100644
--- a/.clang-format
+++ b/.clang-format
@@ -10,7 +10,7 @@ AllowAllParametersOfDeclarationOnNextLine: 'false'
AllowShortBlocksOnASingleLine: 'true'
AllowShortCaseLabelsOnASingleLine: 'true'
AllowShortFunctionsOnASingleLine: Inline
-AllowShortIfStatementsOnASingleLine: Always
+AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: 'true'
AlwaysBreakAfterDefinitionReturnType: None
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2e450cf..d1b56fc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -50,7 +50,7 @@ file(GLOB_RECURSE ABADDON_SOURCES
"src/*.h"
"src/*.hpp"
"src/*.cpp"
- )
+)
list(FILTER ABADDON_SOURCES EXCLUDE REGEX ".*notifier_gio\\.cpp$")
list(FILTER ABADDON_SOURCES EXCLUDE REGEX ".*notifier_fallback\\.cpp$")
@@ -148,6 +148,12 @@ endif ()
set(USE_MINIAUDIO FALSE)
+if (APPLE)
+ target_link_libraries(abaddon "-framework CoreFoundation")
+ target_link_libraries(abaddon "-framework CoreAudio")
+ target_link_libraries(abaddon "-framework AudioToolbox")
+endif ()
+
if (ENABLE_VOICE)
target_compile_definitions(abaddon PRIVATE WITH_VOICE)
@@ -194,12 +200,6 @@ if (ENABLE_VOICE)
target_link_libraries(abaddon rnnoise::rnnoise)
endif ()
endif ()
-
- if (APPLE)
- target_link_libraries(abaddon "-framework CoreFoundation")
- target_link_libraries(abaddon "-framework CoreAudio")
- target_link_libraries(abaddon "-framework AudioToolbox")
- endif ()
endif ()
if (${ENABLE_NOTIFICATION_SOUNDS})
@@ -214,12 +214,11 @@ if (USE_MINIAUDIO)
PATH_SUFFIXES miniaudio
REQUIRED)
- if (APPLE)
- target_link_libraries(abaddon "-framework CoreFoundation")
- target_link_libraries(abaddon "-framework CoreAudio")
- target_link_libraries(abaddon "-framework AudioToolbox")
- endif ()
-
target_include_directories(abaddon PUBLIC ${MINIAUDIO_INCLUDE_DIR})
target_compile_definitions(abaddon PRIVATE WITH_MINIAUDIO)
endif ()
+
+set(ABADDON_COMPILER_DEFS "" CACHE STRING "Additional compiler definitions")
+foreach (COMPILER_DEF IN LISTS ABADDON_COMPILER_DEFS)
+ target_compile_definitions(abaddon PRIVATE "${COMPILER_DEF}")
+endforeach ()
diff --git a/src/abaddon.cpp b/src/abaddon.cpp
index 443fa4e..f8c4b39 100644
--- a/src/abaddon.cpp
+++ b/src/abaddon.cpp
@@ -25,6 +25,23 @@
#include "remoteauth/remoteauthdialog.hpp"
#include "util.hpp"
+#if defined(__APPLE__)
+#include <CoreFoundation/CoreFoundation.h>
+
+void macOSThemeChanged() {
+ CFPropertyListRef appearanceName = CFPreferencesCopyAppValue(CFSTR("AppleInterfaceStyle"), kCFPreferencesAnyApplication);
+ if (appearanceName != NULL && CFGetTypeID(appearanceName) == CFStringGetTypeID() && CFStringCompare((CFStringRef)appearanceName, CFSTR("Dark"), 0) == kCFCompareEqualTo) {
+ Gtk::Settings::get_default()->set_property("gtk-application-prefer-dark-theme", true);
+ } else {
+ Gtk::Settings::get_default()->set_property("gtk-application-prefer-dark-theme", false);
+ }
+}
+
+void macOSThemeChangedCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
+ macOSThemeChanged();
+}
+#endif
+
#ifdef WITH_LIBHANDY
#include <handy.h>
#endif
@@ -36,7 +53,8 @@
Abaddon::Abaddon()
: m_settings(Platform::FindConfigFile())
, m_discord(GetSettings().UseMemoryDB) // stupid but easy
- , m_emojis(GetResPath("/emojis.bin")) {
+ , m_emojis(GetResPath("/emojis.bin"))
+ , m_audio(GetSettings().Backends) {
LoadFromSettings();
// todo: set user agent for non-client(?)
@@ -331,6 +349,17 @@ int Abaddon::StartGTK() {
m_gtk_app->hold();
m_main_window->show();
+#if defined(__APPLE__)
+ CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(),
+ NULL,
+ macOSThemeChangedCallback,
+ CFSTR("AppleInterfaceThemeChangedNotification"),
+ NULL,
+ CFNotificationSuspensionBehaviorCoalesce);
+
+ macOSThemeChanged();
+#endif
+
RunFirstTimeDiscordStartup();
return m_gtk_app->run(*m_main_window);
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp
index 8f2a5a3..eaac3bf 100644
--- a/src/audio/manager.cpp
+++ b/src/audio/manager.cpp
@@ -85,7 +85,7 @@ void mgr_log_callback(void *pUserData, ma_uint32 level, const char *pMessage) {
g_free(msg);
}
-AudioManager::AudioManager()
+AudioManager::AudioManager(const Glib::ustring &backends_string)
: m_log(spdlog::stdout_color_mt("miniaudio")) {
m_ok = true;
@@ -107,7 +107,19 @@ AudioManager::AudioManager()
auto ctx_cfg = ma_context_config_init();
ctx_cfg.pLog = &m_ma_log;
- if (ma_context_init(nullptr, 0, &ctx_cfg, &m_context) != MA_SUCCESS) {
+
+ ma_backend *pBackends = nullptr;
+ ma_uint32 backendCount = 0;
+
+ std::vector<ma_backend> backends_vec;
+ if (!backends_string.empty()) {
+ spdlog::get("audio")->debug("Using backends list: {}", std::string(backends_string));
+ backends_vec = ParseBackendsList(backends_string);
+ pBackends = backends_vec.data();
+ backendCount = static_cast<ma_uint32>(backends_vec.size());
+ }
+
+ if (ma_context_init(pBackends, backendCount, &ctx_cfg, &m_context) != MA_SUCCESS) {
spdlog::get("audio")->error("failed to initialize context");
m_ok = false;
return;
@@ -647,6 +659,28 @@ AudioManager::VADMethod AudioManager::GetVADMethod() const {
return m_vad_method;
}
+std::vector<ma_backend> AudioManager::ParseBackendsList(const Glib::ustring &list) {
+ auto regex = Glib::Regex::create(";");
+ const std::vector<Glib::ustring> split = regex->split(list);
+
+ std::vector<ma_backend> backends;
+ for (const auto &s : split) {
+ if (s == "wasapi") backends.push_back(ma_backend_wasapi);
+ else if (s == "dsound") backends.push_back(ma_backend_dsound);
+ else if (s == "winmm") backends.push_back(ma_backend_winmm);
+ else if (s == "coreaudio") backends.push_back(ma_backend_coreaudio);
+ else if (s == "sndio") backends.push_back(ma_backend_sndio);
+ else if (s == "audio4") backends.push_back(ma_backend_audio4);
+ else if (s == "oss") backends.push_back(ma_backend_oss);
+ else if (s == "pulseaudio") backends.push_back(ma_backend_pulseaudio);
+ else if (s == "alsa") backends.push_back(ma_backend_alsa);
+ else if (s == "jack") backends.push_back(ma_backend_jack);
+ }
+ backends.push_back(ma_backend_null);
+
+ return backends;
+}
+
#ifdef WITH_RNNOISE
float AudioManager::GetCurrentVADProbability() const {
return m_vad_prob;
diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp
index f5b433f..5716fc5 100644
--- a/src/audio/manager.hpp
+++ b/src/audio/manager.hpp
@@ -25,7 +25,7 @@
class AudioManager {
public:
- AudioManager();
+ AudioManager(const Glib::ustring &backends_string);
~AudioManager();
void AddSSRC(uint32_t ssrc);
@@ -80,6 +80,8 @@ public:
void SetVADMethod(VADMethod method);
VADMethod GetVADMethod() const;
+ static std::vector<ma_backend> ParseBackendsList(const Glib::ustring &list);
+
#ifdef WITH_RNNOISE
float GetCurrentVADProbability() const;
double GetRNNProbThreshold() const;
diff --git a/src/settings.cpp b/src/settings.cpp
index 654a726..fc76ddb 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -129,6 +129,7 @@ void SettingsManager::DefineSettings() {
#else
AddSetting("voice", "vad", "gate"s, &Settings::VAD);
#endif
+ AddSetting("voice", "backends", ""s, &Settings::Backends);
}
void SettingsManager::ReadSettings() {
diff --git a/src/settings.hpp b/src/settings.hpp
index df723fc..5805452 100644
--- a/src/settings.hpp
+++ b/src/settings.hpp
@@ -51,6 +51,7 @@ public:
// [voice]
std::string VAD;
+ std::string Backends;
// [windows]
bool HideConsole;