| 35 | #include "modplatform/modrinth/ModrinthPackExportTask.h" |
| 36 | |
| 37 | ExportPackDialog::ExportPackDialog(InstancePtr instance, QWidget* parent, ModPlatform::ResourceProvider provider) |
| 38 | : QDialog(parent), instance(instance), ui(new Ui::ExportPackDialog), m_provider(provider) |
| 39 | { |
| 40 | Q_ASSERT(m_provider == ModPlatform::ResourceProvider::MODRINTH || m_provider == ModPlatform::ResourceProvider::FLAME); |
| 41 | |
| 42 | ui->setupUi(this); |
| 43 | ui->name->setPlaceholderText(instance->name()); |
| 44 | ui->name->setText(instance->settings()->get("ExportName").toString()); |
| 45 | ui->version->setText(instance->settings()->get("ExportVersion").toString()); |
| 46 | ui->optionalFiles->setChecked(instance->settings()->get("ExportOptionalFiles").toBool()); |
| 47 | |
| 48 | if (m_provider == ModPlatform::ResourceProvider::MODRINTH) { |
| 49 | setWindowTitle(tr("Export Modrinth Pack")); |
| 50 | |
| 51 | ui->authorLabel->hide(); |
| 52 | ui->author->hide(); |
| 53 | |
| 54 | ui->summary->setPlainText(instance->settings()->get("ExportSummary").toString()); |
| 55 | } else { |
| 56 | setWindowTitle(tr("Export CurseForge Pack")); |
| 57 | |
| 58 | ui->summaryLabel->hide(); |
| 59 | ui->summary->hide(); |
| 60 | |
| 61 | ui->author->setText(instance->settings()->get("ExportAuthor").toString()); |
| 62 | } |
| 63 | |
| 64 | // ensure a valid pack is generated |
| 65 | // the name and version fields mustn't be empty |
| 66 | connect(ui->name, &QLineEdit::textEdited, this, &ExportPackDialog::validate); |
| 67 | connect(ui->version, &QLineEdit::textEdited, this, &ExportPackDialog::validate); |
| 68 | // the instance name can technically be empty |
| 69 | validate(); |
| 70 | |
| 71 | QFileSystemModel* model = new QFileSystemModel(this); |
| 72 | model->setIconProvider(&icons); |
| 73 | |
| 74 | // use the game root - everything outside cannot be exported |
| 75 | const QDir root(instance->gameRoot()); |
| 76 | proxy = new FileIgnoreProxy(instance->gameRoot(), this); |
| 77 | proxy->ignoreFilesWithPath().insert({ "logs", "crash-reports", ".cache", ".fabric", ".quilt" }); |
| 78 | proxy->ignoreFilesWithName().append({ ".DS_Store", "thumbs.db", "Thumbs.db" }); |
| 79 | proxy->setSourceModel(model); |
| 80 | |
| 81 | const QDir::Filters filter(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs | QDir::Hidden); |
| 82 | |
| 83 | for (const QString& file : root.entryList(filter)) { |
| 84 | if (!(file == "mods" || file == "coremods" || file == "datapacks" || file == "config" || file == "options.txt" || |
| 85 | file == "servers.dat")) |
| 86 | proxy->blockedPaths().insert(file); |
| 87 | } |
| 88 | |
| 89 | MinecraftInstance* mcInstance = dynamic_cast<MinecraftInstance*>(instance.get()); |
| 90 | if (mcInstance) { |
| 91 | const QDir index = mcInstance->loaderModList()->indexDir(); |
| 92 | if (index.exists()) |
| 93 | proxy->ignoreFilesWithPath().insert(root.relativeFilePath(index.absolutePath())); |
| 94 | } |
nothing calls this directly
no test coverage detected