3030#define DECORATION_SIZE 65
3131#define NUM_ITEMS 3
3232#define REQUEST_START_ALL 1
33+ #define REQUEST_START_MISSING 2
3334
3435class MNHolder : public FurListRow <QWidget*>
3536{
@@ -100,6 +101,7 @@ MasterNodesWidget::MasterNodesWidget(PIVXGUI *parent) :
100101 ui->pushButtonSave ->setText (tr (" Create Masternode Controller" ));
101102 setCssBtnPrimary (ui->pushButtonSave );
102103 setCssBtnPrimary (ui->pushButtonStartAll );
104+ setCssBtnPrimary (ui->pushButtonStartMissing );
103105
104106 /* Options */
105107 ui->btnAbout ->setTitleClassAndText (" btn-title-grey" , " What is a Masternode?" );
@@ -120,7 +122,12 @@ MasterNodesWidget::MasterNodesWidget(PIVXGUI *parent) :
120122 setCssProperty (ui->labelEmpty , " text-empty" );
121123
122124 connect (ui->pushButtonSave , SIGNAL (clicked ()), this , SLOT (onCreateMNClicked ()));
123- connect (ui->pushButtonStartAll , SIGNAL (clicked ()), this , SLOT (onStartAllClicked ()));
125+ connect (ui->pushButtonStartAll , &QPushButton::clicked, [this ]() {
126+ onStartAllClicked (REQUEST_START_ALL);
127+ });
128+ connect (ui->pushButtonStartMissing , &QPushButton::clicked, [this ]() {
129+ onStartAllClicked (REQUEST_START_MISSING);
130+ });
124131 connect (ui->listMn , SIGNAL (clicked (QModelIndex)), this , SLOT (onMNClicked (QModelIndex)));
125132 connect (ui->btnAbout , &OptionButton::clicked, [this ](){window->openFAQ (9 );});
126133 connect (ui->btnAboutController , &OptionButton::clicked, [this ](){window->openFAQ (10 );});
@@ -228,23 +235,31 @@ bool MasterNodesWidget::startMN(CMasternodeConfig::CMasternodeEntry mne, std::st
228235 return true ;
229236}
230237
231- void MasterNodesWidget::onStartAllClicked () {
238+ void MasterNodesWidget::onStartAllClicked (int type ) {
232239 if (!verifyWalletUnlocked ()) return ;
233240 if (isLoading) {
234- inform (tr (" Start all Masternodes is being executed, please wait" ));
241+ inform (tr (" Background task is being executed, please wait" ));
235242 } else {
236243 isLoading = true ;
237- if (!execute (REQUEST_START_ALL )) {
244+ if (!execute (type )) {
238245 isLoading = false ;
239- inform (tr (" Cannot perform start all Mastenodes" ));
246+ inform (tr (" Cannot perform Mastenodes start " ));
240247 }
241248 }
242249}
243250
244- bool MasterNodesWidget::startAll (QString& failText) {
251+ bool MasterNodesWidget::startAll (QString& failText, bool onlyMissing ) {
245252 int amountOfMnFailed = 0 ;
246253 int amountOfMnStarted = 0 ;
247254 for (CMasternodeConfig::CMasternodeEntry mne : masternodeConfig.getEntries ()) {
255+ // Check for missing only
256+ QString mnAlias = QString::fromStdString (mne.getAlias ());
257+ if (onlyMissing && !mnModel->isMNInactive (mnAlias)) {
258+ if (!mnModel->isMNActive (mnAlias))
259+ amountOfMnFailed++;
260+ continue ;
261+ }
262+
248263 std::string strError;
249264 if (!startMN (mne, strError)) {
250265 amountOfMnFailed++;
@@ -254,17 +269,20 @@ bool MasterNodesWidget::startAll(QString& failText) {
254269 }
255270 if (amountOfMnFailed > 0 ) {
256271 failText = tr (" %1 Masternodes failed to start, %2 started" ).arg (amountOfMnFailed).arg (amountOfMnStarted);
272+ return false ;
257273 }
258274 return true ;
259275}
260276
261277void MasterNodesWidget::run (int type) {
262- if (type == REQUEST_START_ALL) {
278+ bool isStartMissing = type == REQUEST_START_MISSING;
279+ if (type == REQUEST_START_ALL || isStartMissing) {
263280 QString failText;
264- QString inform = startAll (failText) ? tr (" All Masternodes started!" ) : failText;
281+ QString inform = startAll (failText, isStartMissing ) ? tr (" All Masternodes started!" ) : failText;
265282 QMetaObject::invokeMethod (this , " updateModelAndInform" , Qt::QueuedConnection,
266283 Q_ARG (QString, inform));
267284 }
285+
268286 isLoading = false ;
269287}
270288
0 commit comments