public static void IndexPrograms() { if (!initing) { lock (lockObject) { initing = true; List <ProgramSource> programSources = new List <ProgramSource>(); programSources.AddRange(LoadDeaultProgramSources()); if (UserSettingStorage.Instance.ProgramSources != null && UserSettingStorage.Instance.ProgramSources.Count(o => o.Enabled) > 0) { programSources.AddRange(UserSettingStorage.Instance.ProgramSources.Where(o => o.Enabled)); } sources.Clear(); programSources.ForEach(source => { Type sourceClass; if (SourceTypes.TryGetValue(source.Type, out sourceClass)) { ConstructorInfo constructorInfo = sourceClass.GetConstructor(new[] { typeof(ProgramSource) }); if (constructorInfo != null) { IProgramSource programSource = constructorInfo.Invoke(new object[] { source }) as IProgramSource; sources.Add(programSource); } } }); var tempPrograms = new List <Program>(); foreach (var source in sources) { var list = source.LoadPrograms(); list.ForEach(o => { o.Source = source; }); tempPrograms.AddRange(list); } // filter duplicate program tempPrograms = tempPrograms.GroupBy(x => new { x.ExecutePath, x.ExecuteName }) .Select(g => g.First()).ToList(); programs = tempPrograms; initing = false; } } }
public static void IndexPrograms() { lock (lockObject) { List <ProgramSource> programSources = new List <ProgramSource>(); programSources.AddRange(LoadDeaultProgramSources()); if (_settings.ProgramSources != null && _settings.ProgramSources.Count(o => o.Enabled) > 0) { programSources.AddRange(_settings.ProgramSources); } sources.Clear(); foreach (var source in programSources.Where(o => o.Enabled)) { // happlebao todo: temp hack for program suffixes source.Suffixes = _settings.ProgramSuffixes; Type sourceClass; if (SourceTypes.TryGetValue(source.Type, out sourceClass)) { ConstructorInfo constructorInfo = sourceClass.GetConstructor(new[] { typeof(ProgramSource) }); if (constructorInfo != null) { IProgramSource programSource = constructorInfo.Invoke(new object[] { source }) as IProgramSource; sources.Add(programSource); } } } var tempPrograms = new List <Program>(); foreach (var source in sources) { var list = source.LoadPrograms(); list.ForEach(o => { o.Source = source; }); tempPrograms.AddRange(list); } // filter duplicate program programs = tempPrograms.GroupBy(x => new { x.ExecutePath, x.ExecuteName }) .Select(g => g.First()).ToList(); _cache.Programs = programs; _cache.Save(); } }