diff options
Diffstat (limited to 'source/application/discord/voice_manager.cpp')
-rw-r--r-- | source/application/discord/voice_manager.cpp | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/source/application/discord/voice_manager.cpp b/source/application/discord/voice_manager.cpp new file mode 100644 index 0000000..014ceb3 --- /dev/null +++ b/source/application/discord/voice_manager.cpp @@ -0,0 +1,124 @@ +#if !defined(_CRT_SECURE_NO_WARNINGS) +#define _CRT_SECURE_NO_WARNINGS +#endif + +#include "voice_manager.h" + +#include "core.h" + +#include <cstring> +#include <memory> + +namespace discord { + +class VoiceEvents final { +public: + static void DISCORD_CALLBACK OnSettingsUpdate(void* callbackData) + { + auto* core = reinterpret_cast<Core*>(callbackData); + if (!core) { + return; + } + + auto& module = core->VoiceManager(); + module.OnSettingsUpdate(); + } +}; + +IDiscordVoiceEvents VoiceManager::events_{ + &VoiceEvents::OnSettingsUpdate, +}; + +Result VoiceManager::GetInputMode(InputMode* inputMode) +{ + if (!inputMode) { + return Result::InternalError; + } + + auto result = + internal_->get_input_mode(internal_, reinterpret_cast<DiscordInputMode*>(inputMode)); + return static_cast<Result>(result); +} + +void VoiceManager::SetInputMode(InputMode inputMode, std::function<void(Result)> callback) +{ + static auto wrapper = [](void* callbackData, EDiscordResult result) -> void { + std::unique_ptr<std::function<void(Result)>> cb( + reinterpret_cast<std::function<void(Result)>*>(callbackData)); + if (!cb || !(*cb)) { + return; + } + (*cb)(static_cast<Result>(result)); + }; + std::unique_ptr<std::function<void(Result)>> cb{}; + cb.reset(new std::function<void(Result)>(std::move(callback))); + internal_->set_input_mode( + internal_, *reinterpret_cast<DiscordInputMode const*>(&inputMode), cb.release(), wrapper); +} + +Result VoiceManager::IsSelfMute(bool* mute) +{ + if (!mute) { + return Result::InternalError; + } + + auto result = internal_->is_self_mute(internal_, reinterpret_cast<bool*>(mute)); + return static_cast<Result>(result); +} + +Result VoiceManager::SetSelfMute(bool mute) +{ + auto result = internal_->set_self_mute(internal_, (mute ? 1 : 0)); + return static_cast<Result>(result); +} + +Result VoiceManager::IsSelfDeaf(bool* deaf) +{ + if (!deaf) { + return Result::InternalError; + } + + auto result = internal_->is_self_deaf(internal_, reinterpret_cast<bool*>(deaf)); + return static_cast<Result>(result); +} + +Result VoiceManager::SetSelfDeaf(bool deaf) +{ + auto result = internal_->set_self_deaf(internal_, (deaf ? 1 : 0)); + return static_cast<Result>(result); +} + +Result VoiceManager::IsLocalMute(Snowflake userId, bool* mute) +{ + if (!mute) { + return Result::InternalError; + } + + auto result = internal_->is_local_mute(internal_, userId, reinterpret_cast<bool*>(mute)); + return static_cast<Result>(result); +} + +Result VoiceManager::SetLocalMute(Snowflake userId, bool mute) +{ + auto result = internal_->set_local_mute(internal_, userId, (mute ? 1 : 0)); + return static_cast<Result>(result); +} + +Result VoiceManager::GetLocalVolume(Snowflake userId, std::uint8_t* volume) +{ + if (!volume) { + return Result::InternalError; + } + + auto result = + internal_->get_local_volume(internal_, userId, reinterpret_cast<uint8_t*>(volume)); + return static_cast<Result>(result); +} + +Result VoiceManager::SetLocalVolume(Snowflake userId, std::uint8_t volume) +{ + auto result = internal_->set_local_volume(internal_, userId, volume); + return static_cast<Result>(result); +} + +} // namespace discord |