From a6573e83e008fc959e62962a67c8809ef69ccc4c Mon Sep 17 00:00:00 2001 From: Confuseh Date: Sat, 12 Aug 2017 13:44:27 +0100 Subject: [PATCH] Simple streamlink support (#97) * Simple streamlink support Relies on settings entry & loads best available quality by default. --- src/settingsmanager.cpp | 1 + src/settingsmanager.hpp | 2 ++ src/widgets/chatwidget.cpp | 17 +++++++++++++++++ src/widgets/chatwidget.hpp | 4 +++- src/widgets/chatwidgetheader.cpp | 1 + src/widgets/settingsdialog.cpp | 14 ++++++++++++++ src/widgets/settingsdialog.hpp | 1 + 7 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/settingsmanager.cpp b/src/settingsmanager.cpp index a5d65a8ef..b54a1114a 100644 --- a/src/settingsmanager.cpp +++ b/src/settingsmanager.cpp @@ -14,6 +14,7 @@ SettingsManager::SettingsManager() , showTimestamps("/appearance/messages/showTimestamps", true) , showTimestampSeconds("/appearance/messages/showTimestampSeconds", true) , showBadges("/appearance/messages/showBadges", true) + , streamlinkPath("/behaviour/streamlinkPath", "") , selectedUser(_settingsItems, "selectedUser", "") , emoteScale(_settingsItems, "emoteScale", 1.0) , mouseScrollMultiplier(_settingsItems, "mouseScrollMultiplier", 1.0) diff --git a/src/settingsmanager.hpp b/src/settingsmanager.hpp index 10735e243..b1613432f 100644 --- a/src/settingsmanager.hpp +++ b/src/settingsmanager.hpp @@ -43,6 +43,8 @@ public: pajlada::Settings::Setting showTimestampSeconds; pajlada::Settings::Setting showBadges; + pajlada::Settings::Setting streamlinkPath; + // Settings Setting selectedUser; Setting emoteScale; diff --git a/src/widgets/chatwidget.cpp b/src/widgets/chatwidget.cpp index 77ff767a5..07cb0103d 100644 --- a/src/widgets/chatwidget.cpp +++ b/src/widgets/chatwidget.cpp @@ -11,6 +11,8 @@ #include #include #include +#include +#include #include #include @@ -270,5 +272,20 @@ void ChatWidget::doOpenPopupPlayer() << QString::fromStdString(this->channelName.getValue()) << "/popout"; } +void ChatWidget::doOpenStreamlink() +{ + SettingsManager &settings = SettingsManager::getInstance(); + QString path = QString::fromStdString(settings.streamlinkPath.getValue()); + QFileInfo fileinfo = QFileInfo(path); + // TODO(Confuseh): Add default checks for streamlink/livestreamer + // TODO(Confuseh): Add quality switcher + if (fileinfo.exists() && fileinfo.isExecutable()) { + // works on leenux, idk whether it would work on whindows or mehOS + QProcess::startDetached(path, + QStringList({"twitch.tv/" + QString::fromStdString(this->channelName.getValue()), + "best"})); + } +} + } // namespace widgets } // namespace chatterino diff --git a/src/widgets/chatwidget.hpp b/src/widgets/chatwidget.hpp index afdeaacb2..1355e6f98 100644 --- a/src/widgets/chatwidget.hpp +++ b/src/widgets/chatwidget.hpp @@ -63,7 +63,6 @@ protected: public: ChannelManager &channelManager; CompletionManager &completionManager; - private: void setChannel(std::shared_ptr newChannel); void detachChannel(); @@ -109,6 +108,9 @@ public slots: // Open popup player of twitch channel in default browser void doOpenPopupPlayer(); + + // Open twitch channel stream through streamlink + void doOpenStreamlink(); }; } // namespace widgets diff --git a/src/widgets/chatwidgetheader.cpp b/src/widgets/chatwidgetheader.cpp index 8e60c4ccd..97964892d 100644 --- a/src/widgets/chatwidgetheader.cpp +++ b/src/widgets/chatwidgetheader.cpp @@ -50,6 +50,7 @@ ChatWidgetHeader::ChatWidgetHeader(ChatWidget *_chatWidget) this->leftMenu.addAction("Clear chat", this->chatWidget, &ChatWidget::doClearChat); this->leftMenu.addAction("Open channel", this->chatWidget, &ChatWidget::doOpenChannel); this->leftMenu.addAction("Open popup player", this->chatWidget, &ChatWidget::doOpenPopupPlayer); + this->leftMenu.addAction("Open in Streamlink", this->chatWidget, &ChatWidget::doOpenStreamlink); this->leftMenu.addSeparator(); this->leftMenu.addAction("Reload channel emotes", this, SLOT(menuReloadChannelEmotes())); this->leftMenu.addAction("Manual reconnect", this, SLOT(menuManualReconnect())); diff --git a/src/widgets/settingsdialog.cpp b/src/widgets/settingsdialog.cpp index 4e3916d68..0ba012e5e 100644 --- a/src/widgets/settingsdialog.cpp +++ b/src/widgets/settingsdialog.cpp @@ -312,6 +312,8 @@ void SettingsDialog::addTabs() auto scroll = new QSlider(Qt::Horizontal); form->addRow("Mouse scroll speed:", scroll); + form->addRow("Streamlink Path", createLineEdit(settings.streamlinkPath)); + // v->addWidget(scroll); // v->addStretch(1); // vbox->addLayout(v); @@ -583,6 +585,18 @@ QHBoxLayout *SettingsDialog::createCombobox( return box; } +QLineEdit *SettingsDialog::createLineEdit(pajlada::Settings::Setting &setting) +{ + auto widget = new QLineEdit(QString::fromStdString(setting.getValue())); + + QObject::connect(widget, &QLineEdit::textChanged, this, + [&setting](const QString &newValue) { + setting = newValue.toStdString(); + }); + + return widget; +} + void SettingsDialog::okButtonClicked() { this->close(); diff --git a/src/widgets/settingsdialog.hpp b/src/widgets/settingsdialog.hpp index e1e800afe..3d292f310 100644 --- a/src/widgets/settingsdialog.hpp +++ b/src/widgets/settingsdialog.hpp @@ -60,6 +60,7 @@ private: QHBoxLayout *createCombobox(const QString &title, pajlada::Settings::Setting &setting, QStringList items, std::function &)> cb); + QLineEdit *createLineEdit(pajlada::Settings::Setting &setting); void okButtonClicked(); void cancelButtonClicked();