summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/core/db_plain.cpp59
-rw-r--r--src/tools/db-upgrade.cpp47
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> &params)
/* 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> &params)
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> &params)
{
- 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> &params)
{
- 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;