From e47dc40488704e0c209bb3afaa4213840b2c29df Mon Sep 17 00:00:00 2001 From: DHR60 Date: Thu, 5 Feb 2026 18:02:17 +0800 Subject: [PATCH] Fix --- v2rayN/ServiceLib/Manager/AppManager.cs | 61 ++++++++++++------- .../Singbox/SingboxOutboundService.cs | 6 +- .../CoreConfig/V2ray/V2rayOutboundService.cs | 5 +- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/v2rayN/ServiceLib/Manager/AppManager.cs b/v2rayN/ServiceLib/Manager/AppManager.cs index 9cd5a567..e2a108f0 100644 --- a/v2rayN/ServiceLib/Manager/AppManager.cs +++ b/v2rayN/ServiceLib/Manager/AppManager.cs @@ -96,7 +96,10 @@ public sealed class AppManager _ = StatePort; _ = StatePort2; - _ = MigrateProfileExtra(); + Task.Run(async () => + { + await MigrateProfileExtra(); + }).Wait(); return true; } @@ -277,29 +280,33 @@ public sealed class AppManager break; } + var batchSuccessCount = 0; foreach (var item in batch) { - var extra = item.GetProtocolExtra(); - - if (item.ConfigType is EConfigType.PolicyGroup or EConfigType.ProxyChain) + try { - extra = extra with { GroupType = nameof(item.ConfigType) }; - groupItems.TryGetValue(item.IndexId, out var groupItem); - if (groupItem != null && !groupItem.NotHasChild()) + var extra = item.GetProtocolExtra(); + + if (item.ConfigType is EConfigType.PolicyGroup or EConfigType.ProxyChain) { - extra = extra with + extra = extra with { GroupType = nameof(item.ConfigType) }; + groupItems.TryGetValue(item.IndexId, out var groupItem); + if (groupItem != null && !groupItem.NotHasChild()) { - ChildItems = groupItem.ChildItems, - SubChildItems = groupItem.SubChildItems, - Filter = groupItem.Filter, - MultipleLoad = groupItem.MultipleLoad, - }; + extra = extra with + { + ChildItems = groupItem.ChildItems, + SubChildItems = groupItem.SubChildItems, + Filter = groupItem.Filter, + MultipleLoad = groupItem.MultipleLoad, + }; + } } switch (item.ConfigType) { case EConfigType.Shadowsocks: - extra = extra with {SsMethod = item.Security.NullIfEmpty() }; + extra = extra with { SsMethod = item.Security.NullIfEmpty() }; break; case EConfigType.VMess: extra = extra with @@ -312,6 +319,7 @@ public sealed class AppManager extra = extra with { Flow = item.Flow.NullIfEmpty(), + VlessEncryption = item.Security, }; break; case EConfigType.Hysteria2: @@ -341,18 +349,27 @@ public sealed class AppManager WgMtu = int.TryParse(item.ShortId, out var mtu) ? mtu : 1280 }; break; + default: + break; } + + item.SetProtocolExtra(extra); + + item.Password = item.Id; + + item.ConfigVersion = 3; + await SQLiteHelper.Instance.UpdateAsync(item); + batchSuccessCount++; + } + catch (Exception ex) + { + Logging.SaveLog($"MigrateProfileExtra Error: {ex}"); } - - item.SetProtocolExtra(extra); - - item.Password = item.Id; - - item.ConfigVersion = 3; - await SQLiteHelper.Instance.UpdateAsync(item); } - offset += pageSize; + // Only increment offset by the number of failed items that remain in the result set + // Successfully updated items are automatically excluded from future queries due to ConfigVersion = 3 + offset += batch.Count - batchSuccessCount; } //await ProfileGroupItemManager.Instance.ClearAll(); diff --git a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs index 6ce5f6d2..ef4bbaec 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs @@ -114,13 +114,13 @@ public partial class CoreConfigSingboxService outbound.packet_encoding = "xudp"; - if (protocolExtra.Flow.IsNullOrEmpty()) + if (!protocolExtra.Flow.IsNullOrEmpty()) { - await GenOutboundMux(node, outbound); + outbound.flow = protocolExtra.Flow; } else { - outbound.flow = protocolExtra.Flow; + await GenOutboundMux(node, outbound); } await GenOutboundTransport(node, outbound); diff --git a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs index bdb99699..71d27ea1 100644 --- a/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs +++ b/v2rayN/ServiceLib/Services/CoreConfig/V2ray/V2rayOutboundService.cs @@ -144,13 +144,12 @@ public partial class CoreConfigV2rayService usersItem.email = Global.UserEMail; usersItem.encryption = protocolExtra.VlessEncryption; - if (protocolExtra.Flow.IsNullOrEmpty()) + if (!protocolExtra.Flow.IsNullOrEmpty()) { - await GenOutboundMux(node, outbound, muxEnabled, muxEnabled); + usersItem.flow = protocolExtra.Flow; } else { - usersItem.flow = protocolExtra.Flow; await GenOutboundMux(node, outbound, false, muxEnabled); } outbound.settings.servers = null;