23
23
//=============================================================================
25
#include "kvi_module.h"
27
#include "kvi_locale.h"
28
#include "kvi_ircserver.h"
29
#include "kvi_ircserverdb.h"
25
#include "KviModule.h"
26
#include "KviApplication.h"
27
#include "KviLocale.h"
28
#include "KviIrcServer.h"
29
#include "KviIrcServerDataBase.h"
33
extern KVIRC_API KviServerDataBase * g_pServerDataBase;
33
extern KVIRC_API KviIrcServerDataBase * g_pServerDataBase;
40
Interface to the servers database
44
The serverdb module is the scripting interface to the servers and networks database.[br]
45
It provides the following set of commands:[br]
46
[cmd]serverdb.addNetwork[/cmd]: adds a network entry to the database[br]
47
[cmd]serverdb.addServer[/cmd]: adds a server entry to the database[br]
48
[cmd]serverdb.setNetworkConnectCommand[/cmd]: sets a "on connect" script for the network[br]
49
[cmd]serverdb.setNetworkEncoding[/cmd]: sets the network encoding[br]
50
[cmd]serverdb.setNetworkTextEncoding[/cmd]: sets the network text encoding[br]
51
[cmd]serverdb.setNetworkDescription[/cmd]: sets the network description[br]
52
[cmd]serverdb.setNetworkLoginCommand[/cmd]: sets a "on login" script for the network[br]
53
[cmd]serverdb.setNetworkNickName[/cmd]: sets the network specific nickname[br]
54
[cmd]serverdb.setNetworkRealName[/cmd]: sets the network specific realname[br]
55
[cmd]serverdb.setNetworkUserName[/cmd]: sets the network specific username[br]
56
[cmd]serverdb.setNetworkJoinChannels[/cmd]: sets the network autojoin channels list[br]
57
[cmd]serverdb.setServerConnectCommand[/cmd]: sets a "on connect" script for the server[br]
58
[cmd]serverdb.setServerEncoding[/cmd]: sets the server encoding[br]
59
[cmd]serverdb.setServerTextEncoding[/cmd]: sets the server text encoding[br]
60
[cmd]serverdb.setServerDescription[/cmd]: sets the server description[br]
61
[cmd]serverdb.setServerLoginCommand[/cmd]: sets a "on login" script for the server[br]
62
[cmd]serverdb.setServerNickName[/cmd]: sets the server specific nickname[br]
63
[cmd]serverdb.setServerRealName[/cmd]: sets the server specific realname[br]
64
[cmd]serverdb.setServerUserName[/cmd]: sets the server specific username[br]
65
[cmd]serverdb.setServerJoinChannels[/cmd]: sets the server autojoin channels list[br]
67
It provides the following set of functions:[br]
68
[fnc]$serverdb.cacheIp[/fnc]: returns the cache-ip status for a server[br]
69
[fnc]$serverdb.networkConnectCommand[/fnc]: returns the "on connect" script for a network[br]
70
[fnc]$serverdb.networkDescription[/fnc]: returns the description for a network[br]
71
[fnc]$serverdb.networkEncoding[/fnc]: returns the encoding for a network[br]
72
[fnc]$serverdb.networkTextEncoding[/fnc]: returns the text encoding for a network[br]
73
[fnc]$serverdb.networkLoginCommand[/fnc]: returns the "on login" script for a network[br]
74
[fnc]$serverdb.networkName[/fnc]: returns the name of a network[br]
75
[fnc]$serverdb.networkNickName[/fnc]: returns the specific nickname for a network[br]
76
[fnc]$serverdb.networkRealName[/fnc]: returns the specific realname for a network[br]
77
[fnc]$serverdb.networkUserName[/fnc]: returns the specific username for a network[br]
78
[fnc]$serverdb.networkJoinChannels[/fnc]: returns the list of autojoin channels for a network[br]
79
[fnc]$serverdb.serverConnectCommand[/fnc]: returns the "on connect" script for a server[br]
80
[fnc]$serverdb.serverDescription[/fnc]: returns the description for a server[br]
81
[fnc]$serverdb.serverEncoding[/fnc]: returns the encoding for a server[br]
82
[fnc]$serverdb.serverTextEncoding[/fnc]: returns the text encoding for a server[br]
83
[fnc]$serverdb.serverId[/fnc]: returns the unique id for a server[br]
84
[fnc]$serverdb.serverIp[/fnc]: returns the ip for a server[br]
85
[fnc]$serverdb.serverLoginCommand[/fnc]: returns the "on login" script for a server[br]
86
[fnc]$serverdb.serverNickName[/fnc]: returns the specific nickname for a server[br]
87
[fnc]$serverdb.serverPassword[/fnc]: returns the password for a server[br]
88
[fnc]$serverdb.serverPort[/fnc]: returns the port for a server[br]
89
[fnc]$serverdb.serverRealName[/fnc]: returns the specific realname for a server[br]
90
[fnc]$serverdb.serverUserName[/fnc]: returns the specific username for a server[br]
91
[fnc]$serverdb.serverJoinChannels[/fnc]: returns the list of autojoin channels for a server[br]
92
[fnc]$serverdb.isAutoConnect[/fnc]: returns the autoconnect status for a server[br]
93
[fnc]$serverdb.isIPv6[/fnc]: returns the ipv6 status for a server[br]
94
[fnc]$serverdb.isSSL[/fnc]: returns the ssl status for a server[br]
95
[fnc]$serverdb.networkExists[/fnc]: checks if a network exists[br]
96
[fnc]$serverdb.serverExists[/fnc]: checks if a server exists[br]
36
100
@doc: serverdb.networkExists
125
189
c->returnValue()->setBoolean(true);
127
191
// Check through all networks
128
KviPointerHashTableIterator<QString,KviNetwork> it(*(g_pServerDataBase->recordDict()));
192
KviPointerHashTableIterator<QString,KviIrcNetwork> it(*(g_pServerDataBase->recordDict()));
130
while(KviNetwork * r = it.current())
194
while(KviIrcNetwork * r = it.current())
132
KviPointerList<KviServer> * sl = r->serverList();
196
KviPointerList<KviIrcServer> * sl = r->serverList();
134
for(KviServer * s = sl->first(); s; s = sl->next())
198
for(KviIrcServer * s = sl->first(); s; s = sl->next())
136
200
if(QString::compare(s->hostName().toUtf8().data(),szServer,Qt::CaseInsensitive)==0)
215
#define BEGIN_SERVERDB_GET_NETWORK_PROPERTY(__functionName) \
216
static bool __functionName(KviKvsModuleFunctionCall * c) \
220
KVSM_PARAMETERS_BEGIN(c) \
221
KVSM_PARAMETER("name",KVS_PT_STRING,0,szName) \
222
KVSM_PARAMETERS_END(c) \
224
if(szName.isEmpty()) \
226
c->error(__tr2qs_ctx("You must provide the network name as parameter","serverdb")); \
230
KviIrcNetwork * pNetwork = g_pServerDataBase->findNetwork(szName); \
233
c->error(__tr2qs_ctx("The specified network does not exist","serverdb")); \
238
#define END_SERVERDB_GET_NETWORK_PROPERTY \
151
242
#define SERVERDB_GET_NETWORK_PROPERTY(__functionName,__callName) \
152
static bool __functionName(KviKvsModuleFunctionCall * c) \
156
KVSM_PARAMETERS_BEGIN(c) \
157
KVSM_PARAMETER("name",KVS_PT_STRING,0,szName) \
158
KVSM_PARAMETERS_END(c) \
160
if(szName.isEmpty()) \
162
c->error(__tr2qs_ctx("You must provide the network name as parameter","serverdb")); \
166
KviNetwork * pNetwork = g_pServerDataBase->findNetwork(szName); \
169
c->error(__tr2qs_ctx("The specified network does not exist","serverdb")); \
243
BEGIN_SERVERDB_GET_NETWORK_PROPERTY(__functionName) \
173
245
c->returnValue()->setString(pNetwork->__callName()); \
247
END_SERVERDB_GET_NETWORK_PROPERTY
249
#define BEGIN_SERVERDB_GET_SERVER_PROPERTY(__functionName) \
250
static bool __functionName(KviKvsModuleFunctionCall * c) \
252
QString szNetName, szServName; \
254
KVSM_PARAMETERS_BEGIN(c) \
255
KVSM_PARAMETER("network_name",KVS_PT_STRING,0,szNetName) \
256
KVSM_PARAMETER("server_name",KVS_PT_STRING,0,szServName) \
257
KVSM_PARAMETERS_END(c) \
259
if(szNetName.isEmpty()) \
261
c->error(__tr2qs_ctx("You must provide the network name as parameter","serverdb")); \
265
if(szServName.isEmpty()) \
267
c->error(__tr2qs_ctx("You must provide the server name as parameter","serverdb")); \
271
KviIrcNetwork * pRecord = g_pServerDataBase->findNetwork(szNetName); \
274
c->error(__tr2qs_ctx("The specified network does not exist","serverdb")); \
278
KviIrcServer * pServer = pRecord->findServer(szServName); \
281
c->error(__tr2qs_ctx("The specified server does not exist","serverdb")); \
286
#define END_SERVERDB_GET_SERVER_PROPERTY \
178
290
#define SERVERDB_GET_SERVER_PROPERTY(__functionName,__callName,__variantSetCallName) \
179
static bool __functionName(KviKvsModuleFunctionCall * c) \
181
QString szNetName, szServName; \
183
KVSM_PARAMETERS_BEGIN(c) \
184
KVSM_PARAMETER("network_name",KVS_PT_STRING,0,szNetName) \
185
KVSM_PARAMETER("server_name",KVS_PT_STRING,0,szServName) \
186
KVSM_PARAMETERS_END(c) \
188
if(szNetName.isEmpty()) \
190
c->error(__tr2qs_ctx("You must provide the network name as parameter","serverdb")); \
194
if(szServName.isEmpty()) \
196
c->error(__tr2qs_ctx("You must provide the server name as parameter","serverdb")); \
200
KviNetwork * pRecord = g_pServerDataBase->findNetwork(szNetName); \
203
c->error(__tr2qs_ctx("The specified network does not exist","serverdb")); \
207
KviServer * pServer = pRecord->findServer(szServName); \
210
c->error(__tr2qs_ctx("The specified server does not exist","serverdb")); \
291
BEGIN_SERVERDB_GET_SERVER_PROPERTY(__functionName) \
214
292
c->returnValue()->__variantSetCallName(pServer->__callName()); \
293
END_SERVERDB_GET_SERVER_PROPERTY
220
297
@doc: serverdb.networkNickName
370
447
SERVERDB_GET_NETWORK_PROPERTY(serverdb_kvs_fnc_networkName,name)
450
@doc: serverdb.networkJoinChannels
454
$serverdb.networkJoinChannels
456
Returns the list of autojoin channels
458
<string> $serverdb.networkJoinChannels(<network:string>)
460
Returns an array of autojoin channels and their relative passwords set for the network <network>[br]
461
Each item in the array is in the format <channel:string>:<password:string>
463
[module:serverdb]ServerDB module documentation[/module]
465
BEGIN_SERVERDB_GET_NETWORK_PROPERTY(serverdb_kvs_fnc_networkJoinChannels)
467
KviKvsArray * pArray = new KviKvsArray();
469
QStringList * pAutoJoinChannels = pNetwork->autoJoinChannelList();
470
if(pAutoJoinChannels)
473
foreach(QString szEntry,*pAutoJoinChannels)
475
pArray->set(idx,new KviKvsVariant(szEntry));
480
c->returnValue()->setArray(pArray);
482
END_SERVERDB_GET_NETWORK_PROPERTY
373
485
@doc: serverdb.serverNickName
642
754
SERVERDB_GET_SERVER_PROPERTY(serverdb_kvs_fnc_serverCacheIp,cacheIp,setBoolean)
757
@doc: serverdb.serverJoinChannels
761
$serverdb.serverJoinChannels
763
Returns the list of autojoin channels
765
<array> $serverdb.serverJoinChannels(<network:string>,<server:string>)
767
Returns an array containing the autojoin channels and their relative passwords set for the server <server> of the network <network>[br]
768
Each item in the array is in the format channel_name:password
770
[module:serverdb]ServerDB module documentation[/module]
772
BEGIN_SERVERDB_GET_SERVER_PROPERTY(serverdb_kvs_fnc_serverJoinChannels)
774
KviKvsArray * pArray = new KviKvsArray();
776
QStringList * pAutoJoinChannels = pServer->autoJoinChannelList();
777
if(pAutoJoinChannels)
780
foreach(QString szEntry,*pAutoJoinChannels)
782
pArray->set(idx,new KviKvsVariant(szEntry));
787
c->returnValue()->setArray(pArray);
789
END_SERVERDB_GET_SERVER_PROPERTY
645
793
@doc: serverdb.addNetwork
800
947
#define SERVERDB_SET_NETWORK_PROPERTY(__functionName,__callName) \
801
948
static bool __functionName(KviKvsModuleCommandCall * c) \
803
QString szName, szPropertyName; \
950
QString szName, szPropertyValue; \
805
952
KVSM_PARAMETERS_BEGIN(c) \
806
953
KVSM_PARAMETER("name",KVS_PT_STRING,0,szName) \
807
KVSM_PARAMETER("property",KVS_PT_STRING,KVS_PF_APPENDREMAINING,szPropertyName) \
954
KVSM_PARAMETER("property",KVS_PT_STRING,KVS_PF_APPENDREMAINING,szPropertyValue) \
808
955
KVSM_PARAMETERS_END(c) \
810
957
if(szName.isEmpty()) \
835
976
#define SERVERDB_SET_SERVER_PROPERTY(__functionName,__callName) \
836
977
static bool __functionName(KviKvsModuleCommandCall * c) \
838
QString szNetName, szServName, szPropertyName; \
979
QString szNetName, szServName, szPropertyValue; \
840
981
KVSM_PARAMETERS_BEGIN(c) \
841
982
KVSM_PARAMETER("network_name",KVS_PT_STRING,0,szNetName) \
842
983
KVSM_PARAMETER("server_name",KVS_PT_STRING,0,szServName) \
843
KVSM_PARAMETER("property",KVS_PT_STRING,KVS_PF_APPENDREMAINING,szPropertyName) \
984
KVSM_PARAMETER("property",KVS_PT_STRING,KVS_PF_APPENDREMAINING,szPropertyValue) \
844
985
KVSM_PARAMETERS_END(c) \
846
987
if(szNetName.isEmpty()) \
1084
1219
SERVERDB_SET_NETWORK_PROPERTY(serverdb_kvs_cmd_setNetworkLoginCommand,setOnLoginCommand)
1222
@doc: serverdb.setNetworkJoinChannels
1226
serverdb.setNetworkJoinChannels
1228
Sets the autojoin channels list
1230
serverdb.setNetworkJoinChannels <name:string> <channel_list:string>
1232
Sets the autojoin channels list for the specified network <name>.[br]
1233
Items in the list have to be separated by a comma, and each item has to be in the form <channel:string>:<password:string>
1236
[comment]Set two autojoin channels for freenode[/comment][br]
1237
serverdb.setNetworkJoinChannels Freenode #kvirc:,#secretchan:password
1240
[module:serverdb]ServerDB module documentation[/module]
1242
SERVERDB_SET_NETWORK_PROPERTY(serverdb_kvs_cmd_setNetworkJoinChannels,setAutoJoinChannelList)
1087
1245
@doc: serverdb.setServerNickName
1285
1443
SERVERDB_SET_SERVER_PROPERTY(serverdb_kvs_cmd_setServerLoginCommand,setOnLoginCommand)
1446
@doc: serverdb.setServerJoinChannels
1450
serverdb.setServerJoinChannels
1452
Sets the autojoin channels list
1454
serverdb.setServerJoinChannels <network:string> <server:string> <channel_list:string>
1456
Sets the autojoin channels list for the specified server <server> in the network <network>.[br]
1457
Items in the list have to be separated by a comma, and each item has to be in the form <channel:string>:<password:string>
1460
[comment]Set two autojoin channels for irc.freenode.net[/comment][br]
1461
serverdb.setServerJoinChannels irc.freenode.net #kvirc:,#secretchan:password
1464
[module:serverdb]ServerDB module documentation[/module]
1466
SERVERDB_SET_SERVER_PROPERTY(serverdb_kvs_cmd_setServerJoinChannels,setAutoJoinChannelList)
1287
1468
static bool serverdb_module_init(KviModule * m)
1300
1481
KVSM_REGISTER_FUNCTION(m,"networkNickName",serverdb_kvs_fnc_networkNickName);
1301
1482
KVSM_REGISTER_FUNCTION(m,"networkRealName",serverdb_kvs_fnc_networkRealName);
1302
1483
KVSM_REGISTER_FUNCTION(m,"networkUserName",serverdb_kvs_fnc_networkUserName);
1484
KVSM_REGISTER_FUNCTION(m,"networkJoinChannels",serverdb_kvs_fnc_networkJoinChannels);
1303
1485
KVSM_REGISTER_FUNCTION(m,"serverConnectCommand",serverdb_kvs_fnc_serverConnectCommand);
1304
1486
KVSM_REGISTER_FUNCTION(m,"serverDescription",serverdb_kvs_fnc_serverDescription);
1305
1487
KVSM_REGISTER_FUNCTION(m,"serverEncoding",serverdb_kvs_fnc_serverEncoding);
1312
1494
KVSM_REGISTER_FUNCTION(m,"serverPort",serverdb_kvs_fnc_serverPort);
1313
1495
KVSM_REGISTER_FUNCTION(m,"serverRealName",serverdb_kvs_fnc_serverRealName);
1314
1496
KVSM_REGISTER_FUNCTION(m,"serverUserName",serverdb_kvs_fnc_serverUserName);
1497
KVSM_REGISTER_FUNCTION(m,"serverJoinChannels",serverdb_kvs_fnc_serverJoinChannels);
1315
1498
KVSM_REGISTER_FUNCTION(m,"isAutoConnect",serverdb_kvs_fnc_serverAutoConnect);
1316
1499
KVSM_REGISTER_FUNCTION(m,"isIPv6",serverdb_kvs_fnc_serverIPv6);
1317
1500
KVSM_REGISTER_FUNCTION(m,"isSSL",serverdb_kvs_fnc_serverSSL);
1328
1511
KVSM_REGISTER_SIMPLE_COMMAND(m,"setNetworkNickName",serverdb_kvs_cmd_setNetworkNickName);
1329
1512
KVSM_REGISTER_SIMPLE_COMMAND(m,"setNetworkRealName",serverdb_kvs_cmd_setNetworkRealName);
1330
1513
KVSM_REGISTER_SIMPLE_COMMAND(m,"setNetworkUserName",serverdb_kvs_cmd_setNetworkUserName);
1514
KVSM_REGISTER_SIMPLE_COMMAND(m,"setNetworkJoinChannels",serverdb_kvs_cmd_setNetworkJoinChannels);
1331
1515
KVSM_REGISTER_SIMPLE_COMMAND(m,"setServerConnectCommand",serverdb_kvs_cmd_setServerConnectCommand);
1332
1516
KVSM_REGISTER_SIMPLE_COMMAND(m,"setServerEncoding",serverdb_kvs_cmd_setServerEncoding);
1333
1517
KVSM_REGISTER_SIMPLE_COMMAND(m,"setServerTextEncoding",serverdb_kvs_cmd_setServerTextEncoding);