aboutsummaryrefslogtreecommitdiff
path: root/src-vue/src/utils/thunderstore/version.ts
blob: a111e08cce64101a8806691c1967d3e6d829cfa7 (plain)
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
import {ThunderstoreMod} from "../../../../src-tauri/bindings/ThunderstoreMod";
import {NorthstarMod} from "../../../../src-tauri/bindings/NorthstarMod";
import {store} from "../../plugins/store";

/**
 * Strips off a Thunderstore dependency string from its version
 * (e.g. "taskinoz-WallrunningTitans-1.0.0" to
 * "taskinoz-WallrunningTitans").
 **/
function getThunderstoreDependencyStringPrefix(dependency: string): string {
    const dependencyStringMembers = dependency.split('-');
    return `${dependencyStringMembers[0]}-${dependencyStringMembers[1]}`;
}

function isThunderstoreModOutdated(mod: ThunderstoreMod): boolean {
    // Ensure mod is up-to-date.
    const tsModPrefix = getThunderstoreDependencyStringPrefix(mod.versions[0].full_name);
    const matchingMods: NorthstarMod[] = store.state.installed_mods.filter((mod: NorthstarMod) => {
        if (!mod.thunderstore_mod_string) return false;
        return getThunderstoreDependencyStringPrefix(mod.thunderstore_mod_string!) === tsModPrefix;
    });
    if (matchingMods.length !== 0) {
        // There shouldn't be several mods with same dependency string, but we never know...
        const matchingMod = matchingMods[0];
        // A mod is outdated if its dependency strings differs from Thunderstore dependency string
        // (no need for semver check here).
        // This assumes mod versions list is sorted from newest to oldest version.
        return matchingMod.thunderstore_mod_string !== mod.versions[0].full_name;
    }
    return false;
}

export { isThunderstoreModOutdated };