prevent colon from getting in the name and breaking windows machines

This commit is contained in:
2023-12-05 13:16:21 -07:00
parent 430c6fb089
commit 466aa747b6
2 changed files with 20 additions and 14 deletions

View File

@@ -8,8 +8,17 @@ namespace LocalModels;
public record LocalAssignment public record LocalAssignment
{ {
// public ulong? CanvasId { get; init; } = null; private string _name = "";
public string Name { get; init; } = ""; public string Name
{
get => _name;
init
{
if (value.Contains(':'))
throw new AssignmentMarkdownParseException("Name cannot contain a ':' character, it breaks windows filesystems " + value);
_name = value;
}
}
public string Description { get; init; } = ""; public string Description { get; init; } = "";
// public bool LockAtDueDate { get; init; } // public bool LockAtDueDate { get; init; }
public DateTime? LockAt { get; init; } public DateTime? LockAt { get; init; }
@@ -18,7 +27,6 @@ public record LocalAssignment
public IEnumerable<string> SubmissionTypes { get; init; } = Array.Empty<string>(); public IEnumerable<string> SubmissionTypes { get; init; } = Array.Empty<string>();
public IEnumerable<RubricItem> Rubric { get; init; } = Array.Empty<RubricItem>(); public IEnumerable<RubricItem> Rubric { get; init; } = Array.Empty<RubricItem>();
public int PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points); public int PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points);
public string GetRubricHtml() public string GetRubricHtml()
{ {
var output = "<h1>Rubric</h1><pre><code class=\"language-json\">[\n"; var output = "<h1>Rubric</h1><pre><code class=\"language-json\">[\n";
@@ -62,13 +70,13 @@ public record LocalAssignment
var rubric = ParseRubricMarkdown(rubricString); var rubric = ParseRubricMarkdown(rubricString);
return new LocalAssignment() return new LocalAssignment()
{ {
Name=name.Trim(), Name = name.Trim(),
LocalAssignmentGroupName=localAssignmentGroupName.Trim(), LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
SubmissionTypes=submissionTypes, SubmissionTypes = submissionTypes,
DueAt=dueAt, DueAt = dueAt,
LockAt=lockAt, LockAt = lockAt,
Rubric=rubric, Rubric = rubric,
Description=description.Trim() Description = description.Trim()
}; };
} }
@@ -174,7 +182,7 @@ public record LocalAssignment
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown) public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
{ {
if(rawMarkdown.Trim() == string.Empty) if (rawMarkdown.Trim() == string.Empty)
return []; return [];
var lines = rawMarkdown.Trim().Split(Environment.NewLine); var lines = rawMarkdown.Trim().Split(Environment.NewLine);
var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray(); var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();

View File

@@ -37,8 +37,6 @@ public class CourseMarkdownLoader
throw new LoadCourseFromFileException(errorMessage); throw new LoadCourseFromFileException(errorMessage);
} }
LocalCourseSettings settings = await loadCourseSettings(courseDirectory); LocalCourseSettings settings = await loadCourseSettings(courseDirectory);
var modules = await loadCourseModules(courseDirectory); var modules = await loadCourseModules(courseDirectory);
@@ -73,7 +71,7 @@ public class CourseMarkdownLoader
modulePaths modulePaths
.Select(loadModuleFromPath) .Select(loadModuleFromPath)
); );
return modules; return modules.OrderBy(m => m.Name);
} }
private async Task<LocalModule> loadModuleFromPath(string modulePath) private async Task<LocalModule> loadModuleFromPath(string modulePath)