diff --git a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp index cf5be876c..99f1a54a8 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp @@ -25,7 +25,7 @@ CConfigFile *CConfigFile::s_instance = NULL; CConfigFile::CConfigFile(QObject *parent):QObject(parent), m_version(-1), - m_defaultServerIndex(0), m_defaultProfileIndex(0), m_use64BitsClient(false), m_shouldUninstallOldClient(true) + m_defaultServerIndex(0), m_defaultProfileIndex(0), m_installerCopied(false), m_use64BitsClient(false), m_shouldUninstallOldClient(true) { s_instance = this; @@ -945,8 +945,8 @@ OperationStep CConfigFile::getInstallNextStep() const } } - // current installer more recent than installed one - if (compareInstallersVersion() == 1) return CopyInstaller; + // current installer more recent than installed one and not already copied + if (!m_installerCopied && compareInstallersVersion() == 1) return CopyInstaller; // no default profile if (profile.id.isEmpty()) @@ -992,7 +992,7 @@ OperationStep CConfigFile::getInstallNextStep() const // current installer more recent than installed one switch (compareInstallersVersion()) { - // current installer more recent, copy it + // current installer more recent, should be already copied case 1: break; // current installer older, launch the more recent installer diff --git a/code/ryzom/tools/client/ryzom_installer/src/configfile.h b/code/ryzom/tools/client/ryzom_installer/src/configfile.h index d1560c40e..df13b7a51 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/configfile.h +++ b/code/ryzom/tools/client/ryzom_installer/src/configfile.h @@ -57,6 +57,9 @@ public: QString getLanguage() const { return m_language; } + bool getInstallerCopied() const { return m_installerCopied; } + void setInstallerCopied(bool copied) { m_installerCopied = copied; } + int getProfilesCount() const; CProfile getProfile(int i = -1) const; CProfile getProfile(const QString &id) const; @@ -145,6 +148,7 @@ private: int m_version; int m_defaultServerIndex; int m_defaultProfileIndex; + bool m_installerCopied; CServers m_servers; CProfiles m_profiles; diff --git a/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp b/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp index 1a8e6cfaf..8cfb3c0d5 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp @@ -194,6 +194,9 @@ bool CFilesCopier::copyFiles(const FilesToCopy &files) processedSize += file.size; } + // wait 1 second to be sure all files have been copied (because to disk cache) + QThread::sleep(1); + if (m_listener) { m_listener->operationSuccess(totalSize); diff --git a/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp b/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp index 241817e9c..d314dce93 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/filesextractor.cpp @@ -462,7 +462,7 @@ bool CFilesExtractor::extract7z() } // create file - QFile outFile(destPath); + QSaveFile outFile(destPath); if (!outFile.open(QFile::WriteOnly)) { @@ -496,7 +496,7 @@ bool CFilesExtractor::extract7z() break; } - outFile.close(); + outFile.commit(); totalUncompressed += uncompressedSize; @@ -620,7 +620,7 @@ bool CFilesExtractor::extractZip() return true; } - QFile f(absPath); + QSaveFile f(absPath); if (!f.open(QIODevice::WriteOnly)) { @@ -637,7 +637,7 @@ bool CFilesExtractor::extractZip() nlwarning("Unable to change permissions of %s", Q2C(absPath)); } - f.close(); + f.commit(); // set the right modification date if (!NLMISC::CFile::setFileModificationDate(qToUtf8(absPath), fi.lastModified.toTime_t())) diff --git a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp index f9e086c16..f5dc89086 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp @@ -791,6 +791,9 @@ void COperationDialog::copyInstaller() #endif createShortcut(shortcut, name, executable, "", icon, ""); + + // installer already copied, don't need to copy it again + config->setInstallerCopied(true); } emit done();