diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bridge/bridge.cpp | 2 | ||||
-rw-r--r-- | src/config/config.cpp | 8 | ||||
-rw-r--r-- | src/config/config.hpp | 1 | ||||
-rw-r--r-- | src/database/database.cpp | 5 | ||||
-rw-r--r-- | src/database/database.hpp | 5 | ||||
-rw-r--r-- | src/xmpp/biboumi_adhoc_commands.cpp | 4 |
6 files changed, 21 insertions, 4 deletions
diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp index 02ba565..8587264 100644 --- a/src/bridge/bridge.cpp +++ b/src/bridge/bridge.cpp @@ -435,7 +435,7 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con bool persistent = false; #ifdef USE_DATABASE const auto goptions = Database::get_global_options(this->user_jid); - if (goptions.col<Database::Persistent>()) + if (goptions.col<Database::GlobalPersistent>()) persistent = true; else { diff --git a/src/config/config.cpp b/src/config/config.cpp index 0f3d639..412b170 100644 --- a/src/config/config.cpp +++ b/src/config/config.cpp @@ -23,6 +23,14 @@ std::string Config::get(const std::string& option, const std::string& def) return it->second; } +bool Config::get_bool(const std::string& option, const bool def) +{ + auto res = Config::get(option, ""); + if (res.empty()) + return def; + return res == "true"; +} + int Config::get_int(const std::string& option, const int& def) { std::string res = Config::get(option, ""); diff --git a/src/config/config.hpp b/src/config/config.hpp index 2ba38cc..c5ef15d 100644 --- a/src/config/config.hpp +++ b/src/config/config.hpp @@ -44,6 +44,7 @@ public: * the second argument as the default. */ static int get_int(const std::string&, const int&); + static bool get_bool(const std::string&, const bool); /** * Set a value for the given option. And write all the config * in the file from which it was read if save is true. diff --git a/src/database/database.cpp b/src/database/database.cpp index f706528..a2b88e2 100644 --- a/src/database/database.cpp +++ b/src/database/database.cpp @@ -6,6 +6,8 @@ #include <utils/get_first_non_empty.hpp> #include <utils/time.hpp> +#include <config/config.hpp> + #include <database/index.hpp> #include <sqlite3.h> @@ -18,6 +20,9 @@ Database::IrcChannelOptionsTable Database::irc_channel_options("IrcChannelOption Database::RosterTable Database::roster("roster"); std::map<Database::CacheKey, Database::EncodingIn::real_type> Database::encoding_in_cache{}; +Database::GlobalPersistent::GlobalPersistent(): + Column<bool>{Config::get_bool("persistent_by_default", false)} +{} void Database::open(const std::string& filename) { diff --git a/src/database/database.hpp b/src/database/database.hpp index f4b2ecd..f9695d3 100644 --- a/src/database/database.hpp +++ b/src/database/database.hpp @@ -73,6 +73,9 @@ class Database struct Persistent: Column<bool> { static constexpr auto name = "persistent_"; Persistent(): Column<bool>(false) {} }; + struct GlobalPersistent: Column<bool> { static constexpr auto name = "persistent_"; + GlobalPersistent(); }; + struct LocalJid: Column<std::string> { static constexpr auto name = "local"; }; struct RemoteJid: Column<std::string> { static constexpr auto name = "remote"; }; @@ -81,7 +84,7 @@ class Database using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>; using MucLogLine = MucLogLineTable::RowType; - using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, Persistent>; + using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, GlobalPersistent>; using GlobalOptions = GlobalOptionsTable::RowType; using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, AfterConnectionCommand, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength>; diff --git a/src/xmpp/biboumi_adhoc_commands.cpp b/src/xmpp/biboumi_adhoc_commands.cpp index d78dc98..bcdac39 100644 --- a/src/xmpp/biboumi_adhoc_commands.cpp +++ b/src/xmpp/biboumi_adhoc_commands.cpp @@ -159,7 +159,7 @@ void ConfigureGlobalStep1(XmppComponent&, AdhocSession& session, XmlNode& comman { XmlSubNode value(persistent, "value"); value.set_name("value"); - if (options.col<Database::Persistent>()) + if (options.col<Database::GlobalPersistent>()) value.set_inner("true"); else value.set_inner("false"); @@ -193,7 +193,7 @@ void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session, } else if (field->get_tag("var") == "persistent" && value) - options.col<Database::Persistent>() = to_bool(value->get_inner()); + options.col<Database::GlobalPersistent>() = to_bool(value->get_inner()); } options.save(Database::db); |