diff --git a/src/interfaces/music.ts b/src/interfaces/music.ts index e10d4c5..2ccd08f 100644 --- a/src/interfaces/music.ts +++ b/src/interfaces/music.ts @@ -22,6 +22,7 @@ export type MaimaiMusicMetadataIntermediate = MaimaiMusicMetadataBase & { versionId: MaimaiMajorVersionId; deletedInPatch: boolean; netOpenDate: string | null; + subEventDate: string | null; }; export enum MaimaiMusicAddDeleteLogEntry { @@ -38,6 +39,7 @@ export interface MaimaiMusicMetadataRegionalInfo { */ addDeleteLog: MaimaiMusicAddDeleteLog; netOpenDate: string | null; + subEventDate: string | null; } export type MaimaiMusicLevelChangeLog = Partial>[]; diff --git a/src/processors/music.ts b/src/processors/music.ts index 64888a7..cd509d2 100644 --- a/src/processors/music.ts +++ b/src/processors/music.ts @@ -3,7 +3,7 @@ import { MaimaiRegion, MaimaiMajorVersionId, maimaiMajorVersionIds, MaimaiMusicA import { createLogger } from '../logger'; import type { MetadataMerger } from '../master'; import { forEachParallel, objectEntries, objectKeys } from '../utils/base'; -import { parseNetOpenDate } from '../utils/data'; +import { parseEventIdAsNetOpenDate, parseNetOpenDate } from '../utils/data'; import { forEachRegionAndVersion } from '../utils/each'; import { globFiles, parseXmls } from '../utils/fs'; import { zCoerceNumber, zCoerceString, zParseEnum } from '../utils/zod'; @@ -23,6 +23,7 @@ export const processMusic: WorkerProcessor = async ctx => { const bpm = zCoerceNumber(MusicData.bpm); const versionId = zParseEnum(MaimaiMajorVersionId, MusicData.AddVersion.id); const netOpenDate = parseNetOpenDate(MusicData.netOpenName.str); + const subEventDate = parseEventIdAsNetOpenDate(MusicData.subEventName.id); const charts = (MusicData.notesData.Notes as any[]).map(note => // DX and DX+ version didn't set the `isEnable` flag. @@ -60,6 +61,7 @@ export const processMusic: WorkerProcessor = async ctx => { charts: charts.map(c => ({ designer: c!.designer })), chartsWithLevel: charts.map(c => c!), netOpenDate, + subEventDate, deletedInPatch: false, } satisfies MaimaiMusicMetadataIntermediate; })); @@ -89,8 +91,10 @@ export const mergeMusic: MetadataMerger { return `20${year}-${month}-${day}`; }; +export const parseEventIdAsNetOpenDate = (input: unknown) => { + const str = zCoerceString(input); + const match = str.match(/^(\d{2})(\d{2})(\d{2})/); + if (!match) return null; + const [, year, month, day] = match; + if (year === '99') return null; + return `20${year}-${month}-${day}`; +}; + export type VersionedMap = Partial>; export const maybeCompactVersionedMap = (versionedMap: VersionedMap): MetadataMaybeVersioned => { const versionedEntries = objectEntries(versionedMap)