mirror of
https://github.com/2dust/v2rayN.git
synced 2026-09-14 02:12:06 +03:00
Use profile IDs for server move operations
Refactor `ConfigHandler.MoveServer` to accept a `List<string>` of profile `IndexId`s instead of full `ProfileItem` objects. In `ProfilesViewModel`, remove the duplicated `_lstProfile` cache and build move lists directly from `ProfileItems`, so move and drag-reorder actions use the live UI order and avoid stale profile snapshots.
This commit is contained in:
@@ -471,12 +471,12 @@ public static class ConfigHandler
|
||||
/// Supports moving to top, up, down, bottom or specific position
|
||||
/// </summary>
|
||||
/// <param name="config">Current configuration</param>
|
||||
/// <param name="lstProfile">List of server profiles</param>
|
||||
/// <param name="lstProfile">List of server profile index ids</param>
|
||||
/// <param name="index">Index of the server to move</param>
|
||||
/// <param name="eMove">Direction to move the server</param>
|
||||
/// <param name="pos">Target position when using EMove.Position</param>
|
||||
/// <returns>0 if successful, -1 if failed</returns>
|
||||
public static async Task<int> MoveServer(Config config, List<ProfileItem> lstProfile, int index, EMove eMove, int pos = -1)
|
||||
public static async Task<int> MoveServer(Config config, List<string> lstProfile, int index, EMove eMove, int pos = -1)
|
||||
{
|
||||
var count = lstProfile.Count;
|
||||
if (index < 0 || index > lstProfile.Count - 1)
|
||||
@@ -486,7 +486,7 @@ public static class ConfigHandler
|
||||
|
||||
for (var i = 0; i < lstProfile.Count; i++)
|
||||
{
|
||||
ProfileExManager.Instance.SetSort(lstProfile[i].IndexId, (i + 1) * 10);
|
||||
ProfileExManager.Instance.SetSort(lstProfile[i], (i + 1) * 10);
|
||||
}
|
||||
|
||||
var sort = 0;
|
||||
@@ -498,7 +498,7 @@ public static class ConfigHandler
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile.First().IndexId) - 1;
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile.First()) - 1;
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -508,7 +508,7 @@ public static class ConfigHandler
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[index - 1].IndexId) - 1;
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[index - 1]) - 1;
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -519,7 +519,7 @@ public static class ConfigHandler
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[index + 1].IndexId) + 1;
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[index + 1]) + 1;
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -529,7 +529,7 @@ public static class ConfigHandler
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[^1].IndexId) + 1;
|
||||
sort = ProfileExManager.Instance.GetSort(lstProfile[^1]) + 1;
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -538,7 +538,7 @@ public static class ConfigHandler
|
||||
break;
|
||||
}
|
||||
|
||||
ProfileExManager.Instance.SetSort(lstProfile[index].IndexId, sort);
|
||||
ProfileExManager.Instance.SetSort(lstProfile[index], sort);
|
||||
return await Task.FromResult(0);
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,6 @@ public partial class ProfilesViewModel : MyReactiveObject
|
||||
|
||||
#region private prop
|
||||
|
||||
private List<ProfileItem> _lstProfile;
|
||||
private string _serverFilter = string.Empty;
|
||||
private readonly Dictionary<string, bool> _dicHeaderSort = new();
|
||||
private SpeedtestService? _speedtestService;
|
||||
@@ -362,7 +361,6 @@ public partial class ProfilesViewModel : MyReactiveObject
|
||||
public async Task RefreshServersBiz()
|
||||
{
|
||||
var lstModel = await GetProfileItemsEx(_config.SubIndexId, _serverFilter);
|
||||
_lstProfile = JsonUtils.Deserialize<List<ProfileItem>>(JsonUtils.Serialize(lstModel)) ?? [];
|
||||
|
||||
ProfileItems.ReplaceRange(lstModel ?? []);
|
||||
if (lstModel?.Count > 0)
|
||||
@@ -677,19 +675,15 @@ public partial class ProfilesViewModel : MyReactiveObject
|
||||
|
||||
public async Task MoveServer(EMove eMove)
|
||||
{
|
||||
var item = _lstProfile.FirstOrDefault(t => t.IndexId == SelectedProfile.IndexId);
|
||||
if (item is null)
|
||||
var lstProfile = ProfileItems?.Select(t => t.IndexId).ToList() ?? [];
|
||||
var index = lstProfile.IndexOf(SelectedProfile.IndexId);
|
||||
if (index < 0)
|
||||
{
|
||||
NoticeManager.Instance.Enqueue(ResUI.PleaseSelectServer);
|
||||
return;
|
||||
}
|
||||
|
||||
var index = _lstProfile.IndexOf(item);
|
||||
if (index < 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (await ConfigHandler.MoveServer(_config, _lstProfile, index, eMove) == 0)
|
||||
if (await ConfigHandler.MoveServer(_config, lstProfile, index, eMove) == 0)
|
||||
{
|
||||
await RefreshServers();
|
||||
}
|
||||
@@ -700,7 +694,8 @@ public partial class ProfilesViewModel : MyReactiveObject
|
||||
var targetIndex = ProfileItems.IndexOf(targetItem);
|
||||
if (startIndex >= 0 && targetIndex >= 0 && startIndex != targetIndex)
|
||||
{
|
||||
if (await ConfigHandler.MoveServer(_config, _lstProfile, startIndex, EMove.Position, targetIndex) == 0)
|
||||
var lstProfile = ProfileItems?.Select(t => t.IndexId).ToList() ?? [];
|
||||
if (await ConfigHandler.MoveServer(_config, lstProfile, startIndex, EMove.Position, targetIndex) == 0)
|
||||
{
|
||||
await RefreshServers();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user