diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fe6aa1c..87195823 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unversioned +- Minor: Added `/openurl` command. Usage: `/openurl `. Opens the provided URL in the browser. (#2461, #2926) + ## 2.3.3 - Major: Added username autocompletion popup menu when typing usernames with an @ prefix. (#1979, #2866) diff --git a/src/controllers/commands/CommandController.cpp b/src/controllers/commands/CommandController.cpp index 3b4ba2f4..2c483515 100644 --- a/src/controllers/commands/CommandController.cpp +++ b/src/controllers/commands/CommandController.cpp @@ -18,6 +18,7 @@ #include "util/CombinePath.hpp" #include "util/FormatTime.hpp" #include "util/Helpers.hpp" +#include "util/IncognitoBrowser.hpp" #include "util/StreamLink.hpp" #include "util/Twitch.hpp" #include "widgets/Window.hpp" @@ -786,6 +787,39 @@ void CommandController::initialize(Settings &, Paths &paths) } return ""; }); + + this->registerCommand("/openurl", [](const QStringList &words, + const ChannelPtr channel) { + if (words.size() < 2) + { + channel->addMessage(makeSystemMessage("Usage: /openurl .")); + return ""; + } + + QUrl url = QUrl::fromUserInput(words.mid(1).join(" ")); + if (!url.isValid()) + { + channel->addMessage(makeSystemMessage("Invalid URL specified.")); + return ""; + } + + bool res = false; + if (supportsIncognitoLinks() && getSettings()->openLinksIncognito) + { + res = openLinkIncognito(url.toString(QUrl::FullyEncoded)); + } + else + { + res = QDesktopServices::openUrl(url); + } + + if (!res) + { + channel->addMessage(makeSystemMessage("Could not open URL.")); + } + + return ""; + }); } void CommandController::save() diff --git a/src/util/IncognitoBrowser.cpp b/src/util/IncognitoBrowser.cpp index fb355744..9ff1ba6e 100644 --- a/src/util/IncognitoBrowser.cpp +++ b/src/util/IncognitoBrowser.cpp @@ -84,12 +84,14 @@ bool supportsIncognitoLinks() #endif } -void openLinkIncognito(const QString &link) +bool openLinkIncognito(const QString &link) { #ifdef Q_OS_WIN auto command = getCommand(link); - QProcess::startDetached(command); + return QProcess::startDetached(command); +#else + return false; #endif } diff --git a/src/util/IncognitoBrowser.hpp b/src/util/IncognitoBrowser.hpp index 030a60cb..aa5dbec8 100644 --- a/src/util/IncognitoBrowser.hpp +++ b/src/util/IncognitoBrowser.hpp @@ -5,6 +5,6 @@ namespace chatterino { bool supportsIncognitoLinks(); -void openLinkIncognito(const QString &link); +bool openLinkIncognito(const QString &link); } // namespace chatterino