From 209e8f991fdb2fa3ed502ede3ad913994329b325 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Mon, 4 Dec 2023 16:49:20 -0700 Subject: [PATCH] only initialize courses in directories that exist --- Management.Web/Pages/Index.razor | 41 +------------ ...Canvas.razor => InitializeNewCourse.razor} | 58 ++++++++++++++----- .../Services/Files/FileStorageManager.cs | 43 ++++---------- .../Services/Files/LoadMarkdownCourse.cs | 13 ++++- 4 files changed, 67 insertions(+), 88 deletions(-) rename Management.Web/Shared/{InitializeYamlFromCanvas.razor => InitializeNewCourse.razor} (70%) diff --git a/Management.Web/Pages/Index.razor b/Management.Web/Pages/Index.razor index 628df27..69201f5 100644 --- a/Management.Web/Pages/Index.razor +++ b/Management.Web/Pages/Index.razor @@ -72,49 +72,10 @@
- +
} } - -@* @if(planner.LocalCourse != null) -{ -
-
- - - - - - - View In Canvas - -
- @planner.LocalCourse.Settings.Name -
-
- - @if(planner.LoadingCanvasData) - { - - } -
- -} *@
diff --git a/Management.Web/Shared/InitializeYamlFromCanvas.razor b/Management.Web/Shared/InitializeNewCourse.razor similarity index 70% rename from Management.Web/Shared/InitializeYamlFromCanvas.razor rename to Management.Web/Shared/InitializeNewCourse.razor index 5cbaf60..5bb4982 100644 --- a/Management.Web/Shared/InitializeYamlFromCanvas.razor +++ b/Management.Web/Shared/InitializeNewCourse.razor @@ -25,7 +25,6 @@ { _selectedTermId = value; this.InvokeAsync(updateCourses); - @* updateCourses(); *@ } } private EnrollmentTermModel? selectedTerm @@ -47,23 +46,29 @@ { get => courses?.First(c => c.Id == selectedCourseId); } + private List days { get; set; } = new(); + + private IEnumerable directoriesNotUsed { get; set; } = []; + private string? selectedStorageDirectory { get; set; } = null; protected override async Task OnInitializedAsync() { loadingTerms = true; terms = await canvas.GetCurrentTermsFor(); loadingTerms = false; + directoriesNotUsed = await fileStorageManager.GetEmptyDirectories(); } - private async Task YamlTrigger() + + private async Task SaveNewCourse() { - if (selectedCourse != null) + if (selectedCourse != null && selectedStorageDirectory != null && selectedStorageDirectory != string.Empty) { var course = new LocalCourse { Modules = new LocalModule[] { }, Settings = new LocalCourseSettings() { - Name = selectedCourse.Name, + Name = Path.GetFileName(selectedStorageDirectory), CanvasId = selectedCourse.Id, StartDate = selectedTerm?.StartAt ?? new DateTime(), EndDate = selectedTerm?.EndAt ?? new DateTime(), @@ -105,7 +110,11 @@
- @foreach (var term in terms) { @@ -126,12 +135,28 @@ @if (courses != null) {
-
- - + @foreach (var course in courses) + { + + } + +
+
+
+
+ +
@@ -143,16 +168,19 @@ @foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek))) {
-
@@ -161,8 +189,8 @@
-
} diff --git a/Management/Services/Files/FileStorageManager.cs b/Management/Services/Files/FileStorageManager.cs index 4b450fb..c9b0d8e 100644 --- a/Management/Services/Files/FileStorageManager.cs +++ b/Management/Services/Files/FileStorageManager.cs @@ -21,46 +21,16 @@ public class FileStorageManager _basePath = FileConfiguration.GetBasePath(); this.logger.Log("Using storage directory: " + _basePath); - + } - - // public string CourseToYaml(LocalCourse course) - // { - // var serializer = new SerializerBuilder().DisableAliases().Build(); - - // var yaml = serializer.Serialize(course); - - // return yaml; - // } - - // public LocalCourse ParseCourse(string rawCourse) - // { - // var deserializer = new DeserializerBuilder().IgnoreUnmatchedProperties().Build(); - - // var course = deserializer.Deserialize(rawCourse); - // return course; - // } - public async Task SaveCourseAsync(LocalCourse course) { - // var courseString = CourseToYaml(course); - // await File.WriteAllTextAsync($"{_basePath}/{course.Settings.Name}.yml", courseString); - await _saveMarkdownCourse.Save(course); } public async Task> LoadSavedCourses() { - - // var fileNames = Directory.GetFiles(_basePath); - - // var courses = await Task.WhenAll( - // fileNames - // .Where(name => name.EndsWith(".yml")) - // .Select(async n => ParseCourse(await File.ReadAllTextAsync(n))) - // ); - // return courses; return await LoadSavedMarkdownCourses(); } @@ -69,4 +39,15 @@ public class FileStorageManager return await _courseMarkdownLoader.LoadSavedMarkdownCourses(); } + public async Task> GetEmptyDirectories() + { + if(!Directory.Exists(_basePath)) + throw new DirectoryNotFoundException($"Cannot get empty directories, {_basePath} does not exist"); + + return Directory + .GetDirectories(_basePath, "*") + .Where(dir => !Directory.EnumerateFileSystemEntries(dir).Any()) + .ToArray(); + + } } \ No newline at end of file diff --git a/Management/Services/Files/LoadMarkdownCourse.cs b/Management/Services/Files/LoadMarkdownCourse.cs index f465f29..ab4ccce 100644 --- a/Management/Services/Files/LoadMarkdownCourse.cs +++ b/Management/Services/Files/LoadMarkdownCourse.cs @@ -17,7 +17,13 @@ public class CourseMarkdownLoader var courseDirectories = Directory.GetDirectories(_basePath); var courses = await Task.WhenAll( - courseDirectories.Select(async n => await LoadCourseByPath(n)) + courseDirectories + .Where(d => + { + var settingsPath = $"{d}/settings.yml"; + return File.Exists(settingsPath); + }) + .Select(async d => await LoadCourseByPath(d)) ); return courses; } @@ -31,10 +37,13 @@ public class CourseMarkdownLoader throw new LoadCourseFromFileException(errorMessage); } + + LocalCourseSettings settings = await loadCourseSettings(courseDirectory); var modules = await loadCourseModules(courseDirectory); - return new() { + return new() + { Settings = settings, Modules = modules };