-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathaddNewCourse.ts
More file actions
59 lines (55 loc) · 2.18 KB
/
addNewCourse.ts
File metadata and controls
59 lines (55 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { LocalCourseData } from "../api/storage";
import { Logger } from "../utilities";
import { combineApiExerciseData } from "../utilities/apiData";
import { refreshLocalExercises } from "./refreshLocalExercises";
import { ActionContext } from "./types";
import { Err, Result } from "ts-results";
/**
* Adds a new course to user's courses.
*/
export async function addNewCourse(
actionContext: ActionContext,
organization: string,
course: number,
): Promise<Result<void, Error>> {
const { tmc, ui, userData, workspaceManager } = actionContext;
if (!(tmc.ok && userData.ok && workspaceManager.ok)) {
return new Err(new Error("Extension was not initialized properly"));
}
Logger.info("Adding new course");
const courseDataResult = await tmc.val.getCourseData(course);
if (courseDataResult.err) {
return courseDataResult;
}
const courseData = courseDataResult.val;
let availablePoints = 0;
let awardedPoints = 0;
courseData.exercises.forEach((x) => {
availablePoints += x.available_points.length;
awardedPoints += x.awarded_points.length;
});
const localData: LocalCourseData = {
description: courseData.details.description || "",
exercises: combineApiExerciseData(courseData.details.exercises, courseData.exercises),
id: courseData.details.id,
name: courseData.details.name,
title: courseData.details.title,
organization: organization,
availablePoints: availablePoints,
awardedPoints: awardedPoints,
perhapsExamMode: courseData.settings.hide_submission_results,
newExercises: [],
notifyAfter: 0,
disabled: courseData.settings.disabled_status === "enabled" ? false : true,
materialUrl: courseData.settings.material_url,
};
userData.val.addCourse(localData);
ui.treeDP.addChildWithId("myCourses", localData.id, localData.title, {
command: "tmc.courseDetails",
title: "Go To Course Details",
arguments: [localData.id],
});
workspaceManager.val.createWorkspaceFile(courseData.details.name);
//await displayUserCourses(actionContext);
return refreshLocalExercises(actionContext);
}