private Unit LoadUnitFromDirectory(string directory) { var unitFile = new DirectoryInfo(testDataDirectory).GetSubdirectory(directory).GetFile("unit.xml"); var courseLoadingContext = new CourseLoadingContext("CourseId", courseSettings, new DirectoryInfo("."), new FileInfo("course.xml")); return(loader.Load(unitFile, courseLoadingContext, 0)); }
public void LoadInstructorNote(CourseLoadingContext context, int slideIndex) { var instructorNoteFile = Directory.GetFile("InstructorNotes.md"); if (instructorNoteFile.Exists) { InstructorNote = InstructorNote.Load(context, instructorNoteFile, this, slideIndex); } }
public Unit Load(FileInfo unitFile, CourseLoadingContext context) { var unitDirectory = unitFile.Directory; if (unitDirectory == null) { throw new CourseLoadingException($"Не могу загрузить модуль из {unitFile.GetRelativePath(context.CourseDirectory)}: не могу определить, из какой папки читать файлы со слайдами."); } UnitSettings unitSettings; if (unitFile.Exists) { unitSettings = UnitSettings.Load(unitFile, context.CourseSettings); } else { try { unitSettings = UnitSettings.CreateByTitle(GetUnitTitleFromFile(unitDirectory), context.CourseSettings); } catch (Exception e) { throw new CourseLoadingException( $"Не удалось прочитать настройки курса. Скорее всего, отсутствует или неправильно заполнен файл модуля {unitFile.Name} ({unitFile.GetRelativePath(context.CourseDirectory)})." ); } } var unit = new Unit(unitSettings, unitDirectory); var slideFiles = unitSettings .SlidesPaths .SelectMany(path => unitDirectory.GetFiles(path, SearchOption.TopDirectoryOnly).OrderBy(f => f.FullName, StringComparer.InvariantCultureIgnoreCase)) .Distinct() /* Don't load slide from unit file! Even accidentally */ .Where(f => f != unitFile); unit.SetSlides(slideFiles .Select(f => LoadSlide(f, unit, context)) .ToList()); var flashcardSlides = unit.GetSlides(true).OfType <FlashcardSlide>(); foreach (var flashcardSlide in flashcardSlides) { foreach (var flashcard in flashcardSlide.FlashcardsList) { unit.Flashcards.Add(flashcard); } } unit.LoadInstructorNote(context); return(unit); }
private Slide LoadSlide(FileInfo file, Unit unit, CourseLoadingContext context) { var slideLoadingContext = new SlideLoadingContext(context, unit, file); try { return(slideLoader.Load(slideLoadingContext)); } catch (Exception e) { if (e.GetType().IsSubclassOf(typeof(CourseLoadingException))) { throw; } throw new CourseLoadingException($"Не могу загрузить слайд из файла {file.GetRelativePath(context.CourseDirectory)}", e); } }
public SlideLoadingContext(CourseLoadingContext courseLoadingContext, Unit unit, FileInfo slideFile, int slideIndex) : this(courseLoadingContext.CourseId, unit, courseLoadingContext.CourseSettings, courseLoadingContext.CourseDirectory, slideFile, slideIndex) { }