Various updater fixes

Updater tests for path utils
The updater now doesn't use splitpath on Windows (fixes problems with Windows XP)
Fix up paths for the OSX updater - should now install the updates into the right place
Fix translations install path - translation isntall and deploy should be fixed
This commit is contained in:
Petr Mrázek
2013-12-28 02:03:53 +01:00
parent 30d4f5981d
commit 7652b3d64a
10 changed files with 171 additions and 59 deletions

View File

@ -66,7 +66,7 @@ void DownloadUpdateTask::processChannels()
if (channel.id == channelId)
{
QLOG_INFO() << "Found matching channel.";
m_cRepoUrl = preparePath(channel.url);
m_cRepoUrl = fixPathForTests(channel.url);
break;
}
}
@ -207,8 +207,17 @@ bool DownloadUpdateTask::parseVersionInfo(const QByteArray &data, VersionFileLis
{
QJsonObject fileObj = fileValue.toObject();
QString file_path = fileObj.value("Path").toString();
#ifdef Q_OS_MAC
// On OSX, the paths for the updater need to be fixed.
// basically, anything that isn't in the .app folder is ignored.
// everything else is changed so the code that processes the files actually finds
// them and puts the replacements in the right spots.
if(!fixPathForOSX(file_path))
continue;
#endif
VersionFileEntry file{
fileObj.value("Path").toString(), fileObj.value("Perms").toVariant().toInt(),
file_path , fileObj.value("Perms").toVariant().toInt(),
FileSourceList(), fileObj.value("MD5").toString(), };
QLOG_DEBUG() << "File" << file.path << "with perms" << file.mode;
@ -221,12 +230,12 @@ bool DownloadUpdateTask::parseVersionInfo(const QByteArray &data, VersionFileLis
if (type == "http")
{
file.sources.append(
FileSource("http", preparePath(sourceObj.value("Url").toString())));
FileSource("http", fixPathForTests(sourceObj.value("Url").toString())));
}
else if (type == "httpc")
{
file.sources.append(FileSource("httpc",
preparePath(sourceObj.value("Url").toString()),
fixPathForTests(sourceObj.value("Url").toString()),
sourceObj.value("CompressionType").toString()));
}
else
@ -491,7 +500,7 @@ bool DownloadUpdateTask::writeInstallScript(UpdateOperationList &opsList, QStrin
return true;
}
QString DownloadUpdateTask::preparePath(const QString &path)
QString DownloadUpdateTask::fixPathForTests(const QString &path)
{
if(path.startsWith("$PWD"))
{
@ -502,6 +511,23 @@ QString DownloadUpdateTask::preparePath(const QString &path)
return path;
}
bool DownloadUpdateTask::fixPathForOSX(QString &path)
{
if(path.startsWith("MultiMC.app/"))
{
// remove the prefix and add a new, more appropriate one.
path.remove(0,12);
path = QString("../../") + path;
return true;
}
else
{
QLOG_ERROR() << "Update path not within .app: " << path;
return false;
}
}
void DownloadUpdateTask::fileDownloadFinished()
{
emitSucceeded();

View File

@ -198,7 +198,21 @@ protected:
* Filters paths
* Path of the format $PWD/path, it is converted to a file:///$PWD/ URL
*/
static QString preparePath(const QString &path);
static QString fixPathForTests(const QString &path);
/*!
* Filters paths
* This fixes destination paths for OSX.
* The updater runs in MultiMC.app/Contents/MacOs by default
* The destination paths are such as this: MultiMC.app/blah/blah
*
* Therefore we chop off the 'MultiMC.app' prefix and prepend ../..
*
* Returns false if the path couldn't be fixed (is invalid)
*
* Has no effect on systems that aren't OSX
*/
static bool fixPathForOSX(QString &path);
protected slots:
void vinfoDownloadFinished();