refactor: add error handling to component import

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
Sefa Eyeoglu 2023-01-25 10:43:23 +01:00
parent cd893e18d2
commit 199a7df807
No known key found for this signature in database
GPG Key ID: E13DFD4B47127951
3 changed files with 35 additions and 32 deletions

View File

@ -733,21 +733,47 @@ void PackProfile::invalidateLaunchProfile()
void PackProfile::installJarMods(QStringList selectedFiles)
{
// FIXME: get rid of _internal
installJarMods_internal(selectedFiles);
}
void PackProfile::installCustomJar(QString selectedFile)
{
// FIXME: get rid of _internal
installCustomJar_internal(selectedFile);
}
void PackProfile::installComponents(QStringList selectedFiles)
bool PackProfile::installComponents(QStringList selectedFiles)
{
installComponents_internal(selectedFiles);
const QString patchDir = FS::PathCombine(d->m_instance->instanceRoot(), "patches");
if (!FS::ensureFolderPathExists(patchDir))
return false;
bool result = true;
for (const QString& source : selectedFiles) {
const QFileInfo sourceInfo(source);
auto versionFile = ProfileUtils::parseJsonFile(sourceInfo, false);
const QString target = FS::PathCombine(patchDir, versionFile->uid + ".json");
if (!QFile::copy(source, target)) {
qWarning() << "Component" << source << "could not be copied to target" << target;
result = false;
continue;
}
appendComponent(new Component(this, versionFile->uid, versionFile));
}
scheduleSave();
invalidateLaunchProfile();
return result;
}
void PackProfile::installAgents(QStringList selectedFiles)
{
// FIXME: get rid of _internal
installAgents_internal(selectedFiles);
}
@ -948,32 +974,6 @@ bool PackProfile::installCustomJar_internal(QString filepath)
return true;
}
bool PackProfile::installComponents_internal(QStringList filepaths)
{
const QString patchDir = FS::PathCombine(d->m_instance->instanceRoot(), "patches");
if (!FS::ensureFolderPathExists(patchDir))
return false;
for (const QString& source : filepaths) {
const QFileInfo sourceInfo(source);
auto versionFile = ProfileUtils::parseJsonFile(sourceInfo, false);
const QString target = FS::PathCombine(patchDir, versionFile->uid + ".json");
if (!QFile::copy(source, target))
{
return false;
}
appendComponent(new Component(this, versionFile->uid, versionFile));
}
scheduleSave();
invalidateLaunchProfile();
return true;
}
bool PackProfile::installAgents_internal(QStringList filepaths)
{
// FIXME code duplication

View File

@ -90,7 +90,7 @@ public:
void installCustomJar(QString selectedFile);
/// install MMC/Prism component files
void installComponents(QStringList selectedFiles);
bool installComponents(QStringList selectedFiles);
/// install Java agent files
void installAgents(QStringList selectedFiles);
@ -177,7 +177,6 @@ private:
bool load();
bool installJarMods_internal(QStringList filepaths);
bool installCustomJar_internal(QString filepath);
bool installComponents_internal(QStringList filepaths);
bool installAgents_internal(QStringList filepaths);
bool removeComponent_internal(ComponentPtr patch);

View File

@ -384,8 +384,12 @@ void VersionPage::on_actionImport_Components_triggered()
QStringList list = GuiUtil::BrowseForFiles("component", tr("Select components"), tr("Components (*.json)"),
APPLICATION->settings()->get("CentralModsDir").toString(), this->parentWidget());
if (!list.isEmpty())
m_profile->installComponents(list);
if (!list.isEmpty()) {
if (!m_profile->installComponents(list)) {
QMessageBox::warning(this, tr("Failed to import components"),
tr("Some components could not be imported. Check logs for details"));
}
}
updateButtons();
}