diff --git a/Management/Models/Local/Assignment/LocalAssignment.cs b/Management/Models/Local/Assignment/LocalAssignment.cs index 86b11a9..2e3723f 100644 --- a/Management/Models/Local/Assignment/LocalAssignment.cs +++ b/Management/Models/Local/Assignment/LocalAssignment.cs @@ -8,8 +8,17 @@ namespace LocalModels; public record LocalAssignment { - // public ulong? CanvasId { get; init; } = null; - public string Name { get; init; } = ""; + private string _name = ""; + 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 bool LockAtDueDate { get; init; } public DateTime? LockAt { get; init; } @@ -18,7 +27,6 @@ public record LocalAssignment public IEnumerable SubmissionTypes { get; init; } = Array.Empty(); public IEnumerable Rubric { get; init; } = Array.Empty(); public int PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points); - public string GetRubricHtml() { var output = "

Rubric

[\n";
@@ -62,13 +70,13 @@ public record LocalAssignment
     var rubric = ParseRubricMarkdown(rubricString);
     return new LocalAssignment()
     {
-      Name=name.Trim(),
-      LocalAssignmentGroupName=localAssignmentGroupName.Trim(),
-      SubmissionTypes=submissionTypes,
-      DueAt=dueAt,
-      LockAt=lockAt,
-      Rubric=rubric,
-      Description=description.Trim()
+      Name = name.Trim(),
+      LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
+      SubmissionTypes = submissionTypes,
+      DueAt = dueAt,
+      LockAt = lockAt,
+      Rubric = rubric,
+      Description = description.Trim()
     };
   }
 
@@ -174,7 +182,7 @@ public record LocalAssignment
 
   public static IEnumerable ParseRubricMarkdown(string rawMarkdown)
   {
-    if(rawMarkdown.Trim() == string.Empty)
+    if (rawMarkdown.Trim() == string.Empty)
       return [];
     var lines = rawMarkdown.Trim().Split(Environment.NewLine);
     var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();
diff --git a/Management/Services/Files/LoadMarkdownCourse.cs b/Management/Services/Files/LoadMarkdownCourse.cs
index ab4ccce..db70da7 100644
--- a/Management/Services/Files/LoadMarkdownCourse.cs
+++ b/Management/Services/Files/LoadMarkdownCourse.cs
@@ -37,8 +37,6 @@ public class CourseMarkdownLoader
       throw new LoadCourseFromFileException(errorMessage);
     }
 
-
-
     LocalCourseSettings settings = await loadCourseSettings(courseDirectory);
     var modules = await loadCourseModules(courseDirectory);
 
@@ -73,7 +71,7 @@ public class CourseMarkdownLoader
       modulePaths
         .Select(loadModuleFromPath)
     );
-    return modules;
+    return modules.OrderBy(m => m.Name);
   }
 
   private async Task loadModuleFromPath(string modulePath)