summaryrefslogtreecommitdiff
path: root/src/manager-lib/application.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/manager-lib/application.cpp')
-rw-r--r--src/manager-lib/application.cpp419
1 files changed, 0 insertions, 419 deletions
diff --git a/src/manager-lib/application.cpp b/src/manager-lib/application.cpp
deleted file mode 100644
index 46a98690..00000000
--- a/src/manager-lib/application.cpp
+++ /dev/null
@@ -1,419 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Pelagicore AG
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the Pelagicore Application Manager.
-**
-** $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
-**
-****************************************************************************/
-
-#include <QDebug>
-#include <QDataStream>
-#include <QBuffer>
-
-#include "application.h"
-#include "utilities.h"
-#include "exception.h"
-#include "installationreport.h"
-#include "yamlapplicationscanner.h"
-
-AM_BEGIN_NAMESPACE
-
-Application::Application()
-{ }
-
-QVariantMap Application::toVariantMap() const
-{
- //TODO: only used in the installer -- replace there with code that mimicks
- // ApplicationManager::get() to get consistent key names in the objects
-
- QVariantMap map;
- map[qSL("id")] = m_id;
- map[qSL("codeFilePath")] = m_codeFilePath;
- map[qSL("runtimeName")] = m_runtimeName;
- map[qSL("runtimeParameters")] = m_runtimeParameters;
- QVariantMap displayName;
- for (auto it = m_name.constBegin(); it != m_name.constEnd(); ++it)
- displayName.insert(it.key(), it.value());
- map[qSL("displayName")] = displayName;
- map[qSL("displayIcon")] = m_icon;
- map[qSL("preload")] = m_preload;
- map[qSL("importance")] = m_importance;
- map[qSL("capabilities")] = m_capabilities;
- map[qSL("mimeTypes")] = m_mimeTypes;
- map[qSL("categories")] = m_categories;
- QString backgroundMode;
- switch (m_backgroundMode) {
- default:
- case Auto: backgroundMode = qSL("Auto"); break;
- case Never: backgroundMode = qSL("Never"); break;
- case ProvidesVoIP: backgroundMode = qSL("ProvidesVoIP"); break;
- case PlaysAudio: backgroundMode = qSL("PlaysAudio"); break;
- case TracksLocation: backgroundMode = qSL("TracksLocation"); break;
- }
- map[qSL("backgroundMode")] = backgroundMode;
- map[qSL("version")] = m_version;
- map[qSL("baseDir")] = m_baseDir.absolutePath();
- map[qSL("installationLocationId")] = m_installationReport ? m_installationReport->installationLocationId() : QString();
- return map;
-}
-
-
-QString Application::id() const
-{
- return m_id;
-}
-
-QString Application::absoluteCodeFilePath() const
-{
- QString code = m_nonAliased ? m_nonAliased->m_codeFilePath : m_codeFilePath;
- return code.isEmpty() ? QString() : baseDir().absoluteFilePath(code);
-}
-
-QString Application::codeFilePath() const
-{
- return m_nonAliased ? m_nonAliased->m_codeFilePath : m_codeFilePath;
-}
-
-QString Application::runtimeName() const
-{
- return m_nonAliased ? m_nonAliased->m_runtimeName : m_runtimeName;
-}
-
-QVariantMap Application::runtimeParameters() const
-{
- return m_nonAliased ? m_nonAliased->m_runtimeParameters : m_runtimeParameters;
-}
-
-QMap<QString, QString> Application::names() const
-{
- return m_name;
-}
-
-QString Application::name(const QString &language) const
-{
- return m_name.value(language);
-}
-
-QString Application::icon() const
-{
- return m_icon.isEmpty() ? QString() : baseDir().absoluteFilePath(m_icon);
-}
-
-QString Application::documentUrl() const
-{
- return m_documentUrl;
-}
-
-bool Application::isPreloaded() const
-{
- return m_nonAliased ? m_nonAliased->m_preload : m_preload;
-}
-
-qreal Application::importance() const
-{
- return m_nonAliased ? m_nonAliased->m_importance : m_importance;
-}
-
-bool Application::isBuiltIn() const
-{
- return m_nonAliased ? m_nonAliased->m_builtIn : m_builtIn;
-}
-
-bool Application::isAlias() const
-{
- return (m_nonAliased);
-}
-
-const Application *Application::nonAliased() const
-{
- return m_nonAliased;
-}
-
-QStringList Application::capabilities() const
-{
- return m_nonAliased ? m_nonAliased->m_capabilities : m_capabilities;
-}
-
-QStringList Application::supportedMimeTypes() const
-{
- return m_nonAliased ? m_nonAliased->m_mimeTypes : m_mimeTypes;
-}
-
-QStringList Application::categories() const
-{
- return m_nonAliased ? m_nonAliased->m_categories : m_categories;
-}
-
-Application::Type Application::type() const
-{
- return m_nonAliased ? m_nonAliased->m_type : m_type;
-}
-
-Application::BackgroundMode Application::backgroundMode() const
-{
- return m_nonAliased ? m_nonAliased->m_backgroundMode : m_backgroundMode;
-}
-
-QString Application::version() const
-{
- return m_nonAliased ? m_nonAliased->m_version : m_version;
-}
-
-void Application::validate() const throw(Exception)
-{
- if (isAlias()) {
- if (!m_id.startsWith(nonAliased()->id()))
- throw Exception(Error::Parse, "aliasId '%1' does not match base application id '%2'")
- .arg(m_id, nonAliased()->id());
- }
-
- QString rdnsError;
- if (!isValidDnsName(id(), isAlias(), &rdnsError))
- throw Exception(Error::Parse, "the identifier (%1) is not a valid reverse-DNS name: %2").arg(id()).arg(rdnsError);
- if (absoluteCodeFilePath().isEmpty())
- throw Exception(Error::Parse, "the 'code' field must not be empty");
-
- if (runtimeName().isEmpty())
- throw Exception(Error::Parse, "the 'runtimeName' field must not be empty");
-
- if (type() == Gui) {
- if (icon().isEmpty())
- throw Exception(Error::Parse, "the 'icon' field must not be empty");
-
- if (names().isEmpty())
- throw Exception(Error::Parse, "the 'name' field must not be empty");
- }
-
- // This check won't work during installations, since icon.png is extracted after info.json
- // if (!QFile::exists(displayIcon()))
- // throw Exception("the 'icon' field refers to a non-existent file");
-
- //TODO: check for valid capabilities
-}
-
-
-void Application::mergeInto(Application *app) const
-{
- if (app->m_id != m_id)
- return;
- app->m_codeFilePath = m_codeFilePath;
- app->m_runtimeName = m_runtimeName;
- app->m_runtimeParameters = m_runtimeParameters;
- app->m_name = m_name;
- app->m_icon = m_icon;
- app->m_preload = m_preload;
- app->m_importance = m_importance;
- app->m_capabilities = m_capabilities;
- app->m_mimeTypes = m_mimeTypes;
- app->m_categories = m_categories;
- app->m_backgroundMode = m_backgroundMode;
- app->m_version = m_version;
-}
-
-const InstallationReport *Application::installationReport() const
-{
- return m_installationReport.data();
-}
-
-void Application::setInstallationReport(InstallationReport *report)
-{
- m_installationReport.reset(report);
-}
-
-QDir Application::baseDir() const
-{
- switch (m_state) {
- default:
- case Installed:
- return m_baseDir;
- case BeingInstalled:
- case BeingUpdated:
- return QDir(m_baseDir.absolutePath() + QLatin1Char('+'));
- case BeingRemoved:
- return QDir(m_baseDir.absolutePath() + QLatin1Char('-'));
- }
-}
-
-uint Application::uid() const
-{
- return m_nonAliased ? m_nonAliased->m_uid : m_uid;
-}
-
-void Application::setBaseDir(const QString &path)
-{
- m_baseDir = path;
-}
-
-AbstractRuntime *Application::currentRuntime() const
-{
- return m_nonAliased ? m_nonAliased->m_runtime : m_runtime;
-}
-
-void Application::setCurrentRuntime(AbstractRuntime *rt) const
-{
- if (m_nonAliased)
- m_nonAliased->m_runtime = rt;
- else
- m_runtime = rt;
-}
-
-bool Application::isLocked() const
-{
- return (m_nonAliased ? m_nonAliased->m_locked : m_locked).load() == 1;
-}
-
-bool Application::lock() const
-{
- return (m_nonAliased ? m_nonAliased->m_locked : m_locked).testAndSetOrdered(0, 1);
-}
-
-bool Application::unlock() const
-{
- return (m_nonAliased ? m_nonAliased->m_locked : m_locked).testAndSetOrdered(1, 0);
-}
-
-Application::State Application::state() const
-{
- return m_nonAliased ? m_nonAliased->m_state : m_state;
-}
-
-qreal Application::progress() const
-{
- return m_nonAliased ? m_nonAliased->m_progress : m_progress;
-}
-
-Application *Application::readFromDataStream(QDataStream &ds, const QVector<const Application *> &applicationDatabase) throw (Exception)
-{
- QScopedPointer<Application> app(new Application);
- bool isAlias;
- qint32 backgroundMode;
- QString baseDir;
- QByteArray installationReport;
-
- ds >> app->m_id
- >> app->m_codeFilePath
- >> app->m_runtimeName
- >> app->m_runtimeParameters
- >> app->m_name
- >> app->m_icon
- >> app->m_documentUrl
- >> app->m_preload
- >> app->m_importance
- >> app->m_builtIn
- >> isAlias
- >> app->m_capabilities
- >> app->m_categories
- >> app->m_mimeTypes
- >> backgroundMode
- >> app->m_version
- >> baseDir
- >> app->m_uid
- >> installationReport;
-
- app->m_capabilities.sort();
- app->m_categories.sort();
- app->m_mimeTypes.sort();
-
- app->m_backgroundMode = static_cast<Application::BackgroundMode>(backgroundMode);
- app->m_baseDir.setPath(baseDir);
- if (!installationReport.isEmpty()) {
- QBuffer buffer(&installationReport);
- buffer.open(QBuffer::ReadOnly);
- app->m_installationReport.reset(new InstallationReport(app->m_id));
- if (!app->m_installationReport->deserialize(&buffer))
- app->m_installationReport.reset(0);
- }
-
- if (isAlias) {
- QString baseId = app->m_id.section(qL1C('@'), 0, 0);
- bool found = false;
- foreach (const Application *otherApp, applicationDatabase) {
- if (otherApp->id() == baseId) {
- app->m_nonAliased = otherApp;
- found = true;
- break;
- }
- }
- if (!found)
- throw Exception(Error::Parse, "Could not find base app id %1 for alias id %2").arg(baseId, app->m_id);
- }
-
- return app.take();
-}
-
-void Application::writeToDataStream(QDataStream &ds, const QVector<const Application *> &applicationDatabase) const throw (Exception)
-{
- QByteArray serializedReport;
-
- if (auto report = installationReport()) {
- QBuffer buffer(&serializedReport);
- buffer.open(QBuffer::WriteOnly);
- report->serialize(&buffer);
- }
-
- ds << m_id
- << m_codeFilePath
- << m_runtimeName
- << m_runtimeParameters
- << m_name
- << m_icon
- << m_documentUrl
- << m_preload
- << m_importance
- << m_builtIn
- << bool(m_nonAliased && applicationDatabase.contains(m_nonAliased))
- << m_capabilities
- << m_categories
- << m_mimeTypes
- << qint32(m_backgroundMode)
- << m_version
- << m_baseDir.absolutePath()
- << m_uid
- << serializedReport;
-}
-
-AM_END_NAMESPACE
-
-QDebug operator<<(QDebug debug, const AM_PREPEND_NAMESPACE(Application) *app)
-{
- debug << "App Object:";
- if (app)
- debug << app->toVariantMap();
- else
- debug << "(null)";
- return debug;
-}
-