NOISSUE handle 'folder' Flame packages by ignoring them, show warnings for minor Flame import problems

This commit is contained in:
Petr Mrázek 2017-12-30 18:57:46 +01:00
parent 5937b1c3d4
commit 58ead6a1f4
6 changed files with 57 additions and 15 deletions

View File

@ -373,6 +373,10 @@ protected:
{ {
m_child->start(); m_child->start();
} }
QStringList warnings() const override
{
return m_child->warnings();
}
private slots: private slots:
void childSucceded() void childSucceded()

View File

@ -150,7 +150,7 @@ void InstanceImportTask::extractFinished()
{ {
if(!QFile::setPermissions(filepath, permissions)) if(!QFile::setPermissions(filepath, permissions))
{ {
qWarning() << "Could not fix" << filepath; logWarning(tr("Could not fix permissions for %1").arg(filepath));
} }
else else
{ {
@ -213,7 +213,7 @@ void InstanceImportTask::processFlame()
} }
else else
{ {
qWarning() << "The specified overrides folder is missing. Maybe the modpack was already used before?"; logWarning(tr("The specified overrides folder (%1) is missing. Maybe the modpack was already used before?").arg(pack.overrides));
} }
} }
@ -227,7 +227,7 @@ void InstanceImportTask::processFlame()
forgeVersion = id; forgeVersion = id;
continue; continue;
} }
qWarning() << "Unknown mod loader in manifest:" << id; logWarning(tr("Unknown mod loader in manifest: %1").arg(id));
} }
QString configPath = FS::PathCombine(m_stagingPath, "instance.cfg"); QString configPath = FS::PathCombine(m_stagingPath, "instance.cfg");
@ -240,7 +240,7 @@ void InstanceImportTask::processFlame()
if(mcVersion.endsWith('.')) if(mcVersion.endsWith('.'))
{ {
mcVersion.remove(QRegExp("[.]+$")); mcVersion.remove(QRegExp("[.]+$"));
qWarning() << "Mysterious trailing dots removed from Minecraft version while importing pack."; logWarning(tr("Mysterious trailing dots removed from Minecraft version while importing pack."));
} }
auto components = instance.getComponentList(); auto components = instance.getComponentList();
components->buildingFromScratch(); components->buildingFromScratch();
@ -256,7 +256,7 @@ void InstanceImportTask::processFlame()
} }
else else
{ {
qWarning() << "Could not map recommended forge version for" << mcVersion; logWarning(tr("Could not map recommended forge version for Minecraft %1").arg(mcVersion));
} }
} }
components->setComponentVersion("net.minecraftforge", forgeVersion); components->setComponentVersion("net.minecraftforge", forgeVersion);
@ -313,9 +313,33 @@ void InstanceImportTask::processFlame()
{ {
filename += ".disabled"; filename += ".disabled";
} }
auto path = FS::PathCombine(m_stagingPath ,"minecraft", result.targetFolder, filename);
auto dl = Net::Download::makeFile(result.url, path); auto relpath = FS::PathCombine("minecraft", result.targetFolder, filename);
m_filesNetJob->addNetAction(dl); auto path = FS::PathCombine(m_stagingPath , relpath);
switch(result.type)
{
case Flame::File::Type::Folder:
{
logWarning(tr("This 'Folder' may need extracting: %1").arg(relpath));
// fall-through intentional, we treat these as plain old mods and dump them wherever.
}
case Flame::File::Type::SingleFile:
case Flame::File::Type::Mod:
{
auto dl = Net::Download::makeFile(result.url, path);
m_filesNetJob->addNetAction(dl);
break;
}
case Flame::File::Type::Modpack:
logWarning(tr("Nesting modpacks in modpacks is not implemented, nothing was downloaded: %1").arg(relpath));
break;
case Flame::File::Type::Cmod2:
case Flame::File::Type::Ctoc:
case Flame::File::Type::Unknown:
logWarning(tr("Unrecognized/unhandled PackageType for: %1").arg(relpath));
break;
}
} }
m_modIdResolver.reset(); m_modIdResolver.reset();
connect(m_filesNetJob.get(), &NetJob::succeeded, this, [&]() connect(m_filesNetJob.get(), &NetJob::succeeded, this, [&]()

View File

@ -59,8 +59,6 @@ void Flame::FileResolvingTask::netJobFinished()
{ {
out.type = File::Type::SingleFile; out.type = File::Type::SingleFile;
} }
// FIXME: what are these?
/*
else if(strType == "ctoc") else if(strType == "ctoc")
{ {
out.type = File::Type::Ctoc; out.type = File::Type::Ctoc;
@ -69,13 +67,10 @@ void Flame::FileResolvingTask::netJobFinished()
{ {
out.type = File::Type::Cmod2; out.type = File::Type::Cmod2;
} }
*/
else if(strType == "mod") else if(strType == "mod")
{ {
out.type = File::Type::Mod; out.type = File::Type::Mod;
} }
// FIXME: how to handle nested packs and folders?
/*
else if(strType == "folder") else if(strType == "folder")
{ {
out.type = File::Type::Folder; out.type = File::Type::Folder;
@ -84,7 +79,6 @@ void Flame::FileResolvingTask::netJobFinished()
{ {
out.type = File::Type::Modpack; out.type = File::Type::Modpack;
} }
*/
else else
{ {
qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of unknown file type:" << strType; qCritical() << "Resolving of" << out.projectId << out.fileId << "failed because of unknown file type:" << strType;

View File

@ -134,3 +134,13 @@ QString Task::failReason() const
return m_failReason; return m_failReason;
} }
void Task::logWarning(const QString& line)
{
qWarning() << line;
m_Warnings.append(line);
}
QStringList Task::warnings() const
{
return m_Warnings;
}

View File

@ -37,6 +37,8 @@ public:
*/ */
QString failReason() const; QString failReason() const;
virtual QStringList warnings() const;
virtual bool canAbort() const { return false; } virtual bool canAbort() const { return false; }
QString getStatus() QString getStatus()
@ -54,6 +56,9 @@ public:
return m_progressTotal; return m_progressTotal;
} }
protected:
void logWarning(const QString & line);
private: private:
QString describe(); QString describe();
@ -85,6 +90,7 @@ private:
bool m_running = false; bool m_running = false;
bool m_finished = false; bool m_finished = false;
bool m_succeeded = false; bool m_succeeded = false;
QStringList m_Warnings;
QString m_failReason = ""; QString m_failReason = "";
QString m_status; QString m_status;
int m_progress = 0; int m_progress = 0;

View File

@ -1239,7 +1239,11 @@ void MainWindow::runModalTask(Task *task)
{ {
connect(task, &Task::failed, [this](QString reason) connect(task, &Task::failed, [this](QString reason)
{ {
CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Warning)->show(); CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->show();
});
connect(task, &Task::succeeded, [this, task]()
{
CustomMessageBox::selectable(this, tr("Warnings"), task->warnings().join('\n'), QMessageBox::Warning)->show();
}); });
ProgressDialog loadDialog(this); ProgressDialog loadDialog(this);
loadDialog.setSkipButton(true, tr("Abort")); loadDialog.setSkipButton(true, tr("Abort"));