From 82e05661d207621f917d79ebd513abc57a36c084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 8 Jun 2015 02:43:16 +0200 Subject: GH-1060 implement very basic updater (only linux and maybe osx right now) --- logic/updater/DownloadTask.cpp | 15 ++++----- logic/updater/DownloadTask.h | 5 +++ logic/updater/GoUpdate.cpp | 74 ------------------------------------------ logic/updater/GoUpdate.h | 11 ++----- 4 files changed, 14 insertions(+), 91 deletions(-) (limited to 'logic/updater') diff --git a/logic/updater/DownloadTask.cpp b/logic/updater/DownloadTask.cpp index 352f1f0d..4a42f583 100644 --- a/logic/updater/DownloadTask.cpp +++ b/logic/updater/DownloadTask.cpp @@ -89,7 +89,6 @@ void DownloadTask::processDownloadedVersionInfo() { VersionFileList m_currentVersionFileList; VersionFileList m_newVersionFileList; - OperationList operationList; setStatus(tr("Reading file list for new version...")); qDebug() << "Reading file list for new version..."; @@ -125,19 +124,12 @@ void DownloadTask::processDownloadedVersionInfo() NetJobPtr netJob (new NetJob("Update Files")); // fill netJob and operationList - if (!processFileLists(m_currentVersionFileList, m_newVersionFileList, m_status.rootPath, m_updateFilesDir.path(), netJob, operationList)) + if (!processFileLists(m_currentVersionFileList, m_newVersionFileList, m_status.rootPath, m_updateFilesDir.path(), netJob, m_operations)) { emitFailed(tr("Failed to process update lists...")); return; } - // write the instruction file for the file swapper - if(!writeInstallScript(operationList, PathCombine(m_updateFilesDir.path(), "file_list.xml"))) - { - emitFailed(tr("Failed to write update script file.")); - return; - } - // Now start the download. QObject::connect(netJob.get(), &NetJob::succeeded, this, &DownloadTask::fileDownloadFinished); QObject::connect(netJob.get(), &NetJob::progress, this, &DownloadTask::fileDownloadProgressChanged); @@ -170,4 +162,9 @@ QString DownloadTask::updateFilesDir() return m_updateFilesDir.path(); } +OperationList DownloadTask::operations() +{ + return m_operations; +} + } \ No newline at end of file diff --git a/logic/updater/DownloadTask.h b/logic/updater/DownloadTask.h index 197aa3e6..3bc504fc 100644 --- a/logic/updater/DownloadTask.h +++ b/logic/updater/DownloadTask.h @@ -35,6 +35,9 @@ public: /// Get the directory that will contain the update files. QString updateFilesDir(); + /// Get the list of operations that should be done + OperationList operations(); + /// set updater download behavior void setUseLocalUpdater(bool useLocal); @@ -61,6 +64,8 @@ protected: Status m_status; + OperationList m_operations; + /*! * Temporary directory to store update files in. * This will be set to not auto delete. Task will fail if this fails to be created. diff --git a/logic/updater/GoUpdate.cpp b/logic/updater/GoUpdate.cpp index d85f00d6..a43c5e7c 100644 --- a/logic/updater/GoUpdate.cpp +++ b/logic/updater/GoUpdate.cpp @@ -213,78 +213,4 @@ bool fixPathForOSX(QString &path) return false; } } - -bool writeInstallScript(OperationList &opsList, QString scriptFile) -{ - // Build the base structure of the XML document. - QDomDocument doc; - - QDomElement root = doc.createElement("update"); - root.setAttribute("version", "3"); - doc.appendChild(root); - - QDomElement installFiles = doc.createElement("install"); - root.appendChild(installFiles); - - QDomElement removeFiles = doc.createElement("uninstall"); - root.appendChild(removeFiles); - - // Write the operation list to the XML document. - for (Operation op : opsList) - { - QDomElement file = doc.createElement("file"); - - switch (op.type) - { - case Operation::OP_COPY: - { - // Install the file. - QDomElement name = doc.createElement("source"); - QDomElement path = doc.createElement("dest"); - QDomElement mode = doc.createElement("mode"); - name.appendChild(doc.createTextNode(op.file)); - path.appendChild(doc.createTextNode(op.dest)); - // We need to add a 0 at the beginning here, because Qt doesn't convert to octal - // correctly. - mode.appendChild(doc.createTextNode("0" + QString::number(op.mode, 8))); - file.appendChild(name); - file.appendChild(path); - file.appendChild(mode); - installFiles.appendChild(file); - qDebug() << "Will install file " << op.file << " to " << op.dest; - } - break; - - case Operation::OP_DELETE: - { - // Delete the file. - file.appendChild(doc.createTextNode(op.file)); - removeFiles.appendChild(file); - qDebug() << "Will remove file" << op.file; - } - break; - - default: - qWarning() << "Can't write update operation of type" << op.type - << "to file. Not implemented."; - continue; - } - } - - // Write the XML document to the file. - QFile outFile(scriptFile); - - if (outFile.open(QIODevice::WriteOnly)) - { - outFile.write(doc.toByteArray()); - } - else - { - return false; - } - - return true; -} - - } \ No newline at end of file diff --git a/logic/updater/GoUpdate.h b/logic/updater/GoUpdate.h index 941c4e3a..21976f8f 100644 --- a/logic/updater/GoUpdate.h +++ b/logic/updater/GoUpdate.h @@ -88,22 +88,17 @@ struct Operation OP_DELETE, } type; - //! The file to operate on. If this is a DELETE or CHMOD operation, this is the file that will be modified. + //! The file to operate on. QString file; - //! The destination file. If this is a DELETE or CHMOD operation, this field will be ignored. + //! The destination file. QString dest; - //! The mode to change the source file to. Ignored if this isn't a CHMOD operation. + //! The mode to change the source file to. int mode; }; typedef QList OperationList; -/** - * Takes the @OperationList list and writes an install script for the updater to the update files directory. - */ -bool writeInstallScript(OperationList& opsList, QString scriptFile); - /** * Loads the file list from the given version info JSON object into the given list. */ -- cgit v1.2.3