示例#1
0
        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);
        }