NOISSUE add instance-local library storage
Any libraries stored in $instanceroot/libraries/ will override the libraries from MultiMC's global folders, as long as they are marked 'local' in the json patch.
This commit is contained in:
parent
69f3ab019d
commit
6e80f03409
@ -55,18 +55,23 @@ struct GradleSpecifier
|
|||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
QString getFileName() const
|
||||||
|
{
|
||||||
|
QString filename = m_artifactId + '-' + m_version;
|
||||||
|
if(!m_classifier.isEmpty())
|
||||||
|
{
|
||||||
|
filename += "-" + m_classifier;
|
||||||
|
}
|
||||||
|
filename += "." + m_extension;
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
QString toPath() const
|
QString toPath() const
|
||||||
{
|
{
|
||||||
if(!m_valid)
|
if(!m_valid)
|
||||||
return "INVALID";
|
return "INVALID";
|
||||||
QString path = m_groupId;
|
QString path = m_groupId;
|
||||||
path.replace('.', '/');
|
path.replace('.', '/');
|
||||||
path += '/' + m_artifactId + '/' + m_version + '/' + m_artifactId + '-' + m_version;
|
path += '/' + m_artifactId + '/' + m_version + '/' + getFileName();
|
||||||
if(!m_classifier.isEmpty())
|
|
||||||
{
|
|
||||||
path += "-" + m_classifier;
|
|
||||||
}
|
|
||||||
path += "." + m_extension;
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
inline bool valid() const
|
inline bool valid() const
|
||||||
|
@ -1,15 +1,31 @@
|
|||||||
#include "Library.h"
|
#include "Library.h"
|
||||||
|
#include "MinecraftInstance.h"
|
||||||
|
|
||||||
#include <net/Download.h>
|
#include <net/Download.h>
|
||||||
#include <net/ChecksumValidator.h>
|
#include <net/ChecksumValidator.h>
|
||||||
#include <minecraft/forge/ForgeXzDownload.h>
|
#include <minecraft/forge/ForgeXzDownload.h>
|
||||||
#include <Env.h>
|
#include <Env.h>
|
||||||
#include <FileSystem.h>
|
#include <FileSystem.h>
|
||||||
|
|
||||||
void Library::getApplicableFiles(OpSys system, QStringList& jar, QStringList& native, QStringList& native32, QStringList& native64) const
|
|
||||||
|
void Library::getApplicableFiles(OpSys system, QStringList& jar, QStringList& native, QStringList& native32,
|
||||||
|
QStringList& native64, const QString &overridePath) const
|
||||||
{
|
{
|
||||||
|
bool isLocal = (hint() == "local");
|
||||||
auto actualPath = [&](QString relPath)
|
auto actualPath = [&](QString relPath)
|
||||||
{
|
{
|
||||||
QFileInfo out(FS::PathCombine(storagePrefix(), relPath));
|
QFileInfo out(FS::PathCombine(storagePrefix(), relPath));
|
||||||
|
if(isLocal && !overridePath.isEmpty())
|
||||||
|
{
|
||||||
|
QString fileName = out.fileName();
|
||||||
|
auto fullPath = FS::PathCombine(overridePath, fileName);
|
||||||
|
qDebug() << fullPath;
|
||||||
|
QFileInfo fileinfo(fullPath);
|
||||||
|
if(fileinfo.exists())
|
||||||
|
{
|
||||||
|
return fileinfo.absoluteFilePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
return out.absoluteFilePath();
|
return out.absoluteFilePath();
|
||||||
};
|
};
|
||||||
if(m_mojangDownloads)
|
if(m_mojangDownloads)
|
||||||
@ -69,7 +85,8 @@ void Library::getApplicableFiles(OpSys system, QStringList& jar, QStringList& na
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<NetActionPtr> Library::getDownloads(OpSys system, HttpMetaCache * cache, QStringList &failedFiles) const
|
QList< std::shared_ptr< NetAction > > Library::getDownloads(OpSys system, class HttpMetaCache* cache,
|
||||||
|
QStringList& failedFiles, const QString & overridePath) const
|
||||||
{
|
{
|
||||||
QList<NetActionPtr> out;
|
QList<NetActionPtr> out;
|
||||||
bool isAlwaysStale = (hint() == "always-stale");
|
bool isAlwaysStale = (hint() == "always-stale");
|
||||||
@ -87,6 +104,25 @@ QList<NetActionPtr> Library::getDownloads(OpSys system, HttpMetaCache * cache, Q
|
|||||||
return true;
|
return true;
|
||||||
if(isLocal)
|
if(isLocal)
|
||||||
{
|
{
|
||||||
|
if(!overridePath.isEmpty())
|
||||||
|
{
|
||||||
|
QString fileName;
|
||||||
|
int position = storage.lastIndexOf('/');
|
||||||
|
if(position == -1)
|
||||||
|
{
|
||||||
|
fileName = storage;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fileName = storage.mid(position);
|
||||||
|
}
|
||||||
|
auto fullPath = FS::PathCombine(overridePath, fileName);
|
||||||
|
QFileInfo fileinfo(fullPath);
|
||||||
|
if(fileinfo.exists())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
QFileInfo fileinfo(entry->getFullPath());
|
QFileInfo fileinfo(entry->getFullPath());
|
||||||
if(!fileinfo.exists())
|
if(!fileinfo.exists())
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "multimc_logic_export.h"
|
#include "multimc_logic_export.h"
|
||||||
|
|
||||||
class Library;
|
class Library;
|
||||||
|
class MinecraftInstance;
|
||||||
|
|
||||||
typedef std::shared_ptr<Library> LibraryPtr;
|
typedef std::shared_ptr<Library> LibraryPtr;
|
||||||
|
|
||||||
@ -99,7 +100,8 @@ public: /* methods */
|
|||||||
m_repositoryURL = base_url;
|
m_repositoryURL = base_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
void getApplicableFiles(OpSys system, QStringList & jar, QStringList & native, QStringList & native32, QStringList & native64) const;
|
void getApplicableFiles(OpSys system, QStringList & jar, QStringList & native,
|
||||||
|
QStringList & native32, QStringList & native64, const QString & overridePath) const;
|
||||||
|
|
||||||
void setAbsoluteUrl(const QString &absolute_url)
|
void setAbsoluteUrl(const QString &absolute_url)
|
||||||
{
|
{
|
||||||
@ -126,7 +128,8 @@ public: /* methods */
|
|||||||
bool isActive() const;
|
bool isActive() const;
|
||||||
|
|
||||||
// Get a list of downloads for this library
|
// Get a list of downloads for this library
|
||||||
QList<NetActionPtr> getDownloads(OpSys system, class HttpMetaCache * cache, QStringList &failedFiles) const;
|
QList<NetActionPtr> getDownloads(OpSys system, class HttpMetaCache * cache,
|
||||||
|
QStringList & failedFiles, const QString & overridePath) const;
|
||||||
|
|
||||||
private: /* methods */
|
private: /* methods */
|
||||||
/// the default storage prefix used by MultiMC
|
/// the default storage prefix used by MultiMC
|
||||||
|
@ -31,6 +31,7 @@ slots:
|
|||||||
{
|
{
|
||||||
cache.reset(new HttpMetaCache());
|
cache.reset(new HttpMetaCache());
|
||||||
cache->addBase("libraries", QDir("libraries").absolutePath());
|
cache->addBase("libraries", QDir("libraries").absolutePath());
|
||||||
|
dataDir = QDir("data").absolutePath();
|
||||||
}
|
}
|
||||||
void test_legacy()
|
void test_legacy()
|
||||||
{
|
{
|
||||||
@ -39,7 +40,7 @@ slots:
|
|||||||
QCOMPARE(test.isNative(), false);
|
QCOMPARE(test.isNative(), false);
|
||||||
|
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test.getApplicableFiles(currentSystem, jar, native, native32, native64);
|
test.getApplicableFiles(currentSystem, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, getStorage("test/package/testname/testversion/testname-testversion.jar"));
|
QCOMPARE(jar, getStorage("test/package/testname/testversion/testname-testversion.jar"));
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native32, {});
|
QCOMPARE(native32, {});
|
||||||
@ -50,7 +51,7 @@ slots:
|
|||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
Library test("test.package:testname:testversion");
|
Library test("test.package:testname:testversion");
|
||||||
test.setRepositoryURL("file://foo/bar");
|
test.setRepositoryURL("file://foo/bar");
|
||||||
auto downloads = test.getDownloads(currentSystem, cache.get(), failedFiles);
|
auto downloads = test.getDownloads(currentSystem, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(downloads.size(), 1);
|
QCOMPARE(downloads.size(), 1);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
NetActionPtr dl = downloads[0];
|
NetActionPtr dl = downloads[0];
|
||||||
@ -62,10 +63,27 @@ slots:
|
|||||||
QCOMPARE(test.isNative(), false);
|
QCOMPARE(test.isNative(), false);
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
test.setHint("local");
|
test.setHint("local");
|
||||||
auto downloads = test.getDownloads(currentSystem, cache.get(), failedFiles);
|
auto downloads = test.getDownloads(currentSystem, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(downloads.size(), 0);
|
QCOMPARE(downloads.size(), 0);
|
||||||
QCOMPARE(failedFiles, getStorage("test/package/testname/testversion/testname-testversion.jar"));
|
QCOMPARE(failedFiles, getStorage("test/package/testname/testversion/testname-testversion.jar"));
|
||||||
}
|
}
|
||||||
|
void test_legacy_url_local_override()
|
||||||
|
{
|
||||||
|
Library test("com.paulscode:codecwav:20101023");
|
||||||
|
QCOMPARE(test.isNative(), false);
|
||||||
|
QStringList failedFiles;
|
||||||
|
test.setHint("local");
|
||||||
|
auto downloads = test.getDownloads(currentSystem, cache.get(), failedFiles, QString("data"));
|
||||||
|
QCOMPARE(downloads.size(), 0);
|
||||||
|
QCOMPARE(failedFiles.size(), 0);
|
||||||
|
|
||||||
|
QStringList jar, native, native32, native64;
|
||||||
|
test.getApplicableFiles(currentSystem, jar, native, native32, native64, QString("data"));
|
||||||
|
QCOMPARE(jar, {QFileInfo("data/codecwav-20101023.jar").absoluteFilePath()});
|
||||||
|
QCOMPARE(native, {});
|
||||||
|
QCOMPARE(native32, {});
|
||||||
|
QCOMPARE(native64, {});
|
||||||
|
}
|
||||||
void test_legacy_native()
|
void test_legacy_native()
|
||||||
{
|
{
|
||||||
Library test("test.package:testname:testversion");
|
Library test("test.package:testname:testversion");
|
||||||
@ -74,13 +92,13 @@ slots:
|
|||||||
test.setRepositoryURL("file://foo/bar");
|
test.setRepositoryURL("file://foo/bar");
|
||||||
{
|
{
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test.getApplicableFiles(Os_Linux, jar, native, native32, native64);
|
test.getApplicableFiles(Os_Linux, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, {});
|
QCOMPARE(jar, {});
|
||||||
QCOMPARE(native, getStorage("test/package/testname/testversion/testname-testversion-linux.jar"));
|
QCOMPARE(native, getStorage("test/package/testname/testversion/testname-testversion-linux.jar"));
|
||||||
QCOMPARE(native32, {});
|
QCOMPARE(native32, {});
|
||||||
QCOMPARE(native64, {});
|
QCOMPARE(native64, {});
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test.getDownloads(Os_Linux, cache.get(), failedFiles);
|
auto dls = test.getDownloads(Os_Linux, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 1);
|
QCOMPARE(dls.size(), 1);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
auto dl = dls[0];
|
auto dl = dls[0];
|
||||||
@ -97,13 +115,13 @@ slots:
|
|||||||
test.setRepositoryURL("file://foo/bar");
|
test.setRepositoryURL("file://foo/bar");
|
||||||
{
|
{
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test.getApplicableFiles(Os_Linux, jar, native, native32, native64);
|
test.getApplicableFiles(Os_Linux, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, {});
|
QCOMPARE(jar, {});
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-linux-32.jar"));
|
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-linux-32.jar"));
|
||||||
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-linux-64.jar"));
|
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-linux-64.jar"));
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test.getDownloads(Os_Linux, cache.get(), failedFiles);
|
auto dls = test.getDownloads(Os_Linux, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 2);
|
QCOMPARE(dls.size(), 2);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-linux-32.jar"));
|
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-linux-32.jar"));
|
||||||
@ -111,13 +129,13 @@ slots:
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test.getApplicableFiles(Os_Windows, jar, native, native32, native64);
|
test.getApplicableFiles(Os_Windows, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, {});
|
QCOMPARE(jar, {});
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-windows-32.jar"));
|
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-windows-32.jar"));
|
||||||
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-windows-64.jar"));
|
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-windows-64.jar"));
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test.getDownloads(Os_Windows, cache.get(), failedFiles);
|
auto dls = test.getDownloads(Os_Windows, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 2);
|
QCOMPARE(dls.size(), 2);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-windows-32.jar"));
|
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-windows-32.jar"));
|
||||||
@ -125,45 +143,103 @@ slots:
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test.getApplicableFiles(Os_OSX, jar, native, native32, native64);
|
test.getApplicableFiles(Os_OSX, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, {});
|
QCOMPARE(jar, {});
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-osx-32.jar"));
|
QCOMPARE(native32, getStorage("test/package/testname/testversion/testname-testversion-osx-32.jar"));
|
||||||
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-osx-64.jar"));
|
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-osx-64.jar"));
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test.getDownloads(Os_OSX, cache.get(), failedFiles);
|
auto dls = test.getDownloads(Os_OSX, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 2);
|
QCOMPARE(dls.size(), 2);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-osx-32.jar"));
|
QCOMPARE(dls[0]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-osx-32.jar"));
|
||||||
QCOMPARE(dls[1]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-osx-64.jar"));
|
QCOMPARE(dls[1]->m_url, QUrl("file://foo/bar/test/package/testname/testversion/testname-testversion-osx-64.jar"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void test_legacy_native_arch_local_override()
|
||||||
|
{
|
||||||
|
Library test("test.package:testname:testversion");
|
||||||
|
test.m_nativeClassifiers[OpSys::Os_Linux]="linux-${arch}";
|
||||||
|
test.setHint("local");
|
||||||
|
QCOMPARE(test.isNative(), true);
|
||||||
|
test.setRepositoryURL("file://foo/bar");
|
||||||
|
{
|
||||||
|
QStringList jar, native, native32, native64;
|
||||||
|
test.getApplicableFiles(Os_Linux, jar, native, native32, native64, QString("data"));
|
||||||
|
QCOMPARE(jar, {});
|
||||||
|
QCOMPARE(native, {});
|
||||||
|
QCOMPARE(native32, {QFileInfo("data/testname-testversion-linux-32.jar").absoluteFilePath()});
|
||||||
|
QCOMPARE(native64, getStorage("test/package/testname/testversion/testname-testversion-linux-64.jar"));
|
||||||
|
QStringList failedFiles;
|
||||||
|
auto dls = test.getDownloads(Os_Linux, cache.get(), failedFiles, QString("data"));
|
||||||
|
QCOMPARE(dls.size(), 0);
|
||||||
|
QCOMPARE(failedFiles, {getStorage("test/package/testname/testversion/testname-testversion-linux-64.jar")});
|
||||||
|
}
|
||||||
|
}
|
||||||
void test_onenine()
|
void test_onenine()
|
||||||
{
|
{
|
||||||
auto test = readMojangJson("data/lib-simple.json");
|
auto test = readMojangJson("data/lib-simple.json");
|
||||||
QStringList jar, native, native32, native64;
|
{
|
||||||
test->getApplicableFiles(Os_OSX, jar, native, native32, native64);
|
QStringList jar, native, native32, native64;
|
||||||
QCOMPARE(jar, getStorage("com/paulscode/codecwav/20101023/codecwav-20101023.jar"));
|
test->getApplicableFiles(Os_OSX, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(jar, getStorage("com/paulscode/codecwav/20101023/codecwav-20101023.jar"));
|
||||||
QCOMPARE(native32, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native64, {});
|
QCOMPARE(native32, {});
|
||||||
QStringList failedFiles;
|
QCOMPARE(native64, {});
|
||||||
auto dls = test->getDownloads(Os_Linux, cache.get(), failedFiles);
|
}
|
||||||
QCOMPARE(dls.size(), 1);
|
{
|
||||||
QCOMPARE(failedFiles, {});
|
QStringList failedFiles;
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/com/paulscode/codecwav/20101023/codecwav-20101023.jar"));
|
auto dls = test->getDownloads(Os_Linux, cache.get(), failedFiles, QString());
|
||||||
|
QCOMPARE(dls.size(), 1);
|
||||||
|
QCOMPARE(failedFiles, {});
|
||||||
|
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/com/paulscode/codecwav/20101023/codecwav-20101023.jar"));
|
||||||
|
}
|
||||||
|
test->setHint("local");
|
||||||
|
{
|
||||||
|
QStringList jar, native, native32, native64;
|
||||||
|
test->getApplicableFiles(Os_OSX, jar, native, native32, native64, QString("data"));
|
||||||
|
QCOMPARE(jar, {QFileInfo("data/codecwav-20101023.jar").absoluteFilePath()});
|
||||||
|
QCOMPARE(native, {});
|
||||||
|
QCOMPARE(native32, {});
|
||||||
|
QCOMPARE(native64, {});
|
||||||
|
}
|
||||||
|
{
|
||||||
|
QStringList failedFiles;
|
||||||
|
auto dls = test->getDownloads(Os_Linux, cache.get(), failedFiles, QString("data"));
|
||||||
|
QCOMPARE(dls.size(), 0);
|
||||||
|
QCOMPARE(failedFiles, {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void test_onenine_local_override()
|
||||||
|
{
|
||||||
|
auto test = readMojangJson("data/lib-simple.json");
|
||||||
|
test->setHint("local");
|
||||||
|
{
|
||||||
|
QStringList jar, native, native32, native64;
|
||||||
|
test->getApplicableFiles(Os_OSX, jar, native, native32, native64, QString("data"));
|
||||||
|
QCOMPARE(jar, {QFileInfo("data/codecwav-20101023.jar").absoluteFilePath()});
|
||||||
|
QCOMPARE(native, {});
|
||||||
|
QCOMPARE(native32, {});
|
||||||
|
QCOMPARE(native64, {});
|
||||||
|
}
|
||||||
|
{
|
||||||
|
QStringList failedFiles;
|
||||||
|
auto dls = test->getDownloads(Os_Linux, cache.get(), failedFiles, QString("data"));
|
||||||
|
QCOMPARE(dls.size(), 0);
|
||||||
|
QCOMPARE(failedFiles, {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
void test_onenine_native()
|
void test_onenine_native()
|
||||||
{
|
{
|
||||||
auto test = readMojangJson("data/lib-native.json");
|
auto test = readMojangJson("data/lib-native.json");
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test->getApplicableFiles(Os_OSX, jar, native, native32, native64);
|
test->getApplicableFiles(Os_OSX, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, getStorage("org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar"));
|
QCOMPARE(jar, getStorage("org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar"));
|
||||||
QCOMPARE(native, getStorage("org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar"));
|
QCOMPARE(native, getStorage("org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209-natives-osx.jar"));
|
||||||
QCOMPARE(native32, {});
|
QCOMPARE(native32, {});
|
||||||
QCOMPARE(native64, {});
|
QCOMPARE(native64, {});
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test->getDownloads(Os_OSX, cache.get(), failedFiles);
|
auto dls = test->getDownloads(Os_OSX, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 2);
|
QCOMPARE(dls.size(), 2);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar"));
|
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/org/lwjgl/lwjgl/lwjgl-platform/2.9.4-nightly-20150209/lwjgl-platform-2.9.4-nightly-20150209.jar"));
|
||||||
@ -173,13 +249,13 @@ slots:
|
|||||||
{
|
{
|
||||||
auto test = readMojangJson("data/lib-native-arch.json");
|
auto test = readMojangJson("data/lib-native-arch.json");
|
||||||
QStringList jar, native, native32, native64;
|
QStringList jar, native, native32, native64;
|
||||||
test->getApplicableFiles(Os_Windows, jar, native, native32, native64);
|
test->getApplicableFiles(Os_Windows, jar, native, native32, native64, QString());
|
||||||
QCOMPARE(jar, {});
|
QCOMPARE(jar, {});
|
||||||
QCOMPARE(native, {});
|
QCOMPARE(native, {});
|
||||||
QCOMPARE(native32, getStorage("tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-32.jar"));
|
QCOMPARE(native32, getStorage("tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-32.jar"));
|
||||||
QCOMPARE(native64, getStorage("tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-64.jar"));
|
QCOMPARE(native64, getStorage("tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-64.jar"));
|
||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
auto dls = test->getDownloads(Os_Windows, cache.get(), failedFiles);
|
auto dls = test->getDownloads(Os_Windows, cache.get(), failedFiles, QString());
|
||||||
QCOMPARE(dls.size(), 2);
|
QCOMPARE(dls.size(), 2);
|
||||||
QCOMPARE(failedFiles, {});
|
QCOMPARE(failedFiles, {});
|
||||||
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-32.jar"));
|
QCOMPARE(dls[0]->m_url, QUrl("https://libraries.minecraft.net/tv/twitch/twitch-platform/5.16/twitch-platform-5.16-natives-windows-32.jar"));
|
||||||
@ -187,7 +263,7 @@ slots:
|
|||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<HttpMetaCache> cache;
|
std::unique_ptr<HttpMetaCache> cache;
|
||||||
QString workDir;
|
QString dataDir;
|
||||||
};
|
};
|
||||||
|
|
||||||
QTEST_GUILESS_MAIN(LibraryTest)
|
QTEST_GUILESS_MAIN(LibraryTest)
|
||||||
|
@ -69,6 +69,8 @@ public:
|
|||||||
|
|
||||||
virtual QString getNativePath() const = 0;
|
virtual QString getNativePath() const = 0;
|
||||||
|
|
||||||
|
virtual QString getLocalLibraryPath() const = 0;
|
||||||
|
|
||||||
virtual QStringList processMinecraftArgs(AuthSessionPtr account) const = 0;
|
virtual QStringList processMinecraftArgs(AuthSessionPtr account) const = 0;
|
||||||
|
|
||||||
virtual JavaVersion getJavaVersion() const;
|
virtual JavaVersion getJavaVersion() const;
|
||||||
|
@ -581,14 +581,14 @@ const QList<LibraryPtr> & MinecraftProfile::getLibraries() const
|
|||||||
return m_libraries;
|
return m_libraries;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MinecraftProfile::getLibraryFiles(const QString& architecture, QStringList& jars, QStringList& nativeJars) const
|
void MinecraftProfile::getLibraryFiles(const QString& architecture, QStringList& jars, QStringList& nativeJars, const QString& overridePath) const
|
||||||
{
|
{
|
||||||
QStringList native32, native64;
|
QStringList native32, native64;
|
||||||
jars.clear();
|
jars.clear();
|
||||||
nativeJars.clear();
|
nativeJars.clear();
|
||||||
for (auto lib : getLibraries())
|
for (auto lib : getLibraries())
|
||||||
{
|
{
|
||||||
lib->getApplicableFiles(currentSystem, jars, nativeJars, native32, native64);
|
lib->getApplicableFiles(currentSystem, jars, nativeJars, native32, native64, overridePath);
|
||||||
}
|
}
|
||||||
if(architecture == "32")
|
if(architecture == "32")
|
||||||
{
|
{
|
||||||
|
@ -111,7 +111,7 @@ public: /* getters for profile variables */
|
|||||||
const QStringList & getTweakers() const;
|
const QStringList & getTweakers() const;
|
||||||
const QList<JarmodPtr> & getJarMods() const;
|
const QList<JarmodPtr> & getJarMods() const;
|
||||||
const QList<LibraryPtr> & getLibraries() const;
|
const QList<LibraryPtr> & getLibraries() const;
|
||||||
void getLibraryFiles(const QString & architecture, QStringList & jars, QStringList & nativeJars) const;
|
void getLibraryFiles(const QString & architecture, QStringList & jars, QStringList & nativeJars, const QString & overridePath) const;
|
||||||
QString getMainJarUrl() const;
|
QString getMainJarUrl() const;
|
||||||
bool hasTrait(const QString & trait) const;
|
bool hasTrait(const QString & trait) const;
|
||||||
ProblemSeverity getProblemSeverity() const;
|
ProblemSeverity getProblemSeverity() const;
|
||||||
|
@ -132,6 +132,11 @@ public:
|
|||||||
QStringList getNativeJars() const override;
|
QStringList getNativeJars() const override;
|
||||||
QString getNativePath() const override;
|
QString getNativePath() const override;
|
||||||
|
|
||||||
|
QString getLocalLibraryPath() const override
|
||||||
|
{
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
QStringList processMinecraftArgs(AuthSessionPtr account) const override;
|
QStringList processMinecraftArgs(AuthSessionPtr account) const override;
|
||||||
QStringList verboseDescription(AuthSessionPtr session) override;
|
QStringList verboseDescription(AuthSessionPtr session) override;
|
||||||
|
|
||||||
|
@ -145,6 +145,12 @@ QString OneSixInstance::getNativePath() const
|
|||||||
return natives_dir.absolutePath();
|
return natives_dir.absolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString OneSixInstance::getLocalLibraryPath() const
|
||||||
|
{
|
||||||
|
QDir libraries_dir(FS::PathCombine(instanceRoot(), "libraries/"));
|
||||||
|
return libraries_dir.absolutePath();
|
||||||
|
}
|
||||||
|
|
||||||
QString OneSixInstance::mainJarPath() const
|
QString OneSixInstance::mainJarPath() const
|
||||||
{
|
{
|
||||||
auto jarMods = getJarMods();
|
auto jarMods = getJarMods();
|
||||||
@ -207,7 +213,7 @@ QString OneSixInstance::createLaunchScript(AuthSessionPtr session)
|
|||||||
{
|
{
|
||||||
QStringList jars, nativeJars;
|
QStringList jars, nativeJars;
|
||||||
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
||||||
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
|
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
|
||||||
for(auto file: jars)
|
for(auto file: jars)
|
||||||
{
|
{
|
||||||
launchScript += "cp " + file + "\n";
|
launchScript += "cp " + file + "\n";
|
||||||
@ -251,7 +257,7 @@ QStringList OneSixInstance::verboseDescription(AuthSessionPtr session)
|
|||||||
out << "Libraries:";
|
out << "Libraries:";
|
||||||
QStringList jars, nativeJars;
|
QStringList jars, nativeJars;
|
||||||
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
||||||
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
|
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
|
||||||
auto printLibFile = [&](const QString & path)
|
auto printLibFile = [&](const QString & path)
|
||||||
{
|
{
|
||||||
QFileInfo info(path);
|
QFileInfo info(path);
|
||||||
@ -654,7 +660,7 @@ QStringList OneSixInstance::getClassPath() const
|
|||||||
{
|
{
|
||||||
QStringList jars, nativeJars;
|
QStringList jars, nativeJars;
|
||||||
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
||||||
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
|
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
|
||||||
jars.append(mainJarPath());
|
jars.append(mainJarPath());
|
||||||
return jars;
|
return jars;
|
||||||
}
|
}
|
||||||
@ -668,6 +674,6 @@ QStringList OneSixInstance::getNativeJars() const
|
|||||||
{
|
{
|
||||||
QStringList jars, nativeJars;
|
QStringList jars, nativeJars;
|
||||||
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
auto javaArchitecture = settings()->get("JavaArchitecture").toString();
|
||||||
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars);
|
m_profile->getLibraryFiles(javaArchitecture, jars, nativeJars, getLocalLibraryPath());
|
||||||
return nativeJars;
|
return nativeJars;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +104,8 @@ public:
|
|||||||
QStringList getNativeJars() const override;
|
QStringList getNativeJars() const override;
|
||||||
QString getNativePath() const override;
|
QString getNativePath() const override;
|
||||||
|
|
||||||
|
QString getLocalLibraryPath() const override;
|
||||||
|
|
||||||
QStringList processMinecraftArgs(AuthSessionPtr account) const override;
|
QStringList processMinecraftArgs(AuthSessionPtr account) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -42,7 +42,7 @@ void LibrariesTask::executeTask()
|
|||||||
QStringList failedFiles;
|
QStringList failedFiles;
|
||||||
for (auto lib : libs)
|
for (auto lib : libs)
|
||||||
{
|
{
|
||||||
auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles);
|
auto dls = lib->getDownloads(currentSystem, metacache.get(), failedFiles, inst->getLocalLibraryPath());
|
||||||
for(auto dl : dls)
|
for(auto dl : dls)
|
||||||
{
|
{
|
||||||
downloadJob->addNetAction(dl);
|
downloadJob->addNetAction(dl);
|
||||||
|
BIN
api/logic/minecraft/testdata/codecwav-20101023.jar
vendored
Normal file
BIN
api/logic/minecraft/testdata/codecwav-20101023.jar
vendored
Normal file
Binary file not shown.
BIN
api/logic/minecraft/testdata/testname-testversion-linux-32.jar
vendored
Normal file
BIN
api/logic/minecraft/testdata/testname-testversion-linux-32.jar
vendored
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user