Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
838 changes: 413 additions & 425 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions src/actions/addNewCourse.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { LocalCourseData } from "../api/storage";
import { v2 as storage } from "../storage/data";
import { Logger } from "../utilities";
import { combineApiExerciseData } from "../utilities/apiData";
import { refreshLocalExercises } from "./refreshLocalExercises";
Expand Down Expand Up @@ -32,7 +32,7 @@ export async function addNewCourse(
awardedPoints += x.awarded_points.length;
});

const localData: LocalCourseData = {
const localData: storage.LocalCourseData = {
description: courseData.details.description || "",
exercises: combineApiExerciseData(courseData.details.exercises, courseData.exercises),
id: courseData.details.id,
Expand Down
8 changes: 4 additions & 4 deletions src/actions/user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
* Group of actions that respond to the user.
* -------------------------------------------------------------------------------------------------
*/
import { LocalCourseData } from "../api/storage";
import { WorkspaceExercise } from "../api/workspaceManager";
import { EXAM_TEST_RESULT, NOTIFICATION_DELAY } from "../config/constants";
import { BottleneckError } from "../errors";
import { randomPanelId, TmcPanel } from "../panels/TmcPanel";
import { ExerciseSubmissionPanel, ExerciseTestsPanel, TestResultData } from "../shared/shared";
import { v2 as storage } from "../storage/data";
import { Logger, parseFeedbackQuestion } from "../utilities/";
import { getActiveEditorExecutablePath } from "../window";
import { downloadNewExercisesForCourse } from "./downloadNewExercisesForCourse";
Expand Down Expand Up @@ -257,7 +257,7 @@ export async function submitExercise(

const courseData = userData.val.getCourseByName(
exercise.courseSlug,
) as Readonly<LocalCourseData>;
) as Readonly<storage.LocalCourseData>;
await checkForCourseUpdates(actionContext, courseData.id);
vscode.commands.executeCommand("tmc.updateExercises", "silent");

Expand Down Expand Up @@ -321,13 +321,13 @@ export async function checkForCourseUpdates(
const courses = courseId ? [userData.val.getCourse(courseId)] : userData.val.getCourses();
const filteredCourses = courses.filter((c) => c.notifyAfter <= Date.now());
Logger.info(`Checking for course updates for courses ${filteredCourses.map((c) => c.name)}`);
const updatedCourses: LocalCourseData[] = [];
const updatedCourses: storage.LocalCourseData[] = [];
for (const course of filteredCourses) {
await updateCourse(actionContext, course.id);
updatedCourses.push(userData.val.getCourse(course.id));
}

const handleDownload = async (course: LocalCourseData): Promise<void> => {
const handleDownload = async (course: storage.LocalCourseData): Promise<void> => {
const downloadResult = await downloadNewExercisesForCourse(actionContext, course.id);
if (downloadResult.err) {
dialog.errorNotification(
Expand Down
96 changes: 0 additions & 96 deletions src/api/storage.ts

This file was deleted.

4 changes: 2 additions & 2 deletions src/commands/switchWorkspace.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as actions from "../actions";
import { ActionContext } from "../actions/types";
import { LocalCourseData } from "../api/storage";
import { v2 as storage } from "../storage/data";
import { Logger } from "../utilities";
import * as vscode from "vscode";

Expand All @@ -16,7 +16,7 @@ export async function switchWorkspace(actionContext: ActionContext): Promise<voi
const currentWorkspace = vscode.workspace.name?.split(" ")[0];
const courseWorkspace = await dialog.selectItem(
"Select a course workspace to open",
...courses.map<[string, LocalCourseData]>((c) => [
...courses.map<[string, storage.LocalCourseData]>((c) => [
c.name === currentWorkspace ? `${c.name} (Currently open)` : c.name,
c,
]),
Expand Down
5 changes: 3 additions & 2 deletions src/config/settings.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import Storage, { SessionState } from "../api/storage";
import Storage from "../storage";
import { v2 as storage } from "../storage/data";
import { Logger, LogLevel } from "../utilities/logger";
import * as vscode from "vscode";

Expand Down Expand Up @@ -31,7 +32,7 @@ export default class Settings implements vscode.Disposable {
*/
private readonly _storage: Storage;

private _state: SessionState;
private _state: storage.SessionState;
private _disposables: vscode.Disposable[];

constructor(storage: Storage) {
Expand Down
21 changes: 11 additions & 10 deletions src/config/userdata.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import Storage, { LocalCourseData, LocalCourseExercise } from "../api/storage";
import Storage from "../storage";
import { v2 as storage } from "../storage/data";
import { Logger } from "../utilities/logger";
import * as _ from "lodash";
import { Err, Ok, Result } from "ts-results";

export class UserData {
private _courses: Map<number, LocalCourseData>;
private _courses: Map<number, storage.LocalCourseData>;
private _passedExercises: Set<number> = new Set();
private _storage: Storage;
constructor(storage: Storage) {
Expand All @@ -25,23 +26,23 @@ export class UserData {
this._storage = storage;
}

public getCourses(): LocalCourseData[] {
public getCourses(): storage.LocalCourseData[] {
return Array.from(this._courses.values());
}

public getCourse(id: number): Readonly<LocalCourseData> {
public getCourse(id: number): Readonly<storage.LocalCourseData> {
const course = this._courses.get(id);
return course as LocalCourseData;
return course as storage.LocalCourseData;
}

public getCourseByName(name: string): Readonly<LocalCourseData> {
public getCourseByName(name: string): Readonly<storage.LocalCourseData> {
return this.getCourses().filter((x) => x.name === name)[0];
}

public getExerciseByName(
courseSlug: string,
exerciseName: string,
): Readonly<LocalCourseExercise> | undefined {
): Readonly<storage.LocalCourseExercise> | undefined {
for (const course of this._courses.values()) {
if (course.name === courseSlug) {
return course.exercises.find((x) => x.name === exerciseName);
Expand All @@ -62,7 +63,7 @@ export class UserData {
}
}

public addCourse(data: LocalCourseData): void {
public addCourse(data: storage.LocalCourseData): void {
if (this._courses.has(data.id)) {
throw new Error("Trying to add an already existing course");
}
Expand All @@ -76,7 +77,7 @@ export class UserData {
this._updatePersistentData();
}

public async updateCourse(data: LocalCourseData): Promise<void> {
public async updateCourse(data: storage.LocalCourseData): Promise<void> {
if (!this._courses.has(data.id)) {
throw new Error("Trying to fetch course that doesn't exist.");
}
Expand All @@ -86,7 +87,7 @@ export class UserData {

public async updateExercises(
courseId: number,
exercises: LocalCourseExercise[],
exercises: storage.LocalCourseExercise[],
): Promise<Result<void, Error>> {
const courseData = this._courses.get(courseId);
if (!courseData) {
Expand Down
6 changes: 2 additions & 4 deletions src/extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import { checkForCourseUpdates, refreshLocalExercises } from "./actions";
import { ActionContext } from "./actions/types";
import Dialog from "./api/dialog";
import ExerciseDecorationProvider from "./api/exerciseDecorationProvider";
import Storage from "./api/storage";
import TMC from "./api/tmc";
import WorkspaceManager from "./api/workspaceManager";
import {
Expand All @@ -16,8 +15,8 @@ import Settings from "./config/settings";
import { UserData } from "./config/userdata";
import { EmptyLangsResponseError, HaltForReloadError } from "./errors";
import * as init from "./init";
import { migrateExtensionDataFromPreviousVersions } from "./migrate";
import { randomPanelId, TmcPanel } from "./panels/TmcPanel";
import Storage from "./storage";
import UI from "./ui/ui";
import { cliFolder, Logger, LogLevel, semVerCompare } from "./utilities";
import * as path from "path";
Expand Down Expand Up @@ -109,9 +108,8 @@ async function activateInner(context: vscode.ExtensionContext): Promise<void> {
// migrate data between versions
const storage = new Storage(context);
if (tmc.ok) {
const migrationResult = await migrateExtensionDataFromPreviousVersions(
const migrationResult = await storage.migrateToLatest(
context,
storage,
dialog,
tmc.val,
vscode.workspace.getConfiguration(),
Expand Down
2 changes: 1 addition & 1 deletion src/init/resources.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import Storage from "../api/storage";
import { EXTENSION_ID, WORKSPACE_ROOT_FILE_TEXT, WORKSPACE_SETTINGS } from "../config/constants";
import Resources from "../config/resources";
import Storage from "../storage";
import { Logger } from "../utilities/logger";
import * as fs from "fs-extra";
import * as path from "path";
Expand Down
5 changes: 2 additions & 3 deletions src/migrate/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import Dialog from "../api/dialog";
import Storage from "../api/storage";
import TMC from "../api/tmc";
import {
WORKSPACE_ROOT_FILE_NAME,
Expand All @@ -8,7 +7,7 @@ import {
WORKSPACE_SETTINGS,
} from "../config/constants";
import { HaltForReloadError } from "../errors";
import migrateExerciseData from "./migrateExerciseData";
import migrateExerciseDataToLatest from "../storage/migration/exerciseData";
import migrateExtensionSettings from "./migrateExtensionSettings";
import migrateSessionState from "./migrateSessionState";
import migrateUserData from "./migrateUserData";
Expand Down Expand Up @@ -50,7 +49,7 @@ export async function migrateExtensionDataFromPreviousVersions(
const migratedUserData = migrateUserData(memento);

// Workspace data migration - this one is a bit more tricky so do it last.
const migratedExerciseData = await migrateExerciseData(memento, dialog, tmc);
const migratedExerciseData = await migrateExerciseDataToLatest(memento, dialog, tmc);

await storage.updateExtensionSettings(migratedExtensionSettings.data);
await storage.updateSessionState(migratedSessionState.data);
Expand Down
3 changes: 1 addition & 2 deletions src/migrate/migrateExtensionSettings.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import validateData, { MigratedData } from "../storage/migration";
import { semVerCompare } from "../utilities";
import { MigratedData } from "./types";
import validateData from "./validateData";
import { createIs } from "typia";
import * as vscode from "vscode";

Expand Down
3 changes: 1 addition & 2 deletions src/migrate/migrateSessionState.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { MigratedData } from "./types";
import validateData from "./validateData";
import validateData, { MigratedData } from "../storage/migration";
import { createIs } from "typia";
import * as vscode from "vscode";

Expand Down
5 changes: 2 additions & 3 deletions src/migrate/migrateUserData.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { LocalCourseData } from "../api/storage";
import {
LOCAL_EXERCISE_AVAILABLE_POINTS_PLACEHOLDER,
LOCAL_EXERCISE_AWARDED_POINTS_PLACEHOLDER,
LOCAL_EXERCISE_UNAWARDED_POINTS_PLACEHOLDER,
} from "../config/constants";
import { MigratedData } from "./types";
import validateData from "./validateData";
import { LocalCourseData } from "../storage/data";
import validateData, { MigratedData } from "../storage/migration";
import { createIs } from "typia";
import * as vscode from "vscode";

Expand Down
4 changes: 0 additions & 4 deletions src/migrate/types.ts

This file was deleted.

Loading
Loading