File indexing completed on 2024-04-21 04:48:58

0001 /*
0002    SPDX-FileCopyrightText: 2018 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 
0007 #include "elisaqmlplugin.h"
0008 
0009 #include "config-upnp-qt.h"
0010 
0011 #if UPNPQT_FOUND
0012 #include "upnp/upnpcontrolconnectionmanager.h"
0013 #include "upnp/upnpcontrolmediaserver.h"
0014 #include "upnp/upnpcontrolcontentdirectory.h"
0015 #include "upnp/upnpcontentdirectorymodel.h"
0016 #include "upnpdevicedescription.h"
0017 #include "upnp/didlparser.h"
0018 #include "upnp/upnpdiscoverallmusic.h"
0019 
0020 #include "upnpssdpengine.h"
0021 #include "upnpabstractservice.h"
0022 #include "upnpcontrolabstractdevice.h"
0023 #include "upnpcontrolabstractservice.h"
0024 #include "upnpbasictypes.h"
0025 #endif
0026 
0027 #if KFDBusAddons_FOUND
0028 #include <KDBusService>
0029 #endif
0030 #include <KColorSchemeManager>
0031 
0032 #include "elisautils.h"
0033 #include "elisaapplication.h"
0034 #include "progressindicator.h"
0035 #include "mediaplaylist.h"
0036 #include "mediaplaylistproxymodel.h"
0037 #include "managemediaplayercontrol.h"
0038 #include "manageheaderbar.h"
0039 #include "manageaudioplayer.h"
0040 #include "musiclistenersmanager.h"
0041 #include "trackslistener.h"
0042 #include "viewmanager.h"
0043 #include "viewslistdata.h"
0044 #include "viewconfigurationdata.h"
0045 #include "databaseinterface.h"
0046 #include "datatypes.h"
0047 #include "models/datamodel.h"
0048 #include "models/trackmetadatamodel.h"
0049 #include "models/trackcontextmetadatamodel.h"
0050 #include "models/editabletrackmetadatamodel.h"
0051 #include "models/viewsmodel.h"
0052 #include "models/viewsproxymodel.h"
0053 #include "models/gridviewproxymodel.h"
0054 #include "models/lyricsmodel.h"
0055 #include "localFileConfiguration/elisaconfigurationdialog.h"
0056 
0057 #if KFFileMetaData_FOUND
0058 #include "embeddedcoverageimageprovider.h"
0059 #endif
0060 #include "colorschemepreviewimageprovider.h"
0061 
0062 #if KFKIO_FOUND
0063 #include "models/filebrowsermodel.h"
0064 #include "models/filebrowserproxymodel.h"
0065 #endif
0066 
0067 #include "audiowrapper.h"
0068 
0069 #if QtDBus_FOUND
0070 #include "mpris2/mpris2.h"
0071 #include "mpris2/mediaplayer2player.h"
0072 #endif
0073 
0074 
0075 #include <QAction>
0076 #include <QStandardPaths>
0077 #include <QAbstractProxyModel>
0078 #include <QAbstractItemModel>
0079 
0080 #include <QQmlEngine>
0081 
0082 ElisaQmlTestPlugin::ElisaQmlTestPlugin(QObject *aParent)
0083     : QQmlExtensionPlugin(aParent)
0084 {
0085 }
0086 
0087 void ElisaQmlTestPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
0088 {
0089     QQmlExtensionPlugin::initializeEngine(engine, uri);
0090 #if KFFileMetaData_FOUND
0091     engine->addImageProvider(QStringLiteral("cover"), new EmbeddedCoverageImageProvider);
0092 #endif
0093 }
0094 
0095 void ElisaQmlTestPlugin::registerTypes(const char *uri)
0096 {
0097 #if UPNPQT_FOUND
0098     qmlRegisterType<UpnpSsdpEngine>(uri, 1, 0, "UpnpSsdpEngine");
0099     qmlRegisterType<UpnpDiscoverAllMusic>(uri, 1, 0, "UpnpDiscoverAllMusic");
0100 
0101     qmlRegisterType<UpnpAbstractDevice>(uri, 1, 0, "UpnpAbstractDevice");
0102     qmlRegisterType<UpnpAbstractService>(uri, 1, 0, "UpnpAbstractService");
0103     qmlRegisterType<UpnpControlAbstractDevice>(uri, 1, 0, "UpnpControlAbstractDevice");
0104     qmlRegisterType<UpnpControlAbstractService>(uri, 1, 0, "UpnpControlAbstractService");
0105     qmlRegisterType<UpnpControlConnectionManager>(uri, 1, 0, "UpnpControlConnectionManager");
0106     qmlRegisterType<UpnpControlMediaServer>(uri, 1, 0, "UpnpControlMediaServer");
0107     qmlRegisterType<UpnpContentDirectoryModel>(uri, 1, 0, "UpnpContentDirectoryModel");
0108     qmlRegisterType<DidlParser>(uri, 1, 0, "DidlParser");
0109     qmlRegisterType<UpnpControlContentDirectory>(uri, 1, 0, "UpnpControlContentDirectory");
0110     qmlRegisterType<UpnpDeviceDescription>(uri, 1, 0, "UpnpDeviceDescription");
0111 
0112     qRegisterMetaType<A_ARG_TYPE_InstanceID>();
0113     qRegisterMetaType<QPointer<UpnpAbstractDevice> >();
0114     qRegisterMetaType<UpnpControlConnectionManager*>();
0115     qRegisterMetaType<UpnpContentDirectoryModel*>();
0116     qRegisterMetaType<UpnpDeviceDescription*>();
0117 #endif
0118 
0119     qmlRegisterType<MediaPlayList>(uri, 1, 0, "MediaPlayList");
0120     qmlRegisterType<MediaPlayListProxyModel>(uri, 1, 0, "MediaPlayListProxyModel");
0121     qmlRegisterType<ManageMediaPlayerControl>(uri, 1, 0, "ManageMediaPlayerControl");
0122     qmlRegisterType<ManageHeaderBar>(uri, 1, 0, "ManageHeaderBar");
0123     qmlRegisterType<ManageAudioPlayer>(uri, 1, 0, "ManageAudioPlayer");
0124     qmlRegisterType<ProgressIndicator>(uri, 1, 0, "ProgressIndicator");
0125     qmlRegisterType<MusicListenersManager>(uri, 1, 0, "MusicListenersManager");
0126     qmlRegisterType<ViewManager>(uri, 1, 0, "ViewManager");
0127     qmlRegisterType<ViewsListData>(uri, 1, 0, "ViewsListData");
0128     qmlRegisterType<ViewConfigurationData>(uri, 1, 0, "ViewConfigurationData");
0129     qmlRegisterType<DataModel>(uri, 1, 0, "DataModel");
0130     qmlRegisterType<TrackMetadataModel>(uri, 1, 0, "TrackMetadataModel");
0131     qmlRegisterType<TrackContextMetaDataModel>(uri, 1, 0, "TrackContextMetaDataModel");
0132     qmlRegisterType<EditableTrackMetadataModel>(uri, 1, 0, "EditableTrackMetadataModel");
0133     qmlRegisterType<ViewsModel>(uri, 1, 0, "ViewsModel");
0134     qmlRegisterType<ViewsProxyModel>(uri, 1, 0, "ViewsProxyModel");
0135     qmlRegisterType<ViewsListData>(uri, 1, 0, "ViewsListData");
0136     qmlRegisterType<GridViewProxyModel>(uri, 1, 0, "GridViewProxyModel");
0137     qmlRegisterType<LyricsModel>(uri, 1, 0, "LyricsModel");
0138 
0139 #if KFKIO_FOUND
0140     qmlRegisterType<FileBrowserModel>(uri, 1, 0, "FileBrowserModel");
0141     qmlRegisterType<FileBrowserProxyModel>(uri, 1, 0, "FileBrowserProxyModel");
0142 #endif
0143 
0144     qmlRegisterType<AudioWrapper>(uri, 1, 0, "AudioWrapper");
0145     qmlRegisterUncreatableType<DatabaseInterface>(uri, 1, 0, "DatabaseInterface", QStringLiteral("Only created in c++"));
0146     qmlRegisterUncreatableType<QAbstractItemModel>(uri, 1, 0, "AbstractItemModel", QStringLiteral("Abstract Qt type"));
0147     qmlRegisterUncreatableType<QAbstractProxyModel>(uri, 1, 0, "AbstractProxyModel", QStringLiteral("Abstract Qt type"));
0148     qmlRegisterUncreatableType<DataTypes>(uri, 1, 0, "DataTypes", QStringLiteral("Abstract type not to be used in aml directtly"));
0149 
0150 #if QtDBus_FOUND
0151     qmlRegisterType<Mpris2>(uri, 1, 0, "Mpris2");
0152     qRegisterMetaType<MediaPlayer2Player*>();
0153 #endif
0154 
0155     qRegisterMetaType<AbstractMediaProxyModel*>();
0156     qRegisterMetaType<QHash<QString,QUrl>>("QHash<QString,QUrl>");
0157     qRegisterMetaType<QHash<QUrl,QDateTime>>("QHash<QUrl,QDateTime>");
0158     qRegisterMetaType<QVector<qulonglong>>("QVector<qulonglong>");
0159     qRegisterMetaType<QHash<qulonglong,int>>("QHash<qulonglong,int>");
0160     qRegisterMetaType<DataTypes::ListTrackDataType>("DataTypes::ListTrackDataType");
0161     qRegisterMetaType<DataTypes::ListRadioDataType>("DataTypes::ListRadioDataType");
0162     qRegisterMetaType<DataTypes::ListAlbumDataType>("DataTypes::ListAlbumDataType");
0163     qRegisterMetaType<DataTypes::ListArtistDataType>("DataTypes::ListArtistDataType");
0164     qRegisterMetaType<DataTypes::ListGenreDataType>("DataTypes::ListGenreDataType");
0165     qRegisterMetaType<ModelDataLoader::ListTrackDataType>("ModelDataLoader::ListTrackDataType");
0166     qRegisterMetaType<ModelDataLoader::ListRadioDataType>("ModelDataLoader::ListRadioDataType");
0167     qRegisterMetaType<ModelDataLoader::ListAlbumDataType>("ModelDataLoader::ListAlbumDataType");
0168     qRegisterMetaType<ModelDataLoader::ListArtistDataType>("ModelDataLoader::ListArtistDataType");
0169     qRegisterMetaType<ModelDataLoader::ListGenreDataType>("ModelDataLoader::ListGenreDataType");
0170     qRegisterMetaType<ModelDataLoader::AlbumDataType>("ModelDataLoader::AlbumDataType");
0171     qRegisterMetaType<TracksListener::ListTrackDataType>("TracksListener::ListTrackDataType");
0172     qRegisterMetaType<QMap<QString, int>>();
0173     qRegisterMetaType<QAction*>();
0174     qRegisterMetaType<QMap<QString,int>>("QMap<QString,int>");
0175     qRegisterMetaType<ElisaUtils::PlayListEnqueueMode>("ElisaUtils::PlayListEnqueueMode");
0176     qRegisterMetaType<ElisaUtils::PlayListEnqueueTriggerPlay>("ElisaUtils::PlayListEnqueueTriggerPlay");
0177     qRegisterMetaType<ElisaUtils::PlayListEntryType>("ElisaUtils::PlayListEntryType");
0178     qRegisterMetaType<DataTypes::EntryData>("DataTypes::EntryData");
0179     qRegisterMetaType<DataTypes::EntryDataList>("DataTypes::EntryDataList");
0180     qRegisterMetaType<ElisaUtils::FilterType>("ElisaUtils::FilterType");
0181     qRegisterMetaType<DataTypes::TrackDataType>("DataTypes::TrackDataType");
0182     qRegisterMetaType<DataTypes::AlbumDataType>("DataTypes::AlbumDataType");
0183     qRegisterMetaType<DataTypes::ArtistDataType>("DataTypes::ArtistDataType");
0184     qRegisterMetaType<DataTypes::GenreDataType>("DataTypes::GenreDataType");
0185     qRegisterMetaType<DataTypes::ColumnsRoles>("DataTypes::ColumnsRoles");
0186     qRegisterMetaType<ModelDataLoader::TrackDataType>("ModelDataLoader::TrackDataType");
0187     qRegisterMetaType<TracksListener::TrackDataType>("TracksListener::TrackDataType");
0188     qRegisterMetaType<DataTypes::DataType>("DataTypes::DataType");
0189 
0190     qmlRegisterSingletonType<ElisaConfigurationDialog>(uri, 1, 0, "ElisaConfigurationDialog",
0191                                                        [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject* {
0192         Q_UNUSED(engine)
0193         Q_UNUSED(scriptEngine)
0194 
0195         return new ElisaConfigurationDialog;
0196     });
0197 
0198     qmlRegisterSingletonType<ElisaApplication>(uri, 1, 0, "ElisaApplication",
0199                                                        [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject* {
0200         Q_UNUSED(scriptEngine)
0201 
0202         auto newApplication = std::make_unique<ElisaApplication>();
0203 
0204 #if KFDBusAddons_FOUND
0205         auto *elisaService = new KDBusService(KDBusService::Unique, newApplication.get());
0206 #endif
0207 
0208 #if KFDBusAddons_FOUND
0209         QObject::connect(elisaService, &KDBusService::activateActionRequested, newApplication.get(), &ElisaApplication::activateActionRequested);
0210         QObject::connect(elisaService, &KDBusService::activateRequested, newApplication.get(), &ElisaApplication::activateRequested);
0211         QObject::connect(elisaService, &KDBusService::openRequested, newApplication.get(), &ElisaApplication::openRequested);
0212 #endif
0213 
0214         newApplication->setQmlEngine(engine);
0215         engine->addImageProvider(QStringLiteral("colorScheme"), new ColorSchemePreviewImageProvider(newApplication->getSchemes()));
0216 
0217         return newApplication.release();
0218     });
0219 
0220     qmlRegisterUncreatableMetaObject(ElisaUtils::staticMetaObject, uri, 1, 0, "ElisaUtils", QStringLiteral("Namespace ElisaUtils"));
0221 }
0222 
0223 #include "moc_elisaqmlplugin.cpp"