@samitouri / QOSami-HFS / commits / 776c3eb7

admin/logs: icons tooltip now shows the simple name, while the raw user-agent has been moved to the dialog

Massimo Melina committed Feb 17, 2026 at 11:49 UTC 776c3eb744eaef133e2f670abcbd47646acc39d1
3 files changed +23 -13
admin/src/DataTable.ts
+1 -1
@@ -168,7 +168,7 @@ export function DataTable({ columns, initialState={}, actions, actionsProps, ini
168 if (window.getSelection()?.type === 'Range') return // not a click but a drag
169 const visibleInList = merged + apiRef.current.getVisibleColumns().length
170 const showInDialog = manipulatedColumns.filter(x =>
171 - !x.dialogHidden && (x.renderCell || x.field === ACTIONS || row[x.field] !== undefined))
171 + !x.dialogHidden && (x.renderCell || x.valueGetter || x.field === ACTIONS || row[x.field] !== undefined))
172 if (showInDialog.length <= visibleInList) return // no need for dialog
173 newDialog({
174 title: "Details",
admin/src/LogsPage.ts
+21 -11
@@ -328,6 +328,13 @@ export function LogFile({ file, footerSide, hidden, limit, filter, ...rest }: Lo
328 return "API " + name + params
329 }
330 },
331 + {
332 + field: 'agentText',
333 + valueGetter: ({ row }) => row.extra?.ua,
334 + headerName: "Agent text",
335 + flex: 2,
336 + hideUnder: true,
337 + },
338 ]
339 })
340
@@ -356,7 +363,7 @@ export function LogFile({ file, footerSide, hidden, limit, filter, ...rest }: Lo
363 }
364
365 const UW = 'https://upload.wikimedia.org/wikipedia/commons/'
359 -const BROWSER_ICONS = {
366 +const CLIENT_ICONS = {
367 Chrome: UW + 'e/e1/Google_Chrome_icon_%28February_2022%29.svg',
368 Chromium: UW + 'f/fe/Chromium_Material_Icon.svg',
369 Firefox: UW + 'a/a0/Firefox_logo%2C_2019.svg',
@@ -368,24 +375,26 @@ const BROWSER_ICONS = {
375 ForkLift: UW + '../en/9/96/ForkLift_3_File_Manager_and_File_Transfer_Client_Logo.png',
376 }
377 const OS_ICONS = {
371 - android: UW + 'd/d7/Android_robot.svg',
372 - linux: UW + '0/0a/Tux-shaded.svg',
373 - win: UW + '0/0a/Unofficial_Windows_logo_variant_-_2002%E2%80%932012_%28Multicolored%29.svg',
374 - apple: UW + '7/74/Apple_logo_dark_grey.svg', // grey works for both themes
378 + Android: UW + 'd/d7/Android_robot.svg',
379 + Linux: UW + '0/0a/Tux-shaded.svg',
380 + Windows: UW + '0/0a/Unofficial_Windows_logo_variant_-_2002%E2%80%932012_%28Multicolored%29.svg',
381 + macOS: UW + '7/74/Apple_logo_dark_grey.svg', // grey works for both themes
382 + iOS: UW + '7/74/Apple_logo_dark_grey.svg', // grey works for both themes
383 }
384 const OSS = {
377 - apple: /Mac OS|iPhone OS|Darwin/,
378 - win: /Windows NT/,
379 - android: /Android/,
380 - linux: /Linux/,
385 + iOS: /iPhone OS|iPad/,
386 + macOS: /Mac OS|Darwin/,
387 + Windows: /Windows NT/,
388 + Android: /Android/,
389 + Linux: /Linux/,
390 }
391
392 export function agentIcons(agent: string | undefined) {
393 if (!agent) return
394 const short = shortenAgent(agent)
386 - const browserIcon = h(AgentIcon, { k: short, altText: true, map: BROWSER_ICONS })
395 + const browserIcon = h(AgentIcon, { k: short, altText: true, map: CLIENT_ICONS })
396 const os = _.findKey(OSS, re => re.test(agent))
388 - return hTooltip(agent, undefined, h(Box, { fontSize: '110%' }, browserIcon, ' ', os && osIcon(os as any)) )
397 + return h(Box, { fontSize: '110%' }, browserIcon, ' ', os && osIcon(os as any))
398 }
399
400 const alreadyFailed: any = {}
@@ -400,6 +409,7 @@ function AgentIcon({ k, map, altText }: { k: string, map: Dict<string>, altText?
409 return !src || err ? h(Fragment, {}, altText ? k : null) : h('img', {
410 src,
411 alt: k + " icon",
412 + title: k,
413 style: { height: '1.2em', verticalAlign: 'bottom', marginRight: '.2em' },
414 onError() { setErr(alreadyFailed[k] = true) }
415 })
admin/src/VfsMenuBar.ts
+1 -1
@@ -74,7 +74,7 @@ function SystemIntegrationButton({ platform }: { platform: string | undefined })
74 const { data: integrated, reload } = useApi<typeof adminApis.windows_integrated>(isWindows && 'windows_integrated')
75 const sm = useBreakpoint('sm')
76 return !isWindows ? null : h(Btn, {
77 - icon: osIcon('win'),
77 + icon: osIcon('Windows'),
78 variant: 'outlined',
79 doneMessage: true,
80 ...(!integrated?.is ? {