126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
#include <QByteArray>
 | 
						|
#include <net/NetJob.h>
 | 
						|
 | 
						|
namespace GoUpdate
 | 
						|
{
 | 
						|
 | 
						|
/**
 | 
						|
 * A temporary object exchanged between updated checker and the actual update task
 | 
						|
 */
 | 
						|
struct Status
 | 
						|
{
 | 
						|
    bool updateAvailable = false;
 | 
						|
 | 
						|
    int newVersionId = -1;
 | 
						|
    QString newRepoUrl;
 | 
						|
 | 
						|
    int currentVersionId = -1;
 | 
						|
    QString currentRepoUrl;
 | 
						|
 | 
						|
    // path to the root of the application
 | 
						|
    QString rootPath;
 | 
						|
};
 | 
						|
 | 
						|
/**
 | 
						|
 * Struct that describes an entry in a VersionFileEntry's `Sources` list.
 | 
						|
 */
 | 
						|
struct FileSource
 | 
						|
{
 | 
						|
    FileSource(QString type, QString url, QString compression="")
 | 
						|
    {
 | 
						|
        this->type = type;
 | 
						|
        this->url = url;
 | 
						|
        this->compressionType = compression;
 | 
						|
    }
 | 
						|
 | 
						|
    bool operator==(const FileSource &f2) const
 | 
						|
    {
 | 
						|
        return type == f2.type && url == f2.url && compressionType == f2.compressionType;
 | 
						|
    }
 | 
						|
 | 
						|
    QString type;
 | 
						|
    QString url;
 | 
						|
    QString compressionType;
 | 
						|
};
 | 
						|
typedef QList<FileSource> FileSourceList;
 | 
						|
 | 
						|
/**
 | 
						|
 * Structure that describes an entry in a GoUpdate version's `Files` list.
 | 
						|
 */
 | 
						|
struct VersionFileEntry
 | 
						|
{
 | 
						|
    QString path;
 | 
						|
    int mode;
 | 
						|
    FileSourceList sources;
 | 
						|
    QString md5;
 | 
						|
    bool operator==(const VersionFileEntry &v2) const
 | 
						|
    {
 | 
						|
        return path == v2.path && mode == v2.mode && sources == v2.sources && md5 == v2.md5;
 | 
						|
    }
 | 
						|
};
 | 
						|
typedef QList<VersionFileEntry> VersionFileList;
 | 
						|
 | 
						|
/**
 | 
						|
 * Structure that describes an operation to perform when installing updates.
 | 
						|
 */
 | 
						|
struct Operation
 | 
						|
{
 | 
						|
    static Operation CopyOp(QString from, QString to, int fmode=0644)
 | 
						|
    {
 | 
						|
        return Operation{OP_REPLACE, from, to, fmode};
 | 
						|
    }
 | 
						|
    static Operation DeleteOp(QString file)
 | 
						|
    {
 | 
						|
        return Operation{OP_DELETE, QString(), file, 0644};
 | 
						|
    }
 | 
						|
 | 
						|
    // FIXME: for some types, some of the other fields are irrelevant!
 | 
						|
    bool operator==(const Operation &u2) const
 | 
						|
    {
 | 
						|
        return type == u2.type &&
 | 
						|
            source == u2.source &&
 | 
						|
            destination == u2.destination &&
 | 
						|
            destinationMode == u2.destinationMode;
 | 
						|
    }
 | 
						|
 | 
						|
    //! Specifies the type of operation that this is.
 | 
						|
    enum Type
 | 
						|
    {
 | 
						|
        OP_REPLACE,
 | 
						|
        OP_DELETE,
 | 
						|
    } type;
 | 
						|
 | 
						|
    //! The source file, if any
 | 
						|
    QString source;
 | 
						|
 | 
						|
    //! The destination file.
 | 
						|
    QString destination;
 | 
						|
 | 
						|
    //! The mode to change the destination file to.
 | 
						|
    int destinationMode;
 | 
						|
};
 | 
						|
typedef QList<Operation> OperationList;
 | 
						|
 | 
						|
/**
 | 
						|
 * Loads the file list from the given version info JSON object into the given list.
 | 
						|
 */
 | 
						|
bool parseVersionInfo(const QByteArray &data, VersionFileList& list, QString &error);
 | 
						|
 | 
						|
/*!
 | 
						|
 * Takes a list of file entries for the current version's files and the new version's files
 | 
						|
 * and populates the downloadList and operationList with information about how to download and install the update.
 | 
						|
 */
 | 
						|
bool processFileLists
 | 
						|
(
 | 
						|
    const VersionFileList ¤tVersion,
 | 
						|
    const VersionFileList &newVersion,
 | 
						|
    const QString &rootPath,
 | 
						|
    const QString &tempPath,
 | 
						|
    NetJob::Ptr job,
 | 
						|
    OperationList &ops
 | 
						|
);
 | 
						|
 | 
						|
}
 | 
						|
Q_DECLARE_METATYPE(GoUpdate::Status)
 |