1 #pragma once 2 3 #include <QStringListModel> 4 #include <QtSql> 5 #include <QFuture> 6 #include <QtConcurrentRun> 7 #include <QFutureWatcher> 8 #include <QPointer> 9 10 #include "library/baseexternallibraryfeature.h" 11 #include "library/trackcollection.h" 12 #include "library/treeitemmodel.h" 13 #include "library/treeitem.h" 14 15 class BaseExternalTrackModel; 16 class BaseExternalPlaylistModel; 17 class WLibrarySidebar; 18 19 class ITunesFeature : public BaseExternalLibraryFeature { 20 Q_OBJECT 21 public: 22 ITunesFeature(Library* pLibrary, UserSettingsPointer pConfig); 23 virtual ~ITunesFeature(); 24 static bool isSupported(); 25 26 QVariant title() override; 27 QIcon getIcon() override; 28 void bindSidebarWidget(WLibrarySidebar* pSidebarWidget) override; 29 30 TreeItemModel* getChildModel() override; 31 32 public slots: 33 void activate() override; 34 void activate(bool forceReload); 35 void activateChild(const QModelIndex& index) override; 36 void onRightClick(const QPoint& globalPos) override; 37 void onTrackCollectionLoaded(); 38 39 private: 40 BaseSqlTableModel* getPlaylistModelForPlaylist(const QString& playlist) override; 41 static QString getiTunesMusicPath(); 42 // returns the invisible rootItem for the sidebar model 43 TreeItem* importLibrary(); 44 void guessMusicLibraryMountpoint(QXmlStreamReader& xml); 45 void parseTracks(QXmlStreamReader& xml); 46 void parseTrack(QXmlStreamReader& xml, QSqlQuery& query); 47 TreeItem* parsePlaylists(QXmlStreamReader &xml); 48 void parsePlaylist(QXmlStreamReader& xml, QSqlQuery& query1, 49 QSqlQuery &query2, TreeItem*); 50 void clearTable(const QString& table_name); 51 bool readNextStartElement(QXmlStreamReader& xml); 52 53 BaseExternalTrackModel* m_pITunesTrackModel; 54 BaseExternalPlaylistModel* m_pITunesPlaylistModel; 55 TreeItemModel m_childModel; 56 QStringList m_playlists; 57 // a new DB connection for the worker thread 58 QSqlDatabase m_database; 59 bool m_cancelImport; 60 bool m_isActivated; 61 QString m_dbfile; 62 63 QFutureWatcher<TreeItem*> m_future_watcher; 64 QFuture<TreeItem*> m_future; 65 QString m_title; 66 67 QString m_dbItunesRoot; 68 QString m_mixxxItunesRoot; 69 70 QSharedPointer<BaseTrackCache> m_trackSource; 71 QPointer<WLibrarySidebar> m_pSidebarWidget; 72 QIcon m_icon; 73 }; 74