1 #pragma once 2 3 #include <QStringListModel> 4 #include <QtSql> 5 #include <QXmlStreamReader> 6 #include <QFuture> 7 #include <QtConcurrentRun> 8 #include <QFutureWatcher> 9 10 #include "library/baseexternallibraryfeature.h" 11 #include "library/baseexternaltrackmodel.h" 12 #include "library/baseexternalplaylistmodel.h" 13 #include "library/treeitemmodel.h" 14 15 class TraktorTrackModel : public BaseExternalTrackModel { 16 public: 17 TraktorTrackModel(QObject* parent, 18 TrackCollectionManager* pTrackCollectionManager, 19 QSharedPointer<BaseTrackCache> trackSource); 20 virtual bool isColumnHiddenByDefault(int column); 21 }; 22 23 class TraktorPlaylistModel : public BaseExternalPlaylistModel { 24 public: 25 TraktorPlaylistModel(QObject* parent, 26 TrackCollectionManager* pTrackCollectionManager, 27 QSharedPointer<BaseTrackCache> trackSource); 28 virtual bool isColumnHiddenByDefault(int column); 29 }; 30 31 class TraktorFeature : public BaseExternalLibraryFeature { 32 Q_OBJECT 33 public: 34 TraktorFeature(Library* pLibrary, UserSettingsPointer pConfig); 35 virtual ~TraktorFeature(); 36 37 QVariant title() override; 38 QIcon getIcon() override; 39 static bool isSupported(); 40 41 TreeItemModel* getChildModel() override; 42 43 public slots: 44 void activate() override; 45 void activateChild(const QModelIndex& index) override; 46 void refreshLibraryModels(); 47 void onTrackCollectionLoaded(); 48 49 private: 50 BaseSqlTableModel* getPlaylistModelForPlaylist(const QString& playlist) override; 51 TreeItem* importLibrary(const QString& file); 52 // parses a track in the music collection 53 void parseTrack(QXmlStreamReader &xml, QSqlQuery &query); 54 // Iterates over all playliost and folders and constructs the childmodel 55 TreeItem* parsePlaylists(QXmlStreamReader &xml); 56 // processes a particular playlist 57 void parsePlaylistEntries(QXmlStreamReader& xml, 58 const QString& playlist_path, 59 QSqlQuery query_insert_into_playlist, 60 QSqlQuery query_insert_into_playlisttracks); 61 void clearTable(const QString& table_name); 62 static QString getTraktorMusicDatabase(); 63 // private fields 64 TreeItemModel m_childModel; 65 // A separate db connection for the worker parsing thread 66 QSqlDatabase m_database; 67 TraktorTrackModel* m_pTraktorTableModel; 68 TraktorPlaylistModel* m_pTraktorPlaylistModel; 69 70 bool m_isActivated; 71 bool m_cancelImport; 72 QFutureWatcher<TreeItem*> m_future_watcher; 73 QFuture<TreeItem*> m_future; 74 QString m_title; 75 76 QSharedPointer<BaseTrackCache> m_trackSource; 77 QIcon m_icon; 78 }; 79