Fix launch offline

This commit is contained in:
max
2021-06-22 11:22:30 +03:00
parent 5beb7edfff
commit 04f580b0bc
3 changed files with 42 additions and 20 deletions

View File

@@ -886,12 +886,16 @@ shared_qobject_ptr<LaunchTask> MinecraftInstance::createLaunchTask(AuthSessionPt
if(session->status != AuthSession::PlayableOffline)
{
process->appendStep(new ClaimAccount(pptr, session));
}
// do update only if we're in online mode
if (session->wants_online)
{
process->appendStep(new Update(pptr, Net::Mode::Online));
}
else
{
process->appendStep(new Update(pptr, Net::Mode::Online));
// TODO: Separate "cracked" logins (offline from auth servers) from genuine offline logins (no internet)
process->appendStep(new Update(pptr, Net::Mode::Offline));
}
// if there are any jar mods
@@ -924,6 +928,7 @@ shared_qobject_ptr<LaunchTask> MinecraftInstance::createLaunchTask(AuthSessionPt
{
auto step = new InjectAuthlib(pptr, &m_injector);
step->setAuthServer(session->m_accountPtr->provider()->injectorEndpoint().arg(localAuthServerPort));
step->setOfflineMode(!session->wants_online);
process->appendStep(step);
}
@@ -1050,5 +1055,4 @@ QList< Mod > MinecraftInstance::getJarMods() const
return mods;
}
#include "MinecraftInstance.moc"

View File

@@ -37,14 +37,21 @@ void InjectAuthlib::executeTask()
auto latestVersionInfo = QString("https://authlib-injector.yushi.moe/artifact/latest.json");
auto netJob = new NetJob("Injector versions info download");
MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", "version.json");
entry->setStale(true);
auto task = Net::Download::makeCached(QUrl(latestVersionInfo), entry);
netJob->addNetAction(task);
if (!m_offlineMode)
{
entry->setStale(true);
auto task = Net::Download::makeCached(QUrl(latestVersionInfo), entry);
netJob->addNetAction(task);
jobPtr.reset(netJob);
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onVersionDownloadSucceeded);
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
jobPtr->start();
jobPtr.reset(netJob);
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onVersionDownloadSucceeded);
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
jobPtr->start();
}
else
{
onVersionDownloadSucceeded();
}
}
void InjectAuthlib::onVersionDownloadSucceeded()
@@ -102,17 +109,23 @@ void InjectAuthlib::onVersionDownloadSucceeded()
m_versionName = fi.fileName();
qDebug() << "Authlib injector version:" << m_versionName;
if (!m_offlineMode)
{
auto netJob = new NetJob("Injector download");
MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", m_versionName);
entry->setStale(true);
auto task = Net::Download::makeCached(QUrl(downloadUrl), entry);
netJob->addNetAction(task);
auto netJob = new NetJob("Injector download");
MetaEntryPtr entry = ENV.metacache()->resolveEntry("injectors", m_versionName);
entry->setStale(true);
auto task = Net::Download::makeCached(QUrl(downloadUrl), entry);
netJob->addNetAction(task);
jobPtr.reset(netJob);
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onDownloadSucceeded);
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
jobPtr->start();
jobPtr.reset(netJob);
QObject::connect(netJob, &NetJob::succeeded, this, &InjectAuthlib::onDownloadSucceeded);
QObject::connect(netJob, &NetJob::failed, this, &InjectAuthlib::onDownloadFailed);
jobPtr->start();
}
else
{
onDownloadSucceeded();
}
}
void InjectAuthlib::onDownloadSucceeded()

View File

@@ -52,6 +52,10 @@ public:
m_authServer = server;
};
void setOfflineMode(bool offline) {
m_offlineMode = offline;
}
public slots:
bool abort() override;
@@ -64,6 +68,7 @@ private:
shared_qobject_ptr<Task> jobPtr;
bool m_aborted = false;
bool m_offlineMode;
QString m_versionName;
QString m_authServer;
AuthlibInjectorPtr *m_injector;