Skip to content

Commit

Permalink
Refactor GetAchievementsProgress request out of the feature
Browse files Browse the repository at this point in the history
  • Loading branch information
tfedor committed Apr 10, 2024
1 parent aff73e2 commit 2622591
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 27 deletions.
36 changes: 9 additions & 27 deletions src/js/Content/Features/Store/App/FAchievementBar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,25 @@
// @ts-ignore
import self_ from "./FAchievementBar.svelte";
import {SyncedStorage} from "../../../../modulesCore";
import {Feature, RequestData, User} from "../../../modulesContent";
import {Feature} from "../../../modulesContent";
import type {CApp} from "./CApp";
import SteamApi from "../../../Modules/SteamApi";
export class FAchievementBar extends Feature<CApp> {
override checkPrerequisites(): boolean {
/**
* If you don't own the game, all values will be 0,
* just as if you own the game but have no achievements,
* so it's important to check for ownership `this.context.isOwnedAndPlayed`.
*/
return SyncedStorage.get("showachinstore")
&& this.context.hasAchievements
&& this.context.isOwnedAndPlayed;
}
override async apply(): Promise<void> {
let response;
try {
const token = await User.accessToken;
response = await RequestData.post(
`https://api.steampowered.com/IPlayerService/GetAchievementsProgress/v1/?access_token=${token}`,
{"steamid": User.steamId, "appids[0]": this.context.communityAppid},
{"credentials": "omit"}
);
} catch (err) {
throw new Error("Failed to fetch achievements", {"cause": err});
}
response = response?.response?.achievement_progress?.[0];
if (!response) {
throw new Error("Failed to find achievements data");
}
/**
* If you don't own the game, all values will be 0,
* just as if you own the game but have no achievements,
* so it's important to check for ownership `this.context.isOwnedAndPlayed`.
*/
const {unlocked, total, percentage} = response;
const {unlocked, total, percentage} = await SteamApi.getAchievementsProgress(this.context.communityAppid);
const target = document.querySelector("#my_activity")!;
Expand Down Expand Up @@ -72,7 +54,7 @@
<div class="es_achievebar_ctn">
<div>{achievementStr}</div>
<div class="es_achievebar">
<div style="width: {percentage}%;" class="es_achievebar_progress"></div>
<div style:width="{percentage}%" class="es_achievebar_progress"></div>
</div>
</div>

Expand Down
44 changes: 44 additions & 0 deletions src/js/Content/Modules/SteamApi.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import {User} from "./User";
import {RequestData} from "./RequestData";

interface TAchievementProgress {
appid: number,
unlocked: number,
total: number,
percentage: number,
all_unlocked: boolean,
cache_time: number
}

export default class SteamApi {

static async getAchievementsProgress(appid: number): Promise<TAchievementProgress> {
let response: {
response?: {
achievement_progress: Array<TAchievementProgress>
}
};

try {
const token = await User.accessToken;
const steamId = User.steamId;

response = await RequestData.post(
`https://api.steampowered.com/IPlayerService/GetAchievementsProgress/v1/?access_token=${token}`,
{"steamid": steamId, "appids[0]": appid},
{"credentials": "omit"}
);
} catch (err) {
throw new Error("Failed to fetch achievements");
}

let data = response?.response?.achievement_progress?.[0];

if (!data) {
throw new Error("Failed to find achievements data");
}

return data;
}

}

0 comments on commit 2622591

Please sign in to comment.