private void UpdateParserLibs(NitraClient client) { try { RemoveDuplicates(ParserLibs, pl => ToFullSuitePath(pl.Path)); var libsArray = ParserLibs.Select(vm => ToFullSuitePath(vm.Path)).ToImmutableArray(); client.Send(new ClientMessage.GetLibsMetadata(libsArray)); var libsMetadata = client.Receive <ServerMessage.LibsMetadata>().metadatas; client.Send(new ClientMessage.GetLibsSyntaxModules(libsArray)); var libsSyntaxModules = client.Receive <ServerMessage.LibsSyntaxModules>().modules; client.Send(new ClientMessage.GetLibsProjectSupports(libsArray)); var libsProjectSupports = client.Receive <ServerMessage.LibsProjectSupports>().libs; Languages.Clear(); DynamicExtensions.Clear(); ProjectSupports.Clear(); for (int i = 0; i < libsMetadata.Length; i++) { var languages = libsMetadata[i].Languages; var syntaxModules = libsSyntaxModules[i].Modules; var projectSupports = libsProjectSupports[i].ProjectSupports; foreach (var language in languages) { Languages.Add(language); } if (!Languages.IsEmpty) { SelectedLanguage = Languages[0]; } foreach (var syntaxModule in syntaxModules) { DynamicExtensions.Add(new DynamicExtensionViewModel(syntaxModule)); } foreach (var projectSupport in projectSupports) { ProjectSupports.Add(new ProjectSupportViewModel(projectSupport.Caption, projectSupport.Path, projectSupport)); } } } catch (Exception e) { Debug.WriteLine("Failed to update parser lib metadata" + Environment.NewLine + e); } }