mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
halfway through localcourse transition
This commit is contained in:
@@ -34,8 +34,8 @@
|
|||||||
if(planner.LocalCourse == null)
|
if(planner.LocalCourse == null)
|
||||||
{
|
{
|
||||||
var courses = await yamlManager.LoadSavedCourses();
|
var courses = await yamlManager.LoadSavedCourses();
|
||||||
planner.LocalCourse = courses.First(c => c.Name == CourseName);
|
planner.LocalCourse = courses.First(c => c.Settings.Name == CourseName);
|
||||||
logger.LogInformation($"set course to '{planner.LocalCourse?.Name}'");
|
logger.LogInformation($"set course to '{planner.LocalCourse?.Settings.Name}'");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(assignmentContext.Assignment == null)
|
if(assignmentContext.Assignment == null)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
if(planner.LocalCourse == null)
|
if(planner.LocalCourse == null)
|
||||||
{
|
{
|
||||||
var courses = await yamlManager.LoadSavedCourses();
|
var courses = await yamlManager.LoadSavedCourses();
|
||||||
planner.LocalCourse = courses.First(c => c.Name == CourseName);
|
planner.LocalCourse = courses.First(c => c.Settings.Name == CourseName);
|
||||||
}
|
}
|
||||||
base.OnInitialized();
|
base.OnInitialized();
|
||||||
loading = false;
|
loading = false;
|
||||||
@@ -66,12 +66,12 @@
|
|||||||
<a
|
<a
|
||||||
class="btn btn-outline-secondary"
|
class="btn btn-outline-secondary"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
href="@($"{Environment.GetEnvironmentVariable("CANVAS_URL")}/courses/{planner.LocalCourse.CanvasId}")"
|
href="@($"{Environment.GetEnvironmentVariable("CANVAS_URL")}/courses/{planner.LocalCourse.Settings.CanvasId}")"
|
||||||
>
|
>
|
||||||
View In Canvas
|
View In Canvas
|
||||||
</a>
|
</a>
|
||||||
<div class="my-auto ms-2 d-inline">
|
<div class="my-auto ms-2 d-inline">
|
||||||
@planner.LocalCourse.Name
|
@planner.LocalCourse.Settings.Name
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@
|
|||||||
View In Canvas
|
View In Canvas
|
||||||
</a>
|
</a>
|
||||||
<div class="my-auto ms-2 d-inline">
|
<div class="my-auto ms-2 d-inline">
|
||||||
@planner.LocalCourse.Name
|
@planner.LocalCourse.Settings.Name
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -79,9 +79,9 @@
|
|||||||
{
|
{
|
||||||
Modules = newModules
|
Modules = newModules
|
||||||
};
|
};
|
||||||
if (assignment.CanvasId != null && planner.LocalCourse.CanvasId != null)
|
if (assignment.CanvasId != null && planner.LocalCourse.Settings.CanvasId != null)
|
||||||
{
|
{
|
||||||
ulong courseId = planner.LocalCourse.CanvasId ?? throw new Exception("cannot delete if no course id");
|
ulong courseId = planner.LocalCourse.Settings.CanvasId ?? throw new Exception("cannot delete if no course id");
|
||||||
await canvas.Assignments.Delete(courseId, assignment);
|
await canvas.Assignments.Delete(courseId, assignment);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
class="btn btn-primary mx-2"
|
class="btn btn-primary mx-2"
|
||||||
@onclick="@(() => {
|
@onclick="@(() => {
|
||||||
assignmentContext.Assignment = null;
|
assignmentContext.Assignment = null;
|
||||||
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Name);
|
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name);
|
||||||
})"
|
})"
|
||||||
>
|
>
|
||||||
Done
|
Done
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
if(
|
if(
|
||||||
planner.CanvasAssignments == null
|
planner.CanvasAssignments == null
|
||||||
&& planner.LocalCourse != null
|
&& planner.LocalCourse != null
|
||||||
&& planner.LocalCourse.CanvasId != null
|
&& planner.LocalCourse.Settings.CanvasId != null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
await planner.LoadCanvasData();
|
await planner.LoadCanvasData();
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
{
|
{
|
||||||
<div class="py-2">
|
<div class="py-2">
|
||||||
|
|
||||||
@foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.StartDate, planner.LocalCourse.EndDate))
|
@foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.Settings.StartDate, planner.LocalCourse.Settings.EndDate))
|
||||||
{
|
{
|
||||||
<MonthDetail Month="month" />
|
<MonthDetail Month="month" />
|
||||||
<hr />
|
<hr />
|
||||||
|
|||||||
@@ -28,8 +28,11 @@
|
|||||||
{
|
{
|
||||||
planner.LocalCourse = planner.LocalCourse with
|
planner.LocalCourse = planner.LocalCourse with
|
||||||
{
|
{
|
||||||
StartDate=selectedTerm.StartAt ?? new DateTime(),
|
Settings = planner.LocalCourse.Settings with
|
||||||
EndDate=selectedTerm.EndAt ?? new DateTime(),
|
{
|
||||||
|
StartDate=selectedTerm.StartAt ?? new DateTime(),
|
||||||
|
EndDate=selectedTerm.EndAt ?? new DateTime(),
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,10 +46,10 @@
|
|||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
if(planner.LocalCourse != null && planner.LocalCourse.CanvasId != null)
|
if(planner.LocalCourse != null && planner.LocalCourse.Settings.CanvasId != null)
|
||||||
{
|
{
|
||||||
loading = true;
|
loading = true;
|
||||||
ulong id = planner.LocalCourse?.CanvasId ?? throw new Exception("wtf how did i get here");
|
ulong id = planner.LocalCourse?.Settings.CanvasId ?? throw new Exception("wtf how did i get here");
|
||||||
var canvasCourse = await canvas.GetCourse(id);
|
var canvasCourse = await canvas.GetCourse(id);
|
||||||
terms = await canvas.GetCurrentTermsFor(canvasCourse.StartAt);
|
terms = await canvas.GetCurrentTermsFor(canvasCourse.StartAt);
|
||||||
loading = false;
|
loading = false;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
{
|
{
|
||||||
@* logger.LogInformation("here"); *@
|
@* logger.LogInformation("here"); *@
|
||||||
planner.LocalCourse = course;
|
planner.LocalCourse = course;
|
||||||
Navigation.NavigateTo("/course/" + course.Name);
|
Navigation.NavigateTo("/course/" + course.Settings.Name);
|
||||||
Console.WriteLine("navigated to course detail");
|
Console.WriteLine("navigated to course detail");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -30,10 +30,10 @@
|
|||||||
<h3>Stored Courses</h3>
|
<h3>Stored Courses</h3>
|
||||||
@foreach (var course in localCourses)
|
@foreach (var course in localCourses)
|
||||||
{
|
{
|
||||||
var location = "/course/" + course.Name;
|
var location = "/course/" + course.Settings.Name;
|
||||||
<div>
|
<div>
|
||||||
<h4 class="m-3 hover-underline-animation" @onclick="(e) => handleClick(e, course)" role='button'>
|
<h4 class="m-3 hover-underline-animation" @onclick="(e) => handleClick(e, course)" role='button'>
|
||||||
@course.Name
|
@course.Settings.Name
|
||||||
</h4>
|
</h4>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -61,11 +61,13 @@
|
|||||||
var course = new LocalCourse
|
var course = new LocalCourse
|
||||||
{
|
{
|
||||||
Modules = new LocalModule[] {},
|
Modules = new LocalModule[] {},
|
||||||
Name = selectedCourse.Name,
|
|
||||||
CanvasId = selectedCourse.Id,
|
|
||||||
DaysOfWeek = days,
|
DaysOfWeek = days,
|
||||||
StartDate = selectedTerm?.StartAt ?? new DateTime(),
|
Settings = new LocalCourseSettings() {
|
||||||
EndDate = selectedTerm?.EndAt ?? new DateTime(),
|
Name = selectedCourse.Name,
|
||||||
|
CanvasId = selectedCourse.Id,
|
||||||
|
StartDate = selectedTerm?.StartAt ?? new DateTime(),
|
||||||
|
EndDate = selectedTerm?.EndAt ?? new DateTime(),
|
||||||
|
}
|
||||||
};
|
};
|
||||||
await yamlManager.SaveCourseAsync(course);
|
await yamlManager.SaveCourseAsync(course);
|
||||||
NewFileCreated();
|
NewFileCreated();
|
||||||
@@ -80,7 +82,7 @@
|
|||||||
loadingCourses = true;
|
loadingCourses = true;
|
||||||
|
|
||||||
localCourses = await yamlManager.LoadSavedCourses();
|
localCourses = await yamlManager.LoadSavedCourses();
|
||||||
var storedCourseIds = localCourses.Select(c => c.CanvasId);
|
var storedCourseIds = localCourses.Select(c => c.Settings.CanvasId);
|
||||||
var allCourses = await canvas.GetCourses((ulong)selectedTermId);
|
var allCourses = await canvas.GetCourses((ulong)selectedTermId);
|
||||||
courses = allCourses.Where(c => !storedCourseIds.Contains(c.Id));
|
courses = allCourses.Where(c => !storedCourseIds.Contains(c.Id));
|
||||||
loadingCourses = false;
|
loadingCourses = false;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
private void OnClick()
|
private void OnClick()
|
||||||
{
|
{
|
||||||
assignmentContext.Assignment = Assignment;
|
assignmentContext.Assignment = Assignment;
|
||||||
Navigation.NavigateTo("/course/" + planner.LocalCourse.Name + "/assignment/" + Assignment.Id);
|
Navigation.NavigateTo("/course/" + planner.LocalCourse?.Settings.Name + "/assignment/" + Assignment.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
@if(isSyncedWithCanvas)
|
@if(isSyncedWithCanvas)
|
||||||
{
|
{
|
||||||
@if(planner.LocalCourse != null
|
@if(planner.LocalCourse != null
|
||||||
&& planner.LocalCourse.CanvasId != null
|
&& planner.LocalCourse.Settings.CanvasId != null
|
||||||
&& planner.CanvasAssignments != null
|
&& planner.CanvasAssignments != null
|
||||||
&& planner.CanvasModules != null
|
&& planner.CanvasModules != null
|
||||||
&& Assignment.NeedsUpdates(
|
&& Assignment.NeedsUpdates(
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
if(planner.LocalCourse != null)
|
if(planner.LocalCourse != null)
|
||||||
{
|
{
|
||||||
assignmentContext.Assignment = Assignment;
|
assignmentContext.Assignment = Assignment;
|
||||||
Navigation.NavigateTo("/course/" + planner.LocalCourse.Name + "/assignment/" + Assignment.Id);
|
Navigation.NavigateTo("/course/" + planner.LocalCourse.Settings.Name + "/assignment/" + Assignment.Id);
|
||||||
logger.LogInformation("navigating to assignment page");
|
logger.LogInformation("navigating to assignment page");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,8 +70,8 @@
|
|||||||
var isClassDay = planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false;
|
var isClassDay = planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false;
|
||||||
var dayInSemester =
|
var dayInSemester =
|
||||||
isClassDay
|
isClassDay
|
||||||
&& date <= planner.LocalCourse?.EndDate
|
&& date <= planner.LocalCourse?.Settings.EndDate
|
||||||
&& date >= planner.LocalCourse?.StartDate;
|
&& date >= planner.LocalCourse?.Settings.StartDate;
|
||||||
|
|
||||||
var totalClasses = dayInSemester
|
var totalClasses = dayInSemester
|
||||||
? "bg-light-subtle text-light " + baseClasses
|
? "bg-light-subtle text-light " + baseClasses
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ public class SemesterPlanner
|
|||||||
{
|
{
|
||||||
var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month;
|
var monthsInTerm = 1 + ((endDate.Year - startDate.Year) * 12) + endDate.Month - startDate.Month;
|
||||||
|
|
||||||
|
Console.WriteLine(monthsInTerm);
|
||||||
|
|
||||||
return Enumerable
|
return Enumerable
|
||||||
.Range(0, monthsInTerm)
|
.Range(0, monthsInTerm)
|
||||||
.Select(monthDiff =>
|
.Select(monthDiff =>
|
||||||
|
|||||||
@@ -30,18 +30,33 @@ public class CoursePlanner
|
|||||||
get => _localCourse;
|
get => _localCourse;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
|
||||||
if (value == null)
|
if (value == null)
|
||||||
{
|
{
|
||||||
_localCourse = null;
|
_localCourse = null;
|
||||||
StateHasChanged?.Invoke();
|
StateHasChanged?.Invoke();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var courseWithSettings = value with
|
||||||
|
{
|
||||||
|
Settings = value.Settings with
|
||||||
|
{
|
||||||
|
AssignmentGroups = value.AssignmentGroups,
|
||||||
|
Name = value.Settings.Name,
|
||||||
|
DaysOfWeek = value.DaysOfWeek,
|
||||||
|
CanvasId = value.Settings.CanvasId,
|
||||||
|
StartDate = value.Settings.StartDate,
|
||||||
|
DefaultDueTime = value.DefaultDueTime,
|
||||||
|
AssignmentTemplates = value.AssignmentTemplates,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
var verifiedCourse = value.GeneralCourseCleanup();
|
var verifiedCourse = courseWithSettings.GeneralCourseCleanup();
|
||||||
|
|
||||||
_debounceTimer?.Dispose();
|
_debounceTimer?.Dispose();
|
||||||
_debounceTimer = new Timer(
|
_debounceTimer = new Timer(
|
||||||
(_) => saveCourseToFile(value),
|
async (_) => await saveCourseToFile(courseWithSettings),
|
||||||
null,
|
null,
|
||||||
_debounceInterval,
|
_debounceInterval,
|
||||||
Timeout.Infinite
|
Timeout.Infinite
|
||||||
@@ -52,7 +67,7 @@ public class CoursePlanner
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveCourseToFile(LocalCourse courseAsOfDebounce)
|
private async Task saveCourseToFile(LocalCourse courseAsOfDebounce)
|
||||||
{
|
{
|
||||||
_debounceTimer?.Dispose();
|
_debounceTimer?.Dispose();
|
||||||
|
|
||||||
@@ -60,12 +75,12 @@ public class CoursePlanner
|
|||||||
if (LocalCourse == null)
|
if (LocalCourse == null)
|
||||||
{
|
{
|
||||||
Console.WriteLine("saving course as of debounce call time");
|
Console.WriteLine("saving course as of debounce call time");
|
||||||
yamlManager.SaveCourse(courseAsOfDebounce);
|
await yamlManager.SaveCourseAsync(courseAsOfDebounce);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Saving latest version of file");
|
Console.WriteLine("Saving latest version of file");
|
||||||
yamlManager.SaveCourse(LocalCourse);
|
await yamlManager.SaveCourseAsync(LocalCourse);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +104,7 @@ public class CoursePlanner
|
|||||||
StateHasChanged?.Invoke();
|
StateHasChanged?.Invoke();
|
||||||
|
|
||||||
var canvasId =
|
var canvasId =
|
||||||
LocalCourse?.CanvasId ?? throw new Exception("no canvas id found for selected course");
|
LocalCourse?.Settings.CanvasId ?? throw new Exception("no canvas id found for selected course");
|
||||||
|
|
||||||
var assignmentsTask = canvas.Assignments.GetAll(canvasId);
|
var assignmentsTask = canvas.Assignments.GetAll(canvasId);
|
||||||
var quizzesTask = canvas.Quizzes.GetAll(canvasId);
|
var quizzesTask = canvas.Quizzes.GetAll(canvasId);
|
||||||
@@ -112,7 +127,7 @@ public class CoursePlanner
|
|||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
LocalCourse == null
|
LocalCourse == null
|
||||||
|| LocalCourse.CanvasId == null
|
|| LocalCourse.Settings.CanvasId == null
|
||||||
|| CanvasAssignments == null
|
|| CanvasAssignments == null
|
||||||
|| CanvasModules == null
|
|| CanvasModules == null
|
||||||
|| CanvasQuizzes == null
|
|| CanvasQuizzes == null
|
||||||
@@ -141,7 +156,7 @@ public class CoursePlanner
|
|||||||
);
|
);
|
||||||
|
|
||||||
var canvasId =
|
var canvasId =
|
||||||
LocalCourse.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");
|
LocalCourse.Settings.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");
|
||||||
|
|
||||||
var newAssignmentGroups = await LocalCourse.EnsureAllAssignmentGroupsExistInCanvas(
|
var newAssignmentGroups = await LocalCourse.EnsureAllAssignmentGroupsExistInCanvas(
|
||||||
canvasId, canvasAssignmentGroups, canvas);
|
canvasId, canvasAssignmentGroups, canvas);
|
||||||
|
|||||||
@@ -25,21 +25,24 @@ public static class CoursePlannerExtensions
|
|||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
var cleanStartDay = new DateTime(
|
var cleanStartDay = new DateTime(
|
||||||
incomingCourse.StartDate.Year,
|
incomingCourse.Settings.StartDate.Year,
|
||||||
incomingCourse.StartDate.Month,
|
incomingCourse.Settings.StartDate.Month,
|
||||||
incomingCourse.StartDate.Day
|
incomingCourse.Settings.StartDate.Day
|
||||||
);
|
);
|
||||||
var cleanEndDay = new DateTime(
|
var cleanEndDay = new DateTime(
|
||||||
incomingCourse.EndDate.Year,
|
incomingCourse.Settings.EndDate.Year,
|
||||||
incomingCourse.EndDate.Month,
|
incomingCourse.Settings.EndDate.Month,
|
||||||
incomingCourse.EndDate.Day
|
incomingCourse.Settings.EndDate.Day
|
||||||
);
|
);
|
||||||
|
|
||||||
return incomingCourse with
|
return incomingCourse with
|
||||||
{
|
{
|
||||||
Modules = cleanModules,
|
Modules = cleanModules,
|
||||||
StartDate = cleanStartDay,
|
Settings = incomingCourse.Settings with
|
||||||
EndDate = cleanEndDay,
|
{
|
||||||
|
StartDate = cleanStartDay,
|
||||||
|
EndDate = cleanEndDay,
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using YamlDotNet.Serialization;
|
||||||
|
|
||||||
namespace LocalModels;
|
namespace LocalModels;
|
||||||
|
|
||||||
public record RubricItem
|
public record RubricItem
|
||||||
@@ -95,4 +97,12 @@ public record LocalAssignment
|
|||||||
assignmentGroups
|
assignmentGroups
|
||||||
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
||||||
.CanvasId;
|
.CanvasId;
|
||||||
|
|
||||||
|
|
||||||
|
public string ToYaml()
|
||||||
|
{
|
||||||
|
var serializer = new SerializerBuilder().DisableAliases().Build();
|
||||||
|
var yaml = serializer.Serialize(this);
|
||||||
|
return yaml;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,21 @@ namespace LocalModels;
|
|||||||
public record LocalCourse
|
public record LocalCourse
|
||||||
{
|
{
|
||||||
public IEnumerable<LocalModule> Modules { get; init; } = Enumerable.Empty<LocalModule>();
|
public IEnumerable<LocalModule> Modules { get; init; } = Enumerable.Empty<LocalModule>();
|
||||||
|
|
||||||
|
public IEnumerable<LocalAssignmentGroup> AssignmentGroups { get; init; } =
|
||||||
|
Enumerable.Empty<LocalAssignmentGroup>();
|
||||||
|
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
|
||||||
|
public SimpleTimeOnly DefaultDueTime { get; init; } = new SimpleTimeOnly();
|
||||||
|
public IEnumerable<AssignmentTemplate> AssignmentTemplates { get; init; } =
|
||||||
|
Enumerable.Empty<AssignmentTemplate>();
|
||||||
|
|
||||||
|
public LocalCourseSettings Settings { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public record LocalCourseSettings
|
||||||
|
{
|
||||||
|
public IEnumerable<LocalAssignmentGroup> AssignmentGroups { get; init; } =
|
||||||
|
Enumerable.Empty<LocalAssignmentGroup>();
|
||||||
public string Name { get; init; } = string.Empty;
|
public string Name { get; init; } = string.Empty;
|
||||||
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
|
public IEnumerable<DayOfWeek> DaysOfWeek { get; init; } = Enumerable.Empty<DayOfWeek>();
|
||||||
public ulong? CanvasId { get; init; }
|
public ulong? CanvasId { get; init; }
|
||||||
@@ -11,8 +26,6 @@ public record LocalCourse
|
|||||||
public SimpleTimeOnly DefaultDueTime { get; init; } = new SimpleTimeOnly();
|
public SimpleTimeOnly DefaultDueTime { get; init; } = new SimpleTimeOnly();
|
||||||
public IEnumerable<AssignmentTemplate> AssignmentTemplates { get; init; } =
|
public IEnumerable<AssignmentTemplate> AssignmentTemplates { get; init; } =
|
||||||
Enumerable.Empty<AssignmentTemplate>();
|
Enumerable.Empty<AssignmentTemplate>();
|
||||||
public IEnumerable<LocalAssignmentGroup> AssignmentGroups { get; init; } =
|
|
||||||
Enumerable.Empty<LocalAssignmentGroup>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public record SimpleTimeOnly
|
public record SimpleTimeOnly
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
using YamlDotNet.Serialization;
|
||||||
|
|
||||||
namespace LocalModels;
|
namespace LocalModels;
|
||||||
|
|
||||||
public record LocalQuiz
|
public record LocalQuiz
|
||||||
@@ -25,4 +27,11 @@ public record LocalQuiz
|
|||||||
assignmentGroups
|
assignmentGroups
|
||||||
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
|
||||||
.CanvasId;
|
.CanvasId;
|
||||||
|
|
||||||
|
public string ToYaml()
|
||||||
|
{
|
||||||
|
var serializer = new SerializerBuilder().DisableAliases().Build();
|
||||||
|
var yaml = serializer.Serialize(this);
|
||||||
|
return yaml;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ public class YamlManager
|
|||||||
public string CourseToYaml(LocalCourse course)
|
public string CourseToYaml(LocalCourse course)
|
||||||
{
|
{
|
||||||
var serializer = new SerializerBuilder().DisableAliases().Build();
|
var serializer = new SerializerBuilder().DisableAliases().Build();
|
||||||
|
|
||||||
var yaml = serializer.Serialize(course);
|
var yaml = serializer.Serialize(course);
|
||||||
|
|
||||||
return yaml;
|
return yaml;
|
||||||
@@ -24,16 +25,60 @@ public class YamlManager
|
|||||||
{
|
{
|
||||||
var courseString = CourseToYaml(course);
|
var courseString = CourseToYaml(course);
|
||||||
|
|
||||||
await File.WriteAllTextAsync($"../storage/{course.Name}.yml", courseString);
|
var courseDirectory = $"../storage/{course.Settings.Name}";
|
||||||
|
if (!Directory.Exists(courseDirectory))
|
||||||
|
Directory.CreateDirectory(courseDirectory);
|
||||||
|
|
||||||
|
await SaveModules(course);
|
||||||
|
|
||||||
|
await File.WriteAllTextAsync($"../storage/{course.Settings.Name}.yml", courseString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SaveCourse(LocalCourse course)
|
public async Task SaveModules(LocalCourse course)
|
||||||
{
|
{
|
||||||
var courseString = CourseToYaml(course);
|
var courseDirectory = $"../storage/{course.Settings.Name}";
|
||||||
|
|
||||||
|
foreach (var module in course.Modules)
|
||||||
|
{
|
||||||
|
var moduleDirectory = courseDirectory + "/" + module.Name;
|
||||||
|
if (!Directory.Exists(moduleDirectory))
|
||||||
|
Directory.CreateDirectory(moduleDirectory);
|
||||||
|
|
||||||
|
await SaveQuizzes(course, module);
|
||||||
|
await SaveAssignments(course, module);
|
||||||
|
}
|
||||||
|
|
||||||
File.WriteAllText($"../storage/{course.Name}.yml", courseString);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task SaveQuizzes(LocalCourse course, LocalModule module)
|
||||||
|
{
|
||||||
|
var quizzesDirectory = $"../storage/{course.Settings.Name}/{module.Name}/quizzes";
|
||||||
|
if (!Directory.Exists(quizzesDirectory))
|
||||||
|
Directory.CreateDirectory(quizzesDirectory);
|
||||||
|
|
||||||
|
foreach(var quiz in module.Quizzes)
|
||||||
|
{
|
||||||
|
var filePath = quizzesDirectory + "/" + quiz.Name+ ".yml"; ;
|
||||||
|
var quizYaml = quiz.ToYaml();
|
||||||
|
await File.WriteAllTextAsync(filePath, quizYaml);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task SaveAssignments(LocalCourse course, LocalModule module)
|
||||||
|
{
|
||||||
|
var assignmentsDirectory = $"../storage/{course.Settings.Name}/{module.Name}/assignments";
|
||||||
|
if (!Directory.Exists(assignmentsDirectory))
|
||||||
|
Directory.CreateDirectory(assignmentsDirectory);
|
||||||
|
|
||||||
|
foreach (var assignment in module.Assignments)
|
||||||
|
{
|
||||||
|
var filePath = assignmentsDirectory + "/" + assignment.Name + ".yml";
|
||||||
|
var assignmentYaml = assignment.ToYaml();
|
||||||
|
await File.WriteAllTextAsync(filePath, assignmentYaml);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<IEnumerable<LocalCourse>> LoadSavedCourses()
|
public async Task<IEnumerable<LocalCourse>> LoadSavedCourses()
|
||||||
{
|
{
|
||||||
string path = "../storage/";
|
string path = "../storage/";
|
||||||
|
|||||||
Reference in New Issue
Block a user