diff --git a/src/client.ts b/src/client.ts index fe9e022..fb064fe 100644 --- a/src/client.ts +++ b/src/client.ts @@ -3,7 +3,6 @@ import DataManager from './data' import School from './models/School' import type Timetable from './models/Timetable' import { encodeBase64, encodeEUCKR } from './utils/encode' -import { log10int } from './utils/math' import { parseResponse } from './utils/parse' import axios from 'axios' @@ -57,15 +56,20 @@ export default class Comcigan { const teachersLen = Math.floor(Math.log10(teachers.length - 1)) + 1 const subjects = data[`자료${subjectCode}`] as string[] - return (data[`자료${dayCode}`] as number[][][][]).slice(1).map((grade) => - grade.slice(1).map((cls) => - cls.slice(1).map((day) => - day.slice(1).map((period) => { + const original = data[`자료${originalCode}`] as number[][][][] + const day = data[`자료${dayCode}`] as number[][][][] + + return day.slice(1).map((grade, gIdx) => + grade.slice(1).map((cls, cIdx) => + cls.slice(1).map((day, dIdx) => + day.slice(1).map((period, pIdx) => { const p = period.toString() return { subject: subjects[Number(p.slice(0, p.length - teachersLen - 1))], teacher: teachers[Number(p.slice(-teachersLen))], + changed: + period !== original[gIdx + 1][cIdx + 1][dIdx + 1][pIdx + 1], } }), ), diff --git a/src/constants.ts b/src/constants.ts index 42cefb5..b012054 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -8,6 +8,7 @@ export const RegExes = { SearchRoute: /(?<=\?)\d+(?=l)/, TimetableRoute: /(?<=')\d+(?=_')/, TeacherCode: /(?<=성명=자료\.자료)\d+/, + OriginalCode: /(?<=원자료=Q자료\(자료.자료)\d+/, DayCode: /(?<=일일자료=Q자료\(자료.자료)\d+/, SubjectCode: /(?<=자료.자료)\d+(?=\[sb\])/, WhiteSpace: /\0+$/, diff --git a/src/data.ts b/src/data.ts index 65f9fa1..8f900a7 100644 --- a/src/data.ts +++ b/src/data.ts @@ -8,6 +8,7 @@ interface Data { timetableRoute: string teacherCode: string + originalCode: string dayCode: string subjectCode: string } @@ -37,6 +38,9 @@ export default class DataManager { const teacher = RegExes.TeacherCode.exec(data) if (!teacher) throw new Error('Failed to fetch teacher code') + const original = RegExes.OriginalCode.exec(data) + if (!original) throw new Error('Failed to fetch original code') + const day = RegExes.DayCode.exec(data) if (!day) throw new Error('Failed to fetch day code') @@ -49,6 +53,7 @@ export default class DataManager { searchRoute: search[0], timetableRoute: timetable[0], teacherCode: teacher[0], + originalCode: original[0], dayCode: day[0], subjectCode: subject[0], }