]>
Commit | Line | Data |
---|---|---|
1 | #include "../control/control.h" | |
2 | #include "../lib/irc_string.h" | |
3 | #include "trusts.h" | |
4 | ||
5 | int trusts_migration_start(TrustDBMigrationCallback, void *); | |
6 | void trusts_migration_stop(void); | |
7 | static void registercommands(int, void *); | |
8 | static void deregistercommands(int, void *); | |
9 | ||
10 | static 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 | ||
35 | static 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 | ||
51 | static int commandsregistered; | |
52 | ||
53 | static 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 | ||
61 | static void deregistercommands(int hooknum, void *arg) { | |
62 | if(!commandsregistered) | |
63 | return; | |
64 | commandsregistered = 0; | |
65 | ||
66 | deregistercontrolcmd("trustmigrate", trusts_cmdmigrate); | |
67 | } | |
68 | ||
69 | void _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 | ||
77 | void _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 | } |