{
Weather_data_t_now.humidity = humidity;
memset((void *)Weather_data_t_now.windScale, 0, weather_short_len);
- strcpy_s(Weather_data_t_now.windScale, weather_short_len,windScale);
+ strcpy_s(Weather_data_t_now.windScale, weather_short_len, windScale);
memset((void *)Weather_data_t_now.textNight, 0, weather_short_len);
- strcpy_s(Weather_data_t_now.textNight,weather_short_len, textNight);
+ strcpy_s(Weather_data_t_now.textNight, weather_short_len, textNight);
Weather_data_t_now.uvIndex = uvIndex;
Weather_data_t_now.temp = temp;
Weather_data_t_now.iconNight = iconNight;
Weather_data_t_address.lat = lat;
Weather_data_t_address.lon = lon;
memset((void *)Weather_data_t_address.atm, 0, weather_short_len);
- strcpy_s(Weather_data_t_address.atm,weather_short_len, atm);
+ strcpy_s(Weather_data_t_address.atm, weather_short_len, atm);
memset((void *)Weather_data_t_address.city, 0, weather_long_len);
- strcpy_s(Weather_data_t_address.city, weather_long_len,city);
+ strcpy_s(Weather_data_t_address.city, weather_long_len, city);
memset((void *)Weather_data_t_address.subLocality, 0, weather_long_len);
- strcpy_s(Weather_data_t_address.subLocality, weather_long_len,subLocality);
+ strcpy_s(Weather_data_t_address.subLocality, weather_long_len, subLocality);
}
/*
Weather_data_seven_data[count].tempMin = t.tempMin;
Weather_data_seven_data[count].fxDate = t.fxDate;
memset((void *)Weather_data_seven_data[count].textDay, 0, weather_short_len);
- strcpy_s(Weather_data_seven_data[count].textDay,weather_short_len, t.textDay);
+ strcpy_s(Weather_data_seven_data[count].textDay, weather_short_len, t.textDay);
Weather_data_seven_count++;
}
}
}
+ bool WeatherModel::IsValidDateIndex(int date)
+ {
+ const bool isValid = (date >= 0 && date < DAYS_OF_THE_WEEK);
+ if (!isValid)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid date index: %d (valid range: 0-6)", date);
+ }
+ return isValid;
+ }
+
void WeatherModel::TimestampToMonthDayString(time_t timestamp, char *buffer)
{
// 将时间戳转换成tm结构
localtime_r(&seconds, &pTM);
int hour = pTM.tm_hour;
- //需要判断显示的格式
- if (uapi_dev_runtime_get_time_hour_show_model() == 12)
+ // 需要判断显示的格式
+ if (uapi_dev_runtime_get_time_hour_show_model() == 12)
{
if (pTM.tm_hour > 12)
- hour = pTM.tm_hour - 12 ;
+ hour = pTM.tm_hour - 12;
}
int minute = pTM.tm_min;
return weatherTime;
}
- //判断当前时间是否在晚上
+ // 判断当前时间是否在晚上
bool WeatherModel::IsNightTime()
{
struct tm pTM;
// index = Weather_data_seven_data[0].iconDay; // 白天天气图标
// }
index = Weather_data_seven_data[0].iconDay; // 白天天气图标
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Weather_data_t_now.iconNight = %d", index);
+ const size_t iconCount = sizeof(weather65x65) / sizeof(weather65x65[0]);
+ if (index <= 0 || static_cast<size_t>(index) >= iconCount)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid iconDay index: %d (max allowed: %zu)", index, iconCount - 1);
+ return weather65x65[12]; // 返回"未知"图标
+ }
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Weather_data_t_now.iconNight = %d", index);
return weather65x65[index];
}
/*获取未来七天中某一天白天天气图标*/
std::string WeatherModel::GetWeather_data_seven_data_iconDay(int date)
{
+ // 获取图标索引并验证其有效性
int index = Weather_data_seven_data[date].iconDay;
+ const size_t iconCount = sizeof(weather65x65) / sizeof(weather65x65[0]);
+ if (index <= 0 || static_cast<size_t>(index) >= iconCount)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid iconDay index: %d (max allowed: %zu)", index, iconCount - 1);
+ return weather65x65[12]; // 返回"未知"图标
+ }
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Weather_data_seven_data[%d].iconDay = %d", date, index);
+
return weather65x65[index];
}
std::string WeatherModel::GetWeather_data_seven_data_textDay(int date)
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Weather_data_seven_data[%d].textDay = %s", date, Weather_data_seven_data[date].textDay);
+ if (!IsValidDateIndex(date))
+ {
+ return "Invalid";
+ }
return Weather_data_seven_data[date].textDay;
}
/*获取未来七天某一天日期*/
std::string WeatherModel::GetWeather_data_seven_data_fxDate(int date)
{
+ // 验证输入日期是否在有效范围内
+ if (!IsValidDateIndex(date))
+ {
+ return "Invalid";
+ }
static char formattedDate[6]; // 5字符加上终结符'\0'
+ // 转换时间戳并确保字符串终止
TimestampToMonthDayString(Weather_data_seven_data[date].fxDate, formattedDate);
+ formattedDate[5] = '\0'; // 显式确保字符串终止
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Weather_data_seven_data[%d].fxDate = %s", date, formattedDate);
- return formattedDate;
+ return std::string(formattedDate); // 复制字符串内容确保安全
}
/*获取未来七天某一天最高和最低气温*/
std::string WeatherModel::GetWeather_data_seven_data_tempMinAndtempMax(int date)
{
+ if (!IsValidDateIndex(date))
+ {
+ return "Invalid";
+ }
int maxTemp = Weather_data_seven_data[date].tempMax;
int minTemp = Weather_data_seven_data[date].tempMin;
std::string maxandminTemperature = (std::to_string(minTemp) + "°") + "/" + std::to_string(maxTemp) + "°";
/*获取未来七天某一天最低气温*/
std::string WeatherModel::GetWeather_data_seven_data_tempMin(int date)
{
+ if (!IsValidDateIndex(date))
+ {
+ return "Invalid";
+ }
int minTemp = Weather_data_seven_data[date].tempMin;
std::string minTemperature = std::to_string(minTemp) + "°";
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Weather_data_seven_data[%d].tempMin = %s", date, minTemperature.c_str());
/*获取未来七天某一天最高气温*/
std::string WeatherModel::GetWeather_data_seven_data_tempMax(int date)
{
+ if (!IsValidDateIndex(date))
+ {
+ return "Invalid";
+ }
int maxTemp = Weather_data_seven_data[date].tempMax;
std::string maxTemperature = "/" + std::to_string(maxTemp) + "°";
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, " Weather_data_seven_data[%d].tempMax = %s", date, maxTemperature.c_str());
// {
// index = Weather_data_seven_data[0].iconDay; //白天天气图标
// }
- index = Weather_data_seven_data[0].iconDay; //白天天气图标
+ index = Weather_data_seven_data[0].iconDay; // 白天天气图标
DialModelWeather::GetInstance()->UpdateWeather(index); // 更新主界面天气图标
// const std::string str = GetWeatherTemperature() + " "+GetWeatherDescription();
const std::string str = GetWeatherTemperature();