summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/app.pri7
-rw-r--r--app/lightmediascanner.cpp42
-rw-r--r--app/lightmediascanner.h35
-rw-r--r--app/main.cpp19
4 files changed, 103 insertions, 0 deletions
diff --git a/app/app.pri b/app/app.pri
index 014646f..f2329c6 100644
--- a/app/app.pri
+++ b/app/app.pri
@@ -9,4 +9,11 @@ config_libhomescreen {
DEFINES += HAVE_LIBHOMESCREEN
}
+packagesExist(sqlite3 lightmediascanner) {
+ HEADERS += lightmediascanner.h
+ SOURCES += lightmediascanner.cpp
+ DEFINES += HAVE_LIGHTMEDIASCANNER
+ QT += sql
+}
+
DESTDIR = $${OUT_PWD}/../package/root/bin
diff --git a/app/lightmediascanner.cpp b/app/lightmediascanner.cpp
new file mode 100644
index 0000000..aa8c362
--- /dev/null
+++ b/app/lightmediascanner.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2017 Konsulko Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "lightmediascanner.h"
+
+LightMediaScanner::LightMediaScanner(const QString& path)
+{
+ lms = QSqlDatabase::addDatabase("QSQLITE");
+ lms.setDatabaseName(path);
+
+ if (!lms.open()) {
+ qDebug() << "Cannot open database: " << path;
+ } else {
+ query = QSqlQuery(lms);
+ query.prepare("SELECT files.path FROM files LEFT JOIN audios WHERE audios.id = files.id ORDER BY audios.artist_id, audios.album_id, audios.trackno");
+ if (!query.exec())
+ qDebug() << "Cannot run SQL query";
+ }
+}
+
+bool LightMediaScanner::next(QString& item)
+{
+ if (!query.next())
+ return false;
+
+ item = query.value(0).toString();
+
+ return true;
+}
diff --git a/app/lightmediascanner.h b/app/lightmediascanner.h
new file mode 100644
index 0000000..f5c5f90
--- /dev/null
+++ b/app/lightmediascanner.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2017 Konsulko Group
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef LIGHTMEDIASCANNER_H
+#define LIGHTMEDIASCANNER_H
+
+#include <QtCore/QDebug>
+#include <QtCore/QString>
+#include <QtSql/QSqlDatabase>
+#include <QtSql/QSqlRecord>
+#include <QtSql/QSqlQuery>
+
+class LightMediaScanner {
+public:
+ LightMediaScanner(const QString& path);
+ bool next(QString& item);
+private:
+ QSqlDatabase lms;
+ QSqlQuery query;
+};
+
+#endif
diff --git a/app/main.cpp b/app/main.cpp
index 12654ad..74ebad3 100644
--- a/app/main.cpp
+++ b/app/main.cpp
@@ -27,8 +27,13 @@
#include <libhomescreen.hpp>
#endif
+#ifdef HAVE_LIGHTMEDIASCANNER
+#include "lightmediascanner.h"
+#endif
+
#include "playlistwithmetadata.h"
+#ifndef HAVE_LIGHTMEDIASCANNER
QVariantList readMusicFile(const QString &path)
{
QVariantList ret;
@@ -43,6 +48,7 @@ QVariantList readMusicFile(const QString &path)
}
return ret;
}
+#endif
int main(int argc, char *argv[])
{
@@ -62,9 +68,22 @@ int main(int argc, char *argv[])
qmlRegisterType<PlaylistWithMetadata>("MediaPlayer", 1, 0, "PlaylistWithMetadata");
QVariantList mediaFiles;
+ QString music;
+
+#ifdef HAVE_LIGHTMEDIASCANNER
+ LightMediaScanner scanner(QDir::homePath() + "/.config/lightmediascannerd/db.sqlite3");
+ while (scanner.next(music)) {
+ QFileInfo fileInfo(music);
+ // Possible for stale entries due to removable media
+ if (!fileInfo.exists())
+ continue;
+ mediaFiles.append(QUrl::fromLocalFile(music));
+ }
+#else
for (const auto &music : QStandardPaths::standardLocations(QStandardPaths::MusicLocation)) {
mediaFiles.append(readMusicFile(music));
}
+#endif
QQmlApplicationEngine engine;
QQmlContext *context = engine.rootContext();