public static List <DateTime> GetAllImageTimes(ThemeConfig theme) { List <DateTime> times = new List <DateTime>(); SolarData data = SunriseSunsetService.GetSolarData(DateTime.Today); SolarData nextData = SunriseSunsetService.GetSolarData(DateTime.Today.AddDays(1)); if (data.polarPeriod != PolarPeriod.None) { if (theme.sunriseImageList != null) { for (int i = 0; i < theme.sunriseImageList.Length; i++) { times.Add(DateTime.MinValue); } } for (int i = 0; i < theme.dayImageList.Length; i++) { if (data.polarPeriod == PolarPeriod.PolarDay) { times.Add(DateTime.Today + TimeSpan.FromTicks(TimeSpan.FromDays(1).Ticks *i / theme.dayImageList.Length)); } else { times.Add(DateTime.MinValue); } } if (theme.sunsetImageList != null) { for (int i = 0; i < theme.sunsetImageList.Length; i++) { times.Add(DateTime.MinValue); } } for (int i = 0; i < theme.nightImageList.Length; i++) { if (data.polarPeriod == PolarPeriod.PolarNight) { times.Add(DateTime.Today + TimeSpan.FromTicks(TimeSpan.FromDays(1).Ticks *i / theme.nightImageList.Length)); } else { times.Add(DateTime.MinValue); } } } else if (ThemeManager.IsTheme4Segment(theme)) { for (int i = 0; i < theme.sunriseImageList.Length; i++) { times.Add(data.solarTimes[0] + TimeSpan.FromTicks((data.solarTimes[1].Ticks - data.solarTimes[0].Ticks) * i / theme.sunriseImageList.Length)); } for (int i = 0; i < theme.dayImageList.Length; i++) { times.Add(data.solarTimes[1] + TimeSpan.FromTicks((data.solarTimes[2].Ticks - data.solarTimes[1].Ticks) * i / theme.dayImageList.Length)); } for (int i = 0; i < theme.sunsetImageList.Length; i++) { times.Add(data.solarTimes[2] + TimeSpan.FromTicks((data.solarTimes[3].Ticks - data.solarTimes[2].Ticks) * i / theme.sunsetImageList.Length)); } for (int i = 0; i < theme.nightImageList.Length; i++) { times.Add(data.solarTimes[3] + TimeSpan.FromTicks((nextData.solarTimes[0].Ticks - data.solarTimes[3].Ticks) * i / theme.nightImageList.Length)); } } else { for (int i = 0; i < theme.dayImageList.Length; i++) { times.Add(data.sunriseTime + TimeSpan.FromTicks((data.sunsetTime.Ticks - data.sunriseTime.Ticks) * i / theme.dayImageList.Length)); } for (int i = 0; i < theme.nightImageList.Length; i++) { times.Add(data.sunsetTime + TimeSpan.FromTicks((nextData.sunriseTime.Ticks - data.sunsetTime.Ticks) * i / theme.nightImageList.Length)); } } return(times); }
public SchedulerState GetImageData(SolarData data, ThemeConfig theme, DateTime dateNow) { int[] imageList = null; DateTime segmentStart; DateTime segmentEnd; SchedulerState imageData = new SchedulerState() { daySegment2 = isSunUp ? 0 : 1 }; // Use 4-segment mode if theme is not downloaded, or has sunrise/sunset images and dark mode not enabled if (theme?.imageFilename == null || (ThemeManager.IsTheme4Segment(theme) && !JsonConfig.settings.darkMode)) { switch (GetDaySegment(data, dateNow)) { case DaySegment.AlwaysDay: imageList = theme?.dayImageList; segmentStart = dateNow.Date; segmentEnd = dateNow.Date.AddDays(1); imageData.daySegment4 = 1; break; case DaySegment.AlwaysNight: imageList = theme?.nightImageList; segmentStart = dateNow.Date; segmentEnd = dateNow.Date.AddDays(1); imageData.daySegment4 = 3; break; case DaySegment.Sunrise: imageList = theme?.sunriseImageList; segmentStart = data.solarTimes[0]; segmentEnd = data.solarTimes[1]; imageData.daySegment4 = 0; break; case DaySegment.Day: imageList = theme?.dayImageList; segmentStart = data.solarTimes[1]; segmentEnd = data.solarTimes[2]; imageData.daySegment4 = 1; break; case DaySegment.Sunset: imageList = theme?.sunsetImageList; segmentStart = data.solarTimes[2]; segmentEnd = data.solarTimes[3]; imageData.daySegment4 = 2; break; default: imageList = theme?.nightImageList; imageData.daySegment4 = 3; if (dateNow < data.solarTimes[0]) { SolarData yesterdaysData = SunriseSunsetService.GetSolarData(dateNow.Date.AddDays(-1)); segmentStart = yesterdaysData.solarTimes[3]; segmentEnd = data.solarTimes[0]; } else { segmentStart = data.solarTimes[3]; SolarData tomorrowsData = SunriseSunsetService.GetSolarData(dateNow.Date.AddDays(1)); segmentEnd = tomorrowsData.solarTimes[0]; } break; } } else { imageList = theme?.nightImageList; if (!JsonConfig.settings.darkMode && (isSunUp || data.polarPeriod == PolarPeriod.PolarDay)) { imageList = theme?.dayImageList; } if (data.polarPeriod != PolarPeriod.None) { segmentStart = dateNow.Date; segmentEnd = dateNow.Date.AddDays(1); } else if (isSunUp) { segmentStart = data.sunriseTime; segmentEnd = data.sunsetTime; } else if (dateNow < data.sunriseTime) { SolarData yesterdaysData = SunriseSunsetService.GetSolarData(dateNow.Date.AddDays(-1)); segmentStart = yesterdaysData.sunsetTime; segmentEnd = data.sunriseTime; } else { segmentStart = data.sunsetTime; SolarData tomorrowsData = SunriseSunsetService.GetSolarData(dateNow.Date.AddDays(1)); segmentEnd = tomorrowsData.sunriseTime; } } if (imageList != null) { TimeSpan segmentLength = segmentEnd - segmentStart; TimeSpan timerLength = new TimeSpan(segmentLength.Ticks / imageList.Length); int imageNumber = (int)((dateNow.Ticks - segmentStart.Ticks) / timerLength.Ticks); imageData.imageId = imageList[imageNumber]; imageData.imageNumber = imageNumber; imageData.nextUpdateTicks = segmentStart.Ticks + timerLength.Ticks * (imageNumber + 1); } return(imageData); }