]> jfr.im git - irc/quakenet/newserv.git/blame - trusts/trusts_migration.c
fix indentation
[irc/quakenet/newserv.git] / trusts / trusts_migration.c
CommitLineData
05cae8fd
CP
1#include "../control/control.h"
2#include "../lib/irc_string.h"
3#include "trusts.h"
4
5int trusts_migration_start(TrustDBMigrationCallback, void *);
6void trusts_migration_stop(void);
7static void registercommands(int, void *);
8static void deregistercommands(int, void *);
9
10static void migrate_status(int errcode, void *tag) {
11 long sender = (long)tag;
12 nick *np = getnickbynumeric(sender);
13
14 if(!np)
15 return;
16
17 if(!errcode || errcode == MIGRATION_LASTERROR) {
18 if(!errcode) {
19 controlreply(np, "Migration complete.");
20 controlreply(np, "Attempting to reload database. . .");
21 } else {
22 controlreply(np, "An error occured after the database was unloaded, attempting reload. . .");
23 }
24 if(trusts_loaddb()) {
25 controlreply(np, "Database reloaded successfully.");
26 } else {
27 controlreply(np, "An error occured, please reload the module manually.");
28 }
29 } else {
30 controlreply(np, "Error %d occured during migration, commands reregistered.", errcode);
31 registercommands(0, NULL);
32 }
33}
34
35static int trusts_cmdmigrate(void *source, int cargc, char **cargv) {
36 nick *sender = source;
37 int ret;
38
39 /* iffy but temporary */
40 ret = trusts_migration_start(migrate_status, (void *)(sender->numeric));
41 if(!ret) {
42 controlreply(sender, "Migration started, commands deregistered.");
43 deregistercommands(0, NULL);
44 } else {
45 controlreply(sender, "Error %d starting migration.", ret);
46 }
47
48 return CMD_OK;
49}
50
51static int commandsregistered;
52
53static void registercommands(int hooknum, void *arg) {
54 if(commandsregistered)
55 return;
56 commandsregistered = 1;
57
58 registercontrolhelpcmd("trustmigrate", NO_DEVELOPER, 0, trusts_cmdmigrate, "Usage: trustmigrate\nCopies trust data from O and reloads the database.");
59}
60
61static void deregistercommands(int hooknum, void *arg) {
62 if(!commandsregistered)
63 return;
64 commandsregistered = 0;
65
66 deregistercontrolcmd("trustmigrate", trusts_cmdmigrate);
67}
68
69void _init(void) {
70 registerhook(HOOK_TRUSTS_DB_LOADED, registercommands);
71 registerhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
72
73 if(trustsdbloaded)
74 registercommands(0, NULL);
75}
76
77void _fini(void) {
78 deregisterhook(HOOK_TRUSTS_DB_LOADED, registercommands);
79 deregisterhook(HOOK_TRUSTS_DB_CLOSED, deregistercommands);
80
81 trusts_migration_stop();
82
83 deregistercommands(0, NULL);
84}