Skip to content

Commit

Permalink
Fixed a bug that sometimes it was not possible to sort by song title …
Browse files Browse the repository at this point in the history
…or delete a song without pressing the delete button twice. fix #2
  • Loading branch information
ranmd9a committed Dec 12, 2021
1 parent 51ff291 commit 3a11dd2
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/components/beatmap/table/BeatmapsTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
:fixed-header="fixedHeader"
:show-select="selected !== undefined"
loading-text="Loading contents ..."
item-key="hash"
item-key="tableKey"
aria-describedby="List of beatmaps for the current context"
hide-default-footer
dense
Expand Down Expand Up @@ -416,6 +416,9 @@ export default Vue.extend({
uploaded: entry.data.uploaded,
key: entry.data.key,
hash: entry.data.hash,
tableKey: `${entry.data.hash}${
entry.folderNameHash ? `-${entry.folderNameHash}` : ""
}`,
}));
},
beatmapAsTableDataFiltered(): { raw: BeatmapsTableDataUnit }[] {
Expand Down
1 change: 1 addition & 0 deletions src/components/beatmap/table/BeatmapsTableOnline.vue
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ export default Vue.extend({
(beatmap): BeatmapsTableDataUnit => ({
local: undefined,
data: beatmap,
folderNameHash: undefined,
})
) ?? []
);
Expand Down
2 changes: 2 additions & 0 deletions src/components/beatmap/table/core/BeatmapsTableDataUnit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@ import { BeatmapLocal } from "@/libraries/beatmap/BeatmapLocal";
export interface BeatmapsTableDataUnit {
local: BeatmapLocal | undefined;
data: BeatsaverBeatmap;
// foldeNameHash will only be used to display local maps.
folderNameHash: string | undefined;
}
28 changes: 27 additions & 1 deletion src/libraries/beatmap/BeatmapLibrary.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
/* istanbul ignore file */
import store from "@/plugins/store";
import crypto from "crypto";
import fs from "fs-extra";
import path from "path";
import { BeatmapLocal } from "@/libraries/beatmap/BeatmapLocal";
import {
BeatsaverBeatmap,
Expand Down Expand Up @@ -59,8 +61,8 @@ export default class BeatmapLibrary {
const promiseResults: Promise<{
local: BeatmapLocal;
data: BeatsaverBeatmap | undefined;
folderNameHash: string | undefined;
}>[] = [];
// TODO 1000件ずつくらいに分割しないと、Local に 40000件くらいあったら 40000件の promise が作成されてしまう。
const validCache = BeatsaverCachedLibrary.GetAllValid();
let cnt = 0;
for (const beatmap of localValidMaps) {
Expand All @@ -75,12 +77,14 @@ export default class BeatmapLibrary {
let mydata: BeatsaverBeatmap | undefined;
if (beatmap.hash) {
const hash = beatmap.hash.toUpperCase();
const folderNameHash = this.getFolderNameHash(beatmap.folderPath);
// mydata = BeatsaverCachedLibrary.GetByHash(hash)?.beatmap;
mydata = validCache.get(hash)?.beatmap;
if (mydata != null) {
result.push({
local: undefined,
data: mydata,
folderNameHash,
});
// eslint-disable-next-line no-continue
continue;
Expand All @@ -90,19 +94,23 @@ export default class BeatmapLibrary {
result.push({
local: beatmap,
data: generatedCache,
folderNameHash,
});
// eslint-disable-next-line no-continue
continue;
}
// TODO 事前キャッシュはあるから Local に 40000件あっても大半はここに到達しないが、1000件ずつくらいに分割したほうがいい。
promiseResults.push(
new Promise<{
local: BeatmapLocal;
data: BeatsaverBeatmap | undefined;
folderNameHash: string | undefined;
}>((resolve) => {
BeatmapLibrary.GenerateBeatmap(beatmap).then((generatedMap) => {
resolve({
local: beatmap,
data: generatedMap,
folderNameHash,
});
});
})
Expand All @@ -116,6 +124,7 @@ export default class BeatmapLibrary {
let resolved: {
local: BeatmapLocal;
data: BeatsaverBeatmap | undefined;
folderNameHash: string | undefined;
}[] = [];
if (promiseResults.length > 0) {
Logger.debug(
Expand Down Expand Up @@ -151,6 +160,23 @@ export default class BeatmapLibrary {
*/
}

static getFolderNameHash(folderPath: string) {
if (folderPath == null) {
return undefined;
}
try {
const { base } = path.parse(folderPath);
return crypto
.createHash("sha1")
.update(base.toLowerCase())
.digest("hex")
.substr(0, 5);
} catch (error) {
console.warn(`Get folder name hash failed: ${folderPath}`, error);
return undefined;
}
}

static async GenerateBeatmap(
beatmap: BeatmapLocal | undefined
): Promise<BeatsaverBeatmap | undefined> {
Expand Down
7 changes: 7 additions & 0 deletions src/libraries/playlist/PlaylistMapsLibrary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ export default class PlaylistMapsLibrary {
const promiseResults: Promise<{
local: BeatmapLocal;
data: BeatsaverBeatmap | undefined;
folderNameHash: string | undefined;
}>[] = [];
Logger.debug(
` start validMaps loop ${validMaps.length}`,
Expand All @@ -86,6 +87,7 @@ export default class PlaylistMapsLibrary {
result.push({
local: undefined,
data: mydata,
folderNameHash: undefined,
});
// eslint-disable-next-line no-continue
continue;
Expand All @@ -97,15 +99,20 @@ export default class PlaylistMapsLibrary {
// eslint-disable-next-line no-continue
continue;
}
const folderNameHash = BeatmapLibrary.getFolderNameHash(
beatmapLocal.folderPath
);
promiseResults.push(
new Promise<{
local: BeatmapLocal;
data: BeatsaverBeatmap | undefined;
folderNameHash: string | undefined;
}>((resolve) => {
BeatmapLibrary.GenerateBeatmap(beatmapLocal).then((generatedMap) => {
resolve({
local: beatmapLocal as BeatmapLocal,
data: generatedMap,
folderNameHash,
});
});
})
Expand Down

0 comments on commit 3a11dd2

Please sign in to comment.