Fix and improve Streamlink code
Move streamlink code to its own file Fixes #275 Untested on linux, but should work decently there as well.
This commit is contained in:
+5
-79
@@ -7,6 +7,7 @@
|
||||
#include "singletons/settingsmanager.hpp"
|
||||
#include "singletons/thememanager.hpp"
|
||||
#include "singletons/windowmanager.hpp"
|
||||
#include "util/streamlink.hpp"
|
||||
#include "util/urlfetch.hpp"
|
||||
#include "widgets/helper/searchpopup.hpp"
|
||||
#include "widgets/helper/shortcut.hpp"
|
||||
@@ -21,13 +22,11 @@
|
||||
#include <QDesktopServices>
|
||||
#include <QDockWidget>
|
||||
#include <QDrag>
|
||||
#include <QFileInfo>
|
||||
#include <QFont>
|
||||
#include <QFontDatabase>
|
||||
#include <QListWidget>
|
||||
#include <QMimeData>
|
||||
#include <QPainter>
|
||||
#include <QProcess>
|
||||
#include <QShortcut>
|
||||
#include <QTimer>
|
||||
#include <QVBoxLayout>
|
||||
@@ -364,83 +363,10 @@ void Split::doOpenPopupPlayer()
|
||||
|
||||
void Split::doOpenStreamlink()
|
||||
{
|
||||
singletons::SettingManager &settings = singletons::SettingManager::getInstance();
|
||||
QString preferredQuality = settings.preferredQuality;
|
||||
preferredQuality = preferredQuality.toLower();
|
||||
// TODO(Confuseh): Default streamlink paths
|
||||
QString path = settings.streamlinkPath;
|
||||
QString channel = this->channelName.getValue();
|
||||
QFileInfo fileinfo = QFileInfo(path);
|
||||
|
||||
if (path.isEmpty()) {
|
||||
debug::Log("[Split:doOpenStreamlink] No streamlink path selected in Settings");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!fileinfo.exists()) {
|
||||
debug::Log("[Split:doOpenStreamlink] Streamlink path ({}) is invalid, file does not exist",
|
||||
path);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fileinfo.isDir() || !fileinfo.isExecutable()) {
|
||||
debug::Log("[Split:doOpenStreamlink] Streamlink path ({}) is invalid, it needs to point to "
|
||||
"the streamlink executable",
|
||||
path);
|
||||
return;
|
||||
}
|
||||
|
||||
if (preferredQuality != "choose") {
|
||||
QStringList args = {"twitch.tv/" + channel};
|
||||
QString quality = "";
|
||||
QString exclude = "";
|
||||
if (preferredQuality == "high") {
|
||||
exclude = ">720p30";
|
||||
quality = "high,best";
|
||||
} else if (preferredQuality == "medium") {
|
||||
exclude = ">540p30";
|
||||
quality = "medium,best";
|
||||
} else if (preferredQuality == "low") {
|
||||
exclude = ">360p30";
|
||||
quality = "low,best";
|
||||
} else if (preferredQuality == "audio only") {
|
||||
quality = "audio,audio_only";
|
||||
} else {
|
||||
quality = "best";
|
||||
}
|
||||
if (quality != "")
|
||||
args << quality;
|
||||
if (exclude != "")
|
||||
args << "--stream-sorting-excludes" << exclude;
|
||||
args << settings.streamlinkOpts;
|
||||
QProcess::startDetached(path, args);
|
||||
} else {
|
||||
QProcess *p = new QProcess();
|
||||
// my god that signal though
|
||||
QObject::connect(p, static_cast<void (QProcess::*)(int)>(&QProcess::finished), this,
|
||||
[path, channel, p](int) {
|
||||
QString lastLine = QString(p->readAllStandardOutput());
|
||||
lastLine = lastLine.trimmed().split('\n').last().trimmed();
|
||||
if (lastLine.startsWith("Available streams: ")) {
|
||||
QStringList options;
|
||||
QStringList split =
|
||||
lastLine.right(lastLine.length() - 19).split(", ");
|
||||
|
||||
for (int i = split.length() - 1; i >= 0; i--) {
|
||||
QString option = split.at(i);
|
||||
if (option.endsWith(" (worst)")) {
|
||||
options << option.left(option.length() - 8);
|
||||
} else if (option.endsWith(" (best)")) {
|
||||
options << option.left(option.length() - 7);
|
||||
} else {
|
||||
options << option;
|
||||
}
|
||||
}
|
||||
|
||||
QualityPopup::showDialog(channel, path, options);
|
||||
}
|
||||
});
|
||||
p->start(path, {"twitch.tv/" + channel, "--default-stream=KKona"});
|
||||
try {
|
||||
streamlink::Start(this->channelName.getValue());
|
||||
} catch (const streamlink::Exception &ex) {
|
||||
debug::Log("Error in doOpenStreamlink: {}", ex.what());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user