1 #include "library/scanner/libraryscannerdlg.h"
2 
3 #include <QLabel>
4 #include <QPushButton>
5 #include <QVBoxLayout>
6 #include <QtDebug>
7 
8 #include "moc_libraryscannerdlg.cpp"
9 
LibraryScannerDlg(QWidget * parent,Qt::WindowFlags f)10 LibraryScannerDlg::LibraryScannerDlg(QWidget* parent, Qt::WindowFlags f)
11         : QWidget(parent, f),
12           m_bCancelled(false) {
13     setWindowIcon(QIcon(":/images/icons/mixxx.svg"));
14 
15     QVBoxLayout* pLayout = new QVBoxLayout(this);
16 
17     setWindowTitle(tr("Library Scanner"));
18     QLabel* pLabel = new QLabel(tr("It's taking Mixxx a minute to scan your music library, please wait..."),this);
19     pLayout->addWidget(pLabel);
20 
21     QPushButton* pCancel = new QPushButton(tr("Cancel"), this);
22     connect(pCancel,
23             &QPushButton::clicked,
24             this,
25             &LibraryScannerDlg::slotCancel);
26     pLayout->addWidget(pCancel);
27 
28     QLabel* pCurrent = new QLabel(this);
29     pCurrent->setAlignment(Qt::AlignTop);
30     pCurrent->setMaximumWidth(600);
31     pCurrent->setFixedHeight(this->fontMetrics().height());
32     pCurrent->setWordWrap(true);
33     connect(this, &LibraryScannerDlg::progress, pCurrent, &QLabel::setText);
34     pLayout->addWidget(pCurrent);
35     setLayout(pLayout);
36 }
37 
~LibraryScannerDlg()38 LibraryScannerDlg::~LibraryScannerDlg() {
39 }
40 
slotUpdate(const QString & path)41 void LibraryScannerDlg::slotUpdate(const QString& path) {
42     //qDebug() << "LibraryScannerDlg slotUpdate" << m_timer.elapsed().formatMillisWithUnit() << path;
43     if (!m_bCancelled && m_timer.elapsed() > mixxx::Duration::fromSeconds(2)) {
44        setVisible(true);
45     }
46 
47     if (isVisible()) {
48         QString status = tr("Scanning: ") + path;
49         emit progress(status);
50     }
51 }
52 
slotUpdateCover(const QString & path)53 void LibraryScannerDlg::slotUpdateCover(const QString& path) {
54     //qDebug() << "LibraryScannerDlg slotUpdate" << m_timer.elapsed() << path;
55     if (!m_bCancelled && m_timer.elapsed() > mixxx::Duration::fromSeconds(2)) {
56        setVisible(true);
57     }
58 
59     if (isVisible()) {
60         QString status = QString("%1: %2").arg(tr("Scanning cover art (safe to cancel)"), path);
61         emit progress(status);
62     }
63 }
64 
slotCancel()65 void LibraryScannerDlg::slotCancel() {
66     qDebug() << "Cancelling library scan...";
67     m_bCancelled = true;
68     emit scanCancelled();
69     hide();
70 }
71 
slotScanStarted()72 void LibraryScannerDlg::slotScanStarted() {
73     m_bCancelled = false;
74     m_timer.start();
75 }
76 
slotScanFinished()77 void LibraryScannerDlg::slotScanFinished() {
78     // Raise this flag to prevent any latent slotUpdates() from showing the
79     // dialog again.
80     m_bCancelled = true;
81 
82     hide();
83 }
84