private void UpdateActiveDemos()

in Kiosk/Views/DemoLauncher/DemoLauncherPage.xaml.cs [220:315]


        private void UpdateActiveDemos()
        {
            IEnumerable<DemoEntry> demoEntries = this.config.Entries.Where(d => d.Enabled)
                .OrderByDescending(d => d.KioskExperience.Attributes.DateUpdated ?? d.KioskExperience.Attributes.DateAdded, StringComparer.OrdinalIgnoreCase);

            // Filter by search box
            if (!string.IsNullOrEmpty(this.searchTextBox?.Text))
            {
                demoEntries = demoEntries.Where(d =>
                    d.KioskExperience.Attributes.DisplayName.Contains(this.searchTextBox.Text, StringComparison.OrdinalIgnoreCase) ||
                    d.KioskExperience.Attributes.Description.Contains(this.searchTextBox.Text, StringComparison.OrdinalIgnoreCase) ||
                    d.KioskExperience.Attributes.ExperienceType.ToString().Contains(this.searchTextBox.Text, StringComparison.OrdinalIgnoreCase) ||
                    d.KioskExperience.Attributes.TechnologiesUsed.ToString().Contains(this.searchTextBox.Text, StringComparison.OrdinalIgnoreCase) ||
                    d.KioskExperience.Attributes.TechnologyArea.ToString().Contains(this.searchTextBox.Text, StringComparison.OrdinalIgnoreCase));
            }

            // Add demo collections
            Func<DemoEntry, bool> recentlyUsedPredicate = d => d.LastOpenDateInUTC > DateTime.MinValue;

            Func<DemoEntry, bool> visionPredicate = d => (d.KioskExperience.Attributes.TechnologyArea & TechnologyAreaType.Vision) != 0 &&
                                                         (d.KioskExperience.Attributes.ExperienceType & ExperienceType.Fun) == 0;

            Func<DemoEntry, bool> searchPredicate = d => ((d.KioskExperience.Attributes.TechnologyArea & TechnologyAreaType.Search) != 0 ||
                                                         (d.KioskExperience.Attributes.TechnologyArea & TechnologyAreaType.Decision) != 0) &&
                                                         (d.KioskExperience.Attributes.ExperienceType & ExperienceType.Fun) == 0;

            Func<DemoEntry, bool> languageAndSpeechPredicate = d => ((d.KioskExperience.Attributes.TechnologyArea & TechnologyAreaType.Language) != 0 ||
                                                                     (d.KioskExperience.Attributes.TechnologyArea & TechnologyAreaType.Speech) != 0) &&
                                                                     (d.KioskExperience.Attributes.ExperienceType & ExperienceType.Fun) == 0;

            Func<DemoEntry, bool> socialPhotoBoothsPredicate = d => (d.KioskExperience.Attributes.ExperienceType & ExperienceType.Fun) != 0;
            switch (DemoCollectionGroup)
            {
                case DemoCollectionType.All:
                    this.Title = "Demo Gallery";
                    this.SubTitle = string.Empty;
                    this.IsMainPage = true;

                    this.RecentlyUsedDemos.Clear();
                    this.RecentlyUsedDemos.AddRange(demoEntries.Where(recentlyUsedPredicate).OrderByDescending(x => x.LastOpenDateInUTC).Take(recentlyUsedDemoNumber));

                    this.NewOrUpdatedDemos.Clear();
                    this.NewOrUpdatedDemos.AddRange(demoEntries.Where(x => IsNewDemo(x.KioskExperience)));

                    this.VisionDemos.Clear();
                    this.VisionDemos.AddRange(demoEntries.Where(visionPredicate));

                    this.SearchDemos.Clear();
                    this.SearchDemos.AddRange(demoEntries.Where(searchPredicate));

                    this.LanguageAndSpeechDemos.Clear();
                    this.LanguageAndSpeechDemos.AddRange(demoEntries.Where(languageAndSpeechPredicate));

                    this.SocialPhotoBoothsDemos.Clear();
                    this.SocialPhotoBoothsDemos.AddRange(demoEntries.Where(socialPhotoBoothsPredicate));
                    break;

                case DemoCollectionType.Favorites:
                    var favoriteDemos = this.config.Entries.Where(d => d.IsFavorite).OrderByDescending(x => x.KioskExperience.Attributes.DateAdded, StringComparer.OrdinalIgnoreCase);
                    demoEntries = demoEntries.Where(d => favoriteDemos.Any(f => f.Id == d.Id));
                    this.Title = "Favorite demos";
                    OpenGalleryDemoView(demoEntries);
                    break;

                case DemoCollectionType.RecentlyUsed:
                    demoEntries = demoEntries.Where(recentlyUsedPredicate).OrderByDescending(x => x.LastOpenDateInUTC).Take(recentlyUsedDemoNumber);
                    OpenGalleryDemoView(demoEntries, "Your recent demos");
                    break;

                case DemoCollectionType.NewOrUpdated:
                    demoEntries = demoEntries.Where(x => IsNewDemo(x.KioskExperience));
                    OpenGalleryDemoView(demoEntries, "What's new");
                    break;

                case DemoCollectionType.Vision:
                    demoEntries = demoEntries.Where(visionPredicate);
                    OpenGalleryDemoView(demoEntries, "Vision");
                    break;

                case DemoCollectionType.Search:
                    demoEntries = demoEntries.Where(searchPredicate);
                    OpenGalleryDemoView(demoEntries, "Decision and Search");
                    break;

                case DemoCollectionType.LanguageAndSpeech:
                    demoEntries = demoEntries.Where(languageAndSpeechPredicate);
                    OpenGalleryDemoView(demoEntries, "Language and Speech");
                    break;

                case DemoCollectionType.SocialPhotoBooths:
                    demoEntries = demoEntries.Where(socialPhotoBoothsPredicate);
                    OpenGalleryDemoView(demoEntries, "Social Photo Booths");
                    break;
            }
            this.numberOfActiveDemos = demoEntries.Count();
        }