Reworked external tools, now in internal web browser too, can be used with media in web browser
This commit is contained in:
parent
9f929fb787
commit
7c42177d21
|
@ -30,7 +30,7 @@
|
||||||
<url type="donation">https://martinrotter.github.io/donate/</url>
|
<url type="donation">https://martinrotter.github.io/donate/</url>
|
||||||
<content_rating type="oars-1.1" />
|
<content_rating type="oars-1.1" />
|
||||||
<releases>
|
<releases>
|
||||||
<release version="3.9.0" date="2021-03-12"/>
|
<release version="3.9.0" date="2021-03-15"/>
|
||||||
</releases>
|
</releases>
|
||||||
<content_rating type="oars-1.0">
|
<content_rating type="oars-1.0">
|
||||||
<content_attribute id="violence-cartoon">none</content_attribute>
|
<content_attribute id="violence-cartoon">none</content_attribute>
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749
|
Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9
|
|
@ -82,8 +82,8 @@
|
||||||
#define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8"
|
#define GOOGLE_SEARCH_URL "https://www.google.com/search?q=%1&ie=utf-8&oe=utf-8"
|
||||||
#define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1"
|
#define GOOGLE_SUGGEST_URL "http://suggestqueries.google.com/complete/search?output=toolbar&hl=en&q=%1"
|
||||||
|
|
||||||
#define EXTERNAL_TOOL_SEPARATOR "###"
|
#define EXECUTION_LINE_SEPARATOR "#"
|
||||||
#define EXTERNAL_TOOL_PARAM_SEPARATOR "|||"
|
#define EXTERNAL_TOOL_SEPARATOR "|||"
|
||||||
#define USER_DATA_PLACEHOLDER "%data%"
|
#define USER_DATA_PLACEHOLDER "%data%"
|
||||||
|
|
||||||
#define CLI_LOG_SHORT "l"
|
#define CLI_LOG_SHORT "l"
|
||||||
|
|
|
@ -100,6 +100,8 @@ MessageBrowser::MessageBrowser(bool should_resize_to_fit, QWidget* parent)
|
||||||
|
|
||||||
m_searchWidget->hide();
|
m_searchWidget->hide();
|
||||||
installEventFilter(this);
|
installEventFilter(this);
|
||||||
|
|
||||||
|
reloadFontSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MessageBrowser::clear() {
|
void MessageBrowser::clear() {
|
||||||
|
|
|
@ -71,7 +71,7 @@ MessagePreviewer::MessagePreviewer(bool should_resize_to_fit, QWidget* parent)
|
||||||
createConnections();
|
createConnections();
|
||||||
m_actionSwitchImportance->setCheckable(true);
|
m_actionSwitchImportance->setCheckable(true);
|
||||||
|
|
||||||
reloadFontSettings();
|
//reloadFontSettings();
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ void MessagesView::initializeContextMenu() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menu_ext_tools->actions().isEmpty()) {
|
if (menu_ext_tools->actions().isEmpty()) {
|
||||||
QAction* act_not_tools = new QAction("No external tools activated");
|
QAction* act_not_tools = new QAction(tr("No external tools activated"));
|
||||||
|
|
||||||
act_not_tools->setEnabled(false);
|
act_not_tools->setEnabled(false);
|
||||||
menu_ext_tools->addAction(act_not_tools);
|
menu_ext_tools->addAction(act_not_tools);
|
||||||
|
@ -598,10 +598,10 @@ void MessagesView::openSelectedMessagesWithExternalTool() {
|
||||||
.replace(QRegularExpression("[\\t\\n]"), QString());
|
.replace(QRegularExpression("[\\t\\n]"), QString());
|
||||||
|
|
||||||
if (!link.isEmpty()) {
|
if (!link.isEmpty()) {
|
||||||
if (!QProcess::startDetached(tool.executable(), QStringList() << tool.parameters() << link)) {
|
if (!tool.run(link)) {
|
||||||
qApp->showGuiMessage(tr("Cannot run external tool"),
|
qApp->showGuiMessage(tr("Cannot run external tool"),
|
||||||
tr("External tool '%1' could not be started.").arg(tool.executable()),
|
tr("External tool '%1' could not be started.").arg(tool.executable()),
|
||||||
QSystemTrayIcon::Critical);
|
QSystemTrayIcon::MessageIcon::Critical);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
|
|
||||||
#include "gui/settings/settingsbrowsermail.h"
|
#include "gui/settings/settingsbrowsermail.h"
|
||||||
|
|
||||||
|
#include "exceptions/applicationexception.h"
|
||||||
#include "gui/guiutilities.h"
|
#include "gui/guiutilities.h"
|
||||||
#include "gui/networkproxydetails.h"
|
#include "gui/networkproxydetails.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "miscellaneous/externaltool.h"
|
#include "miscellaneous/externaltool.h"
|
||||||
|
#include "miscellaneous/iconfactory.h"
|
||||||
#include "network-web/silentnetworkaccessmanager.h"
|
#include "network-web/silentnetworkaccessmanager.h"
|
||||||
#include "network-web/webfactory.h"
|
#include "network-web/webfactory.h"
|
||||||
|
|
||||||
|
@ -23,6 +25,10 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent)
|
||||||
GuiUtilities::setLabelAsNotice(*m_ui->m_lblExternalEmailInfo, false);
|
GuiUtilities::setLabelAsNotice(*m_ui->m_lblExternalEmailInfo, false);
|
||||||
GuiUtilities::setLabelAsNotice(*m_ui->m_lblToolInfo, false);
|
GuiUtilities::setLabelAsNotice(*m_ui->m_lblToolInfo, false);
|
||||||
|
|
||||||
|
m_ui->m_btnAddTool->setIcon(qApp->icons()->fromTheme(QSL("list-add")));
|
||||||
|
m_ui->m_btnEditTool->setIcon(qApp->icons()->fromTheme(QSL("document-edit")));
|
||||||
|
m_ui->m_btnDeleteTool->setIcon(qApp->icons()->fromTheme(QSL("list-remove")));
|
||||||
|
|
||||||
#if defined(USE_WEBENGINE)
|
#if defined(USE_WEBENGINE)
|
||||||
m_ui->m_checkOpenLinksInExternal->setVisible(false);
|
m_ui->m_checkOpenLinksInExternal->setVisible(false);
|
||||||
#else
|
#else
|
||||||
|
@ -46,13 +52,17 @@ SettingsBrowserMail::SettingsBrowserMail(Settings* settings, QWidget* parent)
|
||||||
&SettingsBrowserMail::changeDefaultEmailArguments);
|
&SettingsBrowserMail::changeDefaultEmailArguments);
|
||||||
connect(m_ui->m_btnExternalEmailExecutable, &QPushButton::clicked, this, &SettingsBrowserMail::selectEmailExecutable);
|
connect(m_ui->m_btnExternalEmailExecutable, &QPushButton::clicked, this, &SettingsBrowserMail::selectEmailExecutable);
|
||||||
connect(m_ui->m_btnAddTool, &QPushButton::clicked, this, &SettingsBrowserMail::dirtifySettings);
|
connect(m_ui->m_btnAddTool, &QPushButton::clicked, this, &SettingsBrowserMail::dirtifySettings);
|
||||||
|
connect(m_ui->m_btnEditTool, &QPushButton::clicked, this, &SettingsBrowserMail::dirtifySettings);
|
||||||
connect(m_ui->m_btnDeleteTool, &QPushButton::clicked, this, &SettingsBrowserMail::dirtifySettings);
|
connect(m_ui->m_btnDeleteTool, &QPushButton::clicked, this, &SettingsBrowserMail::dirtifySettings);
|
||||||
connect(m_ui->m_btnAddTool, &QPushButton::clicked, this, &SettingsBrowserMail::addExternalTool);
|
connect(m_ui->m_btnAddTool, &QPushButton::clicked, this, &SettingsBrowserMail::addExternalTool);
|
||||||
|
connect(m_ui->m_btnEditTool, &QPushButton::clicked, this, &SettingsBrowserMail::editSelectedExternalTool);
|
||||||
connect(m_ui->m_btnDeleteTool, &QPushButton::clicked, this, &SettingsBrowserMail::deleteSelectedExternalTool);
|
connect(m_ui->m_btnDeleteTool, &QPushButton::clicked, this, &SettingsBrowserMail::deleteSelectedExternalTool);
|
||||||
|
connect(m_ui->m_listTools, &QTreeWidget::itemDoubleClicked, this, &SettingsBrowserMail::editSelectedExternalTool);
|
||||||
connect(m_ui->m_listTools, &QTreeWidget::currentItemChanged, this, [this](QTreeWidgetItem* current, QTreeWidgetItem* previous) {
|
connect(m_ui->m_listTools, &QTreeWidget::currentItemChanged, this, [this](QTreeWidgetItem* current, QTreeWidgetItem* previous) {
|
||||||
Q_UNUSED(previous)
|
Q_UNUSED(previous)
|
||||||
|
|
||||||
m_ui->m_btnDeleteTool->setEnabled(current != nullptr);
|
m_ui->m_btnDeleteTool->setEnabled(current != nullptr);
|
||||||
|
m_ui->m_btnEditTool->setEnabled(current != nullptr);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,7 +97,7 @@ QList<ExternalTool> SettingsBrowserMail::externalTools() const {
|
||||||
QList<ExternalTool> list;
|
QList<ExternalTool> list;
|
||||||
|
|
||||||
for (int i = 0; i < m_ui->m_listTools->topLevelItemCount(); i++) {
|
for (int i = 0; i < m_ui->m_listTools->topLevelItemCount(); i++) {
|
||||||
list.append(m_ui->m_listTools->topLevelItem(i)->data(0, Qt::UserRole).value<ExternalTool>());
|
list.append(m_ui->m_listTools->topLevelItem(i)->data(0, Qt::ItemDataRole::UserRole).value<ExternalTool>());
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return list;
|
||||||
|
@ -96,9 +106,9 @@ QList<ExternalTool> SettingsBrowserMail::externalTools() const {
|
||||||
void SettingsBrowserMail::setExternalTools(const QList<ExternalTool>& list) {
|
void SettingsBrowserMail::setExternalTools(const QList<ExternalTool>& list) {
|
||||||
for (const ExternalTool& tool : list) {
|
for (const ExternalTool& tool : list) {
|
||||||
QTreeWidgetItem* item = new QTreeWidgetItem(m_ui->m_listTools,
|
QTreeWidgetItem* item = new QTreeWidgetItem(m_ui->m_listTools,
|
||||||
QStringList() << tool.executable() << tool.parameters().join(QL1C(' ')));
|
QStringList() << tool.executable() << tool.parameters());
|
||||||
|
|
||||||
item->setData(0, Qt::UserRole, QVariant::fromValue(tool));
|
item->setData(0, Qt::ItemDataRole::UserRole, QVariant::fromValue(tool));
|
||||||
|
|
||||||
m_ui->m_listTools->addTopLevelItem(item);
|
m_ui->m_listTools->addTopLevelItem(item);
|
||||||
}
|
}
|
||||||
|
@ -202,36 +212,66 @@ void SettingsBrowserMail::saveSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsBrowserMail::addExternalTool() {
|
void SettingsBrowserMail::addExternalTool() {
|
||||||
QString executable_file = QFileDialog::getOpenFileName(this,
|
try {
|
||||||
tr("Select external tool"),
|
auto tool = tweakExternalTool(ExternalTool(qApp->homeFolder(), {}));
|
||||||
qApp->homeFolder(),
|
QTreeWidgetItem* item = new QTreeWidgetItem(m_ui->m_listTools,
|
||||||
|
QStringList() << QDir::toNativeSeparators(tool.executable())
|
||||||
|
<< tool.parameters());
|
||||||
|
|
||||||
//: File filter for external tool selection dialog.
|
item->setData(0, Qt::ItemDataRole::UserRole, QVariant::fromValue(tool));
|
||||||
#if defined(Q_OS_LINUX)
|
m_ui->m_listTools->addTopLevelItem(item);
|
||||||
tr("Executables (*)"));
|
}
|
||||||
#else
|
catch (const ApplicationException& ex) {
|
||||||
|
// NOTE: Tool adding cancelled.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ExternalTool SettingsBrowserMail::tweakExternalTool(const ExternalTool& tool) const {
|
||||||
|
QString executable_file = QFileDialog::getOpenFileName(window(),
|
||||||
|
tr("Select external tool"),
|
||||||
|
tool.executable(),
|
||||||
|
#if defined(Q_OS_WIN)
|
||||||
tr("Executables (*.*)"));
|
tr("Executables (*.*)"));
|
||||||
|
#else
|
||||||
|
tr("Executables (*)"));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!executable_file.isEmpty()) {
|
if (!executable_file.isEmpty()) {
|
||||||
executable_file = QDir::toNativeSeparators(executable_file);
|
executable_file = QDir::toNativeSeparators(executable_file);
|
||||||
bool ok;
|
bool ok;
|
||||||
QString parameters = QInputDialog::getText(this,
|
QString parameters = QInputDialog::getText(window(),
|
||||||
tr("Enter parameters"),
|
tr("Enter parameters"),
|
||||||
tr(
|
tr("Enter (optional) parameters separated by \"%1\":").arg(EXECUTION_LINE_SEPARATOR),
|
||||||
"Enter (optional) parameters separated by single space to send to executable when opening URLs."),
|
|
||||||
QLineEdit::EchoMode::Normal,
|
QLineEdit::EchoMode::Normal,
|
||||||
QString(),
|
tool.parameters(),
|
||||||
&ok);
|
&ok);
|
||||||
|
|
||||||
if (ok) {
|
if (ok) {
|
||||||
QTreeWidgetItem* item = new QTreeWidgetItem(m_ui->m_listTools,
|
return ExternalTool(executable_file, parameters);
|
||||||
QStringList() << QDir::toNativeSeparators(executable_file) << parameters);
|
|
||||||
|
|
||||||
item->setData(0, Qt::UserRole, QVariant::fromValue(ExternalTool(executable_file, parameters.split(QSL(" ")))));
|
|
||||||
m_ui->m_listTools->addTopLevelItem(item);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw ApplicationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SettingsBrowserMail::editSelectedExternalTool() {
|
||||||
|
auto* cur_it = m_ui->m_listTools->currentItem();
|
||||||
|
|
||||||
|
if (cur_it == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto ext_tool = cur_it->data(0, Qt::ItemDataRole::UserRole).value<ExternalTool>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
ext_tool = tweakExternalTool(ext_tool);
|
||||||
|
m_ui->m_listTools->currentItem()->setText(0, ext_tool.executable());
|
||||||
|
m_ui->m_listTools->currentItem()->setText(1, ext_tool.parameters());
|
||||||
|
m_ui->m_listTools->currentItem()->setData(0, Qt::ItemDataRole::UserRole, QVariant::fromValue(ext_tool));
|
||||||
|
}
|
||||||
|
catch (const ApplicationException& ex) {
|
||||||
|
// NOTE: Tool adding cancelled.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SettingsBrowserMail::deleteSelectedExternalTool() {
|
void SettingsBrowserMail::deleteSelectedExternalTool() {
|
||||||
|
|
|
@ -24,12 +24,16 @@ class SettingsBrowserMail : public SettingsPanel {
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void addExternalTool();
|
void addExternalTool();
|
||||||
|
void editSelectedExternalTool();
|
||||||
void deleteSelectedExternalTool();
|
void deleteSelectedExternalTool();
|
||||||
void changeDefaultBrowserArguments(int index);
|
void changeDefaultBrowserArguments(int index);
|
||||||
void selectBrowserExecutable();
|
void selectBrowserExecutable();
|
||||||
void changeDefaultEmailArguments(int index);
|
void changeDefaultEmailArguments(int index);
|
||||||
void selectEmailExecutable();
|
void selectEmailExecutable();
|
||||||
|
|
||||||
|
private:
|
||||||
|
ExternalTool tweakExternalTool(const ExternalTool& tool) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QList<ExternalTool> externalTools() const;
|
QList<ExternalTool> externalTools() const;
|
||||||
void setExternalTools(const QList<ExternalTool>& list);
|
void setExternalTools(const QList<ExternalTool>& list);
|
||||||
|
|
|
@ -262,27 +262,6 @@
|
||||||
<string>External tools</string>
|
<string>External tools</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QFormLayout" name="formLayout">
|
<layout class="QFormLayout" name="formLayout">
|
||||||
<item row="2" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="m_btnAddTool">
|
|
||||||
<property name="text">
|
|
||||||
<string>Add external tool</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="m_btnDeleteTool">
|
|
||||||
<property name="enabled">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Delete selected external tool</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0" colspan="2">
|
<item row="0" column="0" colspan="2">
|
||||||
<widget class="QLabel" name="m_lblToolInfo">
|
<widget class="QLabel" name="m_lblToolInfo">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -330,6 +309,37 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_btnAddTool">
|
||||||
|
<property name="text">
|
||||||
|
<string>&Add new external tool</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_btnEditTool">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Edit selected external tool</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="m_btnDeleteTool">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Delete selected external tool</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
@ -351,6 +361,7 @@
|
||||||
<tabstop>m_cmbExternalEmailPreset</tabstop>
|
<tabstop>m_cmbExternalEmailPreset</tabstop>
|
||||||
<tabstop>m_listTools</tabstop>
|
<tabstop>m_listTools</tabstop>
|
||||||
<tabstop>m_btnAddTool</tabstop>
|
<tabstop>m_btnAddTool</tabstop>
|
||||||
|
<tabstop>m_btnEditTool</tabstop>
|
||||||
<tabstop>m_btnDeleteTool</tabstop>
|
<tabstop>m_btnDeleteTool</tabstop>
|
||||||
</tabstops>
|
</tabstops>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
|
|
||||||
#include "gui/webbrowser.h"
|
#include "gui/webbrowser.h"
|
||||||
|
|
||||||
|
#include "database/databasequeries.h"
|
||||||
#include "gui/discoverfeedsbutton.h"
|
#include "gui/discoverfeedsbutton.h"
|
||||||
#include "gui/locationlineedit.h"
|
#include "gui/locationlineedit.h"
|
||||||
#include "gui/messagebox.h"
|
#include "gui/messagebox.h"
|
||||||
#include "gui/searchtextwidget.h"
|
#include "gui/searchtextwidget.h"
|
||||||
#include "gui/webviewer.h"
|
#include "gui/webviewer.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
#include "database/databasequeries.h"
|
|
||||||
#include "miscellaneous/iconfactory.h"
|
#include "miscellaneous/iconfactory.h"
|
||||||
#include "network-web/networkfactory.h"
|
#include "network-web/networkfactory.h"
|
||||||
#include "network-web/webfactory.h"
|
#include "network-web/webfactory.h"
|
||||||
|
@ -118,9 +118,9 @@ void WebBrowser::reloadFontSettings() {
|
||||||
fon.fromString(qApp->settings()->value(GROUP(Messages),
|
fon.fromString(qApp->settings()->value(GROUP(Messages),
|
||||||
SETTING(Messages::PreviewerFontStandard)).toString());
|
SETTING(Messages::PreviewerFontStandard)).toString());
|
||||||
|
|
||||||
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::StandardFont, fon.family());
|
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::StandardFont, fon.family());
|
||||||
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SerifFont, fon.family());
|
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::SerifFont, fon.family());
|
||||||
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::SansSerifFont, fon.family());
|
QWebEngineSettings::defaultSettings()->setFontFamily(QWebEngineSettings::FontFamily::SansSerifFont, fon.family());
|
||||||
QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, fon.pointSize());
|
QWebEngineSettings::defaultSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, fon.pointSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,12 +7,14 @@
|
||||||
#include "gui/tabwidget.h"
|
#include "gui/tabwidget.h"
|
||||||
#include "gui/webbrowser.h"
|
#include "gui/webbrowser.h"
|
||||||
#include "miscellaneous/application.h"
|
#include "miscellaneous/application.h"
|
||||||
|
#include "miscellaneous/externaltool.h"
|
||||||
#include "miscellaneous/skinfactory.h"
|
#include "miscellaneous/skinfactory.h"
|
||||||
#include "network-web/adblock/adblockicon.h"
|
#include "network-web/adblock/adblockicon.h"
|
||||||
#include "network-web/adblock/adblockmanager.h"
|
#include "network-web/adblock/adblockmanager.h"
|
||||||
#include "network-web/webfactory.h"
|
#include "network-web/webfactory.h"
|
||||||
#include "network-web/webpage.h"
|
#include "network-web/webpage.h"
|
||||||
|
|
||||||
|
#include <QFileIconProvider>
|
||||||
#include <QOpenGLWidget>
|
#include <QOpenGLWidget>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QWebEngineContextMenuData>
|
#include <QWebEngineContextMenuData>
|
||||||
|
@ -162,7 +164,7 @@ void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
|
||||||
|
|
||||||
if (menu_data.linkUrl().isValid()) {
|
if (menu_data.linkUrl().isValid()) {
|
||||||
// Add option to open link in external viewe
|
// Add option to open link in external viewe
|
||||||
menu->addAction(qApp->icons()->fromTheme(QSL("")), tr("Open link in external browser"), [menu_data]() {
|
menu->addAction(qApp->icons()->fromTheme(QSL("document-open")), tr("Open link in external browser"), [menu_data]() {
|
||||||
qApp->web()->openUrlInExternalBrowser(menu_data.linkUrl().toString());
|
qApp->web()->openUrlInExternalBrowser(menu_data.linkUrl().toString());
|
||||||
|
|
||||||
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::BringAppToFrontAfterMessageOpenedExternally)).toBool()) {
|
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::BringAppToFrontAfterMessageOpenedExternally)).toBool()) {
|
||||||
|
@ -173,6 +175,35 @@ void WebViewer::contextMenuEvent(QContextMenuEvent* event) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (menu_data.mediaUrl().isValid() || menu_data.linkUrl().isValid()) {
|
||||||
|
QFileIconProvider icon_provider;
|
||||||
|
QMenu* menu_ext_tools = new QMenu(tr("Open with external tool"), menu);
|
||||||
|
|
||||||
|
menu_ext_tools->setIcon(qApp->icons()->fromTheme(QSL("document-open")));
|
||||||
|
|
||||||
|
for (const ExternalTool& tool : ExternalTool::toolsFromSettings()) {
|
||||||
|
QAction* act_tool = new QAction(QFileInfo(tool.executable()).fileName(), menu_ext_tools);
|
||||||
|
|
||||||
|
act_tool->setIcon(icon_provider.icon(tool.executable()));
|
||||||
|
act_tool->setToolTip(tool.executable());
|
||||||
|
act_tool->setData(QVariant::fromValue(tool));
|
||||||
|
menu_ext_tools->addAction(act_tool);
|
||||||
|
|
||||||
|
connect(act_tool, &QAction::triggered, this, [this, act_tool, menu_data]() {
|
||||||
|
openUrlWithExternalTool(act_tool->data().value<ExternalTool>(), menu_data);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (menu_ext_tools->actions().isEmpty()) {
|
||||||
|
QAction* act_not_tools = new QAction("No external tools activated");
|
||||||
|
|
||||||
|
act_not_tools->setEnabled(false);
|
||||||
|
menu_ext_tools->addAction(act_not_tools);
|
||||||
|
}
|
||||||
|
|
||||||
|
menu->addMenu(menu_ext_tools);
|
||||||
|
}
|
||||||
|
|
||||||
menu->addAction(qApp->web()->adBlock()->adBlockIcon());
|
menu->addAction(qApp->web()->adBlock()->adBlockIcon());
|
||||||
menu->addAction(qApp->web()->engineSettingsAction());
|
menu->addAction(qApp->web()->engineSettingsAction());
|
||||||
|
|
||||||
|
@ -233,6 +264,10 @@ bool WebViewer::eventFilter(QObject* object, QEvent* event) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebViewer::openUrlWithExternalTool(ExternalTool tool, const QWebEngineContextMenuData& target) {
|
||||||
|
tool.run(target.mediaUrl().isValid() ? target.mediaUrl().toString() : target.linkUrl().toString());
|
||||||
|
}
|
||||||
|
|
||||||
RootItem* WebViewer::root() const {
|
RootItem* WebViewer::root() const {
|
||||||
return m_root;
|
return m_root;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <QWebEngineView>
|
#include <QWebEngineView>
|
||||||
|
|
||||||
#include "core/message.h"
|
#include "core/message.h"
|
||||||
|
#include "miscellaneous/externaltool.h"
|
||||||
#include "network-web/webpage.h"
|
#include "network-web/webpage.h"
|
||||||
|
|
||||||
class RootItem;
|
class RootItem;
|
||||||
|
@ -39,6 +40,9 @@ class WebViewer : public QWebEngineView {
|
||||||
virtual bool event(QEvent* event);
|
virtual bool event(QEvent* event);
|
||||||
virtual bool eventFilter(QObject* object, QEvent* event);
|
virtual bool eventFilter(QObject* object, QEvent* event);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void openUrlWithExternalTool(ExternalTool tool, const QWebEngineContextMenuData& target);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RootItem* m_root;
|
RootItem* m_root;
|
||||||
QString m_messageContents;
|
QString m_messageContents;
|
||||||
|
|
|
@ -12,27 +12,25 @@
|
||||||
|
|
||||||
void ExternalTool::sanitizeParameters() {
|
void ExternalTool::sanitizeParameters() {
|
||||||
m_executable = QDir::toNativeSeparators(m_executable);
|
m_executable = QDir::toNativeSeparators(m_executable);
|
||||||
m_parameters.removeDuplicates();
|
|
||||||
m_parameters.removeAll(QString());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ExternalTool::ExternalTool(const ExternalTool& other) : ExternalTool(other.executable(), other.parameters()) {}
|
ExternalTool::ExternalTool(const ExternalTool& other) : ExternalTool(other.executable(), other.parameters()) {}
|
||||||
|
|
||||||
ExternalTool::ExternalTool(QString executable, QStringList parameters)
|
ExternalTool::ExternalTool(QString executable, QString parameters)
|
||||||
: m_executable(std::move(executable)), m_parameters(std::move(parameters)) {
|
: m_executable(std::move(executable)), m_parameters(std::move(parameters)) {
|
||||||
sanitizeParameters();
|
sanitizeParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ExternalTool::toString() {
|
QString ExternalTool::toString() {
|
||||||
sanitizeParameters();
|
sanitizeParameters();
|
||||||
return m_executable + EXTERNAL_TOOL_SEPARATOR + m_parameters.join(EXTERNAL_TOOL_PARAM_SEPARATOR);
|
return m_executable + EXTERNAL_TOOL_SEPARATOR + m_parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString ExternalTool::executable() const {
|
QString ExternalTool::executable() const {
|
||||||
return m_executable;
|
return m_executable;
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList ExternalTool::parameters() const {
|
QString ExternalTool::parameters() const {
|
||||||
return m_parameters;
|
return m_parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +42,7 @@ ExternalTool ExternalTool::fromString(const QString& str) {
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const QString& executable = outer.at(0);
|
const QString& executable = outer.at(0);
|
||||||
const QStringList parameters = outer.at(1).split(EXTERNAL_TOOL_PARAM_SEPARATOR);
|
const QString& parameters = outer.at(1);
|
||||||
|
|
||||||
return ExternalTool(executable, parameters);
|
return ExternalTool(executable, parameters);
|
||||||
}
|
}
|
||||||
|
@ -70,3 +68,7 @@ void ExternalTool::setToolsToSettings(QList<ExternalTool>& tools) {
|
||||||
|
|
||||||
qApp->settings()->setValue(GROUP(Browser), Browser::ExternalTools, encode);
|
qApp->settings()->setValue(GROUP(Browser), Browser::ExternalTools, encode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ExternalTool::run(const QString& target) {
|
||||||
|
return IOFactory::startProcessDetached(executable(), QStringList() << parameters() << target);
|
||||||
|
}
|
||||||
|
|
|
@ -10,19 +10,22 @@ class ExternalTool {
|
||||||
public:
|
public:
|
||||||
explicit ExternalTool() = default;
|
explicit ExternalTool() = default;
|
||||||
ExternalTool(const ExternalTool& other);
|
ExternalTool(const ExternalTool& other);
|
||||||
explicit ExternalTool(QString executable, QStringList parameters);
|
explicit ExternalTool(QString executable, QString parameters);
|
||||||
|
|
||||||
QString toString();
|
QString toString();
|
||||||
QString executable() const;
|
QString executable() const;
|
||||||
QStringList parameters() const;
|
QString parameters() const;
|
||||||
|
|
||||||
|
bool run(const QString& target);
|
||||||
|
|
||||||
|
public:
|
||||||
static ExternalTool fromString(const QString& str);
|
static ExternalTool fromString(const QString& str);
|
||||||
static QList<ExternalTool> toolsFromSettings();
|
static QList<ExternalTool> toolsFromSettings();
|
||||||
static void setToolsToSettings(QList<ExternalTool>& tools);
|
static void setToolsToSettings(QList<ExternalTool>& tools);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QString m_executable;
|
QString m_executable;
|
||||||
QStringList m_parameters;
|
QString m_parameters;
|
||||||
|
|
||||||
void sanitizeParameters();
|
void sanitizeParameters();
|
||||||
};
|
};
|
||||||
|
|
|
@ -508,7 +508,7 @@ void StandardFeed::setEncoding(const QString& encoding) {
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList StandardFeed::prepareExecutionLine(const QString& execution_line) {
|
QStringList StandardFeed::prepareExecutionLine(const QString& execution_line) {
|
||||||
auto split_exec = execution_line.split('#',
|
auto split_exec = execution_line.split(EXECUTION_LINE_SEPARATOR,
|
||||||
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
#if QT_VERSION >= 0x050F00 // Qt >= 5.15.0
|
||||||
Qt::SplitBehaviorFlags::SkipEmptyParts);
|
Qt::SplitBehaviorFlags::SkipEmptyParts);
|
||||||
#else
|
#else
|
||||||
|
|
Loading…
Reference in New Issue