private void UpdateDependencyIndex(ModuleManifest module) { var dependedModules = Modules.Where(m => m.Manifest.Dependencies.Any(k => k.ModuleName == module.Name)); if (DependencyIndex.Any(m => m.ModuleName == module.Name)) { DependencyIndex.Single(m => m.ModuleName == module.Name).Dep = module.Dependencies.Select(dp => dp.ModuleName).ToList(); //Modules.Single(m => m.Value.Manifest.ModuleName == module.Manifest.ModuleName).Value.Manifest.Dependencies = module.Manifest.Dependencies; try { var oldModule = Modules.Single(m => m.Manifest.Name == module.Name); var dependOnModules = Modules.Where(m => oldModule.Manifest.Dependencies.Select(d => d.ModuleName).Contains(m.Manifest.Name)); var targets = DependencyIndex.Where(dp => dependOnModules.Any(m => m.Manifest.Name == dp.ModuleName)).ToList(); foreach (var target in targets) { DependencyIndex.Single(d => d.ModuleName == target.ModuleName).Cnt--; } } catch { } } else { var temp = new ModuleIndexData { Dep = module.Dependencies.Select(m => m.ModuleName).ToList(), Cnt = 0, ModuleName = module.Name }; DependencyIndex.Add(temp); } foreach (var dependency in module.Dependencies) { DependencyIndex.Single(m => m.ModuleName == dependency.ModuleName).Cnt++; } File.WriteAllText(GetDiFilePath(), JsonConvert.SerializeObject(DependencyIndex)); }
private void LoadModulesWithDependencyIndex() { DependencyIndex.Sort( delegate(ModuleIndexData d1, ModuleIndexData d2) { if (d1.Delta > d2.Delta) { return(-1); } else if (d1.Delta < d2.Delta) { return(1); } else { if (d1.Cnt > d2.Cnt) { return(-1); } else if (d1.Cnt < d2.Cnt) { return(1); } else { return(0); } } }); foreach (var dp in DependencyIndex) { var folder = Directory.GetDirectories($"{Consts.MODULES_BASE_PATH}/").FirstOrDefault(m => m.ToLower().EndsWith(dp.ModuleName.ToLower())); AddModule(File.ReadAllBytes(Directory.GetFiles(folder, "*.dll").Single()), false); ModuleManager.ChangeModuleStatus(dp.ModuleName, ModuleStatus.Enable); } }