2019-05-26 21:48:45 +02:00
|
|
|
#include "common/Env.hpp"
|
|
|
|
|
2022-08-06 13:38:10 +02:00
|
|
|
#include "common/QLogging.hpp"
|
|
|
|
#include "util/TypeName.hpp"
|
|
|
|
|
2023-12-16 12:24:28 +01:00
|
|
|
#include <QtGlobal>
|
2019-12-21 10:11:23 +01:00
|
|
|
#include <QVariant>
|
|
|
|
|
2019-05-26 21:48:45 +02:00
|
|
|
namespace chatterino {
|
|
|
|
|
|
|
|
namespace {
|
|
|
|
|
2022-08-06 13:38:10 +02:00
|
|
|
template <typename T>
|
2023-12-16 12:24:28 +01:00
|
|
|
void warn(const char *envName, const QString &envString, T defaultValue)
|
2022-08-06 13:38:10 +02:00
|
|
|
{
|
|
|
|
const auto typeName = QString::fromStdString(
|
|
|
|
std::string(type_name<decltype(defaultValue)>()));
|
|
|
|
|
|
|
|
qCWarning(chatterinoEnv).noquote()
|
|
|
|
<< QStringLiteral(
|
|
|
|
"Cannot parse value '%1' of environment variable '%2' "
|
|
|
|
"as a %3, reverting to default value '%4'")
|
|
|
|
.arg(envString)
|
|
|
|
.arg(envName)
|
|
|
|
.arg(typeName)
|
|
|
|
.arg(defaultValue);
|
|
|
|
}
|
|
|
|
|
2023-10-08 18:50:48 +02:00
|
|
|
std::optional<QString> readOptionalStringEnv(const char *envName)
|
2023-02-12 00:16:51 +01:00
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
auto envString = qEnvironmentVariable(envName);
|
|
|
|
if (!envString.isEmpty())
|
2023-02-12 00:16:51 +01:00
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
return envString;
|
2023-02-12 00:16:51 +01:00
|
|
|
}
|
|
|
|
|
2023-10-08 18:50:48 +02:00
|
|
|
return std::nullopt;
|
2023-02-12 00:16:51 +01:00
|
|
|
}
|
|
|
|
|
2019-12-21 10:11:23 +01:00
|
|
|
uint16_t readPortEnv(const char *envName, uint16_t defaultValue)
|
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
auto envString = qEnvironmentVariable(envName);
|
|
|
|
if (!envString.isEmpty())
|
2019-12-21 10:11:23 +01:00
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
bool ok = false;
|
|
|
|
auto val = envString.toUShort(&ok);
|
2019-12-21 10:11:23 +01:00
|
|
|
if (ok)
|
|
|
|
{
|
|
|
|
return val;
|
|
|
|
}
|
2023-12-16 12:24:28 +01:00
|
|
|
|
|
|
|
warn(envName, envString, defaultValue);
|
2019-12-21 10:11:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return defaultValue;
|
|
|
|
}
|
|
|
|
|
2023-12-16 12:24:28 +01:00
|
|
|
bool readBoolEnv(const char *envName, bool defaultValue)
|
2019-12-21 10:11:23 +01:00
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
auto envString = qEnvironmentVariable(envName);
|
|
|
|
if (!envString.isEmpty())
|
2019-12-21 10:11:23 +01:00
|
|
|
{
|
2023-12-16 12:24:28 +01:00
|
|
|
return QVariant(envString).toBool();
|
2019-12-21 10:11:23 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return defaultValue;
|
|
|
|
}
|
|
|
|
|
2019-05-26 21:48:45 +02:00
|
|
|
} // namespace
|
|
|
|
|
|
|
|
Env::Env()
|
|
|
|
: recentMessagesApiUrl(
|
2023-12-16 12:24:28 +01:00
|
|
|
qEnvironmentVariable("CHATTERINO2_RECENT_MESSAGES_URL",
|
|
|
|
"https://recent-messages.robotty.de/api/v2/"
|
|
|
|
"recent-messages/%1"))
|
|
|
|
, linkResolverUrl(qEnvironmentVariable(
|
2019-05-26 21:48:45 +02:00
|
|
|
"CHATTERINO2_LINK_RESOLVER_URL",
|
|
|
|
"https://braize.pajlada.com/chatterino/link_resolver/%1"))
|
2023-12-16 12:24:28 +01:00
|
|
|
, twitchServerHost(qEnvironmentVariable("CHATTERINO2_TWITCH_SERVER_HOST",
|
|
|
|
"irc.chat.twitch.tv"))
|
2020-01-24 21:30:35 +01:00
|
|
|
, twitchServerPort(readPortEnv("CHATTERINO2_TWITCH_SERVER_PORT", 443))
|
2019-12-21 10:11:23 +01:00
|
|
|
, twitchServerSecure(readBoolEnv("CHATTERINO2_TWITCH_SERVER_SECURE", true))
|
2023-02-12 00:16:51 +01:00
|
|
|
, proxyUrl(readOptionalStringEnv("CHATTERINO2_PROXY_URL"))
|
2019-05-26 21:48:45 +02:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
const Env &Env::get()
|
|
|
|
{
|
|
|
|
static Env instance;
|
|
|
|
return instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace chatterino
|