From 735d943097c64764c2b891368b7dd61b716e3e81 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 29 Sep 2026 18:13:59 +0200 Subject: utils: cache user icon urls --- src/utils-common.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/utils-common.ts') diff --git a/src/utils-common.ts b/src/utils-common.ts index 7bca889..d644b10 100644 --- a/src/utils-common.ts +++ b/src/utils-common.ts @@ -36,8 +36,20 @@ export function getCourseId(): number { return globalThis.M.cfg.courseId; } -// TODO(muhq): Cache the retrieved URL +export class CourseLocalStorage { + static getItem(key: string) { + return localStorage.getItem(`${key}-${getCourseId()}`); + } + + static setItem(key: string, val: string) { + return localStorage.setItem(`${key}-${getCourseId()}`, val); + } +} + export async function getUserIconUrl(userId: number): Promise { + let url = CourseLocalStorage.getItem(`bycs-sol-user-icon-${userId}`); + if (url) return url; + const userRes = await fetch(`https://lernplattform.bycs.de/user/profile.php?id=${userId}`); const userDoc = new DOMParser().parseFromString(await userRes.text(), "text/html"); const userpicture = userDoc.querySelector(".userpicture"); @@ -45,7 +57,10 @@ export async function getUserIconUrl(userId: number): Promise { return ""; } - return (userpicture as HTMLImageElement).src ?? ""; + url = (userpicture as HTMLImageElement).src ?? ""; + CourseLocalStorage.setItem(`bycs-sol-user-icon-${userId}`, url); + + return url; } // SplitMix32 implementation taken from: -- cgit v1.2.3