public Course(string id, List <Unit> units, CourseSettings settings, DirectoryInfo courseXmlDirectory) { Id = id; Units = units; Settings = settings; CourseXmlDirectory = courseXmlDirectory; }
public CourseLoadingContext(string courseId, CourseSettings courseSettings, DirectoryInfo courseDirectory, FileInfo courseXml) { CourseId = courseId; CourseSettings = courseSettings; CourseDirectory = courseDirectory; CourseXml = courseXml; }
public CourseSettings(CourseSettings other) : this() { Title = other.Title; DefaultLanguage = other.DefaultLanguage; Preludes = (PreludeFile[])other.Preludes.Clone(); DictionaryFile = other.DictionaryFile; }
public Course(string id, List <Unit> units, [NotNull] CourseSettings settings, DirectoryInfo courseDirectory, DirectoryInfo courseXmlDirectory) { Id = id; this.units = units; Settings = settings; CourseXmlDirectory = courseXmlDirectory; CourseDirectory = courseDirectory; }
private static void CalculateScoringGroupScores(IEnumerable <Unit> units, CourseSettings settings) { foreach (var unit in units) { foreach (var slide in unit.Slides.Where(s => s.ShouldBeSolved)) { unit.Scoring.Groups[slide.ScoringGroup].MaxNotAdditionalScore += slide.MaxScore; settings.Scoring.Groups[slide.ScoringGroup].MaxNotAdditionalScore += slide.MaxScore; } } }
private Course UnsafeLoad(DirectoryInfo dir) { var courseId = dir.Name; var loadFromDirectory = dir; var courseXmls = dir.GetFiles("course.xml", SearchOption.AllDirectories).ToList(); if (courseXmls.Count == 1) { loadFromDirectory = courseXmls[0].Directory; } else { loadFromDirectory = loadFromDirectory.HasSubdirectory("Slides") ? loadFromDirectory.GetSubdirectory("Slides") : loadFromDirectory; } CourseSettings settings; try { settings = CourseSettings.Load(loadFromDirectory); } catch (Exception e) { throw new CourseLoadingException($"Не удалось прочитать настройки курса из файла course.xml. {e.Message}", e.InnerException); } if (string.IsNullOrEmpty(settings.Title)) { try { settings.Title = GetCourseTitleFromFile(loadFromDirectory); } catch (Exception e) { throw new CourseLoadingException( "Не удалось прочитать настройки курса. Скорее всего, отсутствует или неправильно заполнен файл course.xml." ); } } var context = new CourseLoadingContext(courseId, settings, dir, loadFromDirectory.GetFile("course.xml")); var units = LoadUnits(context).ToList(); var slides = units.SelectMany(u => u.Slides).ToList(); CheckDuplicateSlideIds(slides); AddDefaultScoringGroupIfNeeded(units, slides, settings); CalculateScoringGroupScores(units, settings); return(new Course(courseId, units, settings, dir)); }
private static void AddDefaultScoringGroupIfNeeded(IEnumerable <Unit> units, IEnumerable <Slide> slides, CourseSettings settings) { if (slides.Any(s => s.ShouldBeSolved && string.IsNullOrEmpty(s.ScoringGroup))) { var defaultScoringGroup = new ScoringGroup { Id = "", Abbreviation = "Баллы", Name = "Упражнения и тесты", }; settings.Scoring.Groups.Add(defaultScoringGroup.Id, defaultScoringGroup); /* Add default scoring group to each unit */ foreach (var unit in units) { unit.Scoring.Groups.Add(defaultScoringGroup.Id, defaultScoringGroup); } } }