[O] Encapsulate all music

This commit is contained in:
Azalea 2024-02-12 02:59:25 -05:00
parent 3804db142f
commit 8932a16468
3 changed files with 101 additions and 46 deletions

View File

@ -1,4 +1,4 @@
import {aqua_host} from "./config";
import {aqua_host, data_host} from "./config";
import type {TrendEntry} from "./generalTypes";
import type {MaimaiUserSummaryEntry} from "./maimaiTypes";
@ -32,6 +32,10 @@ export async function getMaimai(endpoint: string, params: any) {
}).then(res => res.json())
}
export async function getMaimaiAllMusic(): Promise<{ [key: string]: any }> {
return fetch(`${data_host}/maimai/meta/00/all-music.json`).then(it => it.json())
}
export async function getMaimaiApi(endpoint: string, params: any) {
let url = new URL(`${aqua_host}/api/game/maimai2new/${endpoint}`)
Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))

View File

@ -5,39 +5,22 @@ export interface Rating {
}
export interface ParsedRating extends Rating {
music: {
name: string,
composer: string,
bpm: number,
ver: number,
note: {
lv: number
designer: string
lv_id: number
notes: number
}
},
music: MaimaiMusic,
calc: number,
rank: string
}
export interface MaiUserPreviewData {
userName: string
userId: number
trophyId: number
totalAwake: number
playerRating: number
partnerId: number
nameplateId: number
lastRomVersion: string
lastPlayDate: string
lastLoginDate: string
lastGameId: string
lastDataVersion: string
isNetMember: boolean
isLogin: boolean
iconId: number
frameId: number
export interface MaimaiMusic {
name: string,
composer: string,
bpm: number,
ver: number,
note: {
lv: number
designer: string
lv_id: number
notes: number
}
}
export interface MaimaiUserSummaryEntry {
@ -59,5 +42,74 @@ export interface MaimaiUserSummaryEntry {
lastVersion: string
best35: string
best15: string
recent: Rating[]
}
recent: MaimaiUserPlaylog[]
}
export interface MaimaiUserPlaylog {
id: number;
musicId: number;
level: number;
trackNo: number;
vsRank: number;
achievement: number;
deluxscore: number;
scoreRank: number;
maxCombo: number;
totalCombo: number;
maxSync: number;
totalSync: number;
tapCriticalPerfect: number;
tapPerfect: number;
tapGreat: number;
tapGood: number;
tapMiss: number;
holdCriticalPerfect: number;
holdPerfect: number;
holdGreat: number;
holdGood: number;
holdMiss: number;
slideCriticalPerfect: number;
slidePerfect: number;
slideGreat: number;
slideGood: number;
slideMiss: number;
touchCriticalPerfect: number;
touchPerfect: number;
touchGreat: number;
touchGood: number;
touchMiss: number;
breakCriticalPerfect: number;
breakPerfect: number;
breakGreat: number;
breakGood: number;
breakMiss: number;
isTap: boolean;
isHold: boolean;
isSlide: boolean;
isTouch: boolean;
isBreak: boolean;
isCriticalDisp: boolean;
isFastLateDisp: boolean;
fastCount: number;
lateCount: number;
isAchieveNewRecord: boolean;
isDeluxscoreNewRecord: boolean;
comboStatus: number;
syncStatus: number;
isClear: boolean;
beforeRating: number;
afterRating: number;
beforeGrade: number;
afterGrade: number;
afterGradeRank: number;
beforeDeluxRating: number;
afterDeluxRating: number;
isPlayTutorial: boolean;
isEventMode: boolean;
isFreedomMode: boolean;
playMode: number;
isNewFree: boolean;
trialPlayAchievement: number;
extNum1: number;
extNum2: number;
}

View File

@ -1,31 +1,30 @@
<script lang="ts">
import {data_host} from "../libs/config";
import {getMaimai, getMult} from "../libs/maimai";
import {getMaimaiAllMusic, getMaimai, getMult} from "../libs/maimai";
import type {ParsedRating, Rating} from "../libs/maimaiTypes";
export let userId: any
userId = +userId
if (!userId) console.error("No user ID provided")
else {
getMaimai("GetUserRatingApi", {userId}).then(it => {
data = it
parseRatings()
})
fetch(`${data_host}/maimai/meta/00/all-music.json`).then(it => it.json()).then(it => {
musicInfo = it
parseRatings()
})
}
Promise.all([
getMaimai("GetUserRatingApi", {userId}),
getMaimaiAllMusic().then(it => it.json())
]).then(([rating, music]) => {
data = rating
musicInfo = music
if (!data || !musicInfo) {
console.error("Failed to fetch data")
return
}
function parseRatings() {
if (!data || !musicInfo) return
parsedRatings = {
old: parseRating(data.userRating.ratingList),
new: parseRating(data.userRating.newRatingList)
}
}
})
function parseRating(arr: Rating[]) {
return arr.map(x => {