mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
resolved warnings
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
@page "/"
|
@page "/"
|
||||||
@using CanvasModel.EnrollmentTerms
|
@using CanvasModel.EnrollmentTerms
|
||||||
|
@using Management.Web.Shared.Course
|
||||||
@using Management.Web.Shared.Semester
|
@using Management.Web.Shared.Semester
|
||||||
@using CanvasModel.Courses
|
@using CanvasModel.Courses
|
||||||
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
@using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage
|
||||||
@@ -8,7 +9,6 @@
|
|||||||
@inject CanvasService canvas
|
@inject CanvasService canvas
|
||||||
@inject CoursePlanner planner
|
@inject CoursePlanner planner
|
||||||
@inject ProtectedLocalStorage BrowserStorage
|
@inject ProtectedLocalStorage BrowserStorage
|
||||||
@inject YamlManager yamlManager
|
|
||||||
|
|
||||||
@code
|
@code
|
||||||
{
|
{
|
||||||
@@ -57,14 +57,13 @@
|
|||||||
|
|
||||||
@if(planner.LocalCourse != null)
|
@if(planner.LocalCourse != null)
|
||||||
{
|
{
|
||||||
|
<div class="">
|
||||||
<div class="">
|
<button
|
||||||
<button
|
@onclick="@(() => planner.LocalCourse = null)"
|
||||||
@onclick="@(() => planner.LocalCourse = default)"
|
class="btn btn-primary"
|
||||||
class="btn btn-primary"
|
>
|
||||||
>
|
Select New Course
|
||||||
Select New Course
|
</button>
|
||||||
</button>
|
</div>
|
||||||
</div>
|
<CourseDetails />
|
||||||
<Calendar />
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ global using CanvasModel.EnrollmentTerms;
|
|||||||
global using CanvasModel.Courses;
|
global using CanvasModel.Courses;
|
||||||
global using CanvasModel;
|
global using CanvasModel;
|
||||||
global using LocalModels;
|
global using LocalModels;
|
||||||
|
global using Management.Web.Shared.Course;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
using Microsoft.AspNetCore.Components.Web;
|
using Microsoft.AspNetCore.Components.Web;
|
||||||
@@ -19,10 +20,10 @@ builder.Services.AddRazorPages();
|
|||||||
builder.Services.AddServerSideBlazor();
|
builder.Services.AddServerSideBlazor();
|
||||||
builder.Services.AddSingleton<IWebRequestor, WebRequestor>();
|
builder.Services.AddSingleton<IWebRequestor, WebRequestor>();
|
||||||
builder.Services.AddSingleton<CanvasService, CanvasService>();
|
builder.Services.AddSingleton<CanvasService, CanvasService>();
|
||||||
|
builder.Services.AddSingleton<YamlManager>();
|
||||||
builder.Services.AddSingleton<CoursePlanner>();
|
builder.Services.AddSingleton<CoursePlanner>();
|
||||||
builder.Services.AddSingleton<AssignmentDragContainer>();
|
builder.Services.AddSingleton<AssignmentDragContainer>();
|
||||||
builder.Services.AddScoped<BrowserStorageManagement>();
|
builder.Services.AddScoped<BrowserStorageManagement>();
|
||||||
builder.Services.AddScoped<YamlManager>();
|
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
@using CanvasModel.EnrollmentTerms
|
|
||||||
@using Management.Web.Shared.Module
|
|
||||||
@using Management.Web.Shared.Semester
|
|
||||||
|
|
||||||
@inject CoursePlanner planner
|
|
||||||
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
|
|
||||||
@if (planner.LocalCourse != null)
|
|
||||||
{
|
|
||||||
@foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.StartDate, planner.LocalCourse.EndDate))
|
|
||||||
{
|
|
||||||
<MonthDetail Month="month" />
|
|
||||||
<hr />
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</div>
|
|
||||||
<div class="col">
|
|
||||||
<Modules />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
48
Management.Web/Shared/Course/CourseDetails.razor
Normal file
48
Management.Web/Shared/Course/CourseDetails.razor
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
@using CanvasModel.EnrollmentTerms
|
||||||
|
@using Management.Web.Shared.Module
|
||||||
|
@using Management.Web.Shared.Semester
|
||||||
|
|
||||||
|
@inject CoursePlanner planner
|
||||||
|
|
||||||
|
@code
|
||||||
|
{
|
||||||
|
private bool showEditCourseSettings = false;
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
planner.StateHasChanged += () => this.InvokeAsync(this.StateHasChanged);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<br>
|
||||||
|
|
||||||
|
@if(!showEditCourseSettings)
|
||||||
|
{
|
||||||
|
<button class="btn btn-outline-secondary" @onclick="@(() => showEditCourseSettings = true)">Edit Course Settings</button>
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<CourseSettings />
|
||||||
|
<button
|
||||||
|
class="btn btn-outline-secondary"
|
||||||
|
@onclick="@(() => showEditCourseSettings = false)"
|
||||||
|
>
|
||||||
|
Done Editing Course Settings
|
||||||
|
</button>
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
@if (planner.LocalCourse != null)
|
||||||
|
{
|
||||||
|
@foreach (var month in SemesterPlanner.GetMonthsBetweenDates(planner.LocalCourse.StartDate, planner.LocalCourse.EndDate))
|
||||||
|
{
|
||||||
|
<MonthDetail Month="month" />
|
||||||
|
<hr />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<Modules />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
99
Management.Web/Shared/Course/CourseSettings.razor
Normal file
99
Management.Web/Shared/Course/CourseSettings.razor
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
@inject CanvasService canvas
|
||||||
|
@inject CoursePlanner planner
|
||||||
|
|
||||||
|
@code
|
||||||
|
{
|
||||||
|
private IEnumerable<EnrollmentTermModel>? terms { get; set; } = null;
|
||||||
|
private ulong? _selectedTermId {get; set;}
|
||||||
|
private ulong? selectedTermId {
|
||||||
|
get => _selectedTermId;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_selectedTermId = value;
|
||||||
|
if(selectedTerm != null && planner.LocalCourse != null)
|
||||||
|
{
|
||||||
|
planner.LocalCourse = planner.LocalCourse with
|
||||||
|
{
|
||||||
|
StartDate=selectedTerm.StartAt ?? new DateTime(),
|
||||||
|
EndDate=selectedTerm.EndAt ?? new DateTime(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private EnrollmentTermModel? selectedTerm
|
||||||
|
{
|
||||||
|
get => terms?.FirstOrDefault(t => t.Id == selectedTermId);
|
||||||
|
}
|
||||||
|
private bool loading = false;
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
if(planner.LocalCourse != null && planner.LocalCourse.CanvasId != null)
|
||||||
|
{
|
||||||
|
loading = true;
|
||||||
|
ulong id = planner.LocalCourse?.CanvasId ?? throw new Exception("wtf how did i get here");
|
||||||
|
var canvasCourse = await canvas.GetCourse(id);
|
||||||
|
terms = await canvas.GetCurrentTermsFor(canvasCourse.StartAt);
|
||||||
|
loading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
<h5>Select Days Of Week</h5>
|
||||||
|
<div class="row m-3">
|
||||||
|
@foreach (DayOfWeek day in (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek)))
|
||||||
|
{
|
||||||
|
<div class="col">
|
||||||
|
<button
|
||||||
|
class="@(
|
||||||
|
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false
|
||||||
|
? "btn btn-secondary"
|
||||||
|
: "btn btn-outline-secondary"
|
||||||
|
)"
|
||||||
|
@onclick="() =>
|
||||||
|
{
|
||||||
|
if(planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false)
|
||||||
|
{
|
||||||
|
planner.LocalCourse = planner.LocalCourse with
|
||||||
|
{
|
||||||
|
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Where((d) => d != day)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (planner.LocalCourse != null)
|
||||||
|
{
|
||||||
|
planner.LocalCourse = planner.LocalCourse with
|
||||||
|
{
|
||||||
|
DaysOfWeek = planner.LocalCourse.DaysOfWeek.Append(day)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
@day
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
@if(loading)
|
||||||
|
{
|
||||||
|
<Spinner />
|
||||||
|
}
|
||||||
|
|
||||||
|
@if (terms != null)
|
||||||
|
{
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-auto">
|
||||||
|
<form>
|
||||||
|
<lablel for="termselect">Select Term for Start and End Date:</lablel>
|
||||||
|
<select id="termselect" class="form-select" @bind="selectedTermId">
|
||||||
|
@foreach (var term in terms)
|
||||||
|
{
|
||||||
|
<option value="@term.Id">@term.Name</option>
|
||||||
|
}
|
||||||
|
</select>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
@@ -5,14 +5,11 @@
|
|||||||
|
|
||||||
@code
|
@code
|
||||||
{
|
{
|
||||||
public IEnumerable<LocalCourse> localCourses { get; set; }
|
public IEnumerable<LocalCourse>? localCourses { get; set; }
|
||||||
protected override async Task OnInitializedAsync()
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
localCourses = await yamlManager.LoadSavedCourses();
|
localCourses = await yamlManager.LoadSavedCourses();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@if(localCourses != null)
|
@if(localCourses != null)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool loadingCourses = false;
|
private bool loadingCourses = false;
|
||||||
public IEnumerable<LocalCourse> localCourses { get; set; }
|
public IEnumerable<LocalCourse>? localCourses { get; set; }
|
||||||
private IEnumerable<EnrollmentTermModel>? terms { get; set; } = null;
|
private IEnumerable<EnrollmentTermModel>? terms { get; set; } = null;
|
||||||
private IEnumerable<CourseModel>? courses { get; set;} = null;
|
private IEnumerable<CourseModel>? courses { get; set;} = null;
|
||||||
private ulong? _selectedTermId { get; set; }
|
private ulong? _selectedTermId { get; set; }
|
||||||
@@ -20,7 +20,10 @@
|
|||||||
set
|
set
|
||||||
{
|
{
|
||||||
_selectedTermId = value;
|
_selectedTermId = value;
|
||||||
updateCourses();
|
@* updateCourses(); *@
|
||||||
|
var task = Task.Run(async () => await updateCourses());
|
||||||
|
task.Wait();
|
||||||
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private EnrollmentTermModel? selectedTerm
|
private EnrollmentTermModel? selectedTerm
|
||||||
@@ -58,7 +61,7 @@
|
|||||||
CanvasId = selectedCourse.Id,
|
CanvasId = selectedCourse.Id,
|
||||||
DaysOfWeek = days,
|
DaysOfWeek = days,
|
||||||
};
|
};
|
||||||
await yamlManager.SaveCourse(course);
|
await yamlManager.SaveCourseAsync(course);
|
||||||
}
|
}
|
||||||
await updateCourses();
|
await updateCourses();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
[Parameter]
|
[Parameter]
|
||||||
[Required]
|
[Required]
|
||||||
public LocalAssignment assignment { get; set; } = new();
|
public LocalAssignment assignment { get; set; } = new();
|
||||||
private async Task HandleDragStart()
|
private void HandleDragStart()
|
||||||
{
|
{
|
||||||
dragContainer.AssignmentBeingDragged = assignment;
|
dragContainer.AssignmentBeingDragged = assignment;
|
||||||
System.Console.WriteLine("assignment set");
|
System.Console.WriteLine("assignment set");
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
draggable="true"
|
draggable="true"
|
||||||
ondragstart="@HandleDragStart"
|
@ondragstart="HandleDragStart"
|
||||||
class="col-2"
|
class="col-2"
|
||||||
>
|
>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@code {
|
@code {
|
||||||
|
|
||||||
[Parameter, EditorRequired]
|
[Parameter, EditorRequired]
|
||||||
public string ModuleName { get; set; }
|
public string ModuleName { get; set; } = "";
|
||||||
|
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public EventCallback OnSubmit { get; set; }
|
public EventCallback OnSubmit { get; set; }
|
||||||
|
|||||||
@@ -7,17 +7,7 @@
|
|||||||
@inject BrowserStorageManagement storage
|
@inject BrowserStorageManagement storage
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
private bool showNewModule { get; set; } = false;
|
private bool showNewModule { get; set; } = false;
|
||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
||||||
{
|
|
||||||
if(firstRender)
|
|
||||||
{
|
|
||||||
await storage.LoadStoredConfig();
|
|
||||||
StateHasChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@if (!showNewModule)
|
@if (!showNewModule)
|
||||||
@@ -42,13 +32,3 @@ else
|
|||||||
<ModuleDetail Module="module" />
|
<ModuleDetail Module="module" />
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
<hr>
|
|
||||||
<div class="text-center">
|
|
||||||
<button
|
|
||||||
class="btn btn-primary"
|
|
||||||
@onclick="@(async () => await storage.Save())"
|
|
||||||
>
|
|
||||||
Save Modules
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
@@ -26,9 +26,9 @@
|
|||||||
DayOfWeek? weekDay = date?.DayOfWeek;
|
DayOfWeek? weekDay = date?.DayOfWeek;
|
||||||
DayOfWeek notNullDay = weekDay ?? default;
|
DayOfWeek notNullDay = weekDay ?? default;
|
||||||
var dayInSemester =
|
var dayInSemester =
|
||||||
planner.LocalCourse.DaysOfWeek.Contains(notNullDay)
|
planner.LocalCourse?.DaysOfWeek.Contains(notNullDay) ?? false
|
||||||
&& date < planner.LocalCourse.EndDate
|
&& date < planner.LocalCourse.EndDate
|
||||||
&& date > planner.LocalCourse.StartDate;
|
&& date > planner.LocalCourse.StartDate;
|
||||||
|
|
||||||
var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses;
|
var totalClasses = dayInSemester ? $"bg-light {baseClasses}" : baseClasses;
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
Console.WriteLine("on drag start");
|
Console.WriteLine("on drag start");
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task OnDrop()
|
void OnDrop()
|
||||||
{
|
{
|
||||||
Console.WriteLine("on drop");
|
Console.WriteLine("on drop");
|
||||||
dragging = false;
|
dragging = false;
|
||||||
@@ -58,10 +58,10 @@
|
|||||||
dragContainer.AssignmentBeingDragged = null;
|
dragContainer.AssignmentBeingDragged = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task OnDragEnter() {
|
void OnDragEnter() {
|
||||||
dragging = true;
|
dragging = true;
|
||||||
}
|
}
|
||||||
async Task OnDragLeave() {
|
void OnDragLeave() {
|
||||||
dragging = false;
|
dragging = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,7 +19,14 @@
|
|||||||
<div class="row text-center fw-bold">
|
<div class="row text-center fw-bold">
|
||||||
@foreach (DayOfWeek day in WeekDaysList)
|
@foreach (DayOfWeek day in WeekDaysList)
|
||||||
{
|
{
|
||||||
<div class="@(planner.LocalCourse.DaysOfWeek.Contains(day) ? "col" : "col text-secondary")">@day</div>
|
<div class="@(
|
||||||
|
planner.LocalCourse?.DaysOfWeek.Contains(day) ?? false
|
||||||
|
? "col"
|
||||||
|
: "col text-secondary"
|
||||||
|
)"
|
||||||
|
>
|
||||||
|
@day
|
||||||
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@ using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage;
|
|||||||
|
|
||||||
public class BrowserStorageManagement
|
public class BrowserStorageManagement
|
||||||
{
|
{
|
||||||
private string moduleStorageKey = "module storage key";
|
// private string moduleStorageKey = "module storage key";
|
||||||
private string assignmentStorageKey = "assignment storage key";
|
// private string assignmentStorageKey = "assignment storage key";
|
||||||
private string courseIdKey = "course id storage key";
|
// private string courseIdKey = "course id storage key";
|
||||||
|
|
||||||
private CoursePlanner planner { get; }
|
private CoursePlanner planner { get; }
|
||||||
private ProtectedLocalStorage storage { get; }
|
private ProtectedLocalStorage storage { get; }
|
||||||
@@ -21,53 +21,53 @@ public class BrowserStorageManagement
|
|||||||
canvas = canvasService;
|
canvas = canvasService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task LoadStoredConfig()
|
// public async Task LoadStoredConfig()
|
||||||
{
|
// {
|
||||||
// var storedModules = await storage.GetAsync<IEnumerable<CourseModule>>(moduleStorageKey);
|
// // var storedModules = await storage.GetAsync<IEnumerable<CourseModule>>(moduleStorageKey);
|
||||||
// if (storedModules.Success)
|
// // if (storedModules.Success)
|
||||||
// {
|
// // {
|
||||||
// planner.Modules =
|
// // planner.Modules =
|
||||||
// storedModules.Value
|
// // storedModules.Value
|
||||||
// ?? throw new Exception("stored modules was null, it shouldn't have been");
|
// // ?? throw new Exception("stored modules was null, it shouldn't have been");
|
||||||
// }
|
// // }
|
||||||
// else
|
// // else
|
||||||
// {
|
// // {
|
||||||
// Console.WriteLine("no stored modules");
|
// // Console.WriteLine("no stored modules");
|
||||||
// }
|
// // }
|
||||||
|
|
||||||
// var storedAssignments = await storage.GetAsync<IEnumerable<CourseModule>>(assignmentStorageKey);
|
// // var storedAssignments = await storage.GetAsync<IEnumerable<CourseModule>>(assignmentStorageKey);
|
||||||
// if (storedAssignments.Success)
|
// // if (storedAssignments.Success)
|
||||||
// {
|
// // {
|
||||||
// planner.Modules =
|
// // planner.Modules =
|
||||||
// storedAssignments.Value
|
// // storedAssignments.Value
|
||||||
// ?? throw new Exception("stored assignments are null, it shouldn't have been");
|
// // ?? throw new Exception("stored assignments are null, it shouldn't have been");
|
||||||
// }
|
// // }
|
||||||
// else
|
// // else
|
||||||
// {
|
// // {
|
||||||
// Console.WriteLine("no stored assignments");
|
// // Console.WriteLine("no stored assignments");
|
||||||
// }
|
// // }
|
||||||
|
|
||||||
// var storedCourseId = await storage.GetAsync<ulong>(courseIdKey);
|
// // var storedCourseId = await storage.GetAsync<ulong>(courseIdKey);
|
||||||
// if (storedCourseId.Success)
|
// // if (storedCourseId.Success)
|
||||||
// {
|
// // {
|
||||||
// // var courses =
|
// // // var courses =
|
||||||
// planner.Course = await canvas.GetCourse(storedCourseId.Value);
|
// // planner.Course = await canvas.GetCourse(storedCourseId.Value);
|
||||||
// planner.Modules = await canvas.GetModules(planner.Course.Id);
|
// // planner.Modules = await canvas.GetModules(planner.Course.Id);
|
||||||
// }
|
// // }
|
||||||
// else
|
// // else
|
||||||
// {
|
// // {
|
||||||
// Console.WriteLine("no stored assignments");
|
// // Console.WriteLine("no stored assignments");
|
||||||
// }
|
// // }
|
||||||
}
|
// }
|
||||||
|
|
||||||
public async Task Save()
|
// public async Task Save()
|
||||||
{
|
// {
|
||||||
// await storage.SetAsync(moduleStorageKey, planner.Modules);
|
// // await storage.SetAsync(moduleStorageKey, planner.Modules);
|
||||||
// await storage.SetAsync(assignmentStorageKey, planner.Assignments);
|
// // await storage.SetAsync(assignmentStorageKey, planner.Assignments);
|
||||||
|
|
||||||
// if (planner.Course != null)
|
// // if (planner.Course != null)
|
||||||
// await storage.SetAsync(courseIdKey, planner.Course.Id);
|
// // await storage.SetAsync(courseIdKey, planner.Course.Id);
|
||||||
// else
|
// // else
|
||||||
// await storage.DeleteAsync(courseIdKey);
|
// // await storage.DeleteAsync(courseIdKey);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,24 @@ using LocalModels;
|
|||||||
|
|
||||||
public class CoursePlanner
|
public class CoursePlanner
|
||||||
{
|
{
|
||||||
public LocalCourse _localCourse { get; set; } = default!;
|
private readonly YamlManager yamlManager;
|
||||||
public LocalCourse LocalCourse
|
|
||||||
|
public CoursePlanner(YamlManager yamlManager)
|
||||||
|
{
|
||||||
|
this.yamlManager = yamlManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LocalCourse? _localCourse { get; set; }
|
||||||
|
public LocalCourse? LocalCourse
|
||||||
{
|
{
|
||||||
get => _localCourse;
|
get => _localCourse;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
// ignore initial load of course
|
||||||
|
if (_localCourse != null && value != null)
|
||||||
|
{
|
||||||
|
yamlManager.SaveCourse(value);
|
||||||
|
}
|
||||||
_localCourse = value;
|
_localCourse = value;
|
||||||
StateHasChanged?.Invoke();
|
StateHasChanged?.Invoke();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class CanvasService : ICanvasService
|
|||||||
|
|
||||||
public async Task<CourseModel> GetCourse(ulong courseId)
|
public async Task<CourseModel> GetCourse(ulong courseId)
|
||||||
{
|
{
|
||||||
var url = $"course/{courseId}";
|
var url = $"courses/{courseId}";
|
||||||
var request = new RestRequest(url);
|
var request = new RestRequest(url);
|
||||||
var (data, response) = await webRequestor.GetAsync<CourseModel>(request);
|
var (data, response) = await webRequestor.GetAsync<CourseModel>(request);
|
||||||
|
|
||||||
@@ -127,7 +127,8 @@ public class CanvasService : ICanvasService
|
|||||||
|
|
||||||
var currentTerms = terms
|
var currentTerms = terms
|
||||||
.Where(t => t.EndAt != null && t.EndAt > queryDate && t.EndAt < queryDate.AddYears(1))
|
.Where(t => t.EndAt != null && t.EndAt > queryDate && t.EndAt < queryDate.AddYears(1))
|
||||||
.Take(3);
|
.Take(3)
|
||||||
|
.OrderBy(t => t.StartAt);
|
||||||
|
|
||||||
return currentTerms;
|
return currentTerms;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ public class WebRequestor : IWebRequestor
|
|||||||
}
|
}
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var data = JsonSerializer.Deserialize<T>(response.Content);
|
var data = JsonSerializer.Deserialize<T>(response.Content!);
|
||||||
|
|
||||||
if (data == null)
|
if (data == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,30 +6,35 @@ public class YamlManager
|
|||||||
{
|
{
|
||||||
public string CourseToYaml(LocalCourse course)
|
public string CourseToYaml(LocalCourse course)
|
||||||
{
|
{
|
||||||
var serializer = new SerializerBuilder()
|
var serializer = new SerializerBuilder().Build();
|
||||||
.Build();
|
|
||||||
var yaml = serializer.Serialize(course);
|
var yaml = serializer.Serialize(course);
|
||||||
|
|
||||||
System.Console.WriteLine(yaml);
|
// System.Console.WriteLine(yaml);
|
||||||
return yaml;
|
return yaml;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalCourse ParseCourse(string rawCourse)
|
public LocalCourse ParseCourse(string rawCourse)
|
||||||
{
|
{
|
||||||
var deserializer = new DeserializerBuilder()
|
var deserializer = new DeserializerBuilder().Build();
|
||||||
.Build();
|
|
||||||
|
|
||||||
var person = deserializer.Deserialize<LocalCourse>(rawCourse);
|
var person = deserializer.Deserialize<LocalCourse>(rawCourse);
|
||||||
return person;
|
return person;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task SaveCourse(LocalCourse course)
|
public async Task SaveCourseAsync(LocalCourse course)
|
||||||
{
|
{
|
||||||
var courseString = CourseToYaml(course);
|
var courseString = CourseToYaml(course);
|
||||||
|
|
||||||
await File.WriteAllTextAsync($"../storage/{course.Name}.yml", courseString);
|
await File.WriteAllTextAsync($"../storage/{course.Name}.yml", courseString);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SaveCourse(LocalCourse course)
|
||||||
|
{
|
||||||
|
var courseString = CourseToYaml(course);
|
||||||
|
|
||||||
|
File.WriteAllText($"../storage/{course.Name}.yml", courseString);
|
||||||
|
}
|
||||||
|
|
||||||
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