diff --git a/code/ryzom/tools/client/ryzom_installer/src/main.cpp b/code/ryzom/tools/client/ryzom_installer/src/main.cpp index 4c13e2d25..dfe588000 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/main.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/main.cpp @@ -125,7 +125,7 @@ int main(int argc, char *argv[]) if (parser.isSet(uninstallOption)) { - SUninstallComponents components; + SComponents components; // add all servers by default for (int i = 0; i < config.getServersCount(); ++i) diff --git a/code/ryzom/tools/client/ryzom_installer/src/mainwindow.cpp b/code/ryzom/tools/client/ryzom_installer/src/mainwindow.cpp index 27bd38a32..2c1be9a72 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/mainwindow.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/mainwindow.cpp @@ -193,7 +193,7 @@ void CMainWindow::onUninstall() { CConfigFile *config = CConfigFile::getInstance(); - SUninstallComponents components; + SComponents components; // add all servers by default for (int i = 0; i < config->getServersCount(); ++i) diff --git a/code/ryzom/tools/client/ryzom_installer/src/operation.h b/code/ryzom/tools/client/ryzom_installer/src/operation.h index 4c3a88c07..4e8b016be 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/operation.h +++ b/code/ryzom/tools/client/ryzom_installer/src/operation.h @@ -33,9 +33,9 @@ public: virtual bool operationShouldStop() =0; }; -struct SUninstallComponents +struct SComponents { - SUninstallComponents() + SComponents() { installer = true; } diff --git a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp index fe5c8f372..405973724 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.cpp @@ -22,6 +22,7 @@ #include "config.h" #include "profilesmodel.h" #include "utils.h" +#include "nel/misc/path.h" #include "filescopier.h" #include "filesextractor.h" @@ -82,9 +83,9 @@ void COperationDialog::setOperation(OperationType operation) m_operation = operation; } -void COperationDialog::setUninstallComponents(const SUninstallComponents &components) +void COperationDialog::setUninstallComponents(const SComponents &components) { - m_components = components; + m_removeComponents = components; } void COperationDialog::processNextStep() @@ -191,21 +192,28 @@ void COperationDialog::processInstallNextStep() } } -void COperationDialog::processUpdateProfilesNextStep() +void COperationDialog::updateAddRemoveComponents() { - // TODO: check all servers are downloaded - // TODO: delete profiles directories that are not used anymore - // TODO: create shortcuts - QStringList serversToUpdate; + QStringList profilesToDelete; + QStringList profilesToAdd; CConfigFile *config = CConfigFile::getInstance(); - // append all old profiles + foreach(const CProfile &profile, config->getProfiles()) + { + // append all new profiles + profilesToAdd << profile.id; + } + foreach(const CProfile &profile, config->getBackupProfiles()) { - if (QFile::exists(profile.getDirectory())) profilesToDelete << profile.id; + // append all old profiles + profilesToDelete << profile.id; + + // remove profiles that didn't exist + profilesToAdd.removeAll(profile.id); } const CServer &defaultServer = config->getServer(); @@ -226,84 +234,118 @@ void COperationDialog::processUpdateProfilesNextStep() profilesToDelete.removeAll(profile.id); } - if (!profilesToDelete.isEmpty()) + // update components to remove + m_removeComponents.profiles << profilesToDelete; + m_removeComponents.installer = false; + + // update components to add + m_addComponents.profiles << profilesToAdd; + m_addComponents.servers << serversToUpdate; + m_addComponents.installer = false; +} + +void COperationDialog::processUpdateProfilesNextStep() +{ + // for "update profiles" operations, we set installer to false when components are updated, + // since we're not using this variable + if (m_addComponents.installer && m_removeComponents.installer) { - m_components.profiles << profilesToDelete; + updateAddRemoveComponents(); + } + // TODO: check all servers are downloaded + // TODO: delete profiles directories that are not used anymore + // TODO: create shortcuts + + if (!m_removeComponents.profiles.isEmpty()) + { // delete profiles in another thread QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles); + return; + } + if (!m_addComponents.profiles.isEmpty()) + { + // add profiles in another thread + QtConcurrent::run(this, &COperationDialog::addComponentsProfiles); return; } - // servers files to download/update - foreach(const QString &serverId, serversToUpdate) + if (!m_addComponents.servers.isEmpty()) { - const CServer &server = config->getServer(serverId); + CConfigFile *config = CConfigFile::getInstance(); + const CServer &defaultServer = config->getServer(); - // data - if (!config->areRyzomDataInstalledIn(server.getDirectory())) + // servers files to download/update + foreach(const QString &serverId, m_addComponents.servers) { - QString dataFile = config->getInstallationDirectory() + "/" + server.dataDownloadFilename; + const CServer &server = config->getServer(serverId); - // archive already downloaded - if (QFile::exists(dataFile)) + // data + if (!config->areRyzomDataInstalledIn(server.getDirectory())) { - // make server current - m_currentServerId = server.id; + QString dataFile = config->getInstallationDirectory() + "/" + server.dataDownloadFilename; + + // archive already downloaded + if (QFile::exists(dataFile)) + { + // make server current + m_currentServerId = server.id; + + // uncompress it + QtConcurrent::run(this, &COperationDialog::extractDownloadedData); + return; + } + + // data download URLs are different, can't copy data from default server + if (server.dataDownloadUrl != defaultServer.dataDownloadUrl) + { + // download it + downloadData(); + return; + } - // uncompress it - QtConcurrent::run(this, &COperationDialog::extractDownloadedData); - return; - } + // same data used - // data download URLs are different, can't copy data from default server - if (server.dataDownloadUrl != defaultServer.dataDownloadUrl) - { - // download it + // copy them // TODO - return; } - // same data used - - // copy them - // TODO - return; - } - - // client - if (!config->isRyzomClientInstalledIn(server.getDirectory())) - { - // client download URLs are different, can't copy client from default server - if (server.clientDownloadUrl == defaultServer.clientDownloadUrl) + // client + if (!config->isRyzomClientInstalledIn(server.getDirectory())) { - if (QFile::exists("")) - downloadData(); - return; + // client download URLs are different, can't copy client from default server + if (server.clientDownloadUrl == defaultServer.clientDownloadUrl) + { + if (QFile::exists("")) + downloadData(); + return; + } + } + else + { + QString clientFile = config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename); } - } - else - { - QString clientFile = config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename); } } + + updateAddRemoveEntry(); } void COperationDialog::processUninstallNextStep() { CConfigFile *config = CConfigFile::getInstance(); - if (!m_components.servers.isEmpty()) + if (!m_removeComponents.servers.isEmpty()) { QtConcurrent::run(this, &COperationDialog::deleteComponentsServers); } - else if (!m_components.profiles.isEmpty()) + else if (!m_removeComponents.profiles.isEmpty()) { QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles); } - else if (m_components.installer) + else if (m_removeComponents.installer) { QtConcurrent::run(this, &COperationDialog::deleteComponentsInstaller); } @@ -916,14 +958,14 @@ void COperationDialog::deleteComponentsServers() m_currentOperationProgressFormat = tr("Deleting %1..."); emit prepare(); - emit init(0, m_components.servers.size()); + emit init(0, m_removeComponents.servers.size()); emit start(); CConfigFile *config = CConfigFile::getInstance(); int i = 0; - foreach(const QString &serverId, m_components.servers) + foreach(const QString &serverId, m_removeComponents.servers) { if (operationShouldStop()) { @@ -949,7 +991,11 @@ void COperationDialog::deleteComponentsServers() } } - emit success(m_components.servers.size()); + emit success(m_removeComponents.servers.size()); + + // clear list of all servers to uninstall + m_removeComponents.servers.clear(); + emit done(); } @@ -959,13 +1005,13 @@ void COperationDialog::deleteComponentsProfiles() m_currentOperationProgressFormat = tr("Deleting profile %1..."); emit prepare(); - emit init(0, m_components.servers.size()); + emit init(0, m_removeComponents.servers.size()); CConfigFile *config = CConfigFile::getInstance(); int i = 0; - foreach(const QString &profileId, m_components.profiles) + foreach(const QString &profileId, m_removeComponents.profiles) { if (operationShouldStop()) { @@ -990,14 +1036,17 @@ void COperationDialog::deleteComponentsProfiles() } } + // TODO: delete links + // delete profile config->removeProfile(profileId); } + emit success(m_removeComponents.profiles.size()); + // clear list of all profiles to uninstall - m_components.profiles.clear(); + m_removeComponents.profiles.clear(); - emit success(m_components.servers.size()); emit done(); } diff --git a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.h b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.h index a170c30a0..f8152718e 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/operationdialog.h +++ b/code/ryzom/tools/client/ryzom_installer/src/operationdialog.h @@ -39,7 +39,7 @@ public: virtual ~COperationDialog(); void setOperation(OperationType operation); - void setUninstallComponents(const SUninstallComponents &components); + void setUninstallComponents(const SComponents &components); public slots: void onAbortClicked(); @@ -106,10 +106,18 @@ protected: bool createClientMenuShortcut(int profileIndex); bool createAddRemoveEntry(); bool deleteAddRemoveEntry(); + + void addComponentsServers(); void deleteComponentsServers(); + + void addComponentsProfiles(); void deleteComponentsProfiles(); + + void addComponentsInstaller(); void deleteComponentsInstaller(); + void updateAddRemoveComponents(); + // from CFilesCopier virtual void operationPrepare(); virtual void operationInit(qint64 current, qint64 total); @@ -133,7 +141,8 @@ protected: bool m_aborting; OperationType m_operation; - SUninstallComponents m_components; + SComponents m_addComponents; + SComponents m_removeComponents; QString m_currentServerId; }; diff --git a/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.cpp b/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.cpp index 62763063b..4c61da6d5 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.cpp @@ -114,7 +114,7 @@ void CUninstallDialog::showEvent(QShowEvent *event) QtConcurrent::run(this, &CUninstallDialog::updateSizes); } -void CUninstallDialog::setSelectedComponents(const SUninstallComponents &components) +void CUninstallDialog::setSelectedComponents(const SComponents &components) { QStandardItemModel *model = qobject_cast(componentsTreeView->model()); if (model == NULL) return; @@ -150,9 +150,9 @@ void CUninstallDialog::setSelectedComponents(const SUninstallComponents &compone if (item) item->setCheckState(components.installer ? Qt::Checked : Qt::Unchecked); } -SUninstallComponents CUninstallDialog::getSelectedCompenents() const +SComponents CUninstallDialog::getSelectedCompenents() const { - SUninstallComponents res; + SComponents res; QStandardItemModel *model = qobject_cast(componentsTreeView->model()); if (model == NULL) return res; diff --git a/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.h b/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.h index 08f7f536d..f8bebace1 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.h +++ b/code/ryzom/tools/client/ryzom_installer/src/uninstalldialog.h @@ -35,8 +35,8 @@ public: CUninstallDialog(QWidget *parent = NULL); virtual ~CUninstallDialog(); - void setSelectedComponents(const SUninstallComponents &components); - SUninstallComponents getSelectedCompenents() const; + void setSelectedComponents(const SComponents &components); + SComponents getSelectedCompenents() const; signals: void updateSize(int row, const QString &text);