From d075c869ec2f83e1639cdbd9c80a02149d1cb3ca Mon Sep 17 00:00:00 2001 From: Artem Korsakov Date: Sat, 15 Mar 2025 12:02:19 +0300 Subject: [PATCH] Add plugin documentation --- helpers/fetchProgress.ts | 65 ++++++++++++++++++++++++++++------------ helpers/fetchUtils.ts | 2 +- main.ts | 3 +- 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/helpers/fetchProgress.ts b/helpers/fetchProgress.ts index 5c47201..051e000 100644 --- a/helpers/fetchProgress.ts +++ b/helpers/fetchProgress.ts @@ -25,30 +25,57 @@ import { LevelData } from './types'; -/** - * The main function for fetching and displaying progress. - * @param cookies - Cookies for authentication. - * @returns The generated HTML string. - */ -export async function fetchProgress(cookies: string): Promise { +const mainUrl = 'https://projecteuler.net/'; +const sessionIdName = 'PHPSESSID'; +const keepAliveName = 'keep_alive'; + +export async function fetchProgress(session: string, keep_alive: string, retries: number = 1): Promise { + const cookies = `${sessionIdName}=${session}; ${keepAliveName}=${keep_alive}`; + console.log(`Fetching progress with cookies: ${cookies}`); + try { - const accountData = await fetchData('https://projecteuler.net/account', parseAccountData, cookies); - const progressData = await fetchData('https://projecteuler.net/progress', parseProgressData, cookies); - const euleriansPlace = await fetchData('https://projecteuler.net/eulerians', parseEuleriansData, cookies); - const levelDataArray = await fetchData('https://projecteuler.net/levels', parseLevelData, cookies); - const friends = await fetchData('https://projecteuler.net/friends', parseFriends, cookies); - - const locationUrl = `https://projecteuler.net/location=${accountData.location}`; - const languageUrl = `https://projecteuler.net/language=${accountData.language}`; - const { locationRating, languageRating } = await fetchRatings(locationUrl, languageUrl, cookies); - const awardsData = await fetchAwardsData(cookies); - - return generateHTML(accountData, progressData, euleriansPlace, locationUrl, languageUrl, locationRating, languageRating, levelDataArray, awardsData, friends); + return await tryToFetchProgress(cookies); } catch (error) { - return `
Error fetching progress: ${error.message}. Please check your cookies and try again.
`; + console.error('Error fetching progress:', error); + + return `
Error fetching progress. Please update your cookies in the settings and try again.
`; } } +async function tryToFetchProgress(cookies: string): Promise { + const [ + accountData, + progressData, + euleriansPlace, + levelDataArray, + friends, + ] = await Promise.all([ + fetchData(`${mainUrl}account`, parseAccountData, cookies), + fetchData(`${mainUrl}progress`, parseProgressData, cookies), + fetchData(`${mainUrl}eulerians`, parseEuleriansData, cookies), + fetchData(`${mainUrl}levels`, parseLevelData, cookies), + fetchData(`${mainUrl}friends`, parseFriends, cookies), + ]); + + const locationUrl = `${mainUrl}location=${accountData.location}`; + const languageUrl = `${mainUrl}language=${accountData.language}`; + const { locationRating, languageRating } = await fetchRatings(locationUrl, languageUrl, cookies); + const awardsData = await fetchAwardsData(cookies); + + return generateHTML( + accountData, + progressData, + euleriansPlace, + locationUrl, + languageUrl, + locationRating, + languageRating, + levelDataArray, + awardsData, + friends + ); +} + async function fetchData(url: string, parser: (html: string) => T, cookies: string): Promise { const html = await fetchWithCookies(url, cookies); return parser(html); diff --git a/helpers/fetchUtils.ts b/helpers/fetchUtils.ts index 312c00b..27fae74 100644 --- a/helpers/fetchUtils.ts +++ b/helpers/fetchUtils.ts @@ -17,7 +17,7 @@ export async function fetchWithCookies(url: string, cookies: string): Promise { - const stats = await fetchProgress(cookies); + const stats = await fetchProgress(session, keep_alive); const container = el.createEl('div'); container.innerHTML = stats;