Skip to content

Commit e3a57af

Browse files
committed
Added package versions batching to speed up performance
1 parent d94ce7d commit e3a57af

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

src/components/composables/ConcerningPackageComposable.ts

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,28 @@ const activeConcerningPackages = ref<ManifestV2[]>([]);
3333
async function updateConcerningPackages() {
3434
const game = activeGame.value;
3535
const localMods = localModList.value;
36-
const concerningPackages = [];
36+
const concerningPackages: ManifestV2[] = [];
37+
const modsToCheck: ManifestV2[] = [];
3738

3839
for (const mod of localMods) {
3940
if (!mod.isOnlineSource()) {
4041
continue;
4142
}
4243
if (!onlineModList.value.has(mod.getName())) {
4344
concerningPackages.push(mod);
44-
continue;
45+
} else {
46+
modsToCheck.push(mod);
4547
}
46-
const packageVersionNumbers = await PackageDb.getPackageVersionNumbers(
47-
game.internalFolderName,
48-
mod.getName()
49-
);
50-
const dnf = !packageVersionNumbers.find(ver => ver === mod.getVersionNumber().toString());
48+
}
49+
50+
const versionNumbersBatch = await PackageDb.getPackageVersionNumbersBatch(
51+
game.internalFolderName,
52+
modsToCheck.map(mod => mod.getName())
53+
);
54+
55+
for (const mod of modsToCheck) {
56+
const versions = versionNumbersBatch.get(mod.getName());
57+
const dnf = !versions || !versions.includes(mod.getVersionNumber().toString());
5158
if (dnf) {
5259
concerningPackages.push(mod);
5360
}

src/r2mm/manager/PackageDexieStore.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ export async function getPackageVersionNumbers(community: string, packageName: s
5454
return pkg.versions.map((v) => v.version_number);
5555
}
5656

57+
export async function getPackageVersionNumbersBatch(community: string, packageNames: string[]): Promise<Map<string, string[]>> {
58+
const keys = packageNames.map((p): [string, string] => [community, p]);
59+
const packages = await db.packages.where('[community+full_name]').anyOf(keys).toArray();
60+
return new Map(packages.map(pkg => [pkg.full_name, pkg.versions.map(v => v.version_number)]));
61+
}
62+
5763
export async function getPackageCount(community: string) {
5864
return await db.packages.where({community}).count();
5965
}

0 commit comments

Comments
 (0)