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