mirror of
https://port.numenaute.org/aleajactaest/khanat-opennel-code.git
synced 2024-11-22 23:26:15 +00:00
Merge with develop
This commit is contained in:
parent
1bff654c7b
commit
f54109d279
14 changed files with 279 additions and 99 deletions
|
@ -1784,7 +1784,9 @@ std::string CPath::getApplicationDirectory(const std::string &appName, bool loca
|
|||
std::string CFileContainer::getApplicationDirectory(const std::string &appName, bool local)
|
||||
{
|
||||
static std::string appPaths[2];
|
||||
|
||||
std::string &appPath = appPaths[local ? 1 : 0];
|
||||
|
||||
if (appPath.empty())
|
||||
{
|
||||
#ifdef NL_OS_WINDOWS
|
||||
|
@ -1800,26 +1802,21 @@ std::string CFileContainer::getApplicationDirectory(const std::string &appName,
|
|||
SHGetSpecialFolderPathW(NULL, buffer, CSIDL_APPDATA, TRUE);
|
||||
}
|
||||
appPath = CPath::standardizePath(wideToUtf8(buffer));
|
||||
#elif defined(NL_OS_MAC)
|
||||
appPath = CPath::standardizePath(getenv("HOME"));
|
||||
appPath += "/Library/Application Support/";
|
||||
#else
|
||||
appPath = CPath::standardizePath(getenv("HOME"));
|
||||
// get user home directory from HOME environment variable
|
||||
const char* homePath = getenv("HOME");
|
||||
appPath = CPath::standardizePath(homePath ? homePath : ".");
|
||||
|
||||
#if defined(NL_OS_MAC)
|
||||
appPath += "Library/Application Support/";
|
||||
#else
|
||||
// recommended for applications data that are owned by user
|
||||
appPath += ".local/share/";
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string path = appPath;
|
||||
#ifdef NL_OS_WINDOWS
|
||||
if (!appName.empty())
|
||||
path = CPath::standardizePath(path + appName);
|
||||
#elif defined(NL_OS_MAC)
|
||||
path = CPath::standardizePath(path + appName);
|
||||
#else
|
||||
if (!appName.empty())
|
||||
path = CPath::standardizePath(path + "." + toLower(appName));
|
||||
#endif
|
||||
|
||||
return path;
|
||||
return CPath::standardizePath(appPath + appName);
|
||||
}
|
||||
|
||||
std::string CPath::getTemporaryDirectory()
|
||||
|
|
|
@ -45,7 +45,7 @@ CConfigFile::CConfigFile(QObject *parent):QObject(parent), m_defaultServerIndex(
|
|||
|
||||
m_language = QLocale::system().name().left(2); // only keep language ISO 639 code
|
||||
m_defaultConfigPath = QApplication::applicationDirPath() + "/installer.ini";
|
||||
m_configPath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/installer.ini";
|
||||
m_configPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/installer.ini";
|
||||
}
|
||||
|
||||
CConfigFile::~CConfigFile()
|
||||
|
@ -608,9 +608,24 @@ bool CConfigFile::foundTemporaryFiles(const QString &directory) const
|
|||
|
||||
bool CConfigFile::shouldCreateDesktopShortcut() const
|
||||
{
|
||||
#ifdef Q_OS_WIN32
|
||||
const CProfile &profile = getProfile();
|
||||
|
||||
return profile.desktopShortcut && !QFile::exists(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk");
|
||||
return profile.desktopShortcut && !NLMISC::CFile::isExists(qToUtf8(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk"));
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CConfigFile::shouldCreateMenuShortcut() const
|
||||
{
|
||||
#ifdef Q_OS_WIN32
|
||||
const CProfile &profile = getProfile();
|
||||
|
||||
return profile.menuShortcut && !NLMISC::CFile::isExists(qToUtf8(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + "/Ryzom/Ryzom.lnk"));
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
QString CConfigFile::getProfileClientFullPath(int profileIndex) const
|
||||
|
@ -704,7 +719,7 @@ OperationStep CConfigFile::getInstallNextStep() const
|
|||
|
||||
// downloaded files are kept in server directory
|
||||
QString dataFile = getInstallationDirectory() + "/" + server.dataDownloadFilename;
|
||||
QString clientFile = getInstallationDirectory() + "/" + server.clientDownloadFilename;
|
||||
QString clientFile = getInstallationDirectory() + "/" + expandVariables(server.clientDownloadFilename);
|
||||
|
||||
// data are not copied
|
||||
if (!areRyzomDataInstalledIn(serverDirectory))
|
||||
|
@ -760,7 +775,7 @@ OperationStep CConfigFile::getInstallNextStep() const
|
|||
return ExtractBnpClient;
|
||||
}
|
||||
|
||||
QString clientFile = getInstallationDirectory() + "/" + server.clientDownloadFilename;
|
||||
QString clientFile = getInstallationDirectory() + "/" + expandVariables(server.clientDownloadFilename);
|
||||
|
||||
// when file is not finished, it has .part extension
|
||||
if (!QFile::exists(clientFile))
|
||||
|
@ -799,8 +814,12 @@ OperationStep CConfigFile::getInstallNextStep() const
|
|||
|
||||
if (shouldCreateDesktopShortcut())
|
||||
{
|
||||
// TODO: check they point to getClientFullPath()
|
||||
return CreateShortcuts;
|
||||
return CreateDesktopShortcut;
|
||||
}
|
||||
|
||||
if (shouldCreateMenuShortcut())
|
||||
{
|
||||
return CreateMenuShortcut;
|
||||
}
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
|
|
|
@ -153,6 +153,7 @@ public:
|
|||
|
||||
bool foundTemporaryFiles(const QString &directory) const;
|
||||
bool shouldCreateDesktopShortcut() const;
|
||||
bool shouldCreateMenuShortcut() const;
|
||||
|
||||
// installation choices
|
||||
bool use64BitsClient() const;
|
||||
|
|
|
@ -147,6 +147,8 @@ void CDownloader::getFileHead()
|
|||
{
|
||||
// file is already downloaded
|
||||
if (m_listener) m_listener->operationSuccess(m_size);
|
||||
|
||||
emit downloadDone();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -339,6 +341,10 @@ void CDownloader::onHeadFinished()
|
|||
downloadFile();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
emit downloadPrepared();
|
||||
}
|
||||
}
|
||||
|
||||
void CDownloader::onDownloadFinished()
|
||||
|
@ -357,6 +363,8 @@ void CDownloader::onDownloadFinished()
|
|||
bool ok = NLMISC::CFile::setFileModificationDate(m_fullPath.toUtf8().constData(), m_lastModified.toTime_t());
|
||||
|
||||
if (m_listener) m_listener->operationSuccess(m_size);
|
||||
|
||||
emit downloadDone();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -380,7 +388,7 @@ void CDownloader::onDownloadProgress(qint64 current, qint64 total)
|
|||
|
||||
if (!m_listener) return;
|
||||
|
||||
m_listener->operationProgress(m_offset + current, ""); // TODO: put file
|
||||
m_listener->operationProgress(m_offset + current, m_url);
|
||||
|
||||
// abort download
|
||||
if (m_listener->operationShouldStop() && m_reply) m_reply->abort();
|
||||
|
|
|
@ -42,7 +42,11 @@ public:
|
|||
|
||||
bool isDownloading() const { return m_file != NULL; }
|
||||
|
||||
QString getFileFullPath() const { return m_fullPath; }
|
||||
|
||||
signals:
|
||||
void downloadPrepared();
|
||||
void downloadDone();
|
||||
void htmlPageContent(const QString &html);
|
||||
|
||||
private slots:
|
||||
|
|
|
@ -92,6 +92,7 @@ void CMainWindow::onPlayClicked()
|
|||
CConfigFile *config = CConfigFile::getInstance();
|
||||
|
||||
const CProfile &profile = config->getProfile(profileIndex);
|
||||
const CServer &server = config->getServer(profile.server);
|
||||
|
||||
// get full path of client executable
|
||||
QString executable = config->getProfileClientFullPath(profileIndex);
|
||||
|
@ -104,8 +105,8 @@ void CMainWindow::onPlayClicked()
|
|||
arguments << profile.id;
|
||||
arguments << profile.arguments.split(' ');
|
||||
|
||||
// launch the game with all arguments
|
||||
bool started = QProcess::startDetached(executable, arguments);
|
||||
// launch the game with all arguments and from server root directory (to use right data)
|
||||
bool started = QProcess::startDetached(executable, arguments, server.getDirectory());
|
||||
|
||||
// define this profile as default one
|
||||
CConfigFile::getInstance()->setDefaultProfileIndex(profileIndex);
|
||||
|
|
|
@ -62,7 +62,8 @@ enum OperationStep
|
|||
CopyInstaller,
|
||||
UninstallOldClient,
|
||||
CreateProfile,
|
||||
CreateShortcuts,
|
||||
CreateDesktopShortcut,
|
||||
CreateMenuShortcut,
|
||||
CreateAddRemoveEntry,
|
||||
Done
|
||||
};
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "configfile.h"
|
||||
#include "config.h"
|
||||
#include "profilesmodel.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "filescopier.h"
|
||||
#include "filesextractor.h"
|
||||
|
@ -54,6 +55,9 @@ COperationDialog::COperationDialog(QWidget *parent):QDialog(parent), m_aborting(
|
|||
// downloader
|
||||
m_downloader = new CDownloader(this, this);
|
||||
|
||||
connect(m_downloader, SIGNAL(downloadPrepared()), SLOT(onDownloadPrepared()));
|
||||
connect(m_downloader, SIGNAL(downloadDone()), SLOT(onDownloadDone()));
|
||||
|
||||
connect(operationButtonBox, SIGNAL(clicked(QAbstractButton*)), SLOT(onAbortClicked()));
|
||||
|
||||
// operations
|
||||
|
@ -164,8 +168,12 @@ void COperationDialog::processInstallNextStep()
|
|||
createDefaultProfile();
|
||||
break;
|
||||
|
||||
case CreateShortcuts:
|
||||
createDefaultShortcuts();
|
||||
case CreateDesktopShortcut:
|
||||
createClientDesktopShortcut(0);
|
||||
break;
|
||||
|
||||
case CreateMenuShortcut:
|
||||
createClientMenuShortcut(0);
|
||||
break;
|
||||
|
||||
case CreateAddRemoveEntry:
|
||||
|
@ -278,7 +286,7 @@ void COperationDialog::processUpdateProfilesNextStep()
|
|||
}
|
||||
else
|
||||
{
|
||||
QString clientFile = config->getInstallationDirectory() + "/" + server.clientDownloadFilename;
|
||||
QString clientFile = config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -343,6 +351,19 @@ void COperationDialog::onAbortClicked()
|
|||
m_aborting = true;
|
||||
}
|
||||
|
||||
void COperationDialog::onDownloadPrepared()
|
||||
{
|
||||
// actually download the file
|
||||
m_downloader->getFile();
|
||||
}
|
||||
|
||||
void COperationDialog::onDownloadDone()
|
||||
{
|
||||
renamePartFile();
|
||||
|
||||
emit done();
|
||||
}
|
||||
|
||||
void COperationDialog::onProgressPrepare()
|
||||
{
|
||||
operationProgressBar->setFormat(tr("%p% (%v/%m KiB)"));
|
||||
|
@ -419,15 +440,33 @@ void COperationDialog::downloadData()
|
|||
|
||||
const CServer &server = config->getServer(m_currentServerId);
|
||||
|
||||
m_currentOperation = QApplication::tr("Download data required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = QApplication::tr("Downloading %1...");
|
||||
m_currentOperation = tr("Download data required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = tr("Downloading %1...");
|
||||
|
||||
m_downloader->prepareFile(config->expandVariables(server.dataDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.dataDownloadFilename) + ".part");
|
||||
}
|
||||
|
||||
void COperationDialog::extractDownloadedData()
|
||||
{
|
||||
// TODO: implement
|
||||
CConfigFile *config = CConfigFile::getInstance();
|
||||
|
||||
const CServer &server = config->getServer(m_currentServerId);
|
||||
|
||||
m_currentOperation = tr("Extract data files required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = tr("Extracting %1...");
|
||||
|
||||
CFilesExtractor extractor(this);
|
||||
extractor.setSourceFile(config->getInstallationDirectory() + "/" + server.dataDownloadFilename);
|
||||
extractor.setDestinationDirectory(server.getDirectory());
|
||||
|
||||
if (extractor.exec())
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
emit done();
|
||||
}
|
||||
|
||||
void COperationDialog::downloadClient()
|
||||
|
@ -436,8 +475,8 @@ void COperationDialog::downloadClient()
|
|||
|
||||
const CServer &server = config->getServer(m_currentServerId);
|
||||
|
||||
m_currentOperation = QApplication::tr("Download client required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = QApplication::tr("Downloading %1...");
|
||||
m_currentOperation = tr("Download client required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = tr("Downloading %1...");
|
||||
|
||||
m_downloader->prepareFile(config->expandVariables(server.clientDownloadUrl), config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename) + ".part");
|
||||
}
|
||||
|
@ -448,11 +487,11 @@ void COperationDialog::extractDownloadedClient()
|
|||
|
||||
const CServer &server = config->getServer(m_currentServerId);
|
||||
|
||||
m_currentOperation = QApplication::tr("Extract data files required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = QApplication::tr("Extracting %1...");
|
||||
m_currentOperation = tr("Extract client files required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = tr("Extracting %1...");
|
||||
|
||||
CFilesExtractor extractor(this);
|
||||
extractor.setSourceFile(config->getInstallationDirectory() + "/" + server.clientDownloadFilename);
|
||||
extractor.setSourceFile(config->getInstallationDirectory() + "/" + config->expandVariables(server.clientDownloadFilename));
|
||||
extractor.setDestinationDirectory(server.getDirectory());
|
||||
|
||||
if (extractor.exec())
|
||||
|
@ -472,8 +511,8 @@ void COperationDialog::copyDataFiles()
|
|||
// default server
|
||||
const CServer &server = config->getServer(m_currentServerId);
|
||||
|
||||
m_currentOperation = QApplication::tr("Copy data files required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = QApplication::tr("Copying %1...");
|
||||
m_currentOperation = tr("Copy data files required by server %1").arg(server.name);
|
||||
m_currentOperationProgressFormat = tr("Copying %1...");
|
||||
|
||||
QStringList serverFiles;
|
||||
serverFiles << "cfg";
|
||||
|
@ -507,8 +546,8 @@ void COperationDialog::copyProfileFiles()
|
|||
// default profile
|
||||
const CProfile &profile = config->getProfile();
|
||||
|
||||
m_currentOperation = QApplication::tr("Copy old profile to new location");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Copying %1...");
|
||||
m_currentOperation = tr("Copy old profile to new location");
|
||||
m_currentOperationProgressFormat = tr("Copying %1...");
|
||||
|
||||
QStringList profileFiles;
|
||||
profileFiles << "cache";
|
||||
|
@ -540,8 +579,8 @@ void COperationDialog::extractBnpClient()
|
|||
// default server
|
||||
const CServer &server = config->getServer();
|
||||
|
||||
m_currentOperation = QApplication::tr("Extract client to new location");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Extracting %1...");
|
||||
m_currentOperation = tr("Extract client to new location");
|
||||
m_currentOperationProgressFormat = tr("Extracting %1...");
|
||||
|
||||
QString destinationDirectory = server.getDirectory();
|
||||
|
||||
|
@ -602,8 +641,8 @@ void COperationDialog::copyInstaller()
|
|||
// default server
|
||||
const CServer &server = config->getServer();
|
||||
|
||||
m_currentOperation = QApplication::tr("Copy installer to new location");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Copying %1...");
|
||||
m_currentOperation = tr("Copy installer to new location");
|
||||
m_currentOperationProgressFormat = tr("Copying %1...");
|
||||
|
||||
QString destinationDirectory = config->getInstallationDirectory();
|
||||
|
||||
|
@ -624,7 +663,7 @@ void COperationDialog::copyInstaller()
|
|||
CFilesCopier copier(this);
|
||||
copier.setIncludeFilter(filter);
|
||||
copier.addFile(oldInstallerFullPath);
|
||||
copier.setSourceDirectory(config->getSrcServerDirectory());
|
||||
copier.setSourceDirectory(config->getSrcServerDirectory().isEmpty() ? QApplication::applicationDirPath():config->getSrcServerDirectory());
|
||||
copier.setDestinationDirectory(config->getInstallationDirectory());
|
||||
copier.exec();
|
||||
|
||||
|
@ -639,6 +678,8 @@ void COperationDialog::copyInstaller()
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: create shortcuts for installer
|
||||
|
||||
emit done();
|
||||
}
|
||||
|
||||
|
@ -687,8 +728,8 @@ void COperationDialog::cleanFiles()
|
|||
// default server
|
||||
const CServer &server = config->getServer();
|
||||
|
||||
m_currentOperation = QApplication::tr("Clean obsolete files");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Deleting %1...");
|
||||
m_currentOperation = tr("Clean obsolete files");
|
||||
m_currentOperationProgressFormat = tr("Deleting %1...");
|
||||
|
||||
CFilesCleaner cleaner(this);
|
||||
cleaner.setDirectory(server.getDirectory());
|
||||
|
@ -703,7 +744,7 @@ bool COperationDialog::createDefaultProfile()
|
|||
|
||||
CServer server = config->getServer();
|
||||
|
||||
m_currentOperation = QApplication::tr("Create default profile");
|
||||
m_currentOperation = tr("Create default profile");
|
||||
|
||||
CProfile profile;
|
||||
|
||||
|
@ -711,14 +752,42 @@ bool COperationDialog::createDefaultProfile()
|
|||
profile.name = QString("Ryzom (%1)").arg(server.name);
|
||||
profile.server = server.id;
|
||||
profile.comments = "Default profile created by Ryzom Installer";
|
||||
profile.desktopShortcut = false;
|
||||
profile.menuShortcut = false;
|
||||
|
||||
#ifdef Q_OS_WIN32
|
||||
// C:\Users\Public\Desktop
|
||||
profile.desktopShortcut = QFile::exists(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk");
|
||||
#endif
|
||||
QStringList paths;
|
||||
|
||||
// TODO
|
||||
// profile.menuShortcut
|
||||
// desktop
|
||||
|
||||
// Windows XP
|
||||
paths << "C:/Documents and Settings/All Users/Desktop";
|
||||
// since Windows Vista
|
||||
paths << "C:/Users/Public/Desktop";
|
||||
// new location
|
||||
paths << QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
|
||||
|
||||
foreach(const QString &path, paths)
|
||||
{
|
||||
if (QFile::exists(path + "/Ryzom.lnk")) profile.desktopShortcut = true;
|
||||
}
|
||||
|
||||
paths.clear();
|
||||
|
||||
// start menu
|
||||
|
||||
// Windows XP
|
||||
paths << "C:/Documents and Settings/All Users/Start Menu/Programs";
|
||||
// since Windows Vista
|
||||
paths << "C:/ProgramData/Microsoft/Windows/Start Menu/Programs";
|
||||
// new location
|
||||
paths << QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation);
|
||||
|
||||
foreach(const QString &path, paths)
|
||||
{
|
||||
if (QFile::exists(path + "/Ryzom/Ryzom.lnk")) profile.menuShortcut = true;
|
||||
}
|
||||
#endif
|
||||
|
||||
config->addProfile(profile);
|
||||
config->save();
|
||||
|
@ -728,11 +797,51 @@ bool COperationDialog::createDefaultProfile()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool COperationDialog::createDefaultShortcuts()
|
||||
bool COperationDialog::createClientDesktopShortcut(int profileIndex)
|
||||
{
|
||||
CConfigFile *config = CConfigFile::getInstance();
|
||||
|
||||
CServer server = config->getServer();
|
||||
const CProfile &profile = config->getProfile(profileIndex);
|
||||
const CServer &server = config->getServer(profile.server);
|
||||
|
||||
m_currentOperation = tr("Create desktop shortcut for profile %1").arg(profile.id);
|
||||
|
||||
#ifdef Q_OS_WIN32
|
||||
if (profile.desktopShortcut)
|
||||
{
|
||||
QString shortcut = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation) + "/Ryzom.lnk";
|
||||
CreateLink(config->getProfileClientFullPath(), shortcut, QString("--profile %1 %2").arg(profile.id).arg(profile.arguments), server.getDirectory(), "Default Ryzom client");
|
||||
}
|
||||
#endif
|
||||
|
||||
emit done();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool COperationDialog::createClientMenuShortcut(int profileIndex)
|
||||
{
|
||||
CConfigFile *config = CConfigFile::getInstance();
|
||||
|
||||
const CProfile &profile = config->getProfile(profileIndex);
|
||||
const CServer &server = config->getServer(profile.server);
|
||||
|
||||
m_currentOperation = tr("Create menu shortcut for profile %1").arg(profile.id);
|
||||
|
||||
#ifdef Q_OS_WIN32
|
||||
if (profile.menuShortcut)
|
||||
{
|
||||
QString path = QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation) + "/Ryzom";
|
||||
|
||||
QDir dir;
|
||||
|
||||
if (dir.mkpath(path))
|
||||
{
|
||||
QString shortcut = path + "/Ryzom.lnk";
|
||||
CreateLink(config->getProfileClientFullPath(), shortcut, QString("--profile %1 %2").arg(profile.id).arg(profile.arguments), server.getDirectory(), "Default Ryzom client");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
emit done();
|
||||
|
||||
|
@ -803,8 +912,8 @@ bool COperationDialog::deleteAddRemoveEntry()
|
|||
|
||||
void COperationDialog::deleteComponentsServers()
|
||||
{
|
||||
m_currentOperation = QApplication::tr("Delete client files");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Deleting %1...");
|
||||
m_currentOperation = tr("Delete client files");
|
||||
m_currentOperationProgressFormat = tr("Deleting %1...");
|
||||
|
||||
emit prepare();
|
||||
emit init(0, m_components.servers.size());
|
||||
|
@ -846,8 +955,8 @@ void COperationDialog::deleteComponentsServers()
|
|||
|
||||
void COperationDialog::deleteComponentsProfiles()
|
||||
{
|
||||
m_currentOperation = QApplication::tr("Delete profiles");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Deleting profile %1...");
|
||||
m_currentOperation = tr("Delete profiles");
|
||||
m_currentOperationProgressFormat = tr("Deleting profile %1...");
|
||||
|
||||
emit prepare();
|
||||
emit init(0, m_components.servers.size());
|
||||
|
@ -894,8 +1003,8 @@ void COperationDialog::deleteComponentsProfiles()
|
|||
|
||||
void COperationDialog::deleteComponentsInstaller()
|
||||
{
|
||||
m_currentOperation = QApplication::tr("Delete installer");
|
||||
m_currentOperationProgressFormat = QApplication::tr("Deleting %1...");
|
||||
m_currentOperation = tr("Delete installer");
|
||||
m_currentOperationProgressFormat = tr("Deleting %1...");
|
||||
|
||||
CConfigFile *config = CConfigFile::getInstance();
|
||||
|
||||
|
@ -948,3 +1057,16 @@ bool COperationDialog::operationShouldStop()
|
|||
|
||||
return m_aborting;
|
||||
}
|
||||
|
||||
void COperationDialog::renamePartFile()
|
||||
{
|
||||
QString partFile = m_downloader->getFileFullPath();
|
||||
|
||||
QString finalFile = partFile;
|
||||
finalFile.remove(".part");
|
||||
|
||||
if (partFile != finalFile)
|
||||
{
|
||||
QFile::rename(partFile, finalFile);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,6 +44,9 @@ public:
|
|||
public slots:
|
||||
void onAbortClicked();
|
||||
|
||||
void onDownloadPrepared();
|
||||
void onDownloadDone();
|
||||
|
||||
void onProgressPrepare();
|
||||
void onProgressInit(qint64 current, qint64 total);
|
||||
void onProgressStart();
|
||||
|
@ -99,7 +102,8 @@ protected:
|
|||
void copyInstaller();
|
||||
void uninstallOldClient();
|
||||
bool createDefaultProfile();
|
||||
bool createDefaultShortcuts();
|
||||
bool createClientDesktopShortcut(int profileIndex);
|
||||
bool createClientMenuShortcut(int profileIndex);
|
||||
bool createAddRemoveEntry();
|
||||
bool deleteAddRemoveEntry();
|
||||
void deleteComponentsServers();
|
||||
|
@ -117,6 +121,8 @@ protected:
|
|||
|
||||
virtual bool operationShouldStop();
|
||||
|
||||
void renamePartFile();
|
||||
|
||||
QWinTaskbarButton *m_button;
|
||||
CDownloader *m_downloader;
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ CProfilesDialog::CProfilesDialog(QWidget *parent):QDialog(parent), m_currentProf
|
|||
connect(addButton, SIGNAL(clicked()), SLOT(onAddProfile()));
|
||||
connect(deleteButton, SIGNAL(clicked()), SLOT(onDeleteProfile()));
|
||||
connect(profilesListView, SIGNAL(clicked(QModelIndex)), SLOT(onProfileClicked(QModelIndex)));
|
||||
connect(executableDefaultButton, SIGNAL(clicked()), SLOT(onExecutableDefaultClicked()));
|
||||
connect(executableBrowseButton, SIGNAL(clicked()), SLOT(onExecutableBrowseClicked()));
|
||||
connect(directoryButton, SIGNAL(clicked()), SLOT(onProfileDirectoryClicked()));
|
||||
|
||||
|
@ -241,10 +242,21 @@ void CProfilesDialog::updateExecutableVersion(int index)
|
|||
|
||||
if (reg.indexIn(versionString) > -1)
|
||||
{
|
||||
executableVersionLabel->setText(reg.cap(2));
|
||||
executablePathLabel->setText(QString("%1 (%2)").arg(QFileInfo(executable).fileName()).arg(reg.cap(2)));
|
||||
}
|
||||
}
|
||||
|
||||
void CProfilesDialog::onExecutableDefaultClicked()
|
||||
{
|
||||
if (m_currentProfileIndex < 0) return;
|
||||
|
||||
CProfile &profile = m_model->getProfiles()[m_currentProfileIndex];
|
||||
|
||||
profile.executable.clear();
|
||||
|
||||
updateExecutableVersion(m_currentProfileIndex);
|
||||
}
|
||||
|
||||
void CProfilesDialog::onExecutableBrowseClicked()
|
||||
{
|
||||
if (m_currentProfileIndex < 0) return;
|
||||
|
|
|
@ -51,6 +51,7 @@ private slots:
|
|||
|
||||
void updateExecutableVersion(int index);
|
||||
|
||||
void onExecutableDefaultClicked();
|
||||
void onExecutableBrowseClicked();
|
||||
|
||||
private:
|
||||
|
|
|
@ -111,22 +111,22 @@ wchar_t* qToWide(const QString &str)
|
|||
// Shell link, stored in the Comment field of the link
|
||||
// properties.
|
||||
|
||||
HRESULT CreateLink(const QString &pathObj, const QString &pathLink, const QString &desc)
|
||||
bool CreateLink(const QString &pathObj, const QString &pathLink, const QString &arguments, const QString &workingDir, const QString &desc)
|
||||
{
|
||||
IShellLinkW* psl;
|
||||
|
||||
// Get a pointer to the IShellLink interface. It is assumed that CoInitialize
|
||||
// has already been called.
|
||||
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl);
|
||||
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl);
|
||||
if (SUCCEEDED(hres))
|
||||
{
|
||||
IPersistFile* ppf;
|
||||
|
||||
// Set the path to the shortcut target and add the description.
|
||||
psl->SetPath(qToWide(pathObj));
|
||||
psl->SetPath(qToWide(QDir::toNativeSeparators(pathObj)));
|
||||
psl->SetDescription(qToWide(desc));
|
||||
psl->SetArguments(L"--profil ");
|
||||
psl->SetWorkingDirectory(L"");
|
||||
psl->SetArguments(qToWide(arguments));
|
||||
psl->SetWorkingDirectory(qToWide(QDir::toNativeSeparators(workingDir)));
|
||||
|
||||
// Query IShellLink for the IPersistFile interface, used for saving the
|
||||
// shortcut in persistent storage.
|
||||
|
@ -138,12 +138,12 @@ HRESULT CreateLink(const QString &pathObj, const QString &pathLink, const QStrin
|
|||
// for success.
|
||||
|
||||
// Save the link by calling IPersistFile::Save.
|
||||
hres = ppf->Save(qToWide(pathLink), TRUE);
|
||||
hres = ppf->Save(qToWide(QDir::toNativeSeparators(pathLink)), TRUE);
|
||||
ppf->Release();
|
||||
}
|
||||
psl->Release();
|
||||
}
|
||||
return hres;
|
||||
return SUCCEEDED(hres);
|
||||
}
|
||||
|
||||
// ResolveIt - Uses the Shell's IShellLink and IPersistFile interfaces
|
||||
|
@ -163,7 +163,7 @@ HRESULT CreateLink(const QString &pathObj, const QString &pathLink, const QStrin
|
|||
// Shell link, stored in the Comment field of the link
|
||||
// properties.
|
||||
|
||||
HRESULT ResolveIt(HWND hwnd, const QString &linkFile, QString &path)
|
||||
bool ResolveLink(const QWidget &window, const QString &linkFile, QString &path)
|
||||
{
|
||||
IShellLinkW* psl;
|
||||
WIN32_FIND_DATAW wfd;
|
||||
|
@ -186,12 +186,12 @@ HRESULT ResolveIt(HWND hwnd, const QString &linkFile, QString &path)
|
|||
// for success.
|
||||
|
||||
// Load the shortcut.
|
||||
hres = ppf->Load(qToWide(linkFile), STGM_READ);
|
||||
hres = ppf->Load(qToWide(QDir::toNativeSeparators(linkFile)), STGM_READ);
|
||||
|
||||
if (SUCCEEDED(hres))
|
||||
{
|
||||
// Resolve the link.
|
||||
hres = psl->Resolve(hwnd, 0);
|
||||
hres = psl->Resolve((HWND)window.winId(), 0);
|
||||
|
||||
if (SUCCEEDED(hres))
|
||||
{
|
||||
|
@ -210,7 +210,7 @@ HRESULT ResolveIt(HWND hwnd, const QString &linkFile, QString &path)
|
|||
if (SUCCEEDED(hres))
|
||||
{
|
||||
// Handle success
|
||||
path = qFromWide(szGotPath);
|
||||
path = QDir::fromNativeSeparators(qFromWide(szGotPath));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -227,7 +227,19 @@ HRESULT ResolveIt(HWND hwnd, const QString &linkFile, QString &path)
|
|||
psl->Release();
|
||||
}
|
||||
|
||||
return hres;
|
||||
return SUCCEEDED(hres);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
bool CreateLink(const QString &pathObj, const QString &pathLink, const QString &arguments, const QString &workingDir, const QString &desc)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ResolveLink(const QWidget &window, const QString &pathLink, QString &pathObj)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -48,4 +48,7 @@ QString qFromWide(const wchar_t *str);
|
|||
|
||||
wchar_t* qToWide(const QString &str);
|
||||
|
||||
bool CreateLink(const QString &pathObj, const QString &pathLink, const QString &arguments, const QString &workingDir, const QString &desc);
|
||||
bool ResolveLink(const QWidget &window, const QString &pathLink, QString &pathObj);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>583</width>
|
||||
<height>348</height>
|
||||
<height>329</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -119,7 +119,7 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<layout class="QHBoxLayout" name="executableLayout" stretch="1,0">
|
||||
<layout class="QHBoxLayout" name="executableLayout" stretch="1,0,0">
|
||||
<item>
|
||||
<widget class="QLabel" name="executablePathLabel">
|
||||
<property name="text">
|
||||
|
@ -127,6 +127,13 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="executableDefaultButton">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="executableBrowseButton">
|
||||
<property name="text">
|
||||
|
@ -137,37 +144,23 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="clientVersionLabel">
|
||||
<property name="text">
|
||||
<string>Client version:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="executableVersionLabel">
|
||||
<property name="text">
|
||||
<string>FV 3.0.0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="argumentsLabel">
|
||||
<property name="text">
|
||||
<string>Arguments:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QLineEdit" name="argumentsEdit"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="commentsLabel">
|
||||
<property name="text">
|
||||
<string>Comments:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<item row="5" column="1">
|
||||
<widget class="QPlainTextEdit" name="commentsEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
||||
|
@ -177,14 +170,14 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="directoryLabel">
|
||||
<property name="text">
|
||||
<string>Directory:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="6" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0">
|
||||
<item>
|
||||
<widget class="QLabel" name="directoryPathLabel">
|
||||
|
@ -202,14 +195,14 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="shortcutsLabel">
|
||||
<property name="text">
|
||||
<string>Create shortcuts:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="7" column="1">
|
||||
<layout class="QVBoxLayout" name="shortcutsLayout">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="desktopShortcutCheckBox">
|
||||
|
|
Loading…
Reference in a new issue