mirror of
https://github.com/Chatterino/chatterino2.git
synced 2024-11-13 19:49:51 +01:00
2232c6d925
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"
84 lines
1.7 KiB
C++
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
|