feat: add button to import component JSONs

Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
This commit is contained in:
Sefa Eyeoglu 2023-01-11 13:50:57 +01:00
parent 219c5b323d
commit fff52cb247
No known key found for this signature in database
GPG Key ID: C10411294912A422
5 changed files with 59 additions and 2 deletions

View File

@ -49,6 +49,7 @@
#include "minecraft/OneSixVersionFormat.h" #include "minecraft/OneSixVersionFormat.h"
#include "FileSystem.h" #include "FileSystem.h"
#include "minecraft/MinecraftInstance.h" #include "minecraft/MinecraftInstance.h"
#include "minecraft/ProfileUtils.h"
#include "Json.h" #include "Json.h"
#include "PackProfile.h" #include "PackProfile.h"
@ -737,6 +738,11 @@ void PackProfile::installCustomJar(QString selectedFile)
installCustomJar_internal(selectedFile); installCustomJar_internal(selectedFile);
} }
void PackProfile::installComponents(QStringList selectedFiles)
{
installComponents_internal(selectedFiles);
}
void PackProfile::installAgents(QStringList selectedFiles) void PackProfile::installAgents(QStringList selectedFiles)
{ {
installAgents_internal(selectedFiles); installAgents_internal(selectedFiles);
@ -939,6 +945,32 @@ bool PackProfile::installCustomJar_internal(QString filepath)
return true; 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) bool PackProfile::installAgents_internal(QStringList filepaths)
{ {
// FIXME code duplication // FIXME code duplication

View File

@ -86,6 +86,9 @@ public:
/// install a jar/zip as a replacement for the main jar /// install a jar/zip as a replacement for the main jar
void installCustomJar(QString selectedFile); void installCustomJar(QString selectedFile);
/// install MMC/Prism component files
void installComponents(QStringList selectedFiles);
/// install Java agent files /// install Java agent files
void installAgents(QStringList selectedFiles); void installAgents(QStringList selectedFiles);
@ -171,6 +174,7 @@ private:
bool load(); bool load();
bool installJarMods_internal(QStringList filepaths); bool installJarMods_internal(QStringList filepaths);
bool installCustomJar_internal(QString filepath); bool installCustomJar_internal(QString filepath);
bool installComponents_internal(QStringList filepaths);
bool installAgents_internal(QStringList filepaths); bool installAgents_internal(QStringList filepaths);
bool removeComponent_internal(ComponentPtr patch); bool removeComponent_internal(ComponentPtr patch);

View File

@ -282,6 +282,7 @@ void VersionPage::updateButtons(int row)
ui->actionRevert->setEnabled(controlsEnabled && patch && patch->isRevertible()); ui->actionRevert->setEnabled(controlsEnabled && patch && patch->isRevertible());
ui->actionDownload_All->setEnabled(controlsEnabled); ui->actionDownload_All->setEnabled(controlsEnabled);
ui->actionAdd_Empty->setEnabled(controlsEnabled); ui->actionAdd_Empty->setEnabled(controlsEnabled);
ui->actionImport_Components->setEnabled(controlsEnabled);
ui->actionReload->setEnabled(controlsEnabled); ui->actionReload->setEnabled(controlsEnabled);
ui->actionInstall_mods->setEnabled(controlsEnabled); ui->actionInstall_mods->setEnabled(controlsEnabled);
ui->actionReplace_Minecraft_jar->setEnabled(controlsEnabled); ui->actionReplace_Minecraft_jar->setEnabled(controlsEnabled);
@ -375,6 +376,16 @@ void VersionPage::on_actionReplace_Minecraft_jar_triggered()
updateButtons(); updateButtons();
} }
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);
updateButtons();
}
void VersionPage::on_actionAdd_Agents_triggered() void VersionPage::on_actionAdd_Agents_triggered()
{ {

View File

@ -86,6 +86,7 @@ private slots:
void on_actionMove_down_triggered(); void on_actionMove_down_triggered();
void on_actionAdd_to_Minecraft_jar_triggered(); void on_actionAdd_to_Minecraft_jar_triggered();
void on_actionReplace_Minecraft_jar_triggered(); void on_actionReplace_Minecraft_jar_triggered();
void on_actionImport_Components_triggered();
void on_actionAdd_Agents_triggered(); void on_actionAdd_Agents_triggered();
void on_actionRevert_triggered(); void on_actionRevert_triggered();
void on_actionEdit_triggered(); void on_actionEdit_triggered();

View File

@ -108,6 +108,7 @@
<addaction name="actionReplace_Minecraft_jar"/> <addaction name="actionReplace_Minecraft_jar"/>
<addaction name="actionAdd_Agents"/> <addaction name="actionAdd_Agents"/>
<addaction name="actionAdd_Empty"/> <addaction name="actionAdd_Empty"/>
<addaction name="actionImport_Components"/>
<addaction name="separator"/> <addaction name="separator"/>
<addaction name="actionMinecraftFolder"/> <addaction name="actionMinecraftFolder"/>
<addaction name="actionLibrariesFolder"/> <addaction name="actionLibrariesFolder"/>
@ -272,6 +273,14 @@
<string>Open the instance's local libraries folder.</string> <string>Open the instance's local libraries folder.</string>
</property> </property>
</action> </action>
<action name="actionImport_Components">
<property name="text">
<string>Import Components</string>
</property>
<property name="toolTip">
<string>Import existing component JSON files.</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>