Skip to content

Commit b8eb7e7

Browse files
committed
Optimization and Improvement.
1 parent 1d69916 commit b8eb7e7

9 files changed

Lines changed: 73 additions & 85 deletions

v2rayN/ServiceLib/ViewModels/CheckUpdateViewModel.cs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ namespace ServiceLib.ViewModels;
1313
public class CheckUpdateViewModel : MyReactiveObject
1414
{
1515
private const string _geo = "GeoFiles";
16-
private string _v2rayN = ECoreType.v2rayN.ToString();
16+
private readonly string _v2rayN = ECoreType.v2rayN.ToString();
1717
private List<CheckUpdateModel> _lstUpdated = [];
18+
private static readonly string _tag = "CheckUpdateViewModel";
1819

19-
private IObservableCollection<CheckUpdateModel> _checkUpdateModel = new ObservableCollectionExtended<CheckUpdateModel>();
20-
public IObservableCollection<CheckUpdateModel> CheckUpdateModels => _checkUpdateModel;
20+
public IObservableCollection<CheckUpdateModel> CheckUpdateModels { get; } = new ObservableCollectionExtended<CheckUpdateModel>();
2121
public ReactiveCommand<Unit, Unit> CheckUpdateCmd { get; }
2222
[Reactive] public bool EnableCheckPreReleaseUpdate { get; set; }
2323

@@ -26,9 +26,11 @@ public CheckUpdateViewModel(Func<EViewAction, object?, Task<bool>>? updateView)
2626
_config = AppManager.Instance.Config;
2727
_updateView = updateView;
2828

29-
CheckUpdateCmd = ReactiveCommand.CreateFromTask(async () =>
29+
CheckUpdateCmd = ReactiveCommand.CreateFromTask(CheckUpdate);
30+
CheckUpdateCmd.ThrownExceptions.Subscribe(ex =>
3031
{
31-
await CheckUpdate();
32+
Logging.SaveLog(_tag, ex);
33+
_ = UpdateView(_v2rayN, ex.Message);
3234
});
3335

3436
EnableCheckPreReleaseUpdate = _config.CheckUpdateItem.CheckPreReleaseUpdate;
@@ -43,20 +45,20 @@ public CheckUpdateViewModel(Func<EViewAction, object?, Task<bool>>? updateView)
4345

4446
private void RefreshCheckUpdateItems()
4547
{
46-
_checkUpdateModel.Clear();
48+
CheckUpdateModels.Clear();
4749

4850
if (RuntimeInformation.ProcessArchitecture != Architecture.X86)
4951
{
50-
_checkUpdateModel.Add(GetCheckUpdateModel(_v2rayN));
52+
CheckUpdateModels.Add(GetCheckUpdateModel(_v2rayN));
5153
//Not Windows and under Win10
5254
if (!(Utils.IsWindows() && Environment.OSVersion.Version.Major < 10))
5355
{
54-
_checkUpdateModel.Add(GetCheckUpdateModel(ECoreType.Xray.ToString()));
55-
_checkUpdateModel.Add(GetCheckUpdateModel(ECoreType.mihomo.ToString()));
56-
_checkUpdateModel.Add(GetCheckUpdateModel(ECoreType.sing_box.ToString()));
56+
CheckUpdateModels.Add(GetCheckUpdateModel(ECoreType.Xray.ToString()));
57+
CheckUpdateModels.Add(GetCheckUpdateModel(ECoreType.mihomo.ToString()));
58+
CheckUpdateModels.Add(GetCheckUpdateModel(ECoreType.sing_box.ToString()));
5759
}
5860
}
59-
_checkUpdateModel.Add(GetCheckUpdateModel(_geo));
61+
CheckUpdateModels.Add(GetCheckUpdateModel(_geo));
6062
}
6163

6264
private CheckUpdateModel GetCheckUpdateModel(string coreType)
@@ -71,7 +73,7 @@ private CheckUpdateModel GetCheckUpdateModel(string coreType)
7173

7274
private async Task SaveSelectedCoreTypes()
7375
{
74-
_config.CheckUpdateItem.SelectedCoreTypes = _checkUpdateModel.Where(t => t.IsSelected == true).Select(t => t.CoreType ?? "").ToList();
76+
_config.CheckUpdateItem.SelectedCoreTypes = CheckUpdateModels.Where(t => t.IsSelected == true).Select(t => t.CoreType ?? "").ToList();
7577
await ConfigHandler.SaveConfig(_config);
7678
}
7779

@@ -83,13 +85,13 @@ private async Task CheckUpdate()
8385
private async Task CheckUpdateTask()
8486
{
8587
_lstUpdated.Clear();
86-
_lstUpdated = _checkUpdateModel.Where(x => x.IsSelected == true)
88+
_lstUpdated = CheckUpdateModels.Where(x => x.IsSelected == true)
8789
.Select(x => new CheckUpdateModel() { CoreType = x.CoreType }).ToList();
8890
await SaveSelectedCoreTypes();
8991

90-
for (var k = _checkUpdateModel.Count - 1; k >= 0; k--)
92+
for (var k = CheckUpdateModels.Count - 1; k >= 0; k--)
9193
{
92-
var item = _checkUpdateModel[k];
94+
var item = CheckUpdateModels[k];
9395
if (item.IsSelected != true)
9496
{
9597
continue;
@@ -320,14 +322,14 @@ private async Task UpdateView(string coreType, string msg)
320322

321323
public async Task UpdateViewResult(CheckUpdateModel model)
322324
{
323-
var found = _checkUpdateModel.FirstOrDefault(t => t.CoreType == model.CoreType);
325+
var found = CheckUpdateModels.FirstOrDefault(t => t.CoreType == model.CoreType);
324326
if (found == null)
325327
{
326328
return;
327329
}
328330

329331
var itemCopy = JsonUtils.DeepCopy(found);
330332
itemCopy.Remarks = model.Remarks;
331-
_checkUpdateModel.Replace(found, itemCopy);
333+
CheckUpdateModels.Replace(found, itemCopy);
332334
}
333335
}

v2rayN/ServiceLib/ViewModels/ClashConnectionsViewModel.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ namespace ServiceLib.ViewModels;
1010

1111
public class ClashConnectionsViewModel : MyReactiveObject
1212
{
13-
private IObservableCollection<ClashConnectionModel> _connectionItems = new ObservableCollectionExtended<ClashConnectionModel>();
14-
public IObservableCollection<ClashConnectionModel> ConnectionItems => _connectionItems;
13+
public IObservableCollection<ClashConnectionModel> ConnectionItems { get; } = new ObservableCollectionExtended<ClashConnectionModel>();
1514

1615
[Reactive]
1716
public ClashConnectionModel SelectedSource { get; set; }
@@ -74,7 +73,7 @@ private async Task GetClashConnections()
7473

7574
public async Task RefreshConnections(List<ConnectionItem>? connections)
7675
{
77-
_connectionItems.Clear();
76+
ConnectionItems.Clear();
7877

7978
var dtNow = DateTime.Now;
8079
var lstModel = new List<ClashConnectionModel>();
@@ -104,7 +103,7 @@ public async Task RefreshConnections(List<ConnectionItem>? connections)
104103
return;
105104
}
106105

107-
_connectionItems.AddRange(lstModel);
106+
ConnectionItems.AddRange(lstModel);
108107
}
109108

110109
public async Task ClashConnectionClose(bool all)
@@ -121,7 +120,7 @@ public async Task ClashConnectionClose(bool all)
121120
}
122121
else
123122
{
124-
_connectionItems.Clear();
123+
ConnectionItems.Clear();
125124
}
126125
await ClashApiManager.Instance.ClashConnectionClose(id);
127126
await GetClashConnections();

v2rayN/ServiceLib/ViewModels/ClashProxiesViewModel.cs

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,8 @@ public class ClashProxiesViewModel : MyReactiveObject
1717
private Dictionary<string, ProvidersItem>? _providers;
1818
private readonly int _delayTimeout = 99999999;
1919

20-
private IObservableCollection<ClashProxyModel> _proxyGroups = new ObservableCollectionExtended<ClashProxyModel>();
21-
private IObservableCollection<ClashProxyModel> _proxyDetails = new ObservableCollectionExtended<ClashProxyModel>();
22-
23-
public IObservableCollection<ClashProxyModel> ProxyGroups => _proxyGroups;
24-
public IObservableCollection<ClashProxyModel> ProxyDetails => _proxyDetails;
20+
public IObservableCollection<ClashProxyModel> ProxyGroups { get; } = new ObservableCollectionExtended<ClashProxyModel>();
21+
public IObservableCollection<ClashProxyModel> ProxyDetails { get; } = new ObservableCollectionExtended<ClashProxyModel>();
2522

2623
[Reactive]
2724
public ClashProxyModel SelectedGroup { get; set; }
@@ -182,7 +179,7 @@ public async Task RefreshProxyGroups()
182179
}
183180

184181
var selectedName = SelectedGroup?.Name;
185-
_proxyGroups.Clear();
182+
ProxyGroups.Clear();
186183

187184
var proxyGroups = ClashApiManager.Instance.GetClashProxyGroups();
188185
if (proxyGroups != null && proxyGroups.Count > 0)
@@ -198,7 +195,7 @@ public async Task RefreshProxyGroups()
198195
{
199196
continue;
200197
}
201-
_proxyGroups.Add(new ClashProxyModel()
198+
ProxyGroups.Add(new ClashProxyModel()
202199
{
203200
Now = item.now,
204201
Name = item.name,
@@ -214,28 +211,28 @@ public async Task RefreshProxyGroups()
214211
{
215212
continue;
216213
}
217-
var item = _proxyGroups.FirstOrDefault(t => t.Name == kv.Key);
214+
var item = ProxyGroups.FirstOrDefault(t => t.Name == kv.Key);
218215
if (item != null && item.Name.IsNotEmpty())
219216
{
220217
continue;
221218
}
222-
_proxyGroups.Add(new ClashProxyModel()
219+
ProxyGroups.Add(new ClashProxyModel()
223220
{
224221
Now = kv.Value.now,
225222
Name = kv.Key,
226223
Type = kv.Value.type
227224
});
228225
}
229226

230-
if (_proxyGroups != null && _proxyGroups.Count > 0)
227+
if (ProxyGroups != null && ProxyGroups.Count > 0)
231228
{
232-
if (selectedName != null && _proxyGroups.Any(t => t.Name == selectedName))
229+
if (selectedName != null && ProxyGroups.Any(t => t.Name == selectedName))
233230
{
234-
SelectedGroup = _proxyGroups.FirstOrDefault(t => t.Name == selectedName);
231+
SelectedGroup = ProxyGroups.FirstOrDefault(t => t.Name == selectedName);
235232
}
236233
else
237234
{
238-
SelectedGroup = _proxyGroups.First();
235+
SelectedGroup = ProxyGroups.First();
239236
}
240237
}
241238
else
@@ -246,7 +243,7 @@ public async Task RefreshProxyGroups()
246243

247244
private void RefreshProxyDetails(bool c)
248245
{
249-
_proxyDetails.Clear();
246+
ProxyDetails.Clear();
250247
if (!c)
251248
{
252249
return;
@@ -299,7 +296,7 @@ private void RefreshProxyDetails(bool c)
299296
default:
300297
break;
301298
}
302-
_proxyDetails.AddRange(lstDetails);
299+
ProxyDetails.AddRange(lstDetails);
303300
}
304301

305302
private ProxiesItem? TryGetProxy(string name)
@@ -361,12 +358,12 @@ public async Task SetActiveProxy()
361358
await ClashApiManager.Instance.ClashSetActiveProxy(name, nameNode);
362359

363360
selectedProxy.now = nameNode;
364-
var group = _proxyGroups.FirstOrDefault(it => it.Name == SelectedGroup.Name);
361+
var group = ProxyGroups.FirstOrDefault(it => it.Name == SelectedGroup.Name);
365362
if (group != null)
366363
{
367364
group.Now = nameNode;
368365
var group2 = JsonUtils.DeepCopy(group);
369-
_proxyGroups.Replace(group, group2);
366+
ProxyGroups.Replace(group, group2);
370367

371368
SelectedGroup = group2;
372369
}
@@ -375,7 +372,7 @@ public async Task SetActiveProxy()
375372

376373
private async Task ProxiesDelayTest(bool blAll = true)
377374
{
378-
ClashApiManager.Instance.ClashProxiesDelayTest(blAll, _proxyDetails.ToList(), async (item, result) =>
375+
ClashApiManager.Instance.ClashProxiesDelayTest(blAll, ProxyDetails.ToList(), async (item, result) =>
379376
{
380377
if (item == null || result.IsNullOrEmpty())
381378
{
@@ -395,7 +392,7 @@ private async Task ProxiesDelayTest(bool blAll = true)
395392
public async Task ProxiesDelayTestResult(SpeedTestResult result)
396393
{
397394
//UpdateHandler(false, $"{item.name}={result}");
398-
var detail = _proxyDetails.FirstOrDefault(it => it.Name == result.IndexId);
395+
var detail = ProxyDetails.FirstOrDefault(it => it.Name == result.IndexId);
399396
if (detail == null)
400397
{
401398
return;
@@ -417,7 +414,7 @@ public async Task ProxiesDelayTestResult(SpeedTestResult result)
417414
detail.Delay = _delayTimeout;
418415
detail.DelayName = string.Empty;
419416
}
420-
_proxyDetails.Replace(detail, JsonUtils.DeepCopy(detail));
417+
ProxyDetails.Replace(detail, JsonUtils.DeepCopy(detail));
421418
}
422419

423420
#endregion proxy function

v2rayN/ServiceLib/ViewModels/MsgViewModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace ServiceLib.ViewModels;
88

99
public class MsgViewModel : MyReactiveObject
1010
{
11-
private ConcurrentQueue<string> _queueMsg = new();
12-
private int _numMaxMsg = 500;
11+
private readonly ConcurrentQueue<string> _queueMsg = new();
12+
private readonly int _numMaxMsg = 500;
1313
private bool _lastMsgFilterNotAvailable;
1414
private bool _blLockShow = false;
1515

v2rayN/ServiceLib/ViewModels/ProfilesViewModel.cs

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,9 @@ public class ProfilesViewModel : MyReactiveObject
2323

2424
#region ObservableCollection
2525

26-
private IObservableCollection<ProfileItemModel> _profileItems = new ObservableCollectionExtended<ProfileItemModel>();
27-
public IObservableCollection<ProfileItemModel> ProfileItems => _profileItems;
26+
public IObservableCollection<ProfileItemModel> ProfileItems { get; } = new ObservableCollectionExtended<ProfileItemModel>();
2827

29-
private IObservableCollection<SubItem> _subItems = new ObservableCollectionExtended<SubItem>();
30-
public IObservableCollection<SubItem> SubItems => _subItems;
31-
32-
private IObservableCollection<ComboItem> _servers = new ObservableCollectionExtended<ComboItem>();
28+
public IObservableCollection<SubItem> SubItems { get; } = new ObservableCollectionExtended<SubItem>();
3329

3430
[Reactive]
3531
public ProfileItemModel SelectedProfile { get; set; }
@@ -293,7 +289,7 @@ public async Task SetSpeedTestResult(SpeedTestResult result)
293289
NoticeManager.Instance.Enqueue(result.Delay);
294290
return;
295291
}
296-
var item = _profileItems.FirstOrDefault(it => it.IndexId == result.IndexId);
292+
var item = ProfileItems.FirstOrDefault(it => it.IndexId == result.IndexId);
297293
if (item == null)
298294
{
299295
return;
@@ -323,7 +319,7 @@ public async Task UpdateStatistics(ServerSpeedItem update)
323319

324320
try
325321
{
326-
var item = _profileItems.FirstOrDefault(it => it.IndexId == update.IndexId);
322+
var item = ProfileItems.FirstOrDefault(it => it.IndexId == update.IndexId);
327323
if (item != null)
328324
{
329325
item.TodayDown = Utils.HumanFy(update.TodayDown);
@@ -390,8 +386,8 @@ private async Task RefreshServersBiz()
390386
var lstModel = await GetProfileItemsEx(_config.SubIndexId, _serverFilter);
391387
_lstProfile = JsonUtils.Deserialize<List<ProfileItem>>(JsonUtils.Serialize(lstModel)) ?? [];
392388

393-
_profileItems.Clear();
394-
_profileItems.AddRange(lstModel);
389+
ProfileItems.Clear();
390+
ProfileItems.AddRange(lstModel);
395391
if (lstModel.Count > 0)
396392
{
397393
var selected = lstModel.FirstOrDefault(t => t.IndexId == _config.IndexId);
@@ -410,21 +406,21 @@ private async Task RefreshServersBiz()
410406

411407
public async Task RefreshSubscriptions()
412408
{
413-
_subItems.Clear();
409+
SubItems.Clear();
414410

415-
_subItems.Add(new SubItem { Remarks = ResUI.AllGroupServers });
411+
SubItems.Add(new SubItem { Remarks = ResUI.AllGroupServers });
416412

417413
foreach (var item in await AppManager.Instance.SubItems())
418414
{
419-
_subItems.Add(item);
415+
SubItems.Add(item);
420416
}
421-
if (_config.SubIndexId != null && _subItems.FirstOrDefault(t => t.Id == _config.SubIndexId) != null)
417+
if (_config.SubIndexId != null && SubItems.FirstOrDefault(t => t.Id == _config.SubIndexId) != null)
422418
{
423-
SelectedSub = _subItems.FirstOrDefault(t => t.Id == _config.SubIndexId);
419+
SelectedSub = SubItems.FirstOrDefault(t => t.Id == _config.SubIndexId);
424420
}
425421
else
426422
{
427-
SelectedSub = _subItems.First();
423+
SelectedSub = SubItems.First();
428424
}
429425
}
430426

@@ -548,9 +544,9 @@ public async Task RemoveServerAsync()
548544

549545
await ConfigHandler.RemoveServers(_config, lstSelected);
550546
NoticeManager.Instance.Enqueue(ResUI.OperationSuccess);
551-
if (lstSelected.Count == _profileItems.Count)
547+
if (lstSelected.Count == ProfileItems.Count)
552548
{
553-
_profileItems.Clear();
549+
ProfileItems.Clear();
554550
}
555551
await RefreshServers();
556552
if (exists)
@@ -740,7 +736,7 @@ public async Task MoveServer(EMove eMove)
740736

741737
public async Task MoveServerTo(int startIndex, ProfileItemModel targetItem)
742738
{
743-
var targetIndex = _profileItems.IndexOf(targetItem);
739+
var targetIndex = ProfileItems.IndexOf(targetItem);
744740
if (startIndex >= 0 && targetIndex >= 0 && startIndex != targetIndex)
745741
{
746742
if (await ConfigHandler.MoveServer(_config, _lstProfile, startIndex, EMove.Position, targetIndex) == 0)
@@ -754,7 +750,7 @@ public async Task ServerSpeedtest(ESpeedActionType actionType)
754750
{
755751
if (actionType == ESpeedActionType.Mixedtest)
756752
{
757-
SelectedProfiles = _profileItems;
753+
SelectedProfiles = ProfileItems;
758754
}
759755
var lstSelected = await GetProfileItems(false);
760756
if (lstSelected == null)

0 commit comments

Comments
 (0)