diff options
author | Dominik Holland <dominik.holland@pelagicore.com> | 2019-04-02 16:01:08 +0200 |
---|---|---|
committer | Dominik Holland <dominik.holland@pelagicore.com> | 2019-05-07 11:47:42 +0000 |
commit | 569268fd6c0fce70348695c9fe8949b17bb69924 (patch) | |
tree | 65a4cbbd1d730882b0f1ab22bda657514516754c /src | |
parent | 421885da2039420786815fc7732103a86a624c38 (diff) | |
download | qtivi-569268fd6c0fce70348695c9fe8949b17bb69924.tar.gz |
Split the media_simulator.pro up into a plugin.pro and a generic pri file
Also move the database handling from the plugin into a helper header.
This makes it possible to reuse the actual simulation classes later in a
a simulation server.
Change-Id: I064d11597ab2c0b0fcab8e17dddac6b314fa63c7
Reviewed-by: Robert Griebl <robert.griebl@pelagicore.com>
Diffstat (limited to 'src')
5 files changed, 150 insertions, 81 deletions
diff --git a/src/plugins/ivimedia/media_simulator/database_helper.h b/src/plugins/ivimedia/media_simulator/database_helper.h new file mode 100644 index 0000000..6902e38 --- /dev/null +++ b/src/plugins/ivimedia/media_simulator/database_helper.h @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2019 Luxoft Sweden AB +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtIvi module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL-QTAS$ +** Commercial License Usage +** Licensees holding valid commercial Qt Automotive Suite licenses may use +** this file in accordance with the commercial license agreement provided +** with the Software or, alternatively, in accordance with the terms +** contained in a written agreement between you and The Qt Company. For +** licensing terms and conditions see https://www.qt.io/terms-conditions. +** For further information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +** SPDX-License-Identifier: LGPL-3.0 +** +****************************************************************************/ + +#ifndef DATABASE_HELPER_H +#define DATABASE_HELPER_H + +#include <QByteArray> +#include <QString> +#include <QDir> +#include <QFileInfo> +#include <QSqlError> +#include <QSqlQuery> +#include <QStandardPaths> +#include <QTemporaryFile> +#include <QCoreApplication> + +#include "logging.h" + +QString mediaDatabaseFile() +{ + QString dbFile; + const QByteArray database = qgetenv("QTIVIMEDIA_SIMULATOR_DATABASE"); + if (qEnvironmentVariableIsSet("QTIVIMEDIA_TEMPORARY_DATABASE")) { + auto *tempFile = new QTemporaryFile(qApp); + tempFile->open(); + dbFile = tempFile->fileName(); + qCInfo(media) << "QTIVIMEDIA_TEMPORARY_DATABASE environment variable is set.\n" + << "Using the temporary database: " << tempFile->fileName(); + } else if (!database.isEmpty()) { + dbFile = QFile::decodeName(database); + if (!QFileInfo(dbFile).isAbsolute()) + qCInfo(media) << "Please set an valid absolute path for QTIVIMEDIA_SIMULATOR_DATABASE. Current path:" << dbFile; + } else { + const QDir cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); + if (!cacheLocation.exists()) + cacheLocation.mkpath(QStringLiteral(".")); + dbFile = cacheLocation.absoluteFilePath(QStringLiteral("ivimedia.db")); + qCInfo(media) << "Used media database:" << dbFile; + } + return dbFile; +} + +QSqlDatabase createDatabaseConnection(const QString &connectionName, const QString &dbFile) +{ + QSqlDatabase db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connectionName); + db.setDatabaseName(dbFile); + if (!db.open()) + qFatal("Couldn't couldn't open database: %s", qPrintable(db.lastError().text())); + return db; +} + +void createMediaDatabase(const QString &dbFile) +{ + QSqlDatabase db = createDatabaseConnection(QStringLiteral("main"), dbFile); + QSqlQuery query = db.exec(QStringLiteral("CREATE TABLE IF NOT EXISTS \"queue\" (\"id\" INTEGER PRIMARY KEY, \"qindex\" INTEGER, \"track_index\" INTEGER)")); + if (query.lastError().isValid()) + qFatal("Couldn't create Database Tables: %s", qPrintable(query.lastError().text())); + + query = db.exec("CREATE TABLE IF NOT EXISTS track " + "(id integer primary key, " + "trackName varchar(200), " + "albumName varchar(200), " + "artistName varchar(200), " + "genre varchar(200), " + "number integer," + "file varchar(200)," + "coverArtUrl varchar(200)," + "UNIQUE(file))"); + + if (query.lastError().isValid()) + qFatal("Couldn't create Database Tables: %s", qPrintable(query.lastError().text())); + db.commit(); +} + +#endif // DATABASE_HELPER_H diff --git a/src/plugins/ivimedia/media_simulator/media_simulator.pri b/src/plugins/ivimedia/media_simulator/media_simulator.pri new file mode 100644 index 0000000..a99cb8b --- /dev/null +++ b/src/plugins/ivimedia/media_simulator/media_simulator.pri @@ -0,0 +1,29 @@ +QT_FOR_CONFIG += ivimedia-private +QT += core ivicore ivimedia sql multimedia + +INCLUDEPATH += $$PWD + +qtConfig(system-taglib) { + QMAKE_USE += taglib +} else:qtConfig(taglib) { + include($$PWD/../../../3rdparty/taglib/taglib.pri) +} + +HEADERS += \ + $$PWD/mediaplayerbackend.h \ + $$PWD/searchandbrowsebackend.h \ + $$PWD/mediadiscoverybackend.h \ + $$PWD/usbdevice.h \ + $$PWD/usbbrowsebackend.h \ + $$PWD/mediaindexerbackend.h \ + $$PWD/logging.h \ + $$PWD/database_helper.h + +SOURCES += \ + $$PWD/mediaplayerbackend.cpp \ + $$PWD/searchandbrowsebackend.cpp \ + $$PWD/mediadiscoverybackend.cpp \ + $$PWD/usbdevice.cpp \ + $$PWD/usbbrowsebackend.cpp \ + $$PWD/mediaindexerbackend.cpp \ + $$PWD/logging.cpp diff --git a/src/plugins/ivimedia/media_simulator/media_simulator.pro b/src/plugins/ivimedia/media_simulator/media_simulator.pro index 1fa1f1c..27084f4 100644 --- a/src/plugins/ivimedia/media_simulator/media_simulator.pro +++ b/src/plugins/ivimedia/media_simulator/media_simulator.pro @@ -1,38 +1,17 @@ TARGET = media_simulator -QT_FOR_CONFIG += ivimedia-private + +include(media_simulator.pri) PLUGIN_TYPE = qtivi PLUGIN_EXTENDS = ivimedia PLUGIN_CLASS_NAME = MediaPlugin -QT += core ivicore ivimedia sql multimedia - load(qt_plugin) -qtConfig(system-taglib) { - QMAKE_USE += taglib -} else:qtConfig(taglib) { - include($$PWD/../../../3rdparty/taglib/taglib.pri) -} - DISTFILES += media_simulator.json HEADERS += \ mediaplugin.h \ - mediaplayerbackend.h \ - searchandbrowsebackend.h \ - mediadiscoverybackend.h \ - usbdevice.h \ - usbbrowsebackend.h \ - mediaindexerbackend.h \ - logging.h SOURCES += \ mediaplugin.cpp \ - mediaplayerbackend.cpp \ - searchandbrowsebackend.cpp \ - mediadiscoverybackend.cpp \ - usbdevice.cpp \ - usbbrowsebackend.cpp \ - mediaindexerbackend.cpp \ - logging.cpp diff --git a/src/plugins/ivimedia/media_simulator/mediaplugin.cpp b/src/plugins/ivimedia/media_simulator/mediaplugin.cpp index f1b5270..1fb7969 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplugin.cpp +++ b/src/plugins/ivimedia/media_simulator/mediaplugin.cpp @@ -46,66 +46,26 @@ #include "mediaplayerbackend.h" #include "mediaplugin.h" #include "searchandbrowsebackend.h" +#include "database_helper.h" #include <QtIviCore/QIviSearchAndBrowseModel> #include <QtIviMedia/QIviMediaPlayer> #include <QCoreApplication> -#include <QDir> -#include <QFileInfo> -#include <QSqlError> -#include <QSqlQuery> -#include <QStandardPaths> #include <QStringList> -#include <QTemporaryFile> #include <QtDebug> MediaPlugin::MediaPlugin(QObject *parent) : QObject(parent) , m_discovery(new MediaDiscoveryBackend(this)) { - const QByteArray database = qgetenv("QTIVIMEDIA_SIMULATOR_DATABASE"); - if (qEnvironmentVariableIsSet("QTIVIMEDIA_TEMPORARY_DATABASE")) { - auto *tempFile = new QTemporaryFile(qApp); - tempFile->open(); - m_dbFile = tempFile->fileName(); - qCInfo(media) << "QTIVIMEDIA_TEMPORARY_DATABASE environment variable is set.\n" - << "Using the temporary database: " << tempFile->fileName(); - } else if (!database.isEmpty()) { - m_dbFile = QFile::decodeName(database); - if (!QFileInfo(m_dbFile).isAbsolute()) - qCInfo(media) << "Please set an valid absolute path for QTIVIMEDIA_SIMULATOR_DATABASE. Current path:" << m_dbFile; - } else { - const QDir cacheLocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); - if (!cacheLocation.exists()) - cacheLocation.mkpath(QStringLiteral(".")); - m_dbFile = cacheLocation.absoluteFilePath(QStringLiteral("ivimedia.db")); - qCInfo(media) << "Used media database:" << m_dbFile; - } + QString dbFile = mediaDatabaseFile(); - QSqlDatabase db = createDatabaseConnection(QStringLiteral("main")); - QSqlQuery query = db.exec(QStringLiteral("CREATE TABLE IF NOT EXISTS \"queue\" (\"id\" INTEGER PRIMARY KEY, \"qindex\" INTEGER, \"track_index\" INTEGER)")); - if (query.lastError().isValid()) - qFatal("Couldn't create Database Tables: %s", qPrintable(query.lastError().text())); + createMediaDatabase(dbFile); - query = db.exec("CREATE TABLE IF NOT EXISTS track " - "(id integer primary key, " - "trackName varchar(200), " - "albumName varchar(200), " - "artistName varchar(200), " - "genre varchar(200), " - "number integer," - "file varchar(200)," - "coverArtUrl varchar(200)," - "UNIQUE(file))"); - - if (query.lastError().isValid()) - qFatal("Couldn't create Database Tables: %s", qPrintable(query.lastError().text())); - db.commit(); - - m_player = new MediaPlayerBackend(createDatabaseConnection(QStringLiteral("player")), this); - m_browse = new SearchAndBrowseBackend(createDatabaseConnection(QStringLiteral("model")), this); - m_indexer = new MediaIndexerBackend(createDatabaseConnection(QStringLiteral("indexer")), this); + m_player = new MediaPlayerBackend(createDatabaseConnection(QStringLiteral("player"), dbFile), this); + m_browse = new SearchAndBrowseBackend(createDatabaseConnection(QStringLiteral("model"), dbFile), this); + m_indexer = new MediaIndexerBackend(createDatabaseConnection(QStringLiteral("indexer"), dbFile), this); connect(m_discovery, &MediaDiscoveryBackend::mediaDirectoryAdded, m_indexer, &MediaIndexerBackend::addMediaFolder); @@ -136,12 +96,3 @@ QIviFeatureInterface *MediaPlugin::interfaceInstance(const QString &interface) c return nullptr; } - -QSqlDatabase MediaPlugin::createDatabaseConnection(const QString &connectionName) -{ - QSqlDatabase db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), connectionName); - db.setDatabaseName(m_dbFile); - if (!db.open()) - qFatal("Couldn't couldn't open database: %s", qPrintable(db.lastError().text())); - return db; -} diff --git a/src/plugins/ivimedia/media_simulator/mediaplugin.h b/src/plugins/ivimedia/media_simulator/mediaplugin.h index a009b0b..23f42d6 100644 --- a/src/plugins/ivimedia/media_simulator/mediaplugin.h +++ b/src/plugins/ivimedia/media_simulator/mediaplugin.h @@ -67,14 +67,11 @@ public: QIviFeatureInterface *interfaceInstance(const QString &interface) const override; private: - QSqlDatabase createDatabaseConnection(const QString &connectionName); MediaPlayerBackend *m_player; SearchAndBrowseBackend *m_browse; MediaDiscoveryBackend *m_discovery; MediaIndexerBackend *m_indexer; - AmFmTunerBackend *m_amfmtuner; - QString m_dbFile; }; #endif // MEDIAPLUGIN_H |