Add a global “persistent” option
This commit is contained in:
@@ -5,6 +5,7 @@ Version 6.0
|
|||||||
to work with the database.
|
to work with the database.
|
||||||
- The RecordHistory option can now also be configured for each IRC channel,
|
- The RecordHistory option can now also be configured for each IRC channel,
|
||||||
individually.
|
individually.
|
||||||
|
- Add a global option to make all channels persistent.
|
||||||
|
|
||||||
Version 5.0 - 2017-05-24
|
Version 5.0 - 2017-05-24
|
||||||
========================
|
========================
|
||||||
|
|||||||
@@ -558,6 +558,10 @@ On the gateway itself (e.g on the JID biboumi.example.com):
|
|||||||
the database.
|
the database.
|
||||||
* Max history length: The maximum number of lines in the history
|
* Max history length: The maximum number of lines in the history
|
||||||
that the server is allowed to send when joining a channel.
|
that the server is allowed to send when joining a channel.
|
||||||
|
* Persistent: Overrides the value specified in each individual channel,
|
||||||
|
all channels are persistent, whether or not their specific value is
|
||||||
|
true or false. See below for more details on what a persistent
|
||||||
|
channel is.
|
||||||
|
|
||||||
On a server JID (e.g on the JID chat.freenode.org@biboumi.example.com)
|
On a server JID (e.g on the JID chat.freenode.org@biboumi.example.com)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -436,9 +436,14 @@ void Bridge::leave_irc_channel(Iid&& iid, const std::string& status_message, con
|
|||||||
// acknowledgment from the server
|
// acknowledgment from the server
|
||||||
bool persistent = false;
|
bool persistent = false;
|
||||||
#ifdef USE_DATABASE
|
#ifdef USE_DATABASE
|
||||||
const auto coptions = Database::get_irc_channel_options_with_server_default(this->user_jid,
|
const auto goptions = Database::get_global_options(this->user_jid);
|
||||||
iid.get_server(), iid.get_local());
|
if (goptions.col<Database::Persistent>())
|
||||||
persistent = coptions.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
|
#endif
|
||||||
if (channel->joined && !channel->parting && !persistent)
|
if (channel->joined && !channel->parting && !persistent)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ class Database
|
|||||||
using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
|
using MucLogLineTable = Table<Id, Uuid, Owner, IrcChanName, IrcServerName, Date, Body, Nick>;
|
||||||
using MucLogLine = MucLogLineTable::RowType;
|
using MucLogLine = MucLogLineTable::RowType;
|
||||||
|
|
||||||
using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory>;
|
using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, Persistent>;
|
||||||
using GlobalOptions = GlobalOptionsTable::RowType;
|
using GlobalOptions = GlobalOptionsTable::RowType;
|
||||||
|
|
||||||
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, AfterConnectionCommand, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength>;
|
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, AfterConnectionCommand, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength>;
|
||||||
|
|||||||
@@ -147,6 +147,21 @@ void ConfigureGlobalStep1(XmppComponent&, AdhocSession& session, XmlNode& comman
|
|||||||
else
|
else
|
||||||
value.set_inner("false");
|
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)
|
void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session, XmlNode& command_node)
|
||||||
@@ -173,6 +188,9 @@ void ConfigureGlobalStep2(XmppComponent& xmpp_component, AdhocSession& session,
|
|||||||
if (bridge)
|
if (bridge)
|
||||||
bridge->set_record_history(options.col<Database::RecordHistory>());
|
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);
|
options.save(Database::db);
|
||||||
|
|||||||
@@ -2392,6 +2392,7 @@ if __name__ == '__main__':
|
|||||||
"/iq/commands:command/dataform:x[@type='form']/dataform:instructions[text()='Edit the form, to configure your global settings for the component.']",
|
"/iq/commands:command/dataform:x[@type='form']/dataform:instructions[text()='Edit the form, to configure your global settings for the component.']",
|
||||||
"/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='max_history_length']/dataform:value[text()='42']",
|
"/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='text-single'][@var='max_history_length']/dataform:value[text()='42']",
|
||||||
"/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='boolean'][@var='record_history']/dataform:value[text()='false']",
|
"/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='boolean'][@var='record_history']/dataform:value[text()='false']",
|
||||||
|
"/iq/commands:command/dataform:x[@type='form']/dataform:field[@type='boolean'][@var='persistent']/dataform:value[text()='false']",
|
||||||
"/iq/commands:command/commands:actions/commands:next",
|
"/iq/commands:command/commands:actions/commands:next",
|
||||||
),
|
),
|
||||||
after = partial(save_value, "sessionid", partial(extract_attribute, "/iq[@type='result']/commands:command[@node='configure']", "sessionid"))
|
after = partial(save_value, "sessionid", partial(extract_attribute, "/iq[@type='result']/commands:command[@node='configure']", "sessionid"))
|
||||||
|
|||||||
Reference in New Issue
Block a user