summaryrefslogtreecommitdiffstats
path: root/src/libs/installer/packagemanagercore_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.h')
-rw-r--r--src/libs/installer/packagemanagercore_p.h260
1 files changed, 260 insertions, 0 deletions
diff --git a/src/libs/installer/packagemanagercore_p.h b/src/libs/installer/packagemanagercore_p.h
new file mode 100644
index 000000000..1a585cf96
--- /dev/null
+++ b/src/libs/installer/packagemanagercore_p.h
@@ -0,0 +1,260 @@
+/**************************************************************************
+**
+** This file is part of Installer Framework
+**
+** Copyright (c) 2011-2012 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+**
+** GNU Lesser General Public License Usage
+**
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** Other Usage
+**
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**************************************************************************/
+
+#ifndef PACKAGEMANAGERCORE_P_H
+#define PACKAGEMANAGERCORE_P_H
+
+#include "getrepositoriesmetainfojob.h"
+#include "settings.h"
+#include "packagemanagercore.h"
+
+#include <kdsysinfo.h>
+#include <kdupdaterapplication.h>
+#include <kdupdaterupdatefinder.h>
+
+#include <QtCore/QHash>
+#include <QtCore/QObject>
+#include <QtCore/QPair>
+#include <QtCore/QPointer>
+
+class FSEngineClientHandler;
+class KDJob;
+
+QT_FORWARD_DECLARE_CLASS(QFile)
+QT_FORWARD_DECLARE_CLASS(QFileInfo)
+
+using namespace KDUpdater;
+
+namespace QInstaller {
+
+struct BinaryLayout;
+class Component;
+class TempDirDeleter;
+
+class PackageManagerCorePrivate : public QObject
+{
+ Q_OBJECT
+ friend class PackageManagerCore;
+
+public:
+ enum OperationType {
+ Backup,
+ Perform,
+ Undo
+ };
+
+ explicit PackageManagerCorePrivate(PackageManagerCore *core);
+ explicit PackageManagerCorePrivate(PackageManagerCore *core, qint64 magicInstallerMaker,
+ const OperationList &performedOperations);
+ ~PackageManagerCorePrivate();
+
+ static bool isProcessRunning(const QString &name, const QList<ProcessInfo> &processes);
+
+ static bool performOperationThreaded(Operation *op, PackageManagerCorePrivate::OperationType type
+ = PackageManagerCorePrivate::Perform);
+
+ void initialize();
+ bool isOfflineOnly() const;
+
+ bool statusCanceledOrFailed() const;
+ void setStatus(int status, const QString &error = QString());
+
+ QString targetDir() const;
+ QString registerPath() const;
+
+ QString uninstallerName() const;
+ QString installerBinaryPath() const;
+
+ void writeMaintenanceConfigFiles();
+ void readMaintenanceConfigFiles(const QString &targetDir);
+
+ void writeUninstaller(OperationList performedOperations);
+
+ QString componentsXmlPath() const;
+ QString configurationFileName() const;
+
+ bool buildComponentTree(QHash<QString, Component*> &components, bool loadScript);
+
+ void clearAllComponentLists();
+ void clearUpdaterComponentLists();
+ QList<Component*> &replacementDependencyComponents(RunMode mode);
+ QHash<QString, QPair<Component*, Component*> > &componentsToReplace(RunMode mode);
+
+ void clearComponentsToInstall();
+ bool appendComponentsToInstall(const QList<Component*> &components);
+ bool appendComponentToInstall(Component *components);
+ QString installReason(Component *component);
+
+ void runInstaller();
+ bool isInstaller() const;
+
+ void runUninstaller();
+ bool isUninstaller() const;
+
+ void runUpdater();
+ bool isUpdater() const;
+
+ void runPackageUpdater();
+ bool isPackageManager() const;
+
+ QString replaceVariables(const QString &str) const;
+ QByteArray replaceVariables(const QByteArray &str) const;
+
+ void callBeginInstallation(const QList<Component*> &componentList);
+ void stopProcessesForUpdates(const QList<Component*> &components);
+ int countProgressOperations(const QList<Component*> &components);
+ int countProgressOperations(const OperationList &operations);
+ void connectOperationToInstaller(Operation *const operation, double progressOperationPartSize);
+ void connectOperationCallMethodRequest(Operation *const operation);
+
+ Operation *createOwnedOperation(const QString &type);
+ Operation *takeOwnedOperation(Operation *operation);
+
+ Operation *createPathOperation(const QFileInfo &fileInfo, const QString &componentName);
+ void registerPathesForUninstallation(const QList<QPair<QString, bool> > &pathesForUninstallation,
+ const QString &componentName);
+
+ void addPerformed(Operation *op) {
+ m_performedOperationsCurrentSession.append(op);
+ }
+
+ void commitSessionOperations() {
+ m_performedOperationsOld += m_performedOperationsCurrentSession;
+ m_performedOperationsCurrentSession.clear();
+ }
+
+ void installComponent(Component *component, double progressOperationSize,
+ bool adminRightsGained = false);
+
+ bool appendComponentToUninstall(Component *component);
+ bool appendComponentsToUninstall(const QList<Component*> &components);
+
+signals:
+ void installationStarted();
+ void installationFinished();
+ void uninstallationStarted();
+ void uninstallationFinished();
+
+public:
+ UpdateFinder *m_updateFinder;
+ Application m_updaterApplication;
+ FSEngineClientHandler *m_FSEngineClientHandler;
+
+ int m_status;
+ QString m_error;
+
+ Settings m_settings;
+ bool m_forceRestart;
+ bool m_testChecksum;
+ bool m_launchedAsRoot;
+ bool m_completeUninstall;
+ bool m_needToWriteUninstaller;
+ QHash<QString, QString> m_vars;
+ QHash<QString, bool> m_sharedFlags;
+ QString m_installerBaseBinaryUnreplaced;
+
+ QList<Component*> m_rootComponents;
+ QList<Component*> m_rootDependencyReplacements;
+
+ QList<Component*> m_updaterComponents;
+ QList<Component*> m_updaterComponentsDeps;
+ QList<Component*> m_updaterDependencyReplacements;
+
+ OperationList m_ownedOperations;
+ OperationList m_performedOperationsOld;
+ OperationList m_performedOperationsCurrentSession;
+
+private slots:
+ void infoMessage(KDJob *, const QString &message) {
+ emit m_core->metaJobInfoMessage(message);
+ }
+
+ void handleMethodInvocationRequest(const QString &invokableMethodName);
+
+private:
+ void deleteUninstaller();
+ void registerUninstaller();
+ void unregisterUninstaller();
+
+ void writeUninstallerBinary(QFile *const input, qint64 size, bool writeBinaryLayout);
+ void writeUninstallerBinaryData(QIODevice *output, QFile *const input, const OperationList &performed,
+ const BinaryLayout &layout);
+
+ void runUndoOperations(const OperationList &undoOperations, double undoOperationProgressSize,
+ bool adminRightsGained, bool deleteOperation);
+
+ PackagesList remotePackages();
+ LocalPackagesHash localInstalledPackages();
+ bool fetchMetaInformationFromRepositories();
+ bool addUpdateResourcesFromRepositories(bool parseChecksum);
+ void realAppendToInstallComponents(Component *component);
+ void insertInstallReason(Component *component, const QString &reason);
+
+private:
+ PackageManagerCore *m_core;
+ GetRepositoriesMetaInfoJob *m_repoMetaInfoJob;
+
+ bool m_updates;
+ bool m_repoFetched;
+ bool m_updateSourcesAdded;
+ qint64 m_magicBinaryMarker;
+ bool m_componentsToInstallCalculated;
+
+ // < name (component to replace), < replacement component, component to replace > >
+ QHash<QString, QPair<Component*, Component*> > m_componentsToReplaceAllMode;
+ QHash<QString, QPair<Component*, Component*> > m_componentsToReplaceUpdaterMode;
+
+ //calculate installation order variables
+ QList<Component*> m_orderedComponentsToInstall;
+ QHash<Component*, QSet<Component*> > m_visitedComponents;
+
+ QSet<QString> m_toInstallComponentIds; //for faster lookups
+
+ //we can't use this reason hash as component id hash, because some reasons are ready before
+ //the component is added
+ QHash<QString, QString> m_toInstallComponentIdReasonHash;
+
+ QSet<Component*> m_componentsToUninstall;
+ QString m_componentsToInstallError;
+ FileDownloaderProxyFactory *m_proxyFactory;
+ bool m_createLocalRepositoryFromBinary;
+
+private:
+ // remove once we deprecate isSelected, setSelected etc...
+ void resetComponentsToUserCheckedState();
+ QHash<Component*, Qt::CheckState> m_coreCheckedHash;
+ void setCheckedState(Component *component, Qt::CheckState state);
+};
+
+} // namespace QInstaller
+
+#endif // PACKAGEMANAGERCORE_P_H