Changed: Use SComponents for added or removed components

This commit is contained in:
kervala 2016-06-19 21:02:17 +02:00
parent de2dc037fd
commit 40073b4e57
7 changed files with 133 additions and 75 deletions

View file

@ -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)

View file

@ -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)

View file

@ -33,9 +33,9 @@ public:
virtual bool operationShouldStop() =0; virtual bool operationShouldStop() =0;
}; };
struct SUninstallComponents struct SComponents
{ {
SUninstallComponents() SComponents()
{ {
installer = true; installer = true;
} }

View file

@ -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();
} }

View file

@ -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;
}; };

View file

@ -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;

View file

@ -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);