@@ -51,6 +51,8 @@ public partial class MainViewModel : ObservableRecipient,
5151
5252 private EditableIPConfigModel ? _lastSelectedIPConfig ;
5353
54+ private IPv4Config ? _selectedNicIPv4Config ;
55+
5456 #endregion Fields
5557
5658 #region ObservableProperties
@@ -78,13 +80,21 @@ public partial class MainViewModel : ObservableRecipient,
7880 [ ObservableProperty ]
7981 private ObservableCollection < CultureInfo > _languages = null ! ;
8082
83+ [ ObservableProperty ]
84+ [ NotifyPropertyChangedFor ( nameof ( CanLoadLastUsedIPv4Config ) ) ]
85+ [ NotifyCanExecuteChangedFor ( nameof ( LoadLastUsedIPv4ConfigCommand ) ) ]
86+ private LastUsedIPv4Config ? _lastUsedIPv4Config ;
87+
8188 [ ObservableProperty ]
8289 private int _selectedIPConfigsCount ;
8390
8491 [ ObservableProperty ]
8592 [ NotifyPropertyChangedRecipients ]
8693 [ NotifyPropertyChangedFor ( nameof ( IsSelectedNicNotNull ) ) ]
87- [ NotifyCanExecuteChangedFor ( nameof ( CopySelectedNicIPConfigAsTextCommand ) , nameof ( MakeSelectedNicIPConfigCopyCommand ) , nameof ( ViewToNicConfigDetailCommand ) ) ]
94+ [ NotifyCanExecuteChangedFor ( nameof ( CopySelectedNicIPConfigAsTextCommand ) ,
95+ nameof ( MakeSelectedNicIPConfigCopyCommand ) ,
96+ nameof ( ViewToNicConfigDetailCommand ) ,
97+ nameof ( ReadLastUsedIPv4ConfigCommand ) ) ]
8898 private Nic ? _selectedNic ;
8999
90100 [ ObservableProperty ]
@@ -106,6 +116,8 @@ public partial class MainViewModel : ObservableRecipient,
106116
107117 #region Properties
108118
119+ public bool CanLoadLastUsedIPv4Config => LastUsedIPv4Config is not null ;
120+
109121 public string GetNicsToolTip { get ; private set ; } = Lang . AdapterNotFound ;
110122
111123 public bool IsSelectedNicNotNull => SelectedNic is not null ;
@@ -363,12 +375,34 @@ private async Task LoadedAsync()
363375 await GetLatestReleaseInfoAsync ( ) ;
364376 }
365377
378+ [ RelayCommand ( CanExecute = nameof ( CanLoadLastUsedIPv4Config ) ) ]
379+ private void LoadLastUsedIPv4Config ( )
380+ {
381+ LastUsedIPv4Config ! . DeepCloneTo ( SelectedNicIPConfig ! . IPv4Config ) ;
382+ SelectedNicIPConfigCheckedCommand . Execute ( null ) ;
383+ }
384+
366385 [ RelayCommand ( CanExecute = nameof ( IsSelectedNicNotNull ) ) ]
367386 private void MakeSelectedNicIPConfigCopy ( )
368387 {
369388 Messenger . Send < EditableIPConfigModel , string > ( SelectedNicIPConfig ! , "MakeSelectedNicIPConfigCopy" ) ;
370389 }
371390
391+ [ RelayCommand ( CanExecute = nameof ( IsSelectedNicNotNull ) ) ]
392+ private async Task ReadLastUsedIPv4ConfigAsync ( )
393+ {
394+ var backup = await LastUsedIPv4Config . ReadAsync ( SelectedNic ! . Id ) ;
395+
396+ if ( backup is null || backup . PropertyEquals ( _selectedNicIPv4Config ! ) )
397+ {
398+ LastUsedIPv4Config = null ;
399+ }
400+ else
401+ {
402+ LastUsedIPv4Config = backup ;
403+ }
404+ }
405+
372406 [ RelayCommand ]
373407 private void Refresh ( )
374408 {
@@ -496,12 +530,11 @@ partial void OnSelectedNicChanged(Nic? value)
496530 return ;
497531 }
498532
499- var iPv4Config = NetworkManagement . GetIPv4Config ( nic ) ;
500-
501533 var oldSelectedNicIPConfig = SelectedNicIPConfig ;
534+ _selectedNicIPv4Config = NetworkManagement . GetIPv4Config ( nic ) ;
502535
503536 SelectedNicIPConfig = new ( $ "{ nic . Name } - { nic . Description } ") {
504- IPv4Config = iPv4Config
537+ IPv4Config = _selectedNicIPv4Config . DeepClone ( )
505538 } ;
506539
507540 SelectedNicIPConfig . BeginEdit ( ) ;
@@ -583,6 +616,9 @@ private static void OpenUri(string uri)
583616 [ GeneratedRegex ( "^\\ -\\ s" , RegexOptions . Multiline ) ]
584617 private static partial Regex ReleaseNoteFormatRegex ( ) ;
585618
619+ [ GeneratedRegex ( "^[0-9A-Z]{8}-[0-9A-Z]{4}-[0-9A-Z]{4}-[0-9A-Z]{4}-[0-9A-Z]{12}.json$" , RegexOptions . IgnoreCase ) ]
620+ private static partial Regex TempFileNameRegex ( ) ;
621+
586622 private async Task GetLatestReleaseInfoAsync ( )
587623 {
588624 try
0 commit comments