private IList <ObjectStoreModel> GetAvailableObjectStores( [NotNull] IInstancePool instancePool, [NotNull] IDataProvider dataProvider) { if (instancePool == null) { throw new ArgumentNullException(nameof(instancePool)); } if (dataProvider == null) { throw new ArgumentNullException(nameof(dataProvider)); } const string profileDirectoryName = "Profiles"; var profileDirectory = WorkingDirectory.GetChildStore(profileDirectoryName, true); var generators = GetModelGenerators().AsList(); var objectStores = new List <ObjectStoreModel>(); foreach (var generator in generators) { var profileModel = new PresetModel { Key = generator.Key, DisplayName = generator.DisplayName, Generator = generator, IconStore = generator.Icons }; instancePool.Register(profileModel); objectStores.Add(profileModel); } if (WorkingDirectory.HasChildStore(profileDirectoryName)) { var profiles = profileDirectory.GetChildStoreKeys(); var messages = new List <string>(); foreach (var storageKey in profiles) { var currentProfileDirectory = profileDirectory.GetChildStore(storageKey); if (!currentProfileDirectory.ContainsKey("profile.json")) { continue; } try { const string dataDirectoryName = "Data"; const string iconsDirectoryName = "Icons"; var profileModel = dataProvider.Read <ProfileModel>(currentProfileDirectory.Open("profile.json")); if (profileModel == null) { continue; } profileModel.DataStore = currentProfileDirectory.GetChildStore(dataDirectoryName); profileModel.IconStore = currentProfileDirectory.GetChildStore(iconsDirectoryName); instancePool.Register(profileModel); objectStores.Add(profileModel); } catch (Exception exception) { messages.Add($"{storageKey}: {exception.GetOriginalMessage()}"); } } if (messages.Any()) { Dialog.Error(string.Join("\r\n", messages)).Display(); } } return(objectStores); }