98 lines
2.8 KiB
C++
98 lines
2.8 KiB
C++
|
#if !defined(_CRT_SECURE_NO_WARNINGS)
|
||
|
#define _CRT_SECURE_NO_WARNINGS
|
||
|
#endif
|
||
|
|
||
|
#include "overlay_manager.h"
|
||
|
|
||
|
#include "core.h"
|
||
|
|
||
|
#include <cstring>
|
||
|
#include <memory>
|
||
|
|
||
|
namespace discord {
|
||
|
|
||
|
class OverlayEvents final {
|
||
|
public:
|
||
|
static void OnToggle(void* callbackData, bool locked)
|
||
|
{
|
||
|
auto* core = reinterpret_cast<Core*>(callbackData);
|
||
|
if (!core) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
auto& module = core->OverlayManager();
|
||
|
module.OnToggle((locked != 0));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
IDiscordOverlayEvents OverlayManager::events_{
|
||
|
&OverlayEvents::OnToggle,
|
||
|
};
|
||
|
|
||
|
void OverlayManager::IsEnabled(bool* enabled)
|
||
|
{
|
||
|
if (!enabled) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
internal_->is_enabled(internal_, reinterpret_cast<bool*>(enabled));
|
||
|
}
|
||
|
|
||
|
void OverlayManager::IsLocked(bool* locked)
|
||
|
{
|
||
|
if (!locked) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
internal_->is_locked(internal_, reinterpret_cast<bool*>(locked));
|
||
|
}
|
||
|
|
||
|
void OverlayManager::SetLocked(bool locked, 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_locked(internal_, (locked ? 1 : 0), cb.release(), wrapper);
|
||
|
}
|
||
|
|
||
|
void OverlayManager::OpenActivityInvite(ActivityActionType type,
|
||
|
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_->open_activity_invite(
|
||
|
internal_, static_cast<EDiscordActivityActionType>(type), cb.release(), wrapper);
|
||
|
}
|
||
|
|
||
|
void OverlayManager::OpenGuildInvite(char const* code, 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_->open_guild_invite(internal_, const_cast<char*>(code), cb.release(), wrapper);
|
||
|
}
|
||
|
|
||
|
} // namespace discord
|