/// <summary> /// Загрузка расписания из строк /// </summary> /// <param name="shedule">Строки с конфигурацией</param> public void LoadShedule(IEnumerable <string> shedule) { //парсим строки var sh = shedule .Where(arg => arg != string.Empty) .Select(arg => new SheduleItem(arg)) .OrderBy(arg => arg.Start) .ToArray(); // проверяем пересечение периодов foreach (var item in sh.Where(arg => arg.Type == MediaTypes.Background)) { if (sh.Any(arg => item.Start < arg.End && item.End > arg.Start && arg != item)) { throw new ApplicationException("Пересечение периодов"); } } //программируем лпанировщик задач JobManager.Stop(); var registry = new Registry(); foreach (var item in sh) { switch (item.Type) { case MediaTypes.Background: registry.Schedule(() => UpdateBackground(item.Path, true)).ToRunEvery(1).Days().At(item.Start.Hour, item.Start.Minute); registry.Schedule(() => mediaEngine.Stop()).ToRunEvery(1).Days().At(item.End.Hour, item.End.Minute); break; case MediaTypes.Interrupt: registry.Schedule(() => SetInterrupt(item.Path)).ToRunEvery(1).Days().At(item.Start.Hour, item.Start.Minute); break; } } JobManager.Initialize(registry); //запускаем текущее событие, если нужно var currentBg = sh.FirstOrDefault(arg => arg.Start <= DateTime.Now && arg.End >= DateTime.Now); if (currentBg == null) { return; } UpdateBackground(currentBg.Path); if (!mediaEngine.HasFileOpened) { background.PlayNext(); } }
private void SetInterrupt(string path) { // ставим Background на паузу и заводим Interrupt background.Pause(); var dir = new DirectoryInfo(path); interrupt.Update(dir.GetFiles()); interrupt.PlaylistEnded += Interrupt_PlaylistEnded; interrupt.PlayNext(); }