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();
}