From e732859ff8b6b0595ff655e0a7b78e70865aa50e Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Fri, 20 Dec 2024 16:31:45 -0500 Subject: [PATCH] dev: icon_size for taskbar items --- src/backend/src/helpers.js | 19 ++++++++++++++++++- src/backend/src/routers/whoami.js | 12 +++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/backend/src/helpers.js b/src/backend/src/helpers.js index f2194c617..88ad2c9fd 100644 --- a/src/backend/src/helpers.js +++ b/src/backend/src/helpers.js @@ -31,6 +31,7 @@ const { LLRmNode } = require('./filesystem/ll_operations/ll_rmnode'); const { Context } = require('./util/context'); const { NodeUIDSelector } = require('./filesystem/node/selectors'); const { PathBuilder } = require('./util/pathutil'); +const { stream_to_buffer } = require('./util/streamutil.js'); let systemfs = null; let services = null; @@ -1461,7 +1462,7 @@ async function suggest_app_for_fsentry(fsentry, options){ }); } -async function get_taskbar_items(user) { +async function get_taskbar_items(user, { icon_size } = {}) { /** @type BaseDatabaseAccessService */ const db = services.get('database').get(DB_WRITE, 'filesystem'); @@ -1521,6 +1522,22 @@ async function get_taskbar_items(user) { delete item.approved_for_listing; delete item.approved_for_opening_items; + const svc_appIcon = services.get('app-icon'); + const icon_result = await svc_appIcon.get_icon_stream({ + app_icon: item.icon, + app_uid: item.uid, + size: icon_size, + }); + + if ( icon_result.data_url ) { + item.icon = icon_result.data_url; + } else { + const buffer = await stream_to_buffer(icon_result.stream); + const resp_data_url = `data:${icon_result.mime};base64,${buffer.toString('base64')}`; + + item.icon = resp_data_url; + } + // add to final object taskbar_items.push(item) } diff --git a/src/backend/src/routers/whoami.js b/src/backend/src/routers/whoami.js index f5420df1c..356b11253 100644 --- a/src/backend/src/routers/whoami.js +++ b/src/backend/src/routers/whoami.js @@ -50,6 +50,14 @@ const WHOAMI_GET = eggspress('/whoami', { const is_user = actor.type instanceof UserActorType; + if ( req.query.icon_size ) { + const ALLOWED_SIZES = ['16', '32', '64', '128', '256', '512']; + + if ( ! ALLOWED_SIZES.includes(req.query.icon_size) ) { + res.status(400).send({ error: 'Invalid icon_size' }); + } + } + // send user object const details = { username: req.user.username, @@ -63,7 +71,9 @@ const WHOAMI_GET = eggspress('/whoami', { desktop_bg_color: req.user.desktop_bg_color, desktop_bg_fit: req.user.desktop_bg_fit, is_temp: (req.user.password === null && req.user.email === null), - taskbar_items: await get_taskbar_items(req.user), + taskbar_items: await get_taskbar_items(req.user, { + ...(req.query.icon_size ? { icon_size: req.query.icon_size } : {}) + }), referral_code: req.user.referral_code, otp: !! req.user.otp_enabled, human_readable_age: timeago.format(