Add plugin documentation

This commit is contained in:
Artem Korsakov 2025-03-15 12:02:19 +03:00
parent 8c6643668b
commit d075c869ec
3 changed files with 48 additions and 22 deletions

View file

@ -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<string> {
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<string> {
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 `<div>Error fetching progress: ${error.message}. Please check your cookies and try again.</div>`;
console.error('Error fetching progress:', error);
return `<div>Error fetching progress. Please update your cookies in the settings and try again.</div>`;
}
}
async function tryToFetchProgress(cookies: string): Promise<string> {
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<T>(url: string, parser: (html: string) => T, cookies: string): Promise<T> {
const html = await fetchWithCookies(url, cookies);
return parser(html);

View file

@ -17,7 +17,7 @@ export async function fetchWithCookies(url: string, cookies: string): Promise<st
});
if (response.status !== 200) {
throw new Error(`HTTP error! GET ${url} status: ${response.status}. Please check your cookies and try again.`);
throw new Error(`HTTP error! GET ${url} status: ${response.status}.`);
}
return response.text;

View file

@ -18,10 +18,9 @@ export default class ProjectEulerStatsPlugin extends Plugin {
const session = this.settings.session_id;
const keep_alive = this.settings.keep_alive;
const cookies = 'PHPSESSID=' + session + '; keep_alive=' + keep_alive;
this.registerMarkdownCodeBlockProcessor('euler-stats', async (source, el, ctx) => {
const stats = await fetchProgress(cookies);
const stats = await fetchProgress(session, keep_alive);
const container = el.createEl('div');
container.innerHTML = stats;