From dc187beb7271ce6a7e404a1c1812049dc141c0f2 Mon Sep 17 00:00:00 2001 From: ogomez-at-wiris Date: Sun, 20 Feb 2022 16:55:47 +0100 Subject: [PATCH] fix: Fucking promises i need a beer --- src/server.ts | 1 + src/services/pack_service.ts | 52 +++++++++++++++++++----------------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/src/server.ts b/src/server.ts index 9a14629..72b3d17 100644 --- a/src/server.ts +++ b/src/server.ts @@ -49,4 +49,5 @@ PackService.getInitialList().then(() => { httpServer.listen(PORT, () => console.log(`The server is running on port ${PORT}`) ); + console.log('initialized with ',PackService.getPackList().length) }); diff --git a/src/services/pack_service.ts b/src/services/pack_service.ts index b2b5331..3152d32 100644 --- a/src/services/pack_service.ts +++ b/src/services/pack_service.ts @@ -1,47 +1,49 @@ import Pack from "../interfaces/pack"; import fs from "fs"; import * as fsWalk from "@nodelib/fs.walk"; +import { resolve } from "path/posix"; const PACK_BASE_PATH = "packs"; export default class PackService { - private static packList: [Pack]; + private static packList: Pack[] = []; public static getPackList = (): Array => this.packList; - public static getInitialList = async () => { - const packs = await fs.readdirSync(PACK_BASE_PATH); + public static getInitialList = async (): Promise => { + let packs = await fs.readdirSync(PACK_BASE_PATH); + + PackService.packList = await Promise.all(packs.map((pack) => PackService.getPackInfo(pack))) + }; + + public static getPackInfo = async(packName: string): Promise => { + const name = packName; + let size = 0; + let bpm: string = ""; // Setup walk const noDots = (entry: fsWalk.Entry) => !entry.path.startsWith("."); - packs.forEach(async (pack) => { - const name = pack; - let size = 0; - let bpm: string = ""; - const packFiles = await fsWalk.walkSync(`${PACK_BASE_PATH}/${pack}`, { - entryFilter: noDots, - concurrency: 4, - }); - packFiles.forEach(async (file) => { + const packFiles = await fsWalk.walkSync(`${PACK_BASE_PATH}/${packName}`, { + entryFilter: noDots, + concurrency: 4, + }); + + const promises = await Promise.all( + packFiles.map(async (file) => { size += await fs.statSync(file.path).size; if (file.name === "bpm.txt") { bpm = await fs.readFileSync(file.path).toString(); } - }); - const currentPack: Pack = { - name: name, - size: size, - bpm: bpm, - }; - console.log(currentPack); - if (currentPack.bpm !== '') { - PackService.packList.push(currentPack); - } else { - console.log('found corrupted pack', currentPack.name) - } - }); + }) + ); + const currentPack: Pack = { + name: name, + size: size, + bpm: bpm, + }; + return currentPack; }; }