diff --git a/src/gui/src/main-window.cpp b/src/gui/src/main-window.cpp index 52b0fc76f..f64f42206 100644 --- a/src/gui/src/main-window.cpp +++ b/src/gui/src/main-window.cpp @@ -286,6 +286,7 @@ void MainWindow::init(const QStringList &args, const QMap &par m_downloadsTab = new DownloadsTab(m_profile, m_downloadQueue, this); ui->tabWidget->insertTab(m_tabs.size(), m_downloadsTab, m_downloadsTab->windowTitle()); connect(m_downloadsTab, &QWidget::windowTitleChanged, this, &MainWindow::tabTitleChanged); + connect(m_monitorsTab, &MonitorsTab::batchAddGroup, m_downloadsTab, &DownloadsTab::batchAddGroup); ui->tabWidget->setCurrentIndex(0); // "File" actions to load/save downloads list diff --git a/src/gui/src/tabs/downloads-tab.cpp b/src/gui/src/tabs/downloads-tab.cpp index 3181d293c..c18e65387 100644 --- a/src/gui/src/tabs/downloads-tab.cpp +++ b/src/gui/src/tabs/downloads-tab.cpp @@ -35,6 +35,7 @@ #include "main-window.h" #include "models/page.h" #include "models/profile.h" +#include "monitoring/monitor-manager.h" #include "progress-bar-delegate.h" @@ -118,6 +119,7 @@ void DownloadsTab::batchDownloadsTableContextMenu(const QPoint &pos) auto *menu = new QMenu(this); menu->addAction(QIcon(":/images/icons/save.png"), tr("Download"), this, SLOT(batchSel())); + menu->addAction(QIcon(":/images/icons/copy.png"), tr("Copy to monitors"), [this]() { batchConvert(); }); menu->addSeparator(); menu->addAction(QIcon(":/images/icons/arrow-top.png"), tr("Move to top"), this, SLOT(batchMoveToTop())); menu->addAction(QIcon(":/images/icons/arrow-up.png"), tr("Move up"), this, SLOT(batchMoveUp())); @@ -444,6 +446,17 @@ bool DownloadsTab::isDownloading() const return m_getAll; } +void DownloadsTab::batchConvert() +{ + QSet rows = selectedRows(ui->tableBatchGroups); + for (const int row : rows) { + const DownloadQueryGroup &group = m_groupBatchs[row]; + const bool notify = m_settings->value("Monitoring/enableTray", false).toBool(); + Monitor monitor({ group.site }, 24 * 60 * 60, QDateTime::currentDateTimeUtc(), true, QString(), QString(), 0, true, group.query, group.postFiltering, notify); + m_profile->monitorManager()->add(monitor); + } +} + /* Batch download */ void DownloadsTab::batchSel() diff --git a/src/gui/src/tabs/downloads-tab.h b/src/gui/src/tabs/downloads-tab.h index f3ce26afe..efdb59efe 100644 --- a/src/gui/src/tabs/downloads-tab.h +++ b/src/gui/src/tabs/downloads-tab.h @@ -104,6 +104,7 @@ class DownloadsTab : public QWidget QIcon &getIcon(const QString &path); bool isDownloading() const; void batchDownloadsTableContextMenu(const QPoint &pos); + void batchConvert(); protected: void changeEvent(QEvent *event) override; diff --git a/src/gui/src/tabs/monitors-tab.cpp b/src/gui/src/tabs/monitors-tab.cpp index c43d458fb..2fa33913f 100644 --- a/src/gui/src/tabs/monitors-tab.cpp +++ b/src/gui/src/tabs/monitors-tab.cpp @@ -7,6 +7,7 @@ #include #include #include +#include "downloader/download-query-group.h" #include "logger.h" #include "main-window.h" #include "models/profile.h" @@ -72,6 +73,8 @@ void MonitorsTab::monitorsTableContextMenu(const QPoint &pos) auto *menu = new QMenu(this); menu->addAction(QIcon(":/images/icons/edit.png"), tr("Edit"), [this, monitor]() { (new MonitorWindow(m_profile, monitor, this))->show(); }); + menu->addAction(QIcon(":/images/icons/copy.png"), tr("Copy to downloads"), [this]() { convertSelected(); }); + menu->addSeparator(); menu->addAction(QIcon(":/images/icons/remove.png"), tr("Remove"), [this]() { removeSelected(); }); menu->exec(QCursor::pos()); } @@ -93,6 +96,21 @@ void MonitorsTab::removeSelected() } } +void MonitorsTab::convertSelected() +{ + QSet rows; + for (const QModelIndex &index : ui->tableMonitors->selectionModel()->selection().indexes()) { + rows.insert(index.row()); + } + + for (const int row : rows) { + const Monitor &monitor = m_monitorManager->monitors()[row]; + for (Site *site : monitor.sites()) { + emit batchAddGroup(DownloadQueryGroup(m_settings, monitor.query(), 1, 200, -1, monitor.postFilters(), site)); + } + } +} + void MonitorsTab::toggleMonitoring() { bool running = m_monitoringCenter->isRunning(); diff --git a/src/gui/src/tabs/monitors-tab.h b/src/gui/src/tabs/monitors-tab.h index 37e4fe4e2..daa070d98 100644 --- a/src/gui/src/tabs/monitors-tab.h +++ b/src/gui/src/tabs/monitors-tab.h @@ -11,6 +11,7 @@ namespace Ui } +class DownloadQueryGroup; class MainWindow; class Monitor; class MonitorManager; @@ -41,6 +42,10 @@ class MonitorsTab : public QWidget protected slots: void monitorsTableContextMenu(const QPoint &pos); void removeSelected(); + void convertSelected(); + + signals: + void batchAddGroup(const DownloadQueryGroup &); private: Profile *m_profile;