feat: handle music subEventName

This commit is contained in:
Menci
2025-11-11 02:55:24 +08:00
parent 267f6829c6
commit 75673411e6
3 changed files with 17 additions and 2 deletions
+2
View File
@@ -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<Record<MaimaiMajorVersionId, number>>[];
+6 -2
View File
@@ -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<IntermediateData> = 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<IntermediateData> = 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<IntermediateData, Record<number, MaimaiM
const regionalInfo = resultMusic.regionalInfo[region] ??= {
addDeleteLog: {},
netOpenDate: null,
subEventDate: null,
};
regionalInfo.netOpenDate = music.netOpenDate; // The newest version comes first.
regionalInfo.netOpenDate ??= music.netOpenDate; // The newest version comes first.
regionalInfo.subEventDate ??= music.subEventDate;
lowsetSeenVersionId[id] = Math.min(lowsetSeenVersionId[id] ?? version, version);
}));
+9
View File
@@ -13,6 +13,15 @@ export const parseNetOpenDate = (input: unknown) => {
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<T> = Partial<Record<MaimaiMajorVersionId, T>>;
export const maybeCompactVersionedMap = <T>(versionedMap: VersionedMap<T>): MetadataMaybeVersioned<T> => {
const versionedEntries = objectEntries(versionedMap)