mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-14 06:42:34 +00:00
Attempt to fix memory usage of invalidLifetime
This commit is contained in:
@@ -431,32 +431,35 @@ void drawTextMessageFrame(OLEDDisplay *display, OLEDDisplayUiState *state, int16
|
|||||||
|
|
||||||
// Build header line for this message
|
// Build header line for this message
|
||||||
meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(m.sender);
|
meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(m.sender);
|
||||||
const char *sender = "???";
|
|
||||||
|
std::string senderStr_o = "???";
|
||||||
if (node && node->has_user) {
|
if (node && node->has_user) {
|
||||||
sender = node->user.long_name;
|
senderStr_o = node->user.long_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is *our own* message, override sender to "Me"
|
// If this is *our own* message, override sender to "Me"
|
||||||
bool mine = (m.sender == nodeDB->getNodeNum());
|
bool mine = (m.sender == nodeDB->getNodeNum());
|
||||||
if (mine) {
|
if (mine) {
|
||||||
sender = "Me";
|
senderStr_o = "Me";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *sender = senderStr_o.c_str();
|
||||||
|
|
||||||
if (display->getStringWidth(sender) + display->getStringWidth(timeBuf) + display->getStringWidth(chanType) +
|
if (display->getStringWidth(sender) + display->getStringWidth(timeBuf) + display->getStringWidth(chanType) +
|
||||||
display->getStringWidth(" @") + display->getStringWidth("... ") - 10 >
|
display->getStringWidth(" @") + display->getStringWidth("... ") - 10 >
|
||||||
SCREEN_WIDTH) {
|
SCREEN_WIDTH) {
|
||||||
// truncate sender name if too long
|
// truncate sender name if too long
|
||||||
int availWidth = SCREEN_WIDTH - display->getStringWidth(timeBuf) - display->getStringWidth(chanType) -
|
int availWidth = SCREEN_WIDTH - display->getStringWidth(timeBuf) - display->getStringWidth(chanType) -
|
||||||
display->getStringWidth(" @") - display->getStringWidth("... ") - 10;
|
display->getStringWidth(" @") - display->getStringWidth("... ") - 10;
|
||||||
int len = strlen(sender);
|
|
||||||
|
int len = static_cast<int>(senderStr_o.size());
|
||||||
while (len > 0 && display->getStringWidth(sender, len) > availWidth) {
|
while (len > 0 && display->getStringWidth(sender, len) > availWidth) {
|
||||||
len--;
|
--len;
|
||||||
}
|
}
|
||||||
if (len < (int)strlen(sender)) {
|
|
||||||
// we need to truncate
|
if (len < static_cast<int>(senderStr_o.size())) {
|
||||||
char truncated[32];
|
senderStr_o = senderStr_o.substr(0, len) + "...";
|
||||||
snprintf(truncated, sizeof(truncated), "%.*s...", len, sender);
|
sender = senderStr_o.c_str();
|
||||||
sender = truncated;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user