Add initial support for lightmediascanner 15/8715/2
authorMatt Ranostay <matt.ranostay@konsulko.com>
Fri, 10 Mar 2017 04:47:33 +0000 (20:47 -0800)
committerMatt Ranostay <matt.ranostay@konsulko.com>
Sun, 12 Mar 2017 01:08:56 +0000 (17:08 -0800)
Initial support only checks that paths in lms database
are valid and adds to playlist.

Change-Id: I840414c51964122ee485c2c168fbe5bb81e48652
Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
app/app.pri
app/lightmediascanner.cpp [new file with mode: 0644]
app/lightmediascanner.h [new file with mode: 0644]
app/main.cpp

index 014646f..f2329c6 100644 (file)
@@ -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 (file)
index 0000000..aa8c362
--- /dev/null
@@ -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 (file)
index 0000000..f5c5f90
--- /dev/null
@@ -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
index 12654ad..74ebad3 100644 (file)
 #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();