@@ -133,7 +133,7 @@ public void CheckNotifications()
133133 }
134134 }
135135
136- public Notifications GetNotifications ( )
136+ Notifications GetNotifications ( )
137137 {
138138 string notificationsSerial ;
139139
@@ -437,68 +437,37 @@ private string GetUrl(Link link)
437437 return url ;
438438 }
439439
440- public void ReplaceParameters ( )
440+ void ReplaceParameters ( )
441441 {
442- foreach ( var n in Notifications . NotificationList )
443- {
444- n . Title = ReplaceParameter ( n . Title ) ;
445- n . Date = ReplaceParameter ( n . Date ) ;
446- n . ItemList ? . ForEach ( item => ReplaceItemParameter ( item ) ) ;
447- }
448- foreach ( var list in Notifications . CheckList )
449- {
450- foreach ( var c in list ? . AnyOfList )
451- {
452- c ? . AllOfList . ForEach ( criteria => ReplaceCriteriaPropertyParameter ( criteria ) ) ;
453- c ? . AllOfList . ForEach ( criteria => ReplaceCriteriaValueParameter ( criteria ) ) ;
454- }
455- }
442+ Notifications . ReplaceParameters ( ReplaceParameterValues ) ;
456443 }
457444
458- private void ReplaceItemParameter ( Item item )
459- {
460- if ( item is Record record )
461- record . Value = ReplaceParameter ( record . Value ) ;
462- if ( item is Link link )
463- link . Value = ReplaceParameter ( link . Value ) ;
464- if ( item is Update update )
465- update . Value = ReplaceParameter ( update . Value ) ;
466- }
467-
468- /// <summary>
469- /// If Property is a parameter, remove {{..}} and add it and its replacement to the dictionary.
470- /// </summary>
471- /// <param name="criteria"></param>
472- private void ReplaceCriteriaPropertyParameter ( Criteria criteria )
445+ string ReplaceParameterValues ( string value )
473446 {
474- if ( ContainsParameter ( criteria . Property ) )
447+ if ( value == null ) return value ;
448+ var start = 0 ;
449+ while ( ( start = value . IndexOf ( "{{" , start ) ) >= 0 )
475450 {
476- criteria . Property = ReplaceParameter ( criteria . Property ) ;
451+ var end = value . IndexOf ( "}}" , start ) ;
452+ if ( end == - 1 ) break ;
453+ var variable = value . Substring ( start + 2 , end - start - 2 ) ;
454+ var replacement = GetParameterValue ( variable ) ;
455+ value = value . Substring ( 0 , start ) + replacement + value . Substring ( end + 2 ) ;
456+ start += replacement . Length ;
477457 }
458+ return value ;
478459 }
479460
480- private void ReplaceCriteriaValueParameter ( Criteria criteria )
481- {
482- criteria . Value = ReplaceParameter ( criteria . Value ) ;
483- }
484-
485- private string ReplaceParameter ( string field )
461+ string GetParameterValue ( string parameter )
486462 {
487- if ( ContainsParameter ( field ) == false ) return field ;
488-
489- var parameterArray = field . Split ( '{' , '}' ) ; // 5 elements: prefix, "", target, "", suffix
490- var target = parameterArray [ 2 ] ;
491- var lowerCaseTarget = parameterArray [ 2 ] . ToLower ( ) ;
492463 string replacement ;
493-
494- // If found in dictionary, then use that else extract it from program
495- if ( ParameterDictionary . ContainsKey ( lowerCaseTarget ) )
464+ if ( ParameterDictionary . ContainsKey ( parameter ) )
496465 {
497- replacement = ParameterDictionary [ lowerCaseTarget ] ;
466+ replacement = ParameterDictionary [ parameter ] ;
498467 }
499468 else
500469 {
501- switch ( lowerCaseTarget )
470+ switch ( parameter )
502471 {
503472 // Update parameters
504473 // Using "none" instead of "" so that records are readable.
@@ -555,23 +524,15 @@ private string ReplaceParameter(string field)
555524 replacement = GetInstalledRoutes ( ) ;
556525 break ;
557526 default :
558- var propertyValue = GetSetting ( target ) ;
527+ var propertyValue = GetSetting ( parameter ) ;
559528 replacement = ( propertyValue == "" )
560- ? field // strings that are not recognised are not replaced.
529+ ? "{{" + parameter + "}}" // strings that are not recognised are not replaced.
561530 : propertyValue . ToLower ( ) . Replace ( "false" , "off" ) . Replace ( "true" , "on" ) ;
562531 break ;
563532 }
564- ParameterDictionary . Add ( lowerCaseTarget , replacement ) ;
533+ ParameterDictionary . Add ( parameter , replacement ) ;
565534 }
566-
567- return parameterArray [ 0 ] + replacement + parameterArray [ 4 ] ;
568- }
569-
570- private bool ContainsParameter ( string field )
571- {
572- if ( field . Contains ( "{{" ) == false ) return false ;
573- if ( field . Contains ( "}}" ) == false ) return false ;
574- return true ;
535+ return replacement ;
575536 }
576537
577538 /// <summary>
@@ -617,7 +578,7 @@ private string GetInstalledRoutes()
617578 return installedRouteList ;
618579 }
619580
620- public OverrideParameterList GetOverrideParameters ( )
581+ OverrideParameterList GetOverrideParameters ( )
621582 {
622583 // To support testing of a new remote notifications.json file before it is published,
623584 // GetNotifications tests first for a local file notifications_override_values.json
0 commit comments