diff options
-rw-r--r-- | modules/core/db_plain.cpp | 59 | ||||
-rw-r--r-- | src/tools/db-upgrade.cpp | 47 |
2 files changed, 75 insertions, 31 deletions
diff --git a/modules/core/db_plain.cpp b/modules/core/db_plain.cpp index 4622963b7..d3aa5e00f 100644 --- a/modules/core/db_plain.cpp +++ b/modules/core/db_plain.cpp @@ -360,19 +360,8 @@ static void LoadNickCore(const std::vector<Anope::string> ¶ms) /* Clear default flags */ nc->ClearFlags(); - if (params.size() <= 2) - /* This is a forbidden nick */ - return; - nc->pass = params[1]; - for (int i = 0; LangInfos[i].LanguageId != -1; ++i) - if (params[2].equals_ci(LangInfos[i].Name)) - nc->language = LangInfos[i].LanguageId; - - nc->memos.memomax = params[3].is_number_only() ? convertTo<int16>(params[3]) : 1; - nc->channelcount = params[4].is_number_only() ? convertTo<uint16>(params[4]) : 0; - Alog(LOG_DEBUG_2) << "[db_plain]: Loaded NickCore " << nc->display; } @@ -432,10 +421,6 @@ static void LoadChanInfo(const std::vector<Anope::string> ¶ms) ci->last_used = params[2].is_number_only() ? convertTo<time_t>(params[2]) : 0; - ci->bantype = params[3].is_number_only() ? convertTo<int16>(params[3]) : Config.CSDefBantype; - - ci->memos.memomax = params[4].is_number_only() ? convertTo<int16>(params[4]) : 1; - Alog(LOG_DEBUG_2) << "[db_plain]: loaded channel " << ci->name; } @@ -612,7 +597,17 @@ class DBPlain : public Module EventReturn OnDatabaseReadMetadata(NickCore *nc, const Anope::string &key, const std::vector<Anope::string> ¶ms) { - if (key.equals_ci("EMAIL")) + if (key.equals_ci("LANGUAGE")) + { + for (int i = 0; LangInfos[i].LanguageId != -1; ++i) + if (params[0].equals_ci(LangInfos[i].Name)) + nc->language = LangInfos[i].LanguageId; + } + else if (key.equals_ci("MEMOMAX")) + nc->memos.memomax = params[0].is_number_only() ? convertTo<int16>(params[0]) : 1; + else if (key.equals_ci("CHANCOUNT")) + nc->channelcount = params[0].is_number_only() ? convertTo<uint16>(params[0]) : 0; + else if (key.equals_ci("EMAIL")) nc->email = params[0]; else if (key.equals_ci("GREET")) nc->greet = params[0]; @@ -683,7 +678,11 @@ class DBPlain : public Module EventReturn OnDatabaseReadMetadata(ChannelInfo *ci, const Anope::string &key, const std::vector<Anope::string> ¶ms) { - if (key.equals_ci("FOUNDER")) + if (key.equals_ci("BANTYPE")) + ci->bantype = params[0].is_number_only() ? convertTo<int16>(params[0]) : Config.CSDefBantype; + else if (key.equals_ci("MEMOMAX")) + ci->memos.memomax = params[0].is_number_only() ? convertTo<int16>(params[0]) : 1; + else if (key.equals_ci("FOUNDER")) { ci->founder = findcore(params[0]); if (!ci->founder) @@ -875,7 +874,7 @@ class DBPlain : public Module return EVENT_CONTINUE; } - db << "VER 1" << endl; + db << "VER 2" << endl; for (nickrequest_map::const_iterator it = NickRequestList.begin(), it_end = NickRequestList.end(); it != it_end; ++it) { @@ -890,19 +889,16 @@ class DBPlain : public Module { NickCore *nc = nit->second; - if (nc->HasFlag(NI_FORBIDDEN)) - { - db << "NC " << nc->display << endl; - db << "MD FLAGS FORBIDDEN" << endl; - FOREACH_MOD(I_OnDatabaseWriteMetadata, OnDatabaseWriteMetadata(WriteMetadata, nc)); - continue; - } - else - db << "NC " << nc->display << " " << nc->pass << " "; + db << "NC " << nc->display << " " << nc->pass << endl; + + db << "MD LANGUAGE "; for (int j = 0; LangInfos[j].LanguageId != -1; ++j) if (nc->language == LangInfos[j].LanguageId) db << LangInfos[j].Name; - db << " " << nc->memos.memomax << " " << nc->channelcount << endl; + db << endl; + + db << "MD MEMOMAX " << nc->memos.memomax << endl; + db << "MD CHANCOUNT " << nc->channelcount << endl; if (!nc->email.empty()) db << "MD EMAIL " << nc->email << endl; @@ -977,8 +973,9 @@ class DBPlain : public Module { ChannelInfo *ci = cit->second; - db << "CH " << ci->name << " " << ci->time_registered << " " << ci->last_used; - db << " " << ci->bantype << " " << ci->memos.memomax << endl; + db << "CH " << ci->name << " " << ci->time_registered << " " << ci->last_used << endl; + db << "MD BANTYPE " << ci->bantype << endl; + db << "MD MEMOMAX " << ci->memos.memomax << endl; if (ci->founder) db << "MD FOUNDER " << ci->founder->display << endl; if (ci->successor) @@ -1041,13 +1038,13 @@ class DBPlain : public Module } db << endl; } - Anope::string Param; for (std::list<Mode *>::iterator it = ModeManager::Modes.begin(), it_end = ModeManager::Modes.end(); it != it_end; ++it) { if ((*it)->Class == MC_CHANNEL) { ChannelMode *cm = debug_cast<ChannelMode *>(*it); + Anope::string Param; if (ci->GetParam(cm->Name, Param)) db << "MD MLP " << cm->NameAsString << " " << Param << endl; } diff --git a/src/tools/db-upgrade.cpp b/src/tools/db-upgrade.cpp index eb7a1a978..599441a6a 100644 --- a/src/tools/db-upgrade.cpp +++ b/src/tools/db-upgrade.cpp @@ -187,6 +187,7 @@ int main(int argc, char *argv[]) std::string line; while (getline(in, line)) { + std::string lang, memomax, chancount, bantype; if (line.substr(0, 2) == "NC") { std::vector<std::string> parts = BuildStringVector(line); @@ -226,6 +227,31 @@ int main(int argc, char *argv[]) password += ":" + iv; parts[2] = password; } + if (parts.size() == 6) + { + chancount = parts[5]; + memomax = parts[4]; + lang = parts[3]; + parts.erase(parts.end()); + parts.erase(parts.end()); + parts.erase(parts.end()); + } + line.clear(); + for (unsigned part = 0, end = parts.size(); part < end; ++part) + { + if (part) + line += ' '; + line += parts[part]; + } + } + else if (line.substr(0, 2) == "CH") + { + std::vector<std::string> parts = BuildStringVector(line); + memomax = parts[parts.size() - 1]; + bantype = parts[parts.size() - 2]; + parts.erase(parts.end()); + parts.erase(parts.end()); + line.clear(); for (unsigned part = 0, end = parts.size(); part < end; ++part) { @@ -234,7 +260,28 @@ int main(int argc, char *argv[]) line += parts[part]; } } + out << line << std::endl; + if (!lang.empty()) + { + out << "MD LANGUAGE " << lang << std::endl; + lang.clear(); + } + if (!memomax.empty()) + { + out << "MD MEMOMAX " << memomax << std::endl; + memomax.clear(); + } + if (!chancount.empty()) + { + out << "MD CHANCOUNT " << chancount << std::endl; + chancount.clear(); + } + if (!bantype.empty()) + { + out << "MD BANTYPE " << bantype << std::endl; + bantype.clear(); + } } std::cout << "Upgrade complete!" << std::endl; |