From ee3f0c6e087bff906357db46c754cc9329de4bf5 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Fri, 20 Dec 2024 16:04:41 -0500 Subject: [PATCH] dev: do base64 svg check outside of get-launch-apps --- src/backend/src/routers/get-launch-apps.js | 22 ++++++++-------------- src/backend/src/services/AppIconService.js | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/backend/src/routers/get-launch-apps.js b/src/backend/src/routers/get-launch-apps.js index 14acbc86d..110b44a5a 100644 --- a/src/backend/src/routers/get-launch-apps.js +++ b/src/backend/src/routers/get-launch-apps.js @@ -32,26 +32,20 @@ const get_apps = async ({ specifiers }) => { const iconify_apps = async (context, { apps, size }) => { return await Promise.all(apps.map(async app => { - const data_url = app.icon; - if ( ! data_url ) return app; - - const metadata = data_url.split(',')[0]; - const input_mime = metadata.split(';')[0].split(':')[1]; - - // svg icons will be sent as-is - if (input_mime === 'image/svg+xml') { - return app; - } - const svc_appIcon = context.services.get('app-icon'); - const { stream, mime } = await svc_appIcon.get_icon_stream({ + const icon_result = await svc_appIcon.get_icon_stream({ app_icon: app.icon, app_uid: app.uid ?? app.uuid, size: size, }); - const buffer = await stream_to_buffer(stream); - const resp_data_url = `data:image/png;base64,${buffer.toString('base64')}`; + if ( icon_result.data_url ) { + app.icon = icon_result.data_url; + return app; + } + + const buffer = await stream_to_buffer(icon_result.stream); + const resp_data_url = `data:${icon_result.mime};base64,${buffer.toString('base64')}`; app.icon = resp_data_url; return app; diff --git a/src/backend/src/services/AppIconService.js b/src/backend/src/services/AppIconService.js index 002522f28..25030a061 100644 --- a/src/backend/src/services/AppIconService.js +++ b/src/backend/src/services/AppIconService.js @@ -63,6 +63,23 @@ class AppIconService extends BaseService { } async get_icon_stream ({ app_icon, app_uid, size }) { + // If there is an icon provided, and it's an SVG, we'll just return it + if ( app_icon ) { + const metadata = app_icon.split(',')[0]; + const input_mime = metadata.split(';')[0].split(':')[1]; + + // svg icons will be sent as-is + if (input_mime === 'image/svg+xml') { + return { + mime: 'image/svg+xml', + get stream () { + return buffer_to_stream(Buffer.from(app_icon)); + }, + data_url: app_icon, + } + } + } + // Get icon file node const dir_app_icons = await this.get_app_icons(); console.log('APP UID', app_uid);