Load bg thumbnail config from backend

dfc1688eb5f4070d5fec76d55985f92db6deb0af

Cohee <18619528+Cohee1207@users.noreply.github.com>

3 files changed, +14 -7Showing whitespace changes
public/scripts/backgrounds.js+9 -3
@@ -27,6 +27,11 @@ const THUMBNAIL_STORAGE = localforage.createInstance({ name: 'SillyTavern_Thumbn
27 */27 */
28const THUMBNAIL_BLOBS = new Map();28const THUMBNAIL_BLOBS = new Map();
2929
30const THUMBNAIL_CONFIG = {
31 width: 160,
32 height: 90,
33};
34
30/**35/**
31 * Global IntersectionObserver instance for lazy loading backgrounds36 * Global IntersectionObserver instance for lazy loading backgrounds
32 * @type {IntersectionObserver|null}37 * @type {IntersectionObserver|null}
@@ -282,7 +287,7 @@ async function getThumbnailFromStorage(bg) {
282 }287 }
283 const imageBlob = await response.blob();288 const imageBlob = await response.blob();
284 const imageBase64 = await getBase64Async(imageBlob);289 const imageBase64 = await getBase64Async(imageBlob);
285 const thumbnailBase64 = await createThumbnail(imageBase64);290 const thumbnailBase64 = await createThumbnail(imageBase64, THUMBNAIL_CONFIG.width, THUMBNAIL_CONFIG.height);
286 const thumbnailBlob = await fetch(thumbnailBase64).then(res => res.blob());291 const thumbnailBlob = await fetch(thumbnailBase64).then(res => res.blob());
287 await THUMBNAIL_STORAGE.setItem(bg, thumbnailBlob);292 await THUMBNAIL_STORAGE.setItem(bg, thumbnailBlob);
288 const blobUrl = URL.createObjectURL(thumbnailBlob);293 const blobUrl = URL.createObjectURL(thumbnailBlob);
@@ -445,9 +450,10 @@ export async function getBackgrounds() {
445 body: JSON.stringify({}),450 body: JSON.stringify({}),
446 });451 });
447 if (response.ok) {452 if (response.ok) {
448 const getData = await response.json();453 const { images, config } = await response.json();
454 Object.assign(THUMBNAIL_CONFIG, config);
449 $('#bg_menu_content').children('div').remove();455 $('#bg_menu_content').children('div').remove();
450 for (const bg of getData) {456 for (const bg of images) {
451 const template = await getBackgroundFromTemplate(bg, false);457 const template = await getBackgroundFromTemplate(bg, false);
452 $('#bg_menu_content').append(template);458 $('#bg_menu_content').append(template);
453 }459 }
src/endpoints/backgrounds.js+4 -3
@@ -4,15 +4,16 @@ import path from 'node:path';
4import express from 'express';4import express from 'express';
5import sanitize from 'sanitize-filename';5import sanitize from 'sanitize-filename';
66
7import { invalidateThumbnail } from './thumbnails.js';7import { dimensions, invalidateThumbnail } from './thumbnails.js';
8import { getImages } from '../util.js';8import { getImages } from '../util.js';
9import { getFileNameValidationFunction } from '../middleware/validateFileName.js';9import { getFileNameValidationFunction } from '../middleware/validateFileName.js';
1010
11export const router = express.Router();11export const router = express.Router();
1212
13router.post('/all', function (request, response) {13router.post('/all', function (request, response) {
14 var images = getImages(request.user.directories.backgrounds);14 const images = getImages(request.user.directories.backgrounds);
15 response.send(JSON.stringify(images));15 const config = { width: dimensions.bg[0], height: dimensions.bg[1] };
16 response.json({ images, config });
16});17});
1718
18router.post('/delete', getFileNameValidationFunction('bg'), function (request, response) {19router.post('/delete', getFileNameValidationFunction('bg'), function (request, response) {
src/endpoints/thumbnails.js+1 -1
@@ -15,7 +15,7 @@ const quality = Math.min(100, Math.max(1, parseInt(getConfigValue('thumbnails.qu
15const pngFormat = String(getConfigValue('thumbnails.format', 'jpg')).toLowerCase().trim() === 'png';15const pngFormat = String(getConfigValue('thumbnails.format', 'jpg')).toLowerCase().trim() === 'png';
1616
17/** @type {Record<string, number[]>} */17/** @type {Record<string, number[]>} */
18const dimensions = {18export const dimensions = {
19 'bg': getConfigValue('thumbnails.dimensions.bg', [160, 90]),19 'bg': getConfigValue('thumbnails.dimensions.bg', [160, 90]),
20 'avatar': getConfigValue('thumbnails.dimensions.avatar', [96, 144]),20 'avatar': getConfigValue('thumbnails.dimensions.avatar', [96, 144]),
21};21};