2016-11-02 19:22:45 +00:00
|
|
|
#include "modules/date.hpp"
|
|
|
|
|
2020-05-15 17:59:08 +00:00
|
|
|
#include "drawtypes/label.hpp"
|
2016-11-20 22:04:31 +00:00
|
|
|
#include "modules/meta/base.inl"
|
|
|
|
|
2016-11-19 05:22:44 +00:00
|
|
|
POLYBAR_NS
|
2016-11-02 19:22:45 +00:00
|
|
|
|
|
|
|
namespace modules {
|
2016-11-20 22:04:31 +00:00
|
|
|
template class module<date_module>;
|
|
|
|
|
2016-12-21 07:00:09 +00:00
|
|
|
date_module::date_module(const bar_settings& bar, string name_) : timer_module<date_module>(bar, move(name_)) {
|
2016-11-25 12:55:15 +00:00
|
|
|
if (!m_bar.locale.empty()) {
|
2017-09-15 12:21:38 +00:00
|
|
|
datetime_stream.imbue(std::locale(m_bar.locale.c_str()));
|
2016-11-25 12:55:15 +00:00
|
|
|
}
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2018-07-29 15:38:01 +00:00
|
|
|
m_dateformat = m_conf.get(name(), "date", ""s);
|
|
|
|
m_dateformat_alt = m_conf.get(name(), "date-alt", ""s);
|
|
|
|
m_timeformat = m_conf.get(name(), "time", ""s);
|
|
|
|
m_timeformat_alt = m_conf.get(name(), "time-alt", ""s);
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2016-12-05 03:45:01 +00:00
|
|
|
if (m_dateformat.empty() && m_timeformat.empty()) {
|
|
|
|
throw module_error("No date or time format specified");
|
|
|
|
}
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2016-12-31 02:04:01 +00:00
|
|
|
m_interval = m_conf.get<decltype(m_interval)>(name(), "interval", 1s);
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2016-12-05 03:45:01 +00:00
|
|
|
m_formatter->add(DEFAULT_FORMAT, TAG_LABEL, {TAG_LABEL, TAG_DATE});
|
|
|
|
|
|
|
|
if (m_formatter->has(TAG_DATE)) {
|
|
|
|
m_log.warn("%s: The format tag `<date>` is deprecated, use `<label>` instead.", name());
|
|
|
|
|
|
|
|
m_formatter->get(DEFAULT_FORMAT)->value =
|
|
|
|
string_util::replace_all(m_formatter->get(DEFAULT_FORMAT)->value, TAG_DATE, TAG_LABEL);
|
2016-11-25 12:55:15 +00:00
|
|
|
}
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2016-12-05 03:45:01 +00:00
|
|
|
if (m_formatter->has(TAG_LABEL)) {
|
|
|
|
m_label = load_optional_label(m_conf, name(), "label", "%date%");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool date_module::update() {
|
2016-11-02 19:22:45 +00:00
|
|
|
auto time = std::time(nullptr);
|
|
|
|
|
2016-12-05 03:45:01 +00:00
|
|
|
auto date_format = m_toggled ? m_dateformat_alt : m_dateformat;
|
2017-09-15 12:21:38 +00:00
|
|
|
// Clear stream contents
|
|
|
|
datetime_stream.str("");
|
|
|
|
datetime_stream << std::put_time(localtime(&time), date_format.c_str());
|
|
|
|
auto date_string = datetime_stream.str();
|
2016-12-05 03:45:01 +00:00
|
|
|
|
|
|
|
auto time_format = m_toggled ? m_timeformat_alt : m_timeformat;
|
2017-09-15 12:21:38 +00:00
|
|
|
// Clear stream contents
|
|
|
|
datetime_stream.str("");
|
|
|
|
datetime_stream << std::put_time(localtime(&time), time_format.c_str());
|
|
|
|
auto time_string = datetime_stream.str();
|
2016-12-05 03:45:01 +00:00
|
|
|
|
2017-09-15 22:09:26 +00:00
|
|
|
if (m_date == date_string && m_time == time_string) {
|
2016-11-02 19:22:45 +00:00
|
|
|
return false;
|
2016-12-05 03:45:01 +00:00
|
|
|
}
|
|
|
|
|
2017-09-15 12:13:35 +00:00
|
|
|
m_date = date_string;
|
|
|
|
m_time = time_string;
|
2016-12-05 03:45:01 +00:00
|
|
|
|
|
|
|
if (m_label) {
|
|
|
|
m_label->reset_tokens();
|
|
|
|
m_label->replace_token("%date%", m_date);
|
|
|
|
m_label->replace_token("%time%", m_time);
|
2016-11-25 12:55:15 +00:00
|
|
|
}
|
2016-11-02 19:22:45 +00:00
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-11-25 12:55:15 +00:00
|
|
|
bool date_module::build(builder* builder, const string& tag) const {
|
2016-12-05 03:45:01 +00:00
|
|
|
if (tag == TAG_LABEL) {
|
|
|
|
if (!m_dateformat_alt.empty() || !m_timeformat_alt.empty()) {
|
|
|
|
builder->cmd(mousebtn::LEFT, EVENT_TOGGLE);
|
|
|
|
builder->node(m_label);
|
|
|
|
builder->cmd_close();
|
|
|
|
} else {
|
|
|
|
builder->node(m_label);
|
|
|
|
}
|
|
|
|
} else {
|
2016-11-02 19:22:45 +00:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2016-12-23 19:43:52 +00:00
|
|
|
bool date_module::input(string&& cmd) {
|
2016-12-05 03:45:01 +00:00
|
|
|
if (cmd != EVENT_TOGGLE) {
|
|
|
|
return false;
|
2016-11-02 19:22:45 +00:00
|
|
|
}
|
2016-12-05 03:45:01 +00:00
|
|
|
m_toggled = !m_toggled;
|
|
|
|
wakeup();
|
2016-11-02 19:22:45 +00:00
|
|
|
return true;
|
|
|
|
}
|
2020-05-15 17:59:08 +00:00
|
|
|
} // namespace modules
|
2016-11-02 19:22:45 +00:00
|
|
|
|
2016-11-19 05:22:44 +00:00
|
|
|
POLYBAR_NS_END
|