// UI thread public void OnSlideshowUpdate(SlideshowState slideshowState) { if (slideshowState == null) { SignboardNullFailCount++; if (SignboardNullFailCount >= FAIL_THRESHHOLD) { State = SignboardState.NoSlideshow; } return; } else { SignboardNullFailCount = 0; if (slideshowState.IsShowScreensaver) { State = SignboardState.ShowingScreensaver; return; } State = slideshowState.SignboardState; FontFactor = slideshowState.FontFactor; if (slideshowState.NewPollingInterval >= TimeSpan.FromSeconds(MinimumTimespan)) { UpdateStructureDispatcherTimer.Interval = slideshowState.NewPollingInterval; } else { UpdateStructureDispatcherTimer.Interval = TimeSpan.FromSeconds(MinimumTimespan); } if (slideshowState.IsNewSlideshowToStart || slideshowState.HardReload || (CurrentSlideshow == null && slideshowState.Slideshow != null)) { Logger.Instance.Write("OnSlideshowUpdate", LogLevel.Low, "Starting new or updated Slideshow."); ClearSlideshowGrid(); IsNewSlideshow = true; CurrentSlideshow = slideshowState.Slideshow.Copy(); CurrentSlideshow.Start(); return; } if (CurrentSlideshow != null && CurrentSlideshow.Slides != null) { foreach (Slide slide in CurrentSlideshow.Slides) { foreach (Widget widget in slide.Widgets) { widget.UpdateFontFactor(slideshowState.FontFactor); } } } if (State == SignboardState.NoSlideshow) { ClearSlideshowGrid(); ShowScreensaver(); CurrentSlideshow = null; return; } if (CurrentSlideshow == null) { Logger.Instance.Write("OnSlideshowUpdate", LogLevel.Low, "There is no current slideshow."); return; } // check if all the widgets in all the slides are loaded if (CurrentSlideshow.HasOneOrMoreSlides()) { WidgetLoadingFailCount = 0; // Check if announcements have changed if (slideshowState.Announcements != null && CurrentAnnouncements == null) { CurrentAnnouncements = slideshowState.Announcements; RenderAnnouncements(slideshowState.FontFactor); } else if (CurrentAnnouncements != null && (slideshowState.Announcements == null || slideshowState.Announcements.Count == 0)) { CurrentAnnouncements = slideshowState.Announcements; RenderAnnouncements(slideshowState.FontFactor); } else if (slideshowState.Announcements != null && CurrentAnnouncements != null && !CurrentAnnouncements.SequenceEqual(slideshowState.Announcements)) { CurrentAnnouncements = slideshowState.Announcements; RenderAnnouncements(slideshowState.FontFactor); } State = SignboardState.ShowingSlideshow; } else { State = SignboardState.LoadingWidgets; WidgetLoadingFailCount++; if (WidgetLoadingFailCount >= FAIL_THRESHHOLD) { Logger.Instance.Write("OnSlideshowUpdate", LogLevel.Medium, "Failing to load all widgets."); State = SignboardState.Error; } } } }
public SignboardCoordinator(string macAddress) { PollingIntervalInSeconds = 10; diagnosticsComponent = new DiagnosticsComponent(10); this.macAddress = macAddress; SlideshowState = new SlideshowState(); }