gcm-database-local 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunithm/database.d.ts +2 -2
- package/dist/chunithm/database.js +14 -28
- package/dist/chunithm/database.js.map +1 -1
- package/dist/lib/chartStore.d.ts +24 -0
- package/dist/lib/chartStore.js +71 -0
- package/dist/lib/chartStore.js.map +1 -0
- package/dist/maimai/database.d.ts +2 -2
- package/dist/maimai/database.js +14 -28
- package/dist/maimai/database.js.map +1 -1
- package/dist/ongeki/database.d.ts +2 -2
- package/dist/ongeki/database.js +14 -28
- package/dist/ongeki/database.js.map +1 -1
- package/package.json +1 -5
|
@@ -5,7 +5,8 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
5
5
|
constructor(_localDatabasePath: string);
|
|
6
6
|
setLocalDatabasePath(path: string): boolean;
|
|
7
7
|
hasLocalDatabase(): boolean;
|
|
8
|
-
private
|
|
8
|
+
private charts;
|
|
9
|
+
private getLocalFilePath;
|
|
9
10
|
getJacket(identifier: string, variant?: "DX" | "EX" | "CN"): Promise<{
|
|
10
11
|
data: NonSharedBuffer;
|
|
11
12
|
err?: undefined;
|
|
@@ -20,7 +21,6 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
20
21
|
err: string;
|
|
21
22
|
data?: undefined;
|
|
22
23
|
}>;
|
|
23
|
-
private getAllCharts;
|
|
24
24
|
searchChart(payload: {
|
|
25
25
|
title: string;
|
|
26
26
|
level: number;
|
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Database = void 0;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const chartStore_1 = require("../lib/chartStore");
|
|
9
10
|
const getInternalLevelFromPresences_1 = require("../lib/getInternalLevelFromPresences");
|
|
10
|
-
const cache_1 = require("@saltcute/cache");
|
|
11
11
|
class Database {
|
|
12
12
|
_localDatabasePath;
|
|
13
13
|
constructor(_localDatabasePath) {
|
|
@@ -16,6 +16,7 @@ class Database {
|
|
|
16
16
|
setLocalDatabasePath(path) {
|
|
17
17
|
if (node_fs_1.default.existsSync(path)) {
|
|
18
18
|
this._localDatabasePath = path;
|
|
19
|
+
this.charts.invalidate();
|
|
19
20
|
return true;
|
|
20
21
|
}
|
|
21
22
|
else {
|
|
@@ -25,19 +26,24 @@ class Database {
|
|
|
25
26
|
hasLocalDatabase() {
|
|
26
27
|
return node_fs_1.default.existsSync(this._localDatabasePath);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
charts = new chartStore_1.ChartStore(() => node_path_1.default.join(this._localDatabasePath, "assets", "chunithm", "charts"));
|
|
30
|
+
getLocalFilePath(identifier) {
|
|
31
|
+
return node_path_1.default.join(this._localDatabasePath, "assets", "chunithm", "jackets", `${identifier}.png`);
|
|
32
|
+
}
|
|
29
33
|
async getJacket(identifier, variant) {
|
|
30
34
|
if (identifier !== "dummy") {
|
|
31
35
|
const songId = identifier.slice(-4);
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
const variantIdentifier = `${songId.padStart(4, "0")}-${variant}`;
|
|
37
|
+
if (variant &&
|
|
38
|
+
node_fs_1.default.existsSync(this.getLocalFilePath(variantIdentifier))) {
|
|
39
|
+
identifier = variantIdentifier;
|
|
34
40
|
}
|
|
35
41
|
else {
|
|
36
42
|
// Falls back to normal jacket if a variant cannot be found.
|
|
37
43
|
identifier = `${songId.padStart(4, "0")}`;
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
|
-
const localFilePath =
|
|
46
|
+
const localFilePath = this.getLocalFilePath(identifier);
|
|
41
47
|
const jacket = node_fs_1.default.existsSync(localFilePath) && node_fs_1.default.readFileSync(localFilePath);
|
|
42
48
|
if (jacket) {
|
|
43
49
|
return { data: jacket };
|
|
@@ -64,30 +70,10 @@ class Database {
|
|
|
64
70
|
err: `Cannot find a chart with identifier ${identifier}.`,
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
|
-
async getAllCharts() {
|
|
68
|
-
const cached = await this.cache.get("all-charts");
|
|
69
|
-
if (cached)
|
|
70
|
-
return cached;
|
|
71
|
-
const localFolderPath = node_path_1.default.join(this._localDatabasePath, "assets", "chunithm", "charts");
|
|
72
|
-
const chartFolders = node_fs_1.default.readdirSync(localFolderPath);
|
|
73
|
-
const songs = [];
|
|
74
|
-
for (const folder of chartFolders) {
|
|
75
|
-
const charts = node_fs_1.default.readdirSync(node_path_1.default.join(localFolderPath, folder));
|
|
76
|
-
for (const chart of charts) {
|
|
77
|
-
try {
|
|
78
|
-
songs.push(require(node_path_1.default.join(localFolderPath, folder, chart)));
|
|
79
|
-
}
|
|
80
|
-
catch { }
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
await this.cache.put("all-charts", songs, 15 * 60 * 1000); // 15 minutes.
|
|
84
|
-
return songs;
|
|
85
|
-
}
|
|
86
73
|
async searchChart(payload, options) {
|
|
87
|
-
const
|
|
88
|
-
const sortedCandidates =
|
|
89
|
-
.filter((v) => v.
|
|
90
|
-
v.difficulty === payload.difficulty)
|
|
74
|
+
const byTitle = await this.charts.get();
|
|
75
|
+
const sortedCandidates = (byTitle.get(payload.title) ?? [])
|
|
76
|
+
.filter((v) => v.difficulty === payload.difficulty)
|
|
91
77
|
.map((v) => {
|
|
92
78
|
const internalLevel = v.internalLevel ??
|
|
93
79
|
(0, getInternalLevelFromPresences_1.getInternalLevelFromPresences)(v.optionalData.presences);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/chunithm/database.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/chunithm/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every chart of a game, loaded from the local database and kept in memory, indexed by title.
|
|
3
|
+
*
|
|
4
|
+
* Concurrent callers share a single load, so a cold store reads the database once.
|
|
5
|
+
*/
|
|
6
|
+
export declare class ChartStore<C extends {
|
|
7
|
+
title: string;
|
|
8
|
+
}> {
|
|
9
|
+
private getFolderPath;
|
|
10
|
+
private ttl;
|
|
11
|
+
private loading?;
|
|
12
|
+
private loadedAt;
|
|
13
|
+
/**
|
|
14
|
+
* @param getFolderPath Path to the folder holding one subfolder of chart files per song.
|
|
15
|
+
* @param ttl Charts are reloaded from disk after this many milliseconds.
|
|
16
|
+
*/
|
|
17
|
+
constructor(getFolderPath: () => string, ttl?: number);
|
|
18
|
+
get(): Promise<Map<string, C[]>>;
|
|
19
|
+
/**
|
|
20
|
+
* Drop the loaded charts, so the next call reads the database again.
|
|
21
|
+
*/
|
|
22
|
+
invalidate(): void;
|
|
23
|
+
private load;
|
|
24
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ChartStore = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
/**
|
|
10
|
+
* Every chart of a game, loaded from the local database and kept in memory, indexed by title.
|
|
11
|
+
*
|
|
12
|
+
* Concurrent callers share a single load, so a cold store reads the database once.
|
|
13
|
+
*/
|
|
14
|
+
class ChartStore {
|
|
15
|
+
getFolderPath;
|
|
16
|
+
ttl;
|
|
17
|
+
loading;
|
|
18
|
+
loadedAt = 0;
|
|
19
|
+
/**
|
|
20
|
+
* @param getFolderPath Path to the folder holding one subfolder of chart files per song.
|
|
21
|
+
* @param ttl Charts are reloaded from disk after this many milliseconds.
|
|
22
|
+
*/
|
|
23
|
+
constructor(getFolderPath, ttl = 15 * 60 * 1000) {
|
|
24
|
+
this.getFolderPath = getFolderPath;
|
|
25
|
+
this.ttl = ttl;
|
|
26
|
+
}
|
|
27
|
+
get() {
|
|
28
|
+
if (!this.loading || Date.now() - this.loadedAt > this.ttl) {
|
|
29
|
+
this.loadedAt = Date.now();
|
|
30
|
+
const loading = this.load();
|
|
31
|
+
this.loading = loading;
|
|
32
|
+
loading.catch(() => {
|
|
33
|
+
if (this.loading === loading)
|
|
34
|
+
this.loading = undefined;
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return this.loading;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Drop the loaded charts, so the next call reads the database again.
|
|
41
|
+
*/
|
|
42
|
+
invalidate() {
|
|
43
|
+
this.loading = undefined;
|
|
44
|
+
}
|
|
45
|
+
async load() {
|
|
46
|
+
const folderPath = this.getFolderPath();
|
|
47
|
+
const byTitle = new Map();
|
|
48
|
+
for (const folder of await node_fs_1.default.promises.readdir(folderPath)) {
|
|
49
|
+
const songPath = node_path_1.default.join(folderPath, folder);
|
|
50
|
+
for (const file of await node_fs_1.default.promises.readdir(songPath)) {
|
|
51
|
+
if (!file.endsWith(".json"))
|
|
52
|
+
continue;
|
|
53
|
+
let chart;
|
|
54
|
+
try {
|
|
55
|
+
chart = JSON.parse(await node_fs_1.default.promises.readFile(node_path_1.default.join(songPath, file), "utf-8"));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const charts = byTitle.get(chart.title);
|
|
61
|
+
if (charts)
|
|
62
|
+
charts.push(chart);
|
|
63
|
+
else
|
|
64
|
+
byTitle.set(chart.title, [chart]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return byTitle;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.ChartStore = ChartStore;
|
|
71
|
+
//# sourceMappingURL=chartStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartStore.js","sourceRoot":"","sources":["../../src/lib/chartStore.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAE7B;;;;GAIG;AACH,MAAa,UAAU;IASP;IACA;IATJ,OAAO,CAA6B;IACpC,QAAQ,GAAG,CAAC,CAAC;IAErB;;;OAGG;IACH,YACY,aAA2B,EAC3B,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI;QADpB,kBAAa,GAAb,aAAa,CAAc;QAC3B,QAAG,GAAH,GAAG,CAAiB;IAC7B,CAAC;IAEG,GAAG;QACN,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;gBACf,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;oBAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YAC3D,CAAC,CAAC,CAAC;QACP,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACI,UAAU;QACb,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;IAEO,KAAK,CAAC,IAAI;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;QACvC,KAAK,MAAM,MAAM,IAAI,MAAM,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,SAAS;gBACtC,IAAI,KAAQ,CAAC;gBACb,IAAI,CAAC;oBACD,KAAK,GAAG,IAAI,CAAC,KAAK,CACd,MAAM,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CACtB,mBAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EACzB,OAAO,CACV,CACJ,CAAC;gBACN,CAAC;gBAAC,MAAM,CAAC;oBACL,SAAS;gBACb,CAAC;gBACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxC,IAAI,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;oBAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AAzDD,gCAyDC"}
|
|
@@ -5,7 +5,8 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
5
5
|
constructor(_localDatabasePath: string);
|
|
6
6
|
setLocalDatabasePath(path: string): boolean;
|
|
7
7
|
hasLocalDatabase(): boolean;
|
|
8
|
-
private
|
|
8
|
+
private charts;
|
|
9
|
+
private getLocalFilePath;
|
|
9
10
|
getJacket(identifier: string, variant?: "DX" | "EX" | "CN"): Promise<{
|
|
10
11
|
data: NonSharedBuffer;
|
|
11
12
|
err?: undefined;
|
|
@@ -20,7 +21,6 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
20
21
|
err: string;
|
|
21
22
|
data?: undefined;
|
|
22
23
|
}>;
|
|
23
|
-
private getAllCharts;
|
|
24
24
|
searchChart(payload: {
|
|
25
25
|
title: string;
|
|
26
26
|
level: number;
|
package/dist/maimai/database.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Database = void 0;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const chartStore_1 = require("../lib/chartStore");
|
|
9
10
|
const getInternalLevelFromPresences_1 = require("../lib/getInternalLevelFromPresences");
|
|
10
|
-
const cache_1 = require("@saltcute/cache");
|
|
11
11
|
class Database {
|
|
12
12
|
_localDatabasePath;
|
|
13
13
|
constructor(_localDatabasePath) {
|
|
@@ -16,6 +16,7 @@ class Database {
|
|
|
16
16
|
setLocalDatabasePath(path) {
|
|
17
17
|
if (node_fs_1.default.existsSync(path)) {
|
|
18
18
|
this._localDatabasePath = path;
|
|
19
|
+
this.charts.invalidate();
|
|
19
20
|
return true;
|
|
20
21
|
}
|
|
21
22
|
else {
|
|
@@ -25,19 +26,24 @@ class Database {
|
|
|
25
26
|
hasLocalDatabase() {
|
|
26
27
|
return node_fs_1.default.existsSync(this._localDatabasePath);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
charts = new chartStore_1.ChartStore(() => node_path_1.default.join(this._localDatabasePath, "assets", "maimai", "charts"));
|
|
30
|
+
getLocalFilePath(identifier) {
|
|
31
|
+
return node_path_1.default.join(this._localDatabasePath, "assets", "maimai", "jackets", `${identifier}.png`);
|
|
32
|
+
}
|
|
29
33
|
async getJacket(identifier, variant) {
|
|
30
34
|
if (identifier !== "dummy") {
|
|
31
35
|
const songId = identifier.slice(-4);
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
const variantIdentifier = `${songId.padStart(6, "0")}-${variant}`;
|
|
37
|
+
if (variant &&
|
|
38
|
+
node_fs_1.default.existsSync(this.getLocalFilePath(variantIdentifier))) {
|
|
39
|
+
identifier = variantIdentifier;
|
|
34
40
|
}
|
|
35
41
|
else {
|
|
36
42
|
// Falls back to normal jacket if a variant cannot be found.
|
|
37
43
|
identifier = `${songId.padStart(6, "0")}`;
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
|
-
const localFilePath =
|
|
46
|
+
const localFilePath = this.getLocalFilePath(identifier);
|
|
41
47
|
const jacket = node_fs_1.default.existsSync(localFilePath) && node_fs_1.default.readFileSync(localFilePath);
|
|
42
48
|
if (jacket) {
|
|
43
49
|
return { data: jacket };
|
|
@@ -64,30 +70,10 @@ class Database {
|
|
|
64
70
|
err: `Cannot find a chart with identifier ${identifier}.`,
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
|
-
async getAllCharts() {
|
|
68
|
-
const cached = await this.cache.get("all-charts");
|
|
69
|
-
if (cached)
|
|
70
|
-
return cached;
|
|
71
|
-
const localFolderPath = node_path_1.default.join(this._localDatabasePath, "assets", "maimai", "charts");
|
|
72
|
-
const chartFolders = node_fs_1.default.readdirSync(localFolderPath);
|
|
73
|
-
const songs = [];
|
|
74
|
-
for (const folder of chartFolders) {
|
|
75
|
-
const charts = node_fs_1.default.readdirSync(node_path_1.default.join(localFolderPath, folder));
|
|
76
|
-
for (const chart of charts) {
|
|
77
|
-
try {
|
|
78
|
-
songs.push(require(node_path_1.default.join(localFolderPath, folder, chart)));
|
|
79
|
-
}
|
|
80
|
-
catch { }
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
await this.cache.put("all-charts", songs, 15 * 60 * 1000); // 15 minutes.
|
|
84
|
-
return songs;
|
|
85
|
-
}
|
|
86
73
|
async searchChart(payload, options) {
|
|
87
|
-
const
|
|
88
|
-
const sortedCandidates =
|
|
89
|
-
.filter((v) => v.
|
|
90
|
-
v.type === payload.type &&
|
|
74
|
+
const byTitle = await this.charts.get();
|
|
75
|
+
const sortedCandidates = (byTitle.get(payload.title) ?? [])
|
|
76
|
+
.filter((v) => v.type === payload.type &&
|
|
91
77
|
v.difficulty === payload.difficulty)
|
|
92
78
|
.map((v) => {
|
|
93
79
|
const internalLevel = v.internalLevel ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/maimai/database.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/maimai/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,8 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
5
5
|
constructor(_localDatabasePath: string);
|
|
6
6
|
setLocalDatabasePath(path: string): boolean;
|
|
7
7
|
hasLocalDatabase(): boolean;
|
|
8
|
-
private
|
|
8
|
+
private charts;
|
|
9
|
+
private getLocalFilePath;
|
|
9
10
|
getJacket(identifier: string, variant?: "DX" | "EX" | "CN"): Promise<{
|
|
10
11
|
data: NonSharedBuffer;
|
|
11
12
|
err?: undefined;
|
|
@@ -20,7 +21,6 @@ export declare class Database implements BaseDatabase<Chart> {
|
|
|
20
21
|
err: string;
|
|
21
22
|
data?: undefined;
|
|
22
23
|
}>;
|
|
23
|
-
private getAllCharts;
|
|
24
24
|
searchChart(payload: {
|
|
25
25
|
title: string;
|
|
26
26
|
level: number;
|
package/dist/ongeki/database.js
CHANGED
|
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Database = void 0;
|
|
7
7
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
8
|
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const chartStore_1 = require("../lib/chartStore");
|
|
9
10
|
const getInternalLevelFromPresences_1 = require("../lib/getInternalLevelFromPresences");
|
|
10
|
-
const cache_1 = require("@saltcute/cache");
|
|
11
11
|
class Database {
|
|
12
12
|
_localDatabasePath;
|
|
13
13
|
constructor(_localDatabasePath) {
|
|
@@ -16,6 +16,7 @@ class Database {
|
|
|
16
16
|
setLocalDatabasePath(path) {
|
|
17
17
|
if (node_fs_1.default.existsSync(path)) {
|
|
18
18
|
this._localDatabasePath = path;
|
|
19
|
+
this.charts.invalidate();
|
|
19
20
|
return true;
|
|
20
21
|
}
|
|
21
22
|
else {
|
|
@@ -25,19 +26,24 @@ class Database {
|
|
|
25
26
|
hasLocalDatabase() {
|
|
26
27
|
return node_fs_1.default.existsSync(this._localDatabasePath);
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
+
charts = new chartStore_1.ChartStore(() => node_path_1.default.join(this._localDatabasePath, "assets", "ongeki", "charts"));
|
|
30
|
+
getLocalFilePath(identifier) {
|
|
31
|
+
return node_path_1.default.join(this._localDatabasePath, "assets", "ongeki", "jackets", `${identifier}.png`);
|
|
32
|
+
}
|
|
29
33
|
async getJacket(identifier, variant) {
|
|
30
34
|
if (identifier !== "dummy") {
|
|
31
35
|
const songId = identifier.slice(-4);
|
|
32
|
-
|
|
33
|
-
|
|
36
|
+
const variantIdentifier = `${songId.padStart(4, "0")}-${variant}`;
|
|
37
|
+
if (variant &&
|
|
38
|
+
node_fs_1.default.existsSync(this.getLocalFilePath(variantIdentifier))) {
|
|
39
|
+
identifier = variantIdentifier;
|
|
34
40
|
}
|
|
35
41
|
else {
|
|
36
42
|
// Falls back to normal jacket if a variant cannot be found.
|
|
37
43
|
identifier = `${songId.padStart(4, "0")}`;
|
|
38
44
|
}
|
|
39
45
|
}
|
|
40
|
-
const localFilePath =
|
|
46
|
+
const localFilePath = this.getLocalFilePath(identifier);
|
|
41
47
|
const jacket = node_fs_1.default.existsSync(localFilePath) && node_fs_1.default.readFileSync(localFilePath);
|
|
42
48
|
if (jacket) {
|
|
43
49
|
return { data: jacket };
|
|
@@ -64,30 +70,10 @@ class Database {
|
|
|
64
70
|
err: `Cannot find a chart with identifier ${identifier}.`,
|
|
65
71
|
};
|
|
66
72
|
}
|
|
67
|
-
async getAllCharts() {
|
|
68
|
-
const cached = await this.cache.get("all-charts");
|
|
69
|
-
if (cached)
|
|
70
|
-
return cached;
|
|
71
|
-
const localFolderPath = node_path_1.default.join(this._localDatabasePath, "assets", "ongeki", "charts");
|
|
72
|
-
const chartFolders = node_fs_1.default.readdirSync(localFolderPath);
|
|
73
|
-
const songs = [];
|
|
74
|
-
for (const folder of chartFolders) {
|
|
75
|
-
const charts = node_fs_1.default.readdirSync(node_path_1.default.join(localFolderPath, folder));
|
|
76
|
-
for (const chart of charts) {
|
|
77
|
-
try {
|
|
78
|
-
songs.push(require(node_path_1.default.join(localFolderPath, folder, chart)));
|
|
79
|
-
}
|
|
80
|
-
catch { }
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
await this.cache.put("all-charts", songs, 15 * 60 * 1000); // 15 minutes.
|
|
84
|
-
return songs;
|
|
85
|
-
}
|
|
86
73
|
async searchChart(payload, options) {
|
|
87
|
-
const
|
|
88
|
-
const sortedCandidates =
|
|
89
|
-
.filter((v) => v.
|
|
90
|
-
v.difficulty === payload.difficulty)
|
|
74
|
+
const byTitle = await this.charts.get();
|
|
75
|
+
const sortedCandidates = (byTitle.get(payload.title) ?? [])
|
|
76
|
+
.filter((v) => v.difficulty === payload.difficulty)
|
|
91
77
|
.map((v) => {
|
|
92
78
|
const internalLevel = v.internalLevel ??
|
|
93
79
|
(0, getInternalLevelFromPresences_1.getInternalLevelFromPresences)(v.optionalData.presences);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/ongeki/database.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,0DAA6B;AAC7B,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/ongeki/database.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gcm-database-local",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "A GekiChuMai Metadata database",
|
|
5
5
|
"homepage": "https://github.com/saltcute/gcm-database-local#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@biomejs/biome": "^2.5.0",
|
|
34
|
-
"@types/memory-cache": "^0.2.6",
|
|
35
34
|
"@types/node": "^25.9.3",
|
|
36
35
|
"rimraf": "^6.1.3",
|
|
37
36
|
"tsc-alias": "^1.8.17",
|
|
@@ -39,8 +38,5 @@
|
|
|
39
38
|
},
|
|
40
39
|
"peerDependencies": {
|
|
41
40
|
"gcm-database": "^1.0.3"
|
|
42
|
-
},
|
|
43
|
-
"dependencies": {
|
|
44
|
-
"@saltcute/cache": "^1.0.2"
|
|
45
41
|
}
|
|
46
42
|
}
|