diff --git a/PARR.AIHITSyncer/Services/SyncerService.cs b/PARR.AIHITSyncer/Services/SyncerService.cs index 751f91ac..0ce4c408 100644 --- a/PARR.AIHITSyncer/Services/SyncerService.cs +++ b/PARR.AIHITSyncer/Services/SyncerService.cs @@ -141,7 +141,7 @@ namespace PARR.AIHITSyncer.Services if (objFromQuery.APP != null) { - var appList = objFromQuery.APP.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.APP); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.APP); @@ -151,7 +151,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.DB != null) { - var appList = objFromQuery.DB.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.DB); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.DB); @@ -161,7 +161,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.CKBS != null) { - var appList = objFromQuery.CKBS.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.CKBS); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.CKBS); @@ -171,7 +171,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.IB != null) { - var appList = objFromQuery.IB.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.IB); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.IB); @@ -181,7 +181,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.SI != null) { - var appList = objFromQuery.SI.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.SI); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SI); @@ -191,7 +191,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.SM != null) { - var appList = objFromQuery.SM.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.SM); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.SM); @@ -201,7 +201,7 @@ namespace PARR.AIHITSyncer.Services } if (objFromQuery.OS != null) { - var appList = objFromQuery.OS.Split(new char[] { ',', ';' }).Distinct().ToList(); + var appList = ParseAppsList(objFromQuery.OS); foreach (var app in appList) { var created = await CreateAppIfNotExistAsync(app, ApplicationTypesEnum.OS); @@ -213,6 +213,24 @@ namespace PARR.AIHITSyncer.Services } + private List ParseAppsList(string appStr) + { + var regex = new Regex("\\([^)]*\\)"); + + if (regex.IsMatch(appStr)) + foreach (var parenthesis in regex.Matches(appStr)) + { + if (!string.IsNullOrEmpty(parenthesis.ToString())) + { + var newParenthesis = parenthesis.ToString()!.Replace(",", "<|>").Replace(";", "<|>"); + appStr = appStr.Replace(parenthesis!.ToString()!, newParenthesis); + } + } + + return appStr.Split(new char[] { ',', ';' }).Select(a => a.Replace("<|>", ",")).Distinct().ToList(); + } + + private async Task CreateAppIfNotExistAsync(string appName, ApplicationTypesEnum type) { if (string.IsNullOrEmpty(appName) || string.IsNullOrWhiteSpace(appName)) return null;