diff --git a/src/platform/qt/ForwarderController.cpp b/src/platform/qt/ForwarderController.cpp index 6083a1d5e..fe0530a73 100644 --- a/src/platform/qt/ForwarderController.cpp +++ b/src/platform/qt/ForwarderController.cpp @@ -65,7 +65,11 @@ void ForwarderController::startBuild(const QString& outFilename) { return; } } - downloadManifest(); + if (m_baseFilename.isEmpty()) { + downloadManifest(); + } else { + m_generator->rebuild(m_baseFilename, m_outFilename); + } } void ForwarderController::downloadForwarderKit() { @@ -201,7 +205,9 @@ void ForwarderController::gotBuild(QNetworkReply* reply) { } void ForwarderController::cleanup() { - m_sourceFile.remove(); + if (m_sourceFile.exists()) { + m_sourceFile.remove(); + } m_inProgress = false; #if defined(Q_OS_WIN) || defined(Q_OS_MAC) diff --git a/src/platform/qt/ForwarderController.h b/src/platform/qt/ForwarderController.h index 7129b63d0..e53006bc2 100644 --- a/src/platform/qt/ForwarderController.h +++ b/src/platform/qt/ForwarderController.h @@ -30,6 +30,10 @@ public: void setGenerator(std::unique_ptr&& generator); ForwarderGenerator* generator() { return m_generator.get(); } + void setBaseFilename(const QString& path) { m_baseFilename = path; } + void clearBaseFilename() { m_baseFilename = QString(); } + QString baseFilename() const { return m_baseFilename; } + QString channel() const { return m_channel; } bool inProgress() const { return m_inProgress; } @@ -62,6 +66,7 @@ private: QString m_outFilename; std::unique_ptr m_generator; QFile m_sourceFile; + QString m_baseFilename; bool m_inProgress = false; QByteArray m_originalPath; }; diff --git a/src/platform/qt/ForwarderView.cpp b/src/platform/qt/ForwarderView.cpp index 2e8929f1d..0546e7180 100644 --- a/src/platform/qt/ForwarderView.cpp +++ b/src/platform/qt/ForwarderView.cpp @@ -94,6 +94,11 @@ void ForwarderView::build() { } m_controller.generator()->setTitle(m_ui.title->text()); m_controller.generator()->setRom(m_ui.romFilename->text()); + if (m_ui.baseType->currentIndex() == 2) { + m_controller.setBaseFilename(m_ui.baseFilename->text()); + } else { + m_controller.clearBaseFilename(); + } m_controller.startBuild(m_ui.outputFilename->text()); m_ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); m_ui.progressBar->setEnabled(true); @@ -120,9 +125,21 @@ void ForwarderView::validate() { if (!m_ui.system->checkedButton()) { valid = false; } - if (m_ui.baseType->currentIndex() != 1) { + if (m_ui.baseType->currentIndex() < 1) { valid = false; } + if (m_ui.baseType->currentIndex() == 2) { + m_ui.baseFilename->setEnabled(true); + m_ui.baseLabel->setEnabled(true); + m_ui.baseBrowse->setEnabled(true); + if (m_ui.baseFilename->text().isEmpty()) { + valid = false; + } + } else { + m_ui.baseFilename->setEnabled(true); + m_ui.baseLabel->setEnabled(true); + m_ui.baseBrowse->setEnabled(true); + } if (m_controller.inProgress()) { valid = false; } diff --git a/src/platform/qt/ForwarderView.ui b/src/platform/qt/ForwarderView.ui index d5a7de842..1c72e3caa 100644 --- a/src/platform/qt/ForwarderView.ui +++ b/src/platform/qt/ForwarderView.ui @@ -87,7 +87,7 @@ - + false