diff options
author | Adam <Adam@anope.org> | 2012-01-15 01:47:31 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2012-01-15 01:47:31 -0500 |
commit | 964d63cdacdbc3769b269ae0e6e616f58f0256bc (patch) | |
tree | 7398a51b5bc15e054fb6640b226b26c1e2793eda /src/nickalias.cpp | |
parent | f38faedbdad404983c0d291b8e0e233a6b0fb70d (diff) |
Improve on db_sql_live_read
Diffstat (limited to 'src/nickalias.cpp')
-rw-r--r-- | src/nickalias.cpp | 19 |
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; |