From 1def218db5a0168b9a343c5d9daf256d89021626 Mon Sep 17 00:00:00 2001 From: "Jokob @NetAlertX" <96159884+jokob-sk@users.noreply.github.com> Date: Sat, 9 May 2026 23:35:21 +0000 Subject: [PATCH] Update README and enhance device management logic - Updated Trendshift repository link in README.md. - Improved error handling and user feedback in deviceDetails.php: - Added warnings for device not found scenarios. - Refactored device name and owner retrieval logic with caching and REST API fallback. --- README.md | 2 +- front/deviceDetails.php | 81 +++++++++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index ba0777a2..4b646927 100755 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ Check the [GitHub Issues](https://github.com/netalertx/NetAlertX/issues) for the ## Everything else -jokob-sk%2FNetAlertX | Trendshift +jokob-sk%2FNetAlertX | Trendshift ### 📧 Get notified what's new diff --git a/front/deviceDetails.php b/front/deviceDetails.php index 6c0a1180..cd8de5d9 100755 --- a/front/deviceDetails.php +++ b/front/deviceDetails.php @@ -307,7 +307,10 @@ function updateChevrons(currentMac) { pos = refreshedList.findIndex(item => item.devMac === currentMac); if (pos === -1) { - console.error('Still not found after re-cache:', currentMac); + console.warn('Device not found in device list after re-cache — hiding navigation controls:', currentMac); + $('#txtRecord').hide(); + $('#btnPrevious').hide(); + $('#btnNext').hide(); return; } @@ -499,26 +502,9 @@ async function renderSmallBoxes() { } } -function updateDevicePageName(mac) { - let name = getDevDataByMac(mac, "devName"); - let owner = getDevDataByMac(mac, "devOwner"); - - // If data is missing, re-cache and retry once - if (mac != 'new' && (name === null|| owner === null)) { - console.warn("Device not found in cache, retrying after re-cache:", mac); - showSpinner(); - cacheDevices(true).then(() => { - hideSpinner(); - // Retry after successful cache - updateDevicePageName(mac); - }).catch((err) => { - hideSpinner(); - console.error("Failed to refresh devices:", err); - }); - return; // Exit early to avoid showing bad data - } - - // Page title - Name +// ---------------------------------------- +// Write device name/owner into page title DOM. Pure DOM side-effect, no data fetching. +function applyDevicePageTitle(mac, name, owner) { let pageTitleText; if (mac === "new") { @@ -530,12 +516,12 @@ function updateDevicePageName(mac) { ` ` + getString("Gen_create_new_device_info") ); $('#devicePageInfoPlc').show(); - } else if (!owner || name.toString().includes(owner)) { - pageTitleText = name; + } else if (!owner || (name && name.toString().includes(owner))) { + pageTitleText = name ?? getString("DevDetail_EveandAl_NewDevice"); $('#pageTitle').html(pageTitleText); $('#devicePageInfoPlc').hide(); } else { - pageTitleText = `${name} (${owner})`; + pageTitleText = `${name ?? getString("DevDetail_EveandAl_NewDevice")} (${owner})`; $('#pageTitle').html(pageTitleText); $('#devicePageInfoPlc').hide(); } @@ -544,6 +530,53 @@ function updateDevicePageName(mac) { $('title').html(pageTitleText + ' - ' + $('title').html()); } +// ---------------------------------------- +// Resolve device name/owner for the page title. +// Stage 1: localStorage cache (synchronous, fast path). +// Stage 2: one forced re-cache from table_devices.json. +// Stage 3: REST API fallback so a direct-link visit never loops. +async function updateDevicePageName(mac) { + let name = getDevDataByMac(mac, "devName"); + let owner = getDevDataByMac(mac, "devOwner"); + + // Stage 2: one re-cache attempt + if (mac !== 'new' && (name === null || owner === null)) { + console.warn("Device not in cache, attempting re-cache:", mac); + showSpinner(); + try { + await cacheDevices(true); + } catch (err) { + console.error("Re-cache failed:", err); + } finally { + hideSpinner(); + } + name = getDevDataByMac(mac, "devName"); + owner = getDevDataByMac(mac, "devOwner"); + } + + // Stage 3: REST fallback — same endpoint renderSmallBoxes uses, always DB-direct + if (mac !== 'new' && (name === null || owner === null)) { + console.warn("Device not found in cache after re-cache, falling back to REST API:", mac); + try { + const { apiBase, authHeader } = getAuthContext(); + const res = await fetch(`${apiBase}/device/${encodeURIComponent(mac)}`, { + headers: authHeader + }); + if (res.ok) { + const data = await res.json(); + name = data.devName ?? null; + owner = data.devOwner ?? null; + } else { + console.error("REST fallback for device name returned:", res.status); + } + } catch (err) { + console.error("REST fallback error:", err); + } + } + + applyDevicePageTitle(mac, name, owner); +} + //-----------------------------------------------------------------------------------