diff options
author | DioEgizio <83089242+DioEgizio@users.noreply.github.com> | 2023-06-05 20:32:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-05 20:32:30 +0200 |
commit | 0c24827a52994b2f6b441aaf7d7f68275b52cabc (patch) | |
tree | 0b9c1d4d2bcd2bcc38214c470dc5bb4e674894b2 | |
parent | e6eee82fb93e3151b2819c6a2efa3f01f8f198d1 (diff) | |
parent | f613b03efd58e04451e70d4e673adff5837492a9 (diff) | |
download | PrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.tar.gz PrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.tar.bz2 PrismLauncher-0c24827a52994b2f6b441aaf7d7f68275b52cabc.zip |
Merge pull request #1103 from Ryex/fix/1.120-allowed_symlinks.txt
-rw-r--r-- | launcher/InstanceCopyTask.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/launcher/InstanceCopyTask.cpp b/launcher/InstanceCopyTask.cpp index 4ac3b51a..60dcd5a1 100644 --- a/launcher/InstanceCopyTask.cpp +++ b/launcher/InstanceCopyTask.cpp @@ -39,7 +39,16 @@ void InstanceCopyTask::executeTask() setStatus(tr("Copying instance %1").arg(m_origInstance->name())); auto copySaves = [&]() { - FS::copy savesCopy(FS::PathCombine(m_origInstance->instanceRoot(), "saves"), FS::PathCombine(m_stagingPath, "saves")); + QFileInfo mcDir(FS::PathCombine(m_stagingPath, "minecraft")); + QFileInfo dotMCDir(FS::PathCombine(m_stagingPath, ".minecraft")); + + QString staging_mc_dir; + if (mcDir.exists() && !dotMCDir.exists()) + staging_mc_dir = mcDir.filePath(); + else + staging_mc_dir = dotMCDir.filePath(); + + FS::copy savesCopy(FS::PathCombine(m_origInstance->gameRoot(), "saves"), FS::PathCombine(staging_mc_dir, "saves")); savesCopy.followSymlinks(true); return savesCopy(); @@ -123,6 +132,7 @@ void InstanceCopyTask::copyFinished() emitFailed(tr("Instance folder copy failed.")); return; } + // FIXME: shouldn't this be able to report errors? auto instanceSettings = std::make_shared<INISettingsObject>(FS::PathCombine(m_stagingPath, "instance.cfg")); @@ -134,6 +144,24 @@ void InstanceCopyTask::copyFinished() } if (m_useLinks) inst->addLinkedInstanceId(m_origInstance->id()); + if (m_useLinks) { + auto allowed_symlinks_file = QFileInfo(FS::PathCombine(inst->gameRoot(), "allowed_symlinks.txt")); + + QByteArray allowed_symlinks; + if (allowed_symlinks_file.exists()) { + allowed_symlinks.append(FS::read(allowed_symlinks_file.path())); + if (allowed_symlinks.right(1) != "\n") + allowed_symlinks.append("\n"); // we want to be on a new line + } + allowed_symlinks.append(m_origInstance->gameRoot().toUtf8()); + allowed_symlinks.append("\n"); + if (allowed_symlinks_file.isSymLink()) + FS::deletePath(allowed_symlinks_file + .path()); // we dont want to modify the original. also make sure the resulting file is not itself a link. + + FS::write(allowed_symlinks_file.path(), allowed_symlinks); + } + emitSucceeded(); } |