diff --git a/src/util/IncognitoBrowser.cpp b/src/util/IncognitoBrowser.cpp index d4bf14fe1..377a68918 100644 --- a/src/util/IncognitoBrowser.cpp +++ b/src/util/IncognitoBrowser.cpp @@ -1,81 +1,90 @@ -#include "IncognitoBrowser.hpp" +#include "util/IncognitoBrowser.hpp" #include #include #include #include -namespace chatterino { namespace { + +using namespace chatterino; + #ifdef Q_OS_WIN - QString injectPrivateSwitch(QString command) +QString injectPrivateSwitch(QString command) +{ + // list of command line switches to turn on private browsing in browsers + static auto switches = std::vector>{ + {"firefox", "-private-window"}, {"librewolf", "-private-window"}, + {"waterfox", "-private-window"}, {"icecat", "-private-window"}, + {"chrome", "-incognito"}, {"vivaldi", "-incognito"}, + {"opera", "-newprivatetab"}, {"opera\\\\launcher", "--private"}, + {"iexplore", "-private"}, {"msedge", "-inprivate"}, + }; + + // transform into regex and replacement string + std::vector> replacers; + for (const auto &switch_ : switches) { - // list of command line switches to turn on private browsing in browsers - static auto switches = std::vector>{ - {"firefox", "-private-window"}, {"librewolf", "-private-window"}, - {"waterfox", "-private-window"}, {"icecat", "-private-window"}, - {"chrome", "-incognito"}, {"vivaldi", "-incognito"}, - {"opera", "-newprivatetab"}, {"opera\\\\launcher", "--private"}, - {"iexplore", "-private"}, {"msedge", "-inprivate"}, - }; + replacers.emplace_back( + QRegularExpression("(" + switch_.first + "\\.exe\"?).*", + QRegularExpression::CaseInsensitiveOption), + "\\1 " + switch_.second); + } - // transform into regex and replacement string - std::vector> replacers; - for (const auto &switch_ : switches) + // try to find matching regex and apply it + for (const auto &replacement : replacers) + { + if (replacement.first.match(command).hasMatch()) { - replacers.emplace_back( - QRegularExpression("(" + switch_.first + "\\.exe\"?).*", - QRegularExpression::CaseInsensitiveOption), - "\\1 " + switch_.second); + command.replace(replacement.first, replacement.second); + return command; } + } - // try to find matching regex and apply it - for (const auto &replacement : replacers) - { - if (replacement.first.match(command).hasMatch()) - { - command.replace(replacement.first, replacement.second); - return command; - } - } + // couldn't match any browser -> unknown browser + return QString(); +} - // couldn't match any browser -> unknown browser +QString getCommand(const QString &link) +{ + // get default browser prog id + auto browserId = QSettings("HKEY_CURRENT_" + "USER\\Software\\Microsoft\\Windows\\Shell\\" + "Associations\\UrlAssociatio" + "ns\\http\\UserChoice", + QSettings::NativeFormat) + .value("Progid") + .toString(); + + // get default browser start command + auto command = + QSettings("HKEY_CLASSES_ROOT\\" + browserId + "\\shell\\open\\command", + QSettings::NativeFormat) + .value("Default") + .toString(); + if (command.isNull()) + { return QString(); } - QString getCommand(const QString &link) + // inject switch to enable private browsing + command = injectPrivateSwitch(command); + if (command.isNull()) { - // get default browser prog id - auto browserId = QSettings("HKEY_CURRENT_" - "USER\\Software\\Microsoft\\Windows\\Shell\\" - "Associations\\UrlAssociatio" - "ns\\http\\UserChoice", - QSettings::NativeFormat) - .value("Progid") - .toString(); - - // get default browser start command - auto command = QSettings("HKEY_CLASSES_ROOT\\" + browserId + - "\\shell\\open\\command", - QSettings::NativeFormat) - .value("Default") - .toString(); - if (command.isNull()) - return QString(); - - // inject switch to enable private browsing - command = injectPrivateSwitch(command); - if (command.isNull()) - return QString(); - - // link - command += " " + link; - - return command; + return QString(); } + + // link + command += " " + link; + + return command; +} #endif + } // namespace +namespace chatterino { + bool supportsIncognitoLinks() { #ifdef Q_OS_WIN diff --git a/src/util/IncognitoBrowser.hpp b/src/util/IncognitoBrowser.hpp index aa5dbec83..9db1e800f 100644 --- a/src/util/IncognitoBrowser.hpp +++ b/src/util/IncognitoBrowser.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace chatterino {