aboutsummaryrefslogtreecommitdiff
path: root/lib/configuration/configuration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/configuration/configuration.cpp')
-rw-r--r--lib/configuration/configuration.cpp44
1 files changed, 34 insertions, 10 deletions
diff --git a/lib/configuration/configuration.cpp b/lib/configuration/configuration.cpp
index bd7700c..34e84af 100644
--- a/lib/configuration/configuration.cpp
+++ b/lib/configuration/configuration.cpp
@@ -7,11 +7,11 @@
*/
#include "configuration.h"
-#include <sstream>
+#include <QStandardPaths>
#include <algorithm>
-#include <stdexcept>
#include <iostream>
-#include <QStandardPaths>
+#include <sstream>
+#include <stdexcept>
static std::unique_ptr<Configuration> s_conf;
@@ -21,7 +21,6 @@ inline void strip(std::string &value)
value.erase(std::find_if(value.rbegin(), value.rend(), std::bind1st(std::not_equal_to<char>(), ' ')).base(), value.end());
}
-
Configuration::Configuration()
: use_global(true)
{
@@ -32,9 +31,9 @@ Configuration::Configuration()
Configuration::Configuration(std::initializer_list<std::pair<std::string, conf_value_t>> l) noexcept
: m_homePath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation).toStdString())
{
- for(const auto &i : l) {
- insert_or_assign(i.first, i.second);
- }
+ for(const auto &i : l) {
+ insert_or_assign(i.first, i.second);
+ }
}
void Configuration::read(std::basic_istream<char> &input)
@@ -69,18 +68,16 @@ void Configuration::read(std::basic_istream<char> &input)
} else if(std::holds_alternative<bool>(v)) {
at(key) = (value == "true");
}
-
}
}
}
-
void Configuration::move_global(std::unique_ptr<Configuration> &&conf)
{
s_conf = std::move(conf);
}
-Configuration* Configuration::instance()
+Configuration *Configuration::instance()
{
return s_conf.get();
}
@@ -101,3 +98,30 @@ void setShortcut(QAction *action, const char *name)
}
#endif
}
+
+std::ostream &operator<<(std::ostream &out, const Configuration &obj)
+{
+ // unordered_map is, well, unordered, so grab the keys and sort them before printing them
+ std::vector<std::string> keys;
+
+ if(obj.use_global) {
+ if(!s_conf)
+ throw new std::runtime_error("Trying to use default Configuration, but none has been set!");
+
+ for(const auto &pair : *s_conf)
+ keys.emplace_back(pair.first);
+ } else {
+ for(const auto &pair : obj)
+ out << pair.first << "\n";
+ }
+ std::sort(keys.begin(), keys.end());
+
+ for(const auto &key : keys) {
+ if(obj.use_global)
+ out << key << "=" << s_conf->value<std::string>(key.c_str()).value() << "\n";
+ else
+ out << key << "=" << obj.value<std::string>(key.c_str()).value() << "\n";
+ }
+
+ return out;
+}