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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
import Lab from '@/models/Lab';
import PeerTeacher from '@/models/PeerTeacher';
import EventInfo from '../models/EventInfo';
export function parseLabFile(file: File): Promise<Lab[]> {
const validCourses = [
'110',
'111',
'121',
'206',
'221',
// '222',
'312',
'313',
// '314',
'315',
];
return new Promise((resolve, reject) => {
const result: Lab[] = [];
file.text().then((text) => {
let jsonData;
try {
jsonData = JSON.parse(text);
} catch (e) {
reject(new Error(e));
}
const labs = jsonData.data;
labs.forEach((lab: any) => {
if (validCourses.includes(lab.courseNumber)) {
const newLab = new Lab(lab.courseNumber, lab.sequenceNumber);
if (lab.instructionalMethod !== 'Web Based') {
lab.meetingsFaculty.every((meeting: any) => {
const { meetingTime } = meeting;
if (meetingTime.meetingType === 'LAB') {
let days = '';
days += meetingTime.monday ? 'M' : '';
days += meetingTime.tuesday ? 'T' : '';
days += meetingTime.wednesday ? 'W' : '';
days += meetingTime.thursday ? 'R' : '';
days += meetingTime.friday ? 'F' : '';
newLab.event.days = days;
newLab.event.start = parseInt(meetingTime.beginTime, 10);
newLab.event.end = parseInt(meetingTime.endTime, 10);
return false;
}
return true;
});
}
result.push(newLab);
}
});
resolve(result);
});
});
}
export function parsePtSchedule(file: File): Promise<PeerTeacher> {
return new Promise((resolve) => {
file.text().then((text) => {
const peerTeacher = new PeerTeacher();
const namePattern = /^(.*)\s(.*)\s(\d{9})/;
const eventPattern = /^(M?T?W?R?F?)\s(\d{1,2}:\d{2})\s?-\s?(\d{1,2}:\d{2})/;
const lines = text.split('\n').filter((line) => line.trim());
lines.forEach((line) => {
const ptName = line.match(namePattern);
if (ptName) {
[, peerTeacher.firstname, peerTeacher.lastname] = ptName;
peerTeacher.uin = parseInt(ptName[3], 10);
}
const eventMatch = line.match(eventPattern);
if (eventMatch) {
const newEvent = new EventInfo(eventMatch[1]);
newEvent.start = parseInt(eventMatch[2].replace(':', ''), 10);
newEvent.end = parseInt(eventMatch[3].replace(':', ''), 10);
peerTeacher.events.push(newEvent);
}
});
resolve(peerTeacher);
});
});
}
export function parsePtDatabase(file: File): Promise<{
labs: Map<string, Lab>,
peerTeachers: Map<number, PeerTeacher>
}> {
return new Promise((resolve) => {
file.text().then((text) => {
const jsonObj = JSON.parse(text);
const result = {
labs: new Map(),
peerTeachers: new Map(),
};
Object.keys(jsonObj.labs).forEach((key) => {
const lab = jsonObj.labs[key];
result.labs.set(key, new Lab(lab.course,
lab.section, new EventInfo(lab.event.days, lab.event.start, lab.event.end)));
});
Object.keys(jsonObj.peerTeachers).forEach((key) => {
const pt = jsonObj.peerTeachers[key];
const ptObj = new PeerTeacher(pt.firstname, pt.lastname, pt.uin);
ptObj.events = pt.events.map((eventObj: any) => new EventInfo(eventObj.days,
eventObj.start, eventObj.end));
ptObj.assignedLabs = new Set();
pt.assignedLabs.forEach((labId: string) => {
ptObj.assignedLabs.add(labId);
});
result.peerTeachers.set(key, ptObj);
});
resolve(result);
});
});
}
|