aboutsummaryrefslogtreecommitdiffstats
path: root/src/projectmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/projectmanager.cpp')
-rw-r--r--src/projectmanager.cpp160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/projectmanager.cpp b/src/projectmanager.cpp
new file mode 100644
index 0000000..514ffec
--- /dev/null
+++ b/src/projectmanager.cpp
@@ -0,0 +1,160 @@
+/****************************************************************************
+**
+** Copyright (C) 2018 Pelagicore AG
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QmlLive tool.
+**
+** $QT_BEGIN_LICENSE:GPL-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 General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 or (at your option) 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.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-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+** SPDX-License-Identifier: GPL-3.0
+**
+****************************************************************************/
+
+#include "projectmanager.h"
+
+#include <QFile>
+#include <QDebug>
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QJsonArray>
+
+const QLatin1String MainKey("main");
+const QLatin1String WorkspaceKey("workspace");
+const QLatin1String ImportsKey("imports");
+const QLatin1String QmlLiveExtension(".qmllive");
+
+ProjectManager::ProjectManager(QObject *parent)
+ : QObject(parent)
+ , m_mainDocument("main.qml")
+ , m_workspace("")
+ , m_projectName("")
+{
+
+}
+
+bool ProjectManager::read(const QString &path)
+{
+ reset();
+
+ QFile file(path);
+ if (!file.open(QIODevice::ReadOnly)) {
+ qWarning() << "Unable to open document " << path;
+ return false;
+ }
+ m_projectName = file.fileName();
+ QByteArray data = file.readAll();
+ QJsonParseError error;
+ QJsonDocument document = QJsonDocument::fromJson(data, &error);
+ if (error.error) {
+ qWarning() << "error parsing JSON document" << error.errorString();
+ return false;
+ }
+ if (!document.isObject()) {
+ qWarning() << "Document must be a JSON object";
+ return false;
+ }
+ QJsonObject root = document.object();
+ if (root.contains(MainKey))
+ m_mainDocument = root.value(MainKey).toString();
+ if (root.contains(WorkspaceKey))
+ {
+ QString workspace = root.value(WorkspaceKey).toString();
+ if ((workspace.compare(".") == 0) || (workspace.compare("./") == 0)) {
+ m_workspace = QFileInfo(path).absolutePath();
+ }
+ else {
+ m_workspace = QDir(workspace).absolutePath();
+ }
+ }
+ if (root.contains(ImportsKey) && root.value(ImportsKey).isArray()) {
+ QJsonArray imports = root.value(ImportsKey).toArray();
+ for (QJsonValue value : imports)
+ m_imports.append(value.toString());
+ }
+ return true;
+}
+
+void ProjectManager::write(const QString &path)
+{
+ QFile file(path);
+ if (!file.open(QIODevice::WriteOnly)) {
+ qWarning() << "Unable to write to document: " << path;
+ return;
+ }
+ QJsonObject root;
+ root.insert(MainKey, QJsonValue(m_mainDocument));
+ root.insert(WorkspaceKey, QJsonValue(m_workspace));
+ QJsonArray imports;
+ for (const QString &import : m_imports)
+ imports.append(QJsonValue(import));
+ root.insert(ImportsKey, imports);
+ QJsonDocument document(root);
+ file.write(document.toJson());
+}
+
+void ProjectManager::create(const QString &projectName)
+{
+ m_projectName = projectName;
+ QString path = QString(m_workspace).append(QDir::separator()).append(projectName).append(QmlLiveExtension);
+ qWarning() << path;
+ write(path);
+}
+
+QString ProjectManager::mainDocument() const
+{
+ return m_mainDocument;
+}
+
+QString ProjectManager::workspace() const
+{
+ return m_workspace;
+}
+
+QStringList ProjectManager::imports() const
+{
+ return m_imports;
+}
+
+void ProjectManager::reset()
+{
+ m_mainDocument = QString("main.qml");
+ m_workspace = QString("");
+ m_imports.clear();
+}
+
+void ProjectManager::setProjectName(const QString &projectName)
+{
+ m_projectName = projectName;
+}
+void ProjectManager::setMainDocument(const QString &mainDocument)
+{
+ m_mainDocument = mainDocument;
+}
+void ProjectManager::setWorkspace(const QString &workspace)
+{
+ m_workspace = workspace;
+}
+void ProjectManager::setImports(const QStringList &imports)
+{
+ m_imports = imports;
+}
+