diff --git a/public/list.html b/public/list.html index 55ef341..bef0d8b 100644 --- a/public/list.html +++ b/public/list.html @@ -23,8 +23,9 @@ let charts = document.createElement('ul'); for (const chart of doc.charts) { - let l = document.createElement('li'); - l.innerText = `${chart.difficulty} ${chart.rating} - ${chart.name}` + 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` charts.insertAdjacentElement('beforeend', l); } el.insertAdjacentElement('beforeend', charts); diff --git a/src/lib/smparse.ts b/src/lib/smparse.ts index 6736c6e..6e955ba 100644 --- a/src/lib/smparse.ts +++ b/src/lib/smparse.ts @@ -1,6 +1,4 @@ export function parseSM(data: string) { - data = data.replace(/[\n\r]/g,''); - // steps const difficulties = []; const steps = data.split('#NOTES:'); @@ -18,11 +16,25 @@ 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 6b38590..e902248 100644 --- a/src/schema.ts +++ b/src/schema.ts @@ -40,7 +40,14 @@ const Chart = new Schema({ ratingsVote: {type: [UserRating], default: []}, spoilered: {type: Boolean, default: false}, - hidden: {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({ diff --git a/src/upload.ts b/src/upload.ts index e916f9f..98006c6 100644 --- a/src/upload.ts +++ b/src/upload.ts @@ -2,7 +2,6 @@ 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';