Add a nick field in the IRC server configuration form

fix #3317
This commit is contained in:
louiz’
2018-03-19 20:15:44 +01:00
parent d7427fc9ca
commit 619c991a69
7 changed files with 37 additions and 4 deletions
+6 -1
View File
@@ -166,10 +166,15 @@ IrcClient* Bridge::find_irc_client(const std::string& hostname) const
}
}
bool Bridge::join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password,
bool Bridge::join_irc_channel(const Iid& iid, std::string nickname, const std::string& password,
const std::string& resource, HistoryLimit history_limit)
{
const auto& hostname = iid.get_server();
#ifdef USE_DATABASE
auto soptions = Database::get_irc_server_options(this->get_bare_jid(), hostname);
if (!soptions.col<Database::Nick>().empty())
nickname = soptions.col<Database::Nick>();
#endif
IrcClient* irc = this->make_irc_client(hostname, nickname);
irc->history_limit = history_limit;
this->add_resource_to_server(hostname, resource);
+1 -1
View File
@@ -75,7 +75,7 @@ public:
* Try to join an irc_channel, does nothing and return true if the channel
* was already joined.
*/
bool join_irc_channel(const Iid& iid, const std::string& nickname, const std::string& password, const std::string& resource, HistoryLimit history_limit);
bool join_irc_channel(const Iid& iid, std::string nickname, const std::string& password, const std::string& resource, HistoryLimit history_limit);
void send_channel_message(const Iid& iid, const std::string& body, std::string id);
void send_private_message(const Iid& iid, const std::string& body, const std::string& type="PRIVMSG");
+1 -1
View File
@@ -92,7 +92,7 @@ class Database
using GlobalOptionsTable = Table<Id, Owner, MaxHistoryLength, RecordHistory, GlobalPersistent>;
using GlobalOptions = GlobalOptionsTable::RowType;
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength, Address>;
using IrcServerOptionsTable = Table<Id, Owner, Server, Pass, TlsPorts, Ports, Username, Realname, VerifyCert, TrustedFingerprint, EncodingOut, EncodingIn, MaxHistoryLength, Address, Nick>;
using IrcServerOptions = IrcServerOptionsTable::RowType;
using IrcChannelOptionsTable = Table<Id, Owner, Server, Channel, EncodingOut, EncodingIn, MaxHistoryLength, Persistent, RecordHistoryOptional>;
+16
View File
@@ -293,6 +293,20 @@ void ConfigureIrcServerStep1(XmppComponent&, AdhocSession& session, XmlNode& com
}
}
#endif
{
XmlSubNode field(x, "field");
field["var"] = "nick";
field["type"] = "text-single";
field["label"] = "Nickname";
field["desc"] = "If set, will override the nickname provided in the initial presence sent to join the first server channel";
if (!options.col<Database::Nick>().empty())
{
XmlSubNode value(field, "value");
value.set_inner(options.col<Database::Nick>());
}
}
{
XmlSubNode pass(x, "field");
pass["var"] = "pass";
@@ -427,6 +441,8 @@ void ConfigureIrcServerStep2(XmppComponent&, AdhocSession& session, XmlNode& com
#endif // BOTAN_FOUND
else if (field->get_tag("var") == "nick" && value)
options.col<Database::Nick>() = value->get_inner();
else if (field->get_tag("var") == "pass" && value)
options.col<Database::Pass>() = value->get_inner();