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