mirror of
https://github.com/78/xiaozhi-esp32.git
synced 2026-02-11 14:43:47 +00:00
Compare commits
6 Commits
fix_setupu
...
copilot/fi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d9a3c63530 | ||
|
|
62c060da45 | ||
|
|
104726903f | ||
|
|
c37250e563 | ||
|
|
8ddeac1234 | ||
|
|
fe4b707120 |
1
_codeql_detected_source_root
Symbolic link
1
_codeql_detected_source_root
Symbolic link
@@ -0,0 +1 @@
|
||||
.
|
||||
@@ -368,12 +368,12 @@ void Application::CheckAssetsVersion() {
|
||||
board.SetPowerSaveLevel(PowerSaveLevel::PERFORMANCE);
|
||||
display->SetChatMessage("system", Lang::Strings::PLEASE_WAIT);
|
||||
|
||||
bool success = assets.Download(download_url, [display](int progress, size_t speed) -> void {
|
||||
std::thread([display, progress, speed]() {
|
||||
char buffer[32];
|
||||
snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024);
|
||||
display->SetChatMessage("system", buffer);
|
||||
}).detach();
|
||||
bool success = assets.Download(download_url, [this, display](int progress, size_t speed) -> void {
|
||||
char buffer[32];
|
||||
snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024);
|
||||
Schedule([display, message = std::string(buffer)]() {
|
||||
display->SetChatMessage("system", message.c_str());
|
||||
});
|
||||
});
|
||||
|
||||
board.SetPowerSaveLevel(PowerSaveLevel::LOW_POWER);
|
||||
@@ -921,12 +921,12 @@ bool Application::UpgradeFirmware(const std::string& url, const std::string& ver
|
||||
audio_service_.Stop();
|
||||
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||
|
||||
bool upgrade_success = Ota::Upgrade(upgrade_url, [display](int progress, size_t speed) {
|
||||
std::thread([display, progress, speed]() {
|
||||
char buffer[32];
|
||||
snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024);
|
||||
display->SetChatMessage("system", buffer);
|
||||
}).detach();
|
||||
bool upgrade_success = Ota::Upgrade(upgrade_url, [this, display](int progress, size_t speed) {
|
||||
char buffer[32];
|
||||
snprintf(buffer, sizeof(buffer), "%d%% %uKB/s", progress, speed / 1024);
|
||||
Schedule([display, message = std::string(buffer)]() {
|
||||
display->SetChatMessage("system", message.c_str());
|
||||
});
|
||||
});
|
||||
|
||||
if (!upgrade_success) {
|
||||
|
||||
@@ -510,25 +510,31 @@ void LcdDisplay::SetChatMessage(const char* role, const char* content) {
|
||||
if (child_count >= MAX_MESSAGES) {
|
||||
// Delete the oldest message (first child object)
|
||||
lv_obj_t* first_child = lv_obj_get_child(content_, 0);
|
||||
lv_obj_t* last_child = lv_obj_get_child(content_, child_count - 1);
|
||||
if (first_child != nullptr) {
|
||||
lv_obj_del(first_child);
|
||||
// Refresh child count after deletion
|
||||
child_count = lv_obj_get_child_cnt(content_);
|
||||
}
|
||||
// Scroll to the last message immediately
|
||||
if (last_child != nullptr) {
|
||||
lv_obj_scroll_to_view_recursive(last_child, LV_ANIM_OFF);
|
||||
// Scroll to the last message immediately (get last_child after deletion)
|
||||
if (child_count > 0) {
|
||||
lv_obj_t* last_child = lv_obj_get_child(content_, child_count - 1);
|
||||
if (last_child != nullptr && lv_obj_is_valid(last_child)) {
|
||||
lv_obj_scroll_to_view_recursive(last_child, LV_ANIM_OFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Collapse system messages (if it's a system message, check if the last message is also a system message)
|
||||
if (strcmp(role, "system") == 0) {
|
||||
// Refresh child count to get accurate count after potential deletion above
|
||||
child_count = lv_obj_get_child_cnt(content_);
|
||||
if (child_count > 0) {
|
||||
// Get the last message container
|
||||
lv_obj_t* last_container = lv_obj_get_child(content_, child_count - 1);
|
||||
if (last_container != nullptr && lv_obj_get_child_cnt(last_container) > 0) {
|
||||
if (last_container != nullptr && lv_obj_is_valid(last_container) && lv_obj_get_child_cnt(last_container) > 0) {
|
||||
// Get the bubble inside the container
|
||||
lv_obj_t* last_bubble = lv_obj_get_child(last_container, 0);
|
||||
if (last_bubble != nullptr) {
|
||||
if (last_bubble != nullptr && lv_obj_is_valid(last_bubble)) {
|
||||
// Check if bubble type is system message
|
||||
void* bubble_type_ptr = lv_obj_get_user_data(last_bubble);
|
||||
if (bubble_type_ptr != nullptr && strcmp((const char*)bubble_type_ptr, "system") == 0) {
|
||||
|
||||
Reference in New Issue
Block a user