mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-01 19:35:42 +00:00
Correct Favorite Node Behavior to rebuild favorite nodes when updated.
This commit is contained in:
parent
03a06e2426
commit
9652c16fa3
@ -864,6 +864,8 @@ void Screen::setFrames(FrameFocus focus)
|
|||||||
uint8_t previousFrameCount = framesetInfo.frameCount;
|
uint8_t previousFrameCount = framesetInfo.frameCount;
|
||||||
FramesetInfo fsi; // Location of specific frames, for applying focus parameter
|
FramesetInfo fsi; // Location of specific frames, for applying focus parameter
|
||||||
|
|
||||||
|
graphics::UIRenderer::rebuildFavoritedNodes();
|
||||||
|
|
||||||
LOG_DEBUG("Show standard frames");
|
LOG_DEBUG("Show standard frames");
|
||||||
showingNormalScreen = true;
|
showingNormalScreen = true;
|
||||||
|
|
||||||
|
@ -24,6 +24,23 @@ extern graphics::Screen *screen;
|
|||||||
namespace graphics
|
namespace graphics
|
||||||
{
|
{
|
||||||
NodeNum UIRenderer::currentFavoriteNodeNum = 0;
|
NodeNum UIRenderer::currentFavoriteNodeNum = 0;
|
||||||
|
std::vector<meshtastic_NodeInfoLite *> graphics::UIRenderer::favoritedNodes;
|
||||||
|
|
||||||
|
void graphics::UIRenderer::rebuildFavoritedNodes()
|
||||||
|
{
|
||||||
|
favoritedNodes.clear();
|
||||||
|
size_t total = nodeDB->getNumMeshNodes();
|
||||||
|
for (size_t i = 0; i < total; i++) {
|
||||||
|
meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i);
|
||||||
|
if (!n || n->num == nodeDB->getNodeNum())
|
||||||
|
continue;
|
||||||
|
if (n->is_favorite)
|
||||||
|
favoritedNodes.push_back(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::sort(favoritedNodes.begin(), favoritedNodes.end(),
|
||||||
|
[](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; });
|
||||||
|
}
|
||||||
|
|
||||||
#if !MESHTASTIC_EXCLUDE_GPS
|
#if !MESHTASTIC_EXCLUDE_GPS
|
||||||
// GeoCoord object for coordinate conversions
|
// GeoCoord object for coordinate conversions
|
||||||
@ -201,27 +218,7 @@ void UIRenderer::drawNodes(OLEDDisplay *display, int16_t x, int16_t y, const mes
|
|||||||
// **********************
|
// **********************
|
||||||
void UIRenderer::drawNodeInfo(OLEDDisplay *display, const OLEDDisplayUiState *state, int16_t x, int16_t y)
|
void UIRenderer::drawNodeInfo(OLEDDisplay *display, const OLEDDisplayUiState *state, int16_t x, int16_t y)
|
||||||
{
|
{
|
||||||
// --- Cache favorite nodes for the current frame only, to save computation ---
|
|
||||||
static std::vector<meshtastic_NodeInfoLite *> favoritedNodes;
|
|
||||||
static int prevFrame = -1;
|
|
||||||
|
|
||||||
// --- Only rebuild favorites list if we're on a new frame ---
|
|
||||||
if (state->currentFrame != prevFrame) {
|
|
||||||
prevFrame = state->currentFrame;
|
|
||||||
favoritedNodes.clear();
|
|
||||||
size_t total = nodeDB->getNumMeshNodes();
|
|
||||||
for (size_t i = 0; i < total; i++) {
|
|
||||||
meshtastic_NodeInfoLite *n = nodeDB->getMeshNodeByIndex(i);
|
|
||||||
// Skip nulls and ourself
|
|
||||||
if (!n || n->num == nodeDB->getNodeNum())
|
|
||||||
continue;
|
|
||||||
if (n->is_favorite)
|
|
||||||
favoritedNodes.push_back(n);
|
|
||||||
}
|
|
||||||
// Keep a stable, consistent display order
|
|
||||||
std::sort(favoritedNodes.begin(), favoritedNodes.end(),
|
|
||||||
[](const meshtastic_NodeInfoLite *a, const meshtastic_NodeInfoLite *b) { return a->num < b->num; });
|
|
||||||
}
|
|
||||||
if (favoritedNodes.empty())
|
if (favoritedNodes.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ class UIRenderer
|
|||||||
static void drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
static void drawCompassAndLocationScreen(OLEDDisplay *display, OLEDDisplayUiState *state, int16_t x, int16_t y);
|
||||||
|
|
||||||
static NodeNum currentFavoriteNodeNum;
|
static NodeNum currentFavoriteNodeNum;
|
||||||
|
static std::vector<meshtastic_NodeInfoLite *> favoritedNodes;
|
||||||
|
static void rebuildFavoritedNodes();
|
||||||
|
|
||||||
// OEM screens
|
// OEM screens
|
||||||
#ifdef USERPREFS_OEM_TEXT
|
#ifdef USERPREFS_OEM_TEXT
|
||||||
|
Loading…
Reference in New Issue
Block a user