summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2017-07-06 22:24:42 +0200
committerlouiz’ <louiz@louiz.org>2017-07-06 22:24:42 +0200
commit9f7782bb0c5915969fd7477e0ed7c10b1a5c2d9c (patch)
treeba8c243c8633cb236bef629071a2a1264c459101 /src
parentb71ca15a0f9114db38eec23b49d1489a2ff1d0ca (diff)
downloadbiboumi-9f7782bb0c5915969fd7477e0ed7c10b1a5c2d9c.tar.gz
biboumi-9f7782bb0c5915969fd7477e0ed7c10b1a5c2d9c.tar.bz2
biboumi-9f7782bb0c5915969fd7477e0ed7c10b1a5c2d9c.tar.xz
biboumi-9f7782bb0c5915969fd7477e0ed7c10b1a5c2d9c.zip
Add a global “persistent” option
Diffstat (limited to 'src')
-rw-r--r--src/bridge/bridge.cpp11
-rw-r--r--src/database/database.hpp2
-rw-r--r--src/xmpp/biboumi_adhoc_commands.cpp18
3 files changed, 27 insertions, 4 deletions
diff --git a/src/bridge/bridge.cpp b/src/bridge/bridge.cpp
index 23ecfe9..81ca147 100644
--- a/src/bridge/bridge.cpp
+++ b/src/bridge/bridge.cpp
@@ -436,9 +436,14 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con
// acknowledgment from the server
bool persistent = false;
#ifdef USE_DATABASE
- const auto coptions = Database::get_irc_channel_options_with_server_default(this->user_jid,
- iid.get_server(), iid.get_local());
- persistent = coptions.col<Database::Persistent>();
+ const auto goptions = Database::get_global_options(this->user_jid);
+ if (goptions.col<Database::Persistent>())
+ persistent = true;
+ else
+ {
+ const auto coptions = Database::get_irc_channel_options_with_server_default(this->user_jid, iid.get_server(), iid.get_local());
+ persistent = coptions.col<Database::Persistent>();
+ }
#endif
if (channel->joined && !channel->parting && !persistent)
{
diff --git a/src/database/database.hpp b/src/database/database.hpp
index 28b6b1b..8364abc 100644
--- a/src/database/database.hpp
+++ b/src/database/database.hpp
@@ -98,7 +98,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>;
+ using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, Persistent>;
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 ad4faf8..c1b7323 100644
--- a/src/xmpp/biboumi_adhoc_commands.cpp
+++ b/src/xmpp/biboumi_adhoc_commands.cpp
@@ -147,6 +147,21 @@ void ConfigureGlobalStep1(XmppComponent&, AdhocSession& session, XmlNode& comman
else
value.set_inner("false");
}
+
+ XmlSubNode persistent(x, "field");
+ persistent["var"] = "persistent";
+ persistent["type"] = "boolean";
+ persistent["label"] = "Make all channels persistent";
+ persistent["desc"] = "If true, all channels will be persistent";
+
+ {
+ XmlSubNode value(persistent, "value");
+ value.set_name("value");
+ if (options.col<Database::Persistent>())
+ value.set_inner("true");
+ else
+ value.set_inner("false");
+ }
}
void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
@@ -173,6 +188,9 @@ void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session,
if (bridge)
bridge->set_record_history(options.col<Database::RecordHistory>());
}
+ else if (field->get_tag("var") == "persistent" &&
+ value)
+ options.col<Database::Persistent>() = to_bool(value->get_inner());
}
options.save(Database::db);