예제 #1
0
        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));
        }
예제 #2
0
파일: Unit.cs 프로젝트: DerArvend/Ulearn
        public void LoadInstructorNote(CourseLoadingContext context, int slideIndex)
        {
            var instructorNoteFile = Directory.GetFile("InstructorNotes.md");

            if (instructorNoteFile.Exists)
            {
                InstructorNote = InstructorNote.Load(context, instructorNoteFile, this, slideIndex);
            }
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
 public SlideLoadingContext(CourseLoadingContext courseLoadingContext, Unit unit, FileInfo slideFile, int slideIndex)
     : this(courseLoadingContext.CourseId, unit, courseLoadingContext.CourseSettings, courseLoadingContext.CourseDirectory, slideFile, slideIndex)
 {
 }