@@ -41,6 +41,8 @@ static const char* SettingName(OptionsModel::OptionID option)
4141 case OptionsModel::ThreadsScriptVerif: return " par" ;
4242 case OptionsModel::SpendZeroConfChange: return " spendzeroconfchange" ;
4343 case OptionsModel::ExternalSignerPath: return " signer" ;
44+ case OptionsModel::MapPortUPnP: return " upnp" ;
45+ case OptionsModel::MapPortNatpmp: return " natpmp" ;
4446 default : throw std::logic_error (strprintf (" GUI option %i has no corresponding node setting." , option));
4547 }
4648}
@@ -128,7 +130,8 @@ bool OptionsModel::Init(bilingual_str& error)
128130
129131 // These are shared with the core or have a command-line parameter
130132 // and we want command-line parameters to overwrite the GUI settings.
131- for (OptionID option : {DatabaseCache, ThreadsScriptVerif, SpendZeroConfChange, ExternalSignerPath}) {
133+ for (OptionID option : {DatabaseCache, ThreadsScriptVerif, SpendZeroConfChange, ExternalSignerPath, MapPortUPnP,
134+ MapPortNatpmp}) {
132135 std::string setting = SettingName (option);
133136 if (node ().isSettingIgnored (setting)) addOverriddenOption (" -" + setting);
134137 try {
@@ -165,18 +168,6 @@ bool OptionsModel::Init(bilingual_str& error)
165168#endif
166169
167170 // Network
168- if (!settings.contains (" fUseUPnP" ))
169- settings.setValue (" fUseUPnP" , DEFAULT_UPNP);
170- if (!gArgs .SoftSetBoolArg (" -upnp" , settings.value (" fUseUPnP" ).toBool ()))
171- addOverriddenOption (" -upnp" );
172-
173- if (!settings.contains (" fUseNatpmp" )) {
174- settings.setValue (" fUseNatpmp" , DEFAULT_NATPMP);
175- }
176- if (!gArgs .SoftSetBoolArg (" -natpmp" , settings.value (" fUseNatpmp" ).toBool ())) {
177- addOverriddenOption (" -natpmp" );
178- }
179-
180171 if (!settings.contains (" fListen" ))
181172 settings.setValue (" fListen" , DEFAULT_LISTEN);
182173 const bool listen{settings.value (" fListen" ).toBool ()};
@@ -390,13 +381,13 @@ QVariant OptionsModel::getOption(OptionID option) const
390381 return fMinimizeToTray ;
391382 case MapPortUPnP:
392383#ifdef USE_UPNP
393- return settings. value ( " fUseUPnP " );
384+ return SettingToBool ( setting (), DEFAULT_UPNP );
394385#else
395386 return false ;
396387#endif // USE_UPNP
397388 case MapPortNatpmp:
398389#ifdef USE_NATPMP
399- return settings. value ( " fUseNatpmp " );
390+ return SettingToBool ( setting (), DEFAULT_NATPMP );
400391#else
401392 return false ;
402393#endif // USE_NATPMP
@@ -478,10 +469,16 @@ bool OptionsModel::setOption(OptionID option, const QVariant& value)
478469 settings.setValue (" fMinimizeToTray" , fMinimizeToTray );
479470 break ;
480471 case MapPortUPnP: // core option - can be changed on-the-fly
481- settings.setValue (" fUseUPnP" , value.toBool ());
472+ if (changed ()) {
473+ update (value.toBool ());
474+ node ().mapPort (value.toBool (), getOption (MapPortNatpmp).toBool ());
475+ }
482476 break ;
483477 case MapPortNatpmp: // core option - can be changed on-the-fly
484- settings.setValue (" fUseNatpmp" , value.toBool ());
478+ if (changed ()) {
479+ update (value.toBool ());
480+ node ().mapPort (getOption (MapPortUPnP).toBool (), value.toBool ());
481+ }
485482 break ;
486483 case MinimizeOnClose:
487484 fMinimizeOnClose = value.toBool ();
@@ -698,4 +695,6 @@ void OptionsModel::checkAndMigrate()
698695 migrate_setting (SpendZeroConfChange, " bSpendZeroConfChange" );
699696 migrate_setting (ExternalSignerPath, " external_signer_path" );
700697#endif
698+ migrate_setting (MapPortUPnP, " fUseUPnP" );
699+ migrate_setting (MapPortNatpmp, " fUseNatpmp" );
701700}
0 commit comments