Fixed: Use the right executable for client or default one

This commit is contained in:
kervala 2016-06-11 17:02:44 +02:00
parent ae361f28f7
commit 2080c59915
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"); 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; 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 QString CConfigFile::getSrcServerClientBNPFullPath() const

View file

@ -171,7 +171,9 @@ public:
QString getClientArch() const; 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; QString getSrcServerClientBNPFullPath() const;

View file

@ -80,16 +80,20 @@ void CMainWindow::onPlayClicked()
if (profileIndex < 0) return; 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; QStringList arguments;
arguments << "-p"; arguments << "-p";
arguments << QString::number(profileIndex); arguments << QString::number(profileIndex);
arguments << profile.arguments.split(' '); arguments << profile.arguments.split(' ');
bool started = QProcess::startDetached(profile.executable, arguments); bool started = QProcess::startDetached(executable, arguments);
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex); CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
} }
@ -100,19 +104,19 @@ void CMainWindow::onConfigureClicked()
if (profileIndex < 0) return; 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; QStringList arguments;
arguments << "-p"; arguments << "-p";
arguments << QString::number(profileIndex); arguments << QString::number(profileIndex);
bool started = QProcess::startDetached(server.configurationFilename, arguments); bool started = QProcess::startDetached(executable, arguments);
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex); CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
} }

View file

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

View file

@ -111,7 +111,7 @@ void CProfilesDialog::displayProfile(int index)
profileIdLabel->setText(profile.id); profileIdLabel->setText(profile.id);
nameEdit->setText(profile.name); nameEdit->setText(profile.name);
serverComboBox->setCurrentIndex(m_serversModel->getIndexFromServerID(profile.server)); serverComboBox->setCurrentIndex(m_serversModel->getIndexFromServerID(profile.server));
executablePathLabel->setText(QFileInfo(profile.executable).fileName()); executablePathLabel->setText(QFileInfo(executable).fileName());
argumentsEdit->setText(profile.arguments); argumentsEdit->setText(profile.arguments);
commentsEdit->setPlainText(profile.comments); commentsEdit->setPlainText(profile.comments);
directoryPathLabel->setText(profileDirectory); directoryPathLabel->setText(profileDirectory);
@ -208,19 +208,11 @@ void CProfilesDialog::updateExecutableVersion(int index)
// file empty, use default one // file empty, use default one
if (executable.isEmpty()) if (executable.isEmpty())
{ {
executable = CConfigFile::getInstance()->getInstallationDirectory() + "/" + profile.server + "/"; executable += CConfigFile::getInstance()->getServerClientFullPath(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
} }
// file doesn't exist // file doesn't exist
if (!QFile::exists(executable)) return; if (executable.isEmpty() || !QFile::exists(executable)) return;
// launch executable with --version argument // launch executable with --version argument
QProcess process; QProcess process;
@ -252,13 +244,28 @@ void CProfilesDialog::onExecutableBrowseClicked()
CProfile &profile = m_model->getProfiles()[m_currentProfileIndex]; 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); updateExecutableVersion(m_currentProfileIndex);
} }