mirror-chatterino2/src/util/StreamerMode.cpp
Paweł 2232c6d925
Changed Streamer Mode settings (#2001)
There's now a new (yet another, sigh) section in Settings -> General, which lets you set streamer mode to 'enable/disable/detect obs' and there are also separate settings for each of the things that streamer mode covers. I just have to add ping sounds and PR is ready to be merged :)

* Show "Streamer Mode" image as link thumbnails if applicable

* Moved hideViewerCountAndDuration to streamerMode settings

Set it to false by default (just how it used to be under /misc settings, also reworked live tooltip to be a bit prettier and say "<Streamer Mode>" in gray instead of "Live with <hidden> for <hidden> viewers"
2020-10-11 13:52:14 +02:00

84 lines
1.7 KiB
C++

#include "StreamerMode.hpp"
#include "singletons/Settings.hpp"
#ifdef USEWINSDK
# include <Windows.h>
# include <VersionHelpers.h>
# include <WtsApi32.h>
# pragma comment(lib, "Wtsapi32.lib")
#endif
namespace chatterino {
constexpr int cooldownInS = 10;
const QStringList &broadcastingBinaries()
{
#ifdef USEWINSDK
static QStringList bins = {"obs.exe", "obs64.exe"};
#else
static QStringList bins = {};
#endif
return bins;
}
bool isInStreamerMode()
{
switch (getSettings()->enableStreamerMode.getEnum())
{
case StreamerModeSetting::Enabled:
return true;
case StreamerModeSetting::Disabled:
return false;
}
#ifdef USEWINSDK
if (!IsWindowsVistaOrGreater())
{
return false;
}
static bool cache = false;
static QDateTime time = QDateTime();
if (time.isValid() &&
time.addSecs(cooldownInS) > QDateTime::currentDateTime())
{
return cache;
}
time = QDateTime::currentDateTime();
WTS_PROCESS_INFO *pWPIs = nullptr;
DWORD dwProcCount = 0;
if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs,
&dwProcCount))
{
//Go through all processes retrieved
for (DWORD i = 0; i < dwProcCount; i++)
{
QString processName = QString::fromUtf16(
reinterpret_cast<char16_t *>(pWPIs[i].pProcessName));
if (broadcastingBinaries().contains(processName))
{
cache = true;
return true;
}
}
}
if (pWPIs)
{
WTSFreeMemory(pWPIs);
}
cache = false;
#endif
return false;
}
} // namespace chatterino