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:
@ -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();
|
||||
|
@ -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();
|
||||
|
Reference in New Issue
Block a user