Fix 2283: Replace tokens at build() instread of update()

This commit is contained in:
quandangv 2020-12-12 09:18:54 +07:00 committed by Patrick Ziegler
parent df485f0a60
commit ae1c6ca1b7

View File

@ -85,8 +85,7 @@ namespace modules {
// Get data for defined mountpoints // Get data for defined mountpoints
for (auto&& mountpoint : m_mountpoints) { for (auto&& mountpoint : m_mountpoints) {
auto details = std::find_if(mountinfo.begin(), mountinfo.end(), auto details = std::find_if(mountinfo.begin(), mountinfo.end(), [&](const vector<string>& m) { return m.size() > 4 && m[MOUNTINFO_DIR] == mountpoint; });
[&](const vector<string>& m) { return m.size() > 4 && m[4] == mountpoint; });
m_mounts.emplace_back(new fs_mount{mountpoint, details != mountinfo.end()}); m_mounts.emplace_back(new fs_mount{mountpoint, details != mountinfo.end()});
struct statvfs buffer {}; struct statvfs buffer {};
@ -109,31 +108,6 @@ namespace modules {
mount->percentage_free = math_util::percentage<double>(mount->bytes_avail, mount->bytes_used + mount->bytes_avail); mount->percentage_free = math_util::percentage<double>(mount->bytes_avail, mount->bytes_used + mount->bytes_avail);
mount->percentage_used = math_util::percentage<double>(mount->bytes_used, mount->bytes_used + mount->bytes_avail); mount->percentage_used = math_util::percentage<double>(mount->bytes_used, mount->bytes_used + mount->bytes_avail);
const auto replace_tokens = [&](label_t& label) {
label->reset_tokens();
label->replace_token("%mountpoint%", mount->mountpoint);
label->replace_token("%type%", mount->type);
label->replace_token("%fsname%", mount->fsname);
label->replace_token("%percentage_free%", to_string(mount->percentage_free));
label->replace_token("%percentage_used%", to_string(mount->percentage_used));
label->replace_token(
"%total%", string_util::filesize(mount->bytes_total, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
label->replace_token(
"%free%", string_util::filesize(mount->bytes_avail, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
label->replace_token(
"%used%", string_util::filesize(mount->bytes_used, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
};
if (m_labelmounted) {
replace_tokens(m_labelmounted);
}
if (m_labelwarn) {
replace_tokens(m_labelwarn);
}
if (m_labelunmounted) {
m_labelunmounted->reset_tokens();
m_labelunmounted->replace_token("%mountpoint%", mount->mountpoint);
}
} }
} }
@ -186,6 +160,21 @@ namespace modules {
bool fs_module::build(builder* builder, const string& tag) const { bool fs_module::build(builder* builder, const string& tag) const {
auto& mount = m_mounts[m_index]; auto& mount = m_mounts[m_index];
auto replace_tokens = [&](const label_t& label) {
label->reset_tokens();
label->replace_token("%mountpoint%", mount->mountpoint);
label->replace_token("%type%", mount->type);
label->replace_token("%fsname%", mount->fsname);
label->replace_token("%percentage_free%", to_string(mount->percentage_free));
label->replace_token("%percentage_used%", to_string(mount->percentage_used));
label->replace_token(
"%total%", string_util::filesize(mount->bytes_total, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
label->replace_token(
"%free%", string_util::filesize(mount->bytes_avail, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
label->replace_token(
"%used%", string_util::filesize(mount->bytes_used, m_fixed ? 2 : 0, m_fixed, m_bar.locale));
};
if (tag == TAG_BAR_FREE) { if (tag == TAG_BAR_FREE) {
builder->node(m_barfree->output(mount->percentage_free)); builder->node(m_barfree->output(mount->percentage_free));
} else if (tag == TAG_BAR_USED) { } else if (tag == TAG_BAR_USED) {
@ -193,10 +182,14 @@ namespace modules {
} else if (tag == TAG_RAMP_CAPACITY) { } else if (tag == TAG_RAMP_CAPACITY) {
builder->node(m_rampcapacity->get_by_percentage_with_borders(mount->percentage_free, 0, m_perc_used_warn)); builder->node(m_rampcapacity->get_by_percentage_with_borders(mount->percentage_free, 0, m_perc_used_warn));
} else if (tag == TAG_LABEL_MOUNTED) { } else if (tag == TAG_LABEL_MOUNTED) {
replace_tokens(m_labelmounted);
builder->node(m_labelmounted); builder->node(m_labelmounted);
} else if (tag == TAG_LABEL_WARN) { } else if (tag == TAG_LABEL_WARN) {
replace_tokens(m_labelwarn);
builder->node(m_labelwarn); builder->node(m_labelwarn);
} else if (tag == TAG_LABEL_UNMOUNTED) { } else if (tag == TAG_LABEL_UNMOUNTED) {
m_labelunmounted->reset_tokens();
m_labelunmounted->replace_token("%mountpoint%", mount->mountpoint);
builder->node(m_labelunmounted); builder->node(m_labelunmounted);
} else { } else {
return false; return false;