Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import glob from "glob";
import { promisify } from "util";
import uuidv4 from "uuid/v4";
import { stat } from "fs";
import parseAssetPath from "shared/lib/assets/parseAssetPath";
import { toValidSymbol } from "shared/lib/helpers/symbols";
import { MusicResource, MusicResourceAsset } from "shared/lib/resources/types";
import { getAssetResource } from "./assets";
const globAsync = promisify(glob);
const statAsync = promisify(stat);
const loadMusicData =
(projectRoot: string) =>
async (filename: string): Promise<MusicResourceAsset> => {
const { file, plugin } = parseAssetPath(filename, projectRoot, "music");
const resource = await getAssetResource(MusicResource, filename);
const fileStat = await statAsync(filename, { bigint: true });
const inode = fileStat.ino.toString();
const name = file.replace(/(.mod|.uge)$/i, "");
return {
_resourceType: "music",
id: uuidv4(),
plugin,
name,
symbol: toValidSymbol(`song_${name}`),
settings: {},
_v: Date.now(),
...resource,
filename: file,
type: file.endsWith(".uge") ? "uge" : "mod",
inode,
};
};
const loadAllMusicData = async (projectRoot: string) => {
const musicPaths = await globAsync(
`${projectRoot}/assets/music/**/@(*.mod|*.MOD|*.uge|*.UGE)`,
);
const pluginPaths = await globAsync(
`${projectRoot}/plugins/*/**/music/**/@(*.mod|*.MOD|*.uge|*.UGE)`,
);
const musicData = await Promise.all(
([] as Promise<MusicResourceAsset>[]).concat(
musicPaths.map(loadMusicData(projectRoot)),
pluginPaths.map(loadMusicData(projectRoot)),
),
);
return musicData;
};
export default loadAllMusicData;
export { loadMusicData };
|