#ifndef INDEXERWIDGET_H #define INDEXERWIDGET_H #include #include #include #include #include "taglib/fileref.h" class QTextEdit; class QProgressBar; class QLabel; class BeetReader; class IndexerWidget : public QWidget { Q_OBJECT public: explicit IndexerWidget(QWidget *parent = nullptr); signals: void indexingDone(); public slots: void startIndexing(); void stopIndexing(); void addToError(QString msg); void setupProgress(int max); void progress(int cur); private: QTextEdit *mError; QProgressBar *mProgress; QLabel *mProgressCount; int mMax; BeetReader *mReader; }; class BeetReader : public QThread { Q_OBJECT public: explicit BeetReader(); virtual void run(); void cancel(); signals: void errorMsg(const QString &msg); void totalCount(int count); void progress(int cur); void cleared(); void indexingDone(); private: QString toQString(TagLib::String string); void clearAll(); int doArtist(QString name); int doGenre(QString name); int doAlbum(QString name, int year, QDateTime created); void doSong(QString title, int pos, int album, int genre, int artist, QString fullpath, int length); QMutex mCancelMx; bool mCanceled; QSqlDatabase mDb; QHash mArtistH; QHash mGenreH; QHash mAlbumH; QSqlQuery *mInsertArtistsQ; QSqlQuery *mCurArtistQ; QSqlQuery *mInsertGenresQ; QSqlQuery *mCurGenresQ; QSqlQuery *mInsertAlbumQ; QSqlQuery *mCurAlbumQ; QSqlQuery *mInsertSongQ; }; #endif // INDEXERWIDGET_H