From 0b47021504d463e5bd33d09a2982d504f67a9664 Mon Sep 17 00:00:00 2001 From: silver Date: Wed, 24 Oct 2018 19:20:33 +0200 Subject: [PATCH 1/2] Prevent flickering preview dialog Avoid instantiation of a preview dialog, when torrent is not previewable --- src/gui/previewselectdialog.cpp | 4 ---- src/gui/transferlistwidget.cpp | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/gui/previewselectdialog.cpp b/src/gui/previewselectdialog.cpp index 4627d8be6..730591c2d 100644 --- a/src/gui/previewselectdialog.cpp +++ b/src/gui/previewselectdialog.cpp @@ -93,10 +93,6 @@ PreviewSelectDialog::PreviewSelectDialog(QWidget *parent, BitTorrent::TorrentHan } } - if (m_previewListModel->rowCount() == 0) { - QMessageBox::critical(this->parentWidget(), tr("Preview impossible"), tr("Sorry, we can't preview this file")); - close(); - } connect(this, SIGNAL(readyToPreviewFile(QString)), parent, SLOT(previewFile(QString))); m_previewListModel->sort(NAME); previewList->header()->setSortIndicator(0, Qt::AscendingOrder); diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index 79606171f..c46bb64e2 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -48,6 +48,7 @@ #include "base/preferences.h" #include "base/torrentfilter.h" #include "base/utils/fs.h" +#include "base/utils/misc.h" #include "base/utils/string.h" #include "autoexpandabledialog.h" #include "deletionconfirmationdialog.h" @@ -198,6 +199,19 @@ namespace setDefaultWidget(new MenuCheckBox(text, onToggle, initialState)); } }; + + bool torrentContainsPreviewableFiles(const BitTorrent::TorrentHandle *const torrent) + { + if (!torrent->hasMetadata()) + return false; + + for (int i = 0; i < torrent->filesCount(); ++i) { + if (Utils::Misc::isPreviewable(Utils::Fs::fileExtension(torrent->fileName(i)))) + return true; + } + + return false; + } } TransferListWidget::TransferListWidget(QWidget *parent, MainWindow *mainWindow) @@ -589,8 +603,10 @@ void TransferListWidget::openSelectedTorrentsFolder() const void TransferListWidget::previewSelectedTorrents() { for (BitTorrent::TorrentHandle *const torrent : asConst(getSelectedTorrents())) { - if (torrent->hasMetadata()) + if (torrentContainsPreviewableFiles(torrent)) new PreviewSelectDialog(this, torrent); + else + QMessageBox::critical(this, tr("Unable to preview"), tr("The selected torrent does not contain previewable files")); } } From dd2763d7258ee0a8cc088496dfa5107b8290b396 Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Sat, 29 Dec 2018 18:22:15 +0800 Subject: [PATCH 2/2] Forward declare TorrentHandle --- src/gui/previewselectdialog.cpp | 1 + src/gui/previewselectdialog.h | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gui/previewselectdialog.cpp b/src/gui/previewselectdialog.cpp index 730591c2d..07da7aec2 100644 --- a/src/gui/previewselectdialog.cpp +++ b/src/gui/previewselectdialog.cpp @@ -35,6 +35,7 @@ #include #include +#include "base/bittorrent/torrenthandle.h" #include "base/preferences.h" #include "base/utils/fs.h" #include "base/utils/misc.h" diff --git a/src/gui/previewselectdialog.h b/src/gui/previewselectdialog.h index 715643b8a..1b9e6bb47 100644 --- a/src/gui/previewselectdialog.h +++ b/src/gui/previewselectdialog.h @@ -31,12 +31,15 @@ #include -#include "base/bittorrent/torrenthandle.h" #include "base/settingvalue.h" #include "ui_previewselectdialog.h" class QStandardItemModel; +namespace BitTorrent +{ + class TorrentHandle; +} class PreviewListDelegate; class PreviewSelectDialog : public QDialog, private Ui::preview