Add scale option for PNG/JPEG/WEBP presence embeds

This commit is contained in:
Samuel Elliott 2024-01-07 09:42:19 +00:00
parent 6fd0f3f2f1
commit e697f86359
No known key found for this signature in database
GPG Key ID: 8420C7CDE43DC4D6
3 changed files with 13 additions and 5 deletions

View File

@ -1190,7 +1190,8 @@ class Server extends HttpServer {
const result = await this.handlePresenceRequest(req, null, presence_user_nsaid);
const {theme, friend_code, transparent, width, options} = getUserEmbedOptionsFromRequest(req);
const {theme, friend_code, transparent, width, scale: req_scale, options} = getUserEmbedOptionsFromRequest(req);
const scale = format === PresenceEmbedFormat.SVG ? 1 : req_scale;
const etag = createHash('sha256').update(JSON.stringify({
result,
@ -1198,6 +1199,7 @@ class Server extends HttpServer {
friend_code,
transparent,
width,
scale,
options,
v: version + '-' + git?.revision,
})).digest('base64url');
@ -1210,7 +1212,7 @@ class Server extends HttpServer {
const url_map = await this.getImages(result, this.getResourceBaseUrls(req));
const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, 1, transparent, width);
const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, scale, transparent, width);
const [image, type] = await renderUserEmbedImage(svg, format);
res.setHeader('Content-Type', type);

View File

@ -102,7 +102,8 @@ class Server extends HttpServer {
const [presence, user, data] = await getPresenceFromUrl(this.base_url + '/' + presence_user_nsaid + qs);
const result = data as PresenceResponse;
const {theme, friend_code, transparent, width, options} = getUserEmbedOptionsFromRequest(req);
const {theme, friend_code, transparent, width, scale: req_scale, options} = getUserEmbedOptionsFromRequest(req);
const scale = format === PresenceEmbedFormat.SVG ? 1 : req_scale;
const etag = createHash('sha256').update(JSON.stringify({
data,
@ -111,6 +112,7 @@ class Server extends HttpServer {
friend_code,
transparent,
width,
scale,
options,
v: version + '-' + git?.revision,
})).digest('base64url');
@ -139,7 +141,7 @@ class Server extends HttpServer {
url_map[url] = [url, data, type];
}));
const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, 1, transparent, width);
const svg = renderUserEmbedSvg(result, url_map, theme, friend_code, options, scale, transparent, width);
const [image, type] = await renderUserEmbedImage(svg, format);
res.setHeader('Content-Type', type);

View File

@ -79,11 +79,15 @@ export function getUserEmbedOptionsFromRequest(req: Request) {
if (!width) width = 500;
if (width > 1500) width = 1500;
let scale = url.searchParams.getAll('scale')
.map(s => parseInt(s))
.find(s => !isNaN(s) && s >= 1 && s <= 4);
const options: UserEmbedOptions = {
show_splatoon3_fest_team: url.searchParams.get('show-splatoon3-fest-team') === '1',
};
return {theme, friend_code, transparent, width, options};
return {theme, friend_code, transparent, width, scale, options};
}
export async function renderUserEmbedImage(