Added ability to open stream in external video player via URI scheme. (#1623)

This commit is contained in:
23rd 2020-04-11 12:43:35 +03:00 committed by GitHub
parent 5afb2800c9
commit f489d23a8d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 0 deletions

View file

@ -257,6 +257,9 @@ public:
"Choose"}; "Choose"};
QStringSetting streamlinkOpts = {"/external/streamlink/options", ""}; QStringSetting streamlinkOpts = {"/external/streamlink/options", ""};
// Custom URI Scheme
QStringSetting customURIScheme = {"/external/urischeme"};
/// Misc /// Misc
BoolSetting betaUpdates = {"/misc/beta", false}; BoolSetting betaUpdates = {"/misc/beta", false};
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX

View file

@ -68,6 +68,23 @@ ExternalToolsPage::ExternalToolsPage()
this->managedConnections_); this->managedConnections_);
} }
{
auto group = layout.emplace<QGroupBox>("Custom URI Scheme");
auto groupLayout = group.setLayoutType<QFormLayout>();
const auto description = new QLabel(
"You can open video streams directly in any video player that "
"has built-in Twitch support and has own URI Scheme.\nE.g.: "
"IINA for macOS and Potplayer (with extension) for Windows.");
description->setWordWrap(true);
description->setStyleSheet("color: #bbb");
groupLayout->setWidget(0, QFormLayout::SpanningRole, description);
groupLayout->addRow("URI Scheme:", this->createLineEdit(
getSettings()->customURIScheme));
}
layout->addStretch(1); layout->addStretch(1);
} }

View file

@ -534,6 +534,23 @@ void Split::openInStreamlink()
} }
} }
void Split::openWithCustomScheme()
{
const auto scheme = getSettings()->customURIScheme.getValue();
if (scheme.isEmpty())
{
return;
}
const auto channel = this->getChannel().get();
if (const auto twitchChannel = dynamic_cast<TwitchChannel *>(channel))
{
QDesktopServices::openUrl(QString("%1https://twitch.tv/%2")
.arg(scheme)
.arg(twitchChannel->getName()));
}
}
void Split::showViewerList() void Split::showViewerList()
{ {
auto viewerDock = new QDockWidget("Viewer List", this); auto viewerDock = new QDockWidget("Viewer List", this);

View file

@ -126,6 +126,7 @@ public slots:
void openInBrowser(); void openInBrowser();
void openBrowserPlayer(); void openBrowserPlayer();
void openInStreamlink(); void openInStreamlink();
void openWithCustomScheme();
void copyToClipboard(); void copyToClipboard();
void showSearch(); void showSearch();
void showViewerList(); void showViewerList();

View file

@ -245,6 +245,13 @@ void SplitHeader::initializeLayout()
} }
}); });
getSettings()->customURIScheme.connect([this] {
if (const auto drop = this->dropdownButton_)
{
drop->setMenu(this->createMainMenu());
}
});
layout->setMargin(0); layout->setMargin(0);
layout->setSpacing(0); layout->setSpacing(0);
this->setLayout(layout); this->setLayout(layout);
@ -289,6 +296,12 @@ std::unique_ptr<QMenu> SplitHeader::createMainMenu()
#endif #endif
menu->addAction(OPEN_IN_STREAMLINK, this->split_, menu->addAction(OPEN_IN_STREAMLINK, this->split_,
&Split::openInStreamlink); &Split::openInStreamlink);
if (!getSettings()->customURIScheme.getValue().isEmpty())
{
menu->addAction("Open with URI Scheme", this->split_,
&Split::openWithCustomScheme);
}
menu->addSeparator(); menu->addSeparator();
} }