Changed: Use SComponents for added or removed components
This commit is contained in:
parent
de2dc037fd
commit
40073b4e57
7 changed files with 133 additions and 75 deletions
|
@ -125,7 +125,7 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
if (parser.isSet(uninstallOption))
|
if (parser.isSet(uninstallOption))
|
||||||
{
|
{
|
||||||
SUninstallComponents components;
|
SComponents components;
|
||||||
|
|
||||||
// add all servers by default
|
// add all servers by default
|
||||||
for (int i = 0; i < config.getServersCount(); ++i)
|
for (int i = 0; i < config.getServersCount(); ++i)
|
||||||
|
|
|
@ -193,7 +193,7 @@ void CMainWindow::onUninstall()
|
||||||
{
|
{
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
SUninstallComponents components;
|
SComponents components;
|
||||||
|
|
||||||
// add all servers by default
|
// add all servers by default
|
||||||
for (int i = 0; i < config->getServersCount(); ++i)
|
for (int i = 0; i < config->getServersCount(); ++i)
|
||||||
|
|
|
@ -33,9 +33,9 @@ public:
|
||||||
virtual bool operationShouldStop() =0;
|
virtual bool operationShouldStop() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SUninstallComponents
|
struct SComponents
|
||||||
{
|
{
|
||||||
SUninstallComponents()
|
SComponents()
|
||||||
{
|
{
|
||||||
installer = true;
|
installer = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "profilesmodel.h"
|
#include "profilesmodel.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "nel/misc/path.h"
|
||||||
|
|
||||||
#include "filescopier.h"
|
#include "filescopier.h"
|
||||||
#include "filesextractor.h"
|
#include "filesextractor.h"
|
||||||
|
@ -82,9 +83,9 @@ void COperationDialog::setOperation(OperationType operation)
|
||||||
m_operation = 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()
|
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 serversToUpdate;
|
||||||
|
|
||||||
QStringList profilesToDelete;
|
QStringList profilesToDelete;
|
||||||
|
QStringList profilesToAdd;
|
||||||
|
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
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())
|
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();
|
const CServer &defaultServer = config->getServer();
|
||||||
|
@ -226,84 +234,118 @@ void COperationDialog::processUpdateProfilesNextStep()
|
||||||
profilesToDelete.removeAll(profile.id);
|
profilesToDelete.removeAll(profile.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!profilesToDelete.isEmpty())
|
// update components to remove
|
||||||
{
|
m_removeComponents.profiles << profilesToDelete;
|
||||||
m_components.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)
|
||||||
|
{
|
||||||
|
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
|
// delete profiles in another thread
|
||||||
QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles);
|
QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// servers files to download/update
|
if (!m_addComponents.profiles.isEmpty())
|
||||||
foreach(const QString &serverId, serversToUpdate)
|
|
||||||
{
|
{
|
||||||
const CServer &server = config->getServer(serverId);
|
// add profiles in another thread
|
||||||
|
QtConcurrent::run(this, &COperationDialog::addComponentsProfiles);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// data
|
if (!m_addComponents.servers.isEmpty())
|
||||||
if (!config->areRyzomDataInstalledIn(server.getDirectory()))
|
{
|
||||||
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
const CServer &defaultServer = config->getServer();
|
||||||
|
|
||||||
|
// 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
|
// data
|
||||||
if (QFile::exists(dataFile))
|
if (!config->areRyzomDataInstalledIn(server.getDirectory()))
|
||||||
{
|
{
|
||||||
// make server current
|
QString dataFile = config->getInstallationDirectory() + "/" + server.dataDownloadFilename;
|
||||||
m_currentServerId = server.id;
|
|
||||||
|
|
||||||
// uncompress it
|
// archive already downloaded
|
||||||
QtConcurrent::run(this, &COperationDialog::extractDownloadedData);
|
if (QFile::exists(dataFile))
|
||||||
return;
|
{
|
||||||
}
|
// make server current
|
||||||
|
m_currentServerId = server.id;
|
||||||
|
|
||||||
// data download URLs are different, can't copy data from default server
|
// uncompress it
|
||||||
if (server.dataDownloadUrl != defaultServer.dataDownloadUrl)
|
QtConcurrent::run(this, &COperationDialog::extractDownloadedData);
|
||||||
{
|
return;
|
||||||
// download it
|
}
|
||||||
// TODO
|
|
||||||
|
|
||||||
return;
|
// data download URLs are different, can't copy data from default server
|
||||||
}
|
if (server.dataDownloadUrl != defaultServer.dataDownloadUrl)
|
||||||
|
{
|
||||||
// same data used
|
// download it
|
||||||
|
|
||||||
// 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)
|
|
||||||
{
|
|
||||||
if (QFile::exists(""))
|
|
||||||
downloadData();
|
downloadData();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// same data used
|
||||||
|
|
||||||
|
// copy them
|
||||||
|
// TODO
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
// client
|
||||||
{
|
if (!config->isRyzomClientInstalledIn(server.getDirectory()))
|
||||||
QString clientFile = config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename);
|
{
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateAddRemoveEntry();
|
||||||
}
|
}
|
||||||
|
|
||||||
void COperationDialog::processUninstallNextStep()
|
void COperationDialog::processUninstallNextStep()
|
||||||
{
|
{
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
if (!m_components.servers.isEmpty())
|
if (!m_removeComponents.servers.isEmpty())
|
||||||
{
|
{
|
||||||
QtConcurrent::run(this, &COperationDialog::deleteComponentsServers);
|
QtConcurrent::run(this, &COperationDialog::deleteComponentsServers);
|
||||||
}
|
}
|
||||||
else if (!m_components.profiles.isEmpty())
|
else if (!m_removeComponents.profiles.isEmpty())
|
||||||
{
|
{
|
||||||
QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles);
|
QtConcurrent::run(this, &COperationDialog::deleteComponentsProfiles);
|
||||||
}
|
}
|
||||||
else if (m_components.installer)
|
else if (m_removeComponents.installer)
|
||||||
{
|
{
|
||||||
QtConcurrent::run(this, &COperationDialog::deleteComponentsInstaller);
|
QtConcurrent::run(this, &COperationDialog::deleteComponentsInstaller);
|
||||||
}
|
}
|
||||||
|
@ -916,14 +958,14 @@ void COperationDialog::deleteComponentsServers()
|
||||||
m_currentOperationProgressFormat = tr("Deleting %1...");
|
m_currentOperationProgressFormat = tr("Deleting %1...");
|
||||||
|
|
||||||
emit prepare();
|
emit prepare();
|
||||||
emit init(0, m_components.servers.size());
|
emit init(0, m_removeComponents.servers.size());
|
||||||
emit start();
|
emit start();
|
||||||
|
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
foreach(const QString &serverId, m_components.servers)
|
foreach(const QString &serverId, m_removeComponents.servers)
|
||||||
{
|
{
|
||||||
if (operationShouldStop())
|
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();
|
emit done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -959,13 +1005,13 @@ void COperationDialog::deleteComponentsProfiles()
|
||||||
m_currentOperationProgressFormat = tr("Deleting profile %1...");
|
m_currentOperationProgressFormat = tr("Deleting profile %1...");
|
||||||
|
|
||||||
emit prepare();
|
emit prepare();
|
||||||
emit init(0, m_components.servers.size());
|
emit init(0, m_removeComponents.servers.size());
|
||||||
|
|
||||||
CConfigFile *config = CConfigFile::getInstance();
|
CConfigFile *config = CConfigFile::getInstance();
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
foreach(const QString &profileId, m_components.profiles)
|
foreach(const QString &profileId, m_removeComponents.profiles)
|
||||||
{
|
{
|
||||||
if (operationShouldStop())
|
if (operationShouldStop())
|
||||||
{
|
{
|
||||||
|
@ -990,14 +1036,17 @@ void COperationDialog::deleteComponentsProfiles()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: delete links
|
||||||
|
|
||||||
// delete profile
|
// delete profile
|
||||||
config->removeProfile(profileId);
|
config->removeProfile(profileId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// clear list of all profiles to uninstall
|
emit success(m_removeComponents.profiles.size());
|
||||||
m_components.profiles.clear();
|
|
||||||
|
// clear list of all profiles to uninstall
|
||||||
|
m_removeComponents.profiles.clear();
|
||||||
|
|
||||||
emit success(m_components.servers.size());
|
|
||||||
emit done();
|
emit done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ public:
|
||||||
virtual ~COperationDialog();
|
virtual ~COperationDialog();
|
||||||
|
|
||||||
void setOperation(OperationType operation);
|
void setOperation(OperationType operation);
|
||||||
void setUninstallComponents(const SUninstallComponents &components);
|
void setUninstallComponents(const SComponents &components);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onAbortClicked();
|
void onAbortClicked();
|
||||||
|
@ -106,10 +106,18 @@ protected:
|
||||||
bool createClientMenuShortcut(int profileIndex);
|
bool createClientMenuShortcut(int profileIndex);
|
||||||
bool createAddRemoveEntry();
|
bool createAddRemoveEntry();
|
||||||
bool deleteAddRemoveEntry();
|
bool deleteAddRemoveEntry();
|
||||||
|
|
||||||
|
void addComponentsServers();
|
||||||
void deleteComponentsServers();
|
void deleteComponentsServers();
|
||||||
|
|
||||||
|
void addComponentsProfiles();
|
||||||
void deleteComponentsProfiles();
|
void deleteComponentsProfiles();
|
||||||
|
|
||||||
|
void addComponentsInstaller();
|
||||||
void deleteComponentsInstaller();
|
void deleteComponentsInstaller();
|
||||||
|
|
||||||
|
void updateAddRemoveComponents();
|
||||||
|
|
||||||
// from CFilesCopier
|
// from CFilesCopier
|
||||||
virtual void operationPrepare();
|
virtual void operationPrepare();
|
||||||
virtual void operationInit(qint64 current, qint64 total);
|
virtual void operationInit(qint64 current, qint64 total);
|
||||||
|
@ -133,7 +141,8 @@ protected:
|
||||||
bool m_aborting;
|
bool m_aborting;
|
||||||
|
|
||||||
OperationType m_operation;
|
OperationType m_operation;
|
||||||
SUninstallComponents m_components;
|
SComponents m_addComponents;
|
||||||
|
SComponents m_removeComponents;
|
||||||
QString m_currentServerId;
|
QString m_currentServerId;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ void CUninstallDialog::showEvent(QShowEvent *event)
|
||||||
QtConcurrent::run(this, &CUninstallDialog::updateSizes);
|
QtConcurrent::run(this, &CUninstallDialog::updateSizes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CUninstallDialog::setSelectedComponents(const SUninstallComponents &components)
|
void CUninstallDialog::setSelectedComponents(const SComponents &components)
|
||||||
{
|
{
|
||||||
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(componentsTreeView->model());
|
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(componentsTreeView->model());
|
||||||
if (model == NULL) return;
|
if (model == NULL) return;
|
||||||
|
@ -150,9 +150,9 @@ void CUninstallDialog::setSelectedComponents(const SUninstallComponents &compone
|
||||||
if (item) item->setCheckState(components.installer ? Qt::Checked : Qt::Unchecked);
|
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<QStandardItemModel*>(componentsTreeView->model());
|
QStandardItemModel *model = qobject_cast<QStandardItemModel*>(componentsTreeView->model());
|
||||||
if (model == NULL) return res;
|
if (model == NULL) return res;
|
||||||
|
|
|
@ -35,8 +35,8 @@ public:
|
||||||
CUninstallDialog(QWidget *parent = NULL);
|
CUninstallDialog(QWidget *parent = NULL);
|
||||||
virtual ~CUninstallDialog();
|
virtual ~CUninstallDialog();
|
||||||
|
|
||||||
void setSelectedComponents(const SUninstallComponents &components);
|
void setSelectedComponents(const SComponents &components);
|
||||||
SUninstallComponents getSelectedCompenents() const;
|
SComponents getSelectedCompenents() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updateSize(int row, const QString &text);
|
void updateSize(int row, const QString &text);
|
||||||
|
|
Loading…
Reference in a new issue