view ui/installwrapper.h @ 389:3be838c3e4d8

Handle installation success. Save / load last installed list. This also adds a feature that you can specifiy the download resource when release build is not set so that you can update a list without modifying the server data.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 15 Apr 2014 19:05:49 +0200
parents a507e5f1b999
children 17e1c8f37d72
line wrap: on
line source
#ifndef UI_INSTALLWRAPPER_H
#define UI_INSTALLWRAPPER_H

#include <QFileInfo>
#include <QString>
#include <QStringList>
#include <QTemporaryFile>
#include <QThread>

#include "certificate.h"
/** @file installwrapper.h
 * @brief Wrapper around the call to the updated process */

/** @brief Get the FileInfo for the installation process.
 *
 * This points to the file where the installation process is
 * supposed to be.
 *
 * @returns A FileInfo with the path of the installation process.*/
QFileInfo getCinstProcInfo();

 /** @brief wrapper around installer process
  *
  * This wrapper is mostly needed because QProcess executes
  * a process on Windows directly with CreateProcess and
  * thus can not be used to elevate the Process.
  *
  * On Windows this class uses ShellExecuteExW to control
  * the child process. On Linux systems QProcess is used.
  *
  * It subclasses QThread so the installation can be done
  * asynchronusly. */
class InstallWrapper : public QThread
{
    Q_OBJECT

public:
    /**
     * @brief Construct an installwrapper for a certificateList
     *
     * The install wrapper will start the cinst process to execute
     * the specified instructions with the provided certificatelist.
     *
     * The cinst executable is expected to be in the same directory
     * as the current application.
     *
     * @param[in] parent the parent object.
     * @param[in] listFileName the absolute path to the certificatelist.
     * @param[in] choices a list of R: / I: <cert> lines to execute.
     */
    InstallWrapper(QObject* parent, const QString& path,
                   const QStringList& instructions);

private:
    /**@brief write the choices made into a temporary file 
     *
     * @param[in] choicesFile the temporary file to write.
     *
     * @returns true on success. false on error.
     */
    bool writeChoices(QTemporaryFile* choicesFile) const;

    const QString mCertListFile;
    const QStringList mChoices;

protected:
    void run();

Q_SIGNALS:
    /**
     * @brief An error happened
     *
     * @param[out] message: A localized message to show. Can be empty.
     */
    void error(const QString &message);

    /**
     * @brief The installation was successful
     *
     * This only means the installation was successful as far as we
     * can tell as there is no backchannel from the installation processes.
     */
    void installationSuccessful();
};

#endif // UI_INSTALLWRAPPER_H

http://wald.intevation.org/projects/trustbridge/