mirror of
https://github.com/calli-eve/eve-pi.git
synced 2026-02-12 02:38:48 +01:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
499cb40d3a | ||
|
|
470935fe9d | ||
|
|
7ce238c9c7 |
@@ -4,7 +4,7 @@ Simple tool to track your PI planet extractors. Login with your characters and e
|
||||
|
||||
Any questions, feedback or suggestions are welcome at [EVE PI Discord](https://discord.gg/bCdXzU8PHK)
|
||||
|
||||
## [Avanto hosted PI tool](https://pi.avanto.tk)
|
||||
## [Hosted PI tool](https://pi.calli.fi)
|
||||
|
||||

|
||||

|
||||
|
||||
@@ -78,7 +78,7 @@ const Home = () => {
|
||||
};
|
||||
|
||||
const refreshSession = async (characters: AccessToken[]) => {
|
||||
return processInBatches(characters, 5, async (c) => {
|
||||
return processInBatches(characters, 50, async (c) => {
|
||||
try {
|
||||
return await refreshToken(c);
|
||||
} catch {
|
||||
@@ -120,7 +120,7 @@ const Home = () => {
|
||||
const initializeCharacterPlanets = (
|
||||
characters: AccessToken[],
|
||||
): Promise<AccessToken[]> =>
|
||||
processInBatches(characters, 3, async (c) => {
|
||||
processInBatches(characters, 50, async (c) => {
|
||||
if (c.needsLogin || c.character === undefined)
|
||||
return { ...c, planets: [] };
|
||||
const planets = await getPlanets(c);
|
||||
|
||||
@@ -22,10 +22,51 @@ export const getPlanets = async (character: AccessToken): Promise<Planet[]> => {
|
||||
return planets;
|
||||
};
|
||||
|
||||
interface CachedPlanetData {
|
||||
data: PlanetInfo;
|
||||
timestamp: number;
|
||||
}
|
||||
|
||||
const CACHE_DURATION_MS = 60_000; // 1 minute
|
||||
const CACHE_STORAGE_KEY = "planet_cache";
|
||||
|
||||
const loadCacheFromStorage = (): Map<string, CachedPlanetData> => {
|
||||
try {
|
||||
const stored = localStorage.getItem(CACHE_STORAGE_KEY);
|
||||
if (stored) {
|
||||
const parsed = JSON.parse(stored);
|
||||
return new Map(Object.entries(parsed));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Failed to load planet cache from localStorage:", error);
|
||||
}
|
||||
return new Map();
|
||||
};
|
||||
|
||||
const saveCacheToStorage = (cache: Map<string, CachedPlanetData>) => {
|
||||
try {
|
||||
const obj = Object.fromEntries(cache);
|
||||
localStorage.setItem(CACHE_STORAGE_KEY, JSON.stringify(obj));
|
||||
} catch (error) {
|
||||
console.error("Failed to save planet cache to localStorage:", error);
|
||||
}
|
||||
};
|
||||
|
||||
const planetCache = loadCacheFromStorage();
|
||||
|
||||
export const getPlanet = async (
|
||||
character: AccessToken,
|
||||
planet: Planet,
|
||||
): Promise<PlanetInfo> => {
|
||||
const cacheKey = `${character.character.characterId}-${planet.planet_id}`;
|
||||
const cached = planetCache.get(cacheKey);
|
||||
|
||||
if (cached && Date.now() - cached.timestamp < CACHE_DURATION_MS) {
|
||||
console.log(`[Cache HIT] Planet ${planet.planet_id} for character ${character.character.characterId}`);
|
||||
return cached.data;
|
||||
}
|
||||
|
||||
console.log(`[Cache MISS] Fetching planet ${planet.planet_id} for character ${character.character.characterId}`);
|
||||
const api = new Api();
|
||||
const planetInfo = (
|
||||
await api.v3.getCharactersCharacterIdPlanetsPlanetId(
|
||||
@@ -36,6 +77,15 @@ export const getPlanet = async (
|
||||
},
|
||||
)
|
||||
).data;
|
||||
|
||||
planetCache.set(cacheKey, {
|
||||
data: planetInfo,
|
||||
timestamp: Date.now(),
|
||||
});
|
||||
|
||||
// Persist to localStorage
|
||||
saveCacheToStorage(planetCache);
|
||||
|
||||
return planetInfo;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user