summaryrefslogtreecommitdiff
path: root/src/nickalias.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2012-01-15 01:47:31 -0500
committerAdam <Adam@anope.org>2012-01-15 01:47:31 -0500
commit964d63cdacdbc3769b269ae0e6e616f58f0256bc (patch)
tree7398a51b5bc15e054fb6640b226b26c1e2793eda /src/nickalias.cpp
parentf38faedbdad404983c0d291b8e0e233a6b0fb70d (diff)
Improve on db_sql_live_read
Diffstat (limited to 'src/nickalias.cpp')
-rw-r--r--src/nickalias.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/nickalias.cpp b/src/nickalias.cpp
index 24d3d6e2b..43a35d448 100644
--- a/src/nickalias.cpp
+++ b/src/nickalias.cpp
@@ -139,7 +139,24 @@ void NickAlias::unserialize(serialized_data &data)
if (core == NULL)
return;
- NickAlias *na = new NickAlias(data["nick"].astr(), core);
+ NickAlias *na = findnick(data["nick"].astr());
+ if (na == NULL)
+ na = new NickAlias(data["nick"].astr(), core);
+ else if (na->nc != core)
+ {
+ std::list<NickAlias *>::iterator it = std::find(na->nc->aliases.begin(), na->nc->aliases.end(), na);
+ if (it != na->nc->aliases.end())
+ na->nc->aliases.erase(it);
+
+ if (na->nc->aliases.empty())
+ delete na->nc;
+ else if (na->nick.equals_ci(na->nc->display))
+ change_core_display(na->nc);
+
+ na->nc = core;
+ na->nc->aliases.push_back(na);
+ }
+
data["last_quit"] >> na->last_quit;
data["last_realname"] >> na->last_realname;
data["last_usermask"] >> na->last_usermask;