public void UpdateSlideShowItem() { if (SlidesQueue.Count == 0) { return; } var slide = SlidesQueue.Peek(); while (CachedSlides.Count >= MaxCacheSize) { var idx = _random.Next(0, SlideShowElements.Count); var randomSlide = SlideShowElements[idx]; while (!CachedSlides.ContainsKey(randomSlide.ModID) || SlidesQueue.Contains(randomSlide)) { idx = _random.Next(0, SlideShowElements.Count); randomSlide = SlideShowElements[idx]; } //if (SlidesQueue.Contains(randomSlide)) continue; CachedSlides.Remove(randomSlide.ModID); if (AppState.GcCollect) { GC.Collect(); } } if (!slide.IsNSFW || (slide.IsNSFW && ShowNSFW)) { _appState.SplashScreenImage = _appState._noneImage; if (slide.ImageURL != null && slide.Image != null) { if (!CachedSlides.ContainsKey(slide.ModID)) { return; } _appState.SplashScreenImage = slide.Image; } _appState.SplashScreenModName = slide.ModName; _appState.SplashScreenAuthorName = slide.ModAuthor; _appState.SplashScreenSummary = slide.ModDescription; _appState._nexusSiteURL = slide.ModURL; } SlidesQueue.Dequeue(); QueueRandomSlide(false, true); }
private bool QueueRandomSlide(bool init, bool checkLast) { var result = false; var idx = _random.Next(0, SlideShowElements.Count); var element = SlideShowElements[idx]; if (checkLast) { while (element == _lastSlide && (!element.IsNSFW || (element.IsNSFW && ShowNSFW))) { idx = _random.Next(0, SlideShowElements.Count); element = SlideShowElements[idx]; } } if (element.ImageURL == null) { if (!init) { SlidesQueue.Enqueue(element); } } else { if (!CachedSlides.ContainsKey(element.ModID)) { CacheImage(element); CachedSlides.Add(element.ModID, element); SlidesQueue.Enqueue(element); result = true; } else { if (!init) { SlidesQueue.Enqueue(element); } } _lastSlide = element; } return(result); }