diff --git a/public/list.html b/public/list.html index bef0d8b..55ef341 100644 --- a/public/list.html +++ b/public/list.html @@ -23,9 +23,8 @@ let charts = document.createElement('ul'); for (const chart of doc.charts) { - let l = document.createElement('li'); - l.innerText = `${chart.difficulty} ${chart.rating} - ${chart.name}\n` + - `${chart.steps} steps, ${chart.mines} mines, ${chart.jumps} jumps, ${chart.hands} hands, ${chart.holds} holds, ${chart.rolls} rolls` + let l = document.createElement('li'); + l.innerText = `${chart.difficulty} ${chart.rating} - ${chart.name}` charts.insertAdjacentElement('beforeend', l); } el.insertAdjacentElement('beforeend', charts); diff --git a/src/lib/smparse.ts b/src/lib/smparse.ts index 6e955ba..6736c6e 100644 --- a/src/lib/smparse.ts +++ b/src/lib/smparse.ts @@ -1,4 +1,6 @@ export function parseSM(data: string) { + data = data.replace(/[\n\r]/g,''); + // steps const difficulties = []; const steps = data.split('#NOTES:'); @@ -16,25 +18,11 @@ export function parseSM(data: string) { diff.rating = Number(stepsSplit[3]); diff.radarvalues = stepsSplit[4].split(',').map(v => Number(v)); - const chart = stepsSplit[5]; - diff.rawChart = chart; - - diff.steps = chart.split(/[124]/g).length - 1; - diff.mines = chart.split('M').length - 1; - diff.jumps = chart.split(/[124]0{0,2}[124]/g).length - 1; - diff.hands = chart.split(/[124]0{0,1}[124]0{0,1}[124]/g).length - 1; - diff.holds = chart.split('2').length - 1; - diff.rolls = chart.split('4').length - 1; - - diff.steps -= diff.jumps; // jumps are counted as 1 step - difficulties.push(diff); } } } - data = data.replace(/[\n\r]/g,''); - // metadata const lines = data.split(';').filter(l => l.startsWith('#')); const obj: any = {}; diff --git a/src/schema.ts b/src/schema.ts index e902248..b7ea0d6 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -1,118 +1,39 @@ -/* eslint-disable no-unused-vars */ import * as mongoose from 'mongoose'; const Schema = mongoose.Schema; -export enum SMVersion { - OPENITG, - FUCKEXE, - NOTITG_V1, - NOTITG_V2, - NOTITG_V3, - NOTITG_V3_1, - NOTITG_V4, - NOTITG_V4_0_1, - STEPMANIA_3_95, - STEPMANIA_5_0, - STEPMANIA_5_1, - STEPMANIA_5_2, - STEPMANIA_5_3, -} - const Sample = new Schema({ start: {type: Number, default: 0}, length: {type: Number, default: 0} }); -const UserRating = new Schema({ - rating: {type: Number, default: 0}, - createdAt: Date, - user: {type: String, default: '00000000-0000-4000-a000-000000000000'} -}); - const Chart = new Schema({ type: {type: String, default: 'dance-single'}, name: {type: String, default: ''}, difficulty: {type: String, default: 'Challenge'}, - radarvalues: [Number], - rating: {type: Number, default: 0}, - ratingsVote: {type: [UserRating], default: []}, - - spoilered: {type: Boolean, default: false}, - hidden: {type: Boolean, default: false}, - - steps: {type: Number, default: 0}, - mines: {type: Number, default: 0}, - jumps: {type: Number, default: 0}, - hands: {type: Number, default: 0}, - holds: {type: Number, default: 0}, - rolls: {type: Number, default: 0}, -}); - -const Comment = new Schema({ - author: {type: String, default: '00000000-0000-4000-a000-000000000000'}, - createdAt: Date, - content: {type: String, default: ''} + radarvalues: [Number] }); const FileSchema = new Schema({ - id: {type: Number, default: 0}, - title: {type: String, default: 'unknown'}, titleTranslit: String, artist: {type: String, default: 'unknown'}, artistTranslit: String, subtitle: String, subtitleTranslit: String, - credit: String, uploader: {type: String, default: '00000000-0000-4000-a000-000000000000'}, - sample: Sample, bpms: {type: Object, default: {'0': 0}}, - - charts: {type: [Chart], default: []}, - - description: {type: String, default: ''}, - createdAt: Date, - smVersion: {type: Number, default: 0}, // see SMVersion enum - ytLink: String, - customLink: String, - hidden: {type: Boolean, default: false}, - - comments: {type: [Comment], default: []}, + charts: [Chart] }); export const File = mongoose.model('File', FileSchema); const UserSchema = new Schema({ // this is pretty much just a discord user lol - id: String, // discord id, cus longass number - createdAt: Number, - - // caching - username: {type: String, default: 'User'}, - discriminator: {type: String, default: '0000'}, - avatar: String, - - // used internally - uuid: {type: String, default: '00000000-0000-4000-a000-000000000000'}, - - approvedUpload: {type: Boolean, default: false}, - approvedRate: {type: Boolean, default: false}, - approvedComment: {type: Boolean, default: false}, + id: String, // cus longass number + approved: Boolean }); -export const User = mongoose.model('User', UserSchema); - -const PackSchema = new Schema({ - author: {type: String, default: '00000000-0000-4000-a000-000000000000'}, - files: {type: [Number], default: []}, // ids - name: {type: String, default: 'Pack'}, - description: {type: String, default: ''}, - createdAt: Date, - - hidden: {type: Boolean, default: false}, -}); - -export const Pack = mongoose.model('Pack', PackSchema); \ No newline at end of file +export const User = mongoose.model('User', UserSchema); \ No newline at end of file diff --git a/src/upload.ts b/src/upload.ts index 98006c6..e916f9f 100644 --- a/src/upload.ts +++ b/src/upload.ts @@ -2,6 +2,7 @@ import { tmpdir } from 'os'; import * as fs from 'fs'; const StreamZip = require('node-stream-zip'); +import { returnStatic } from './lib/util'; import { parseSM } from './lib/smparse'; import { File } from './schema';