Fixed: Use the right executable for client or default one

--HG--
branch : develop
This commit is contained in:
kervala 2016-06-11 17:02:44 +02:00
parent f5762eff59
commit a37752e213
5 changed files with 60 additions and 28 deletions

View file

@ -575,13 +575,33 @@ bool CConfigFile::shouldCreateDesktopShortcut() const
return profile.desktopShortcut && !QFile::exists(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk");
}
QString CConfigFile::getClientFullPath() const
QString CConfigFile::getProfileClientFullPath(int profileIndex) const
{
QString path = getProfile().executable;
const CProfile &profile = getProfile(profileIndex);
QString path = profile.executable;
if (!path.isEmpty()) return path;
return getInstallationDirectory() + "/" + getServer().id + "/" + getServer().clientFilename;
return getServerClientFullPath(profile.server);
}
QString CConfigFile::getServerClientFullPath(const QString &serverId) const
{
const CServer &server = getServer(serverId);
if (server.clientFilename.isEmpty()) return "";
return getInstallationDirectory() + "/" + server.id + "/" + server.clientFilename;
}
QString CConfigFile::getServerConfigurationFullPath(const QString &serverId) const
{
const CServer &server = getServer(serverId);
if (server.configurationFilename.isEmpty()) return "";
return getInstallationDirectory() + "/" + server.id + "/" + server.configurationFilename;
}
QString CConfigFile::getSrcServerClientBNPFullPath() const

View file

@ -171,7 +171,9 @@ public:
QString getClientArch() const;
QString getClientFullPath() const;
QString getProfileClientFullPath(int profileIndex = -1) const;
QString getServerClientFullPath(const QString &serverId = "") const;
QString getServerConfigurationFullPath(const QString &serverId = "") const;
QString getSrcServerClientBNPFullPath() const;

View file

@ -80,16 +80,20 @@ void CMainWindow::onPlayClicked()
if (profileIndex < 0) return;
CProfile profile = CConfigFile::getInstance()->getProfile(profileIndex);
CConfigFile *config = CConfigFile::getInstance();
if (profile.executable.isEmpty()) return;
const CProfile &profile = config->getProfile(profileIndex);
QString executable = config->getProfileClientFullPath(profileIndex);
if (executable.isEmpty() || !QFile::exists(executable)) return;
QStringList arguments;
arguments << "-p";
arguments << QString::number(profileIndex);
arguments << profile.arguments.split(' ');
bool started = QProcess::startDetached(profile.executable, arguments);
bool started = QProcess::startDetached(executable, arguments);
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
}
@ -100,19 +104,19 @@ void CMainWindow::onConfigureClicked()
if (profileIndex < 0) return;
CProfile profile = CConfigFile::getInstance()->getProfile(profileIndex);
CConfigFile *config = CConfigFile::getInstance();
if (profile.server.isEmpty()) return;
const CProfile &profile = config->getProfile(profileIndex);
CServer server = CConfigFile::getInstance()->getServer(profile.server);
QString executable = config->getServerConfigurationFullPath(profile.server);
if (server.configurationFilename.isEmpty()) return;
if (executable.isEmpty() || !QFile::exists(executable)) return;
QStringList arguments;
arguments << "-p";
arguments << QString::number(profileIndex);
bool started = QProcess::startDetached(server.configurationFilename, arguments);
bool started = QProcess::startDetached(executable, arguments);
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
}

View file

@ -590,7 +590,6 @@ bool COperationDialog::createDefaultProfile()
CProfile profile;
profile.id = "0";
profile.executable = config->getClientFullPath();
profile.name = QString("Ryzom (%1)").arg(server.name);
profile.server = server.id;
profile.comments = "Default profile created by Ryzom Installer";

View file

@ -111,7 +111,7 @@ void CProfilesDialog::displayProfile(int index)
profileIdLabel->setText(profile.id);
nameEdit->setText(profile.name);
serverComboBox->setCurrentIndex(m_serversModel->getIndexFromServerID(profile.server));
executablePathLabel->setText(QFileInfo(profile.executable).fileName());
executablePathLabel->setText(QFileInfo(executable).fileName());
argumentsEdit->setText(profile.arguments);
commentsEdit->setPlainText(profile.comments);
directoryPathLabel->setText(profileDirectory);
@ -208,19 +208,11 @@ void CProfilesDialog::updateExecutableVersion(int index)
// file empty, use default one
if (executable.isEmpty())
{
executable = CConfigFile::getInstance()->getInstallationDirectory() + "/" + profile.server + "/";
#if defined(Q_OS_WIN32)
executable += "ryzom_client_r.exe";
#elif defined(Q_OS_APPLE)
executable += "Ryzom.app/Contents/MacOS/Ryzom";
#else
executable += "ryzom_client";
#endif
executable += CConfigFile::getInstance()->getServerClientFullPath(profile.server);
}
// file doesn't exist
if (!QFile::exists(executable)) return;
if (executable.isEmpty() || !QFile::exists(executable)) return;
// launch executable with --version argument
QProcess process;
@ -252,13 +244,28 @@ void CProfilesDialog::onExecutableBrowseClicked()
CProfile &profile = m_model->getProfiles()[m_currentProfileIndex];
QString file = QFileDialog::getOpenFileName(this, tr("Please choose Ryzom client executable to launch"), profile.executable, tr("Executables (*.exe)"));
QString executable = profile.executable;
if (file.isEmpty()) return;
if (executable.isEmpty())
{
executable = CConfigFile::getInstance()->getServerClientFullPath(profile.server);
}
profile.executable = file;
executable = QFileDialog::getOpenFileName(this, tr("Please choose Ryzom client executable to launch"), executable, tr("Executables (*.exe)"));
executablePathLabel->setText(QFileInfo(profile.executable).fileName());
if (executable.isEmpty()) return;
// don't need to save the new executable if the same as default one
if (executable == CConfigFile::getInstance()->getServerClientFullPath(profile.server))
{
profile.executable.clear();
}
else
{
profile.executable = executable;
}
executablePathLabel->setText(QFileInfo(executable).fileName());
updateExecutableVersion(m_currentProfileIndex);
}