Exemple #1
0
        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));
        }
Exemple #2
0
 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);
     }
 }