diff options
Diffstat (limited to 'src/memos.cpp')
-rw-r--r-- | src/memos.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/memos.cpp b/src/memos.cpp new file mode 100644 index 000000000..2b221b03a --- /dev/null +++ b/src/memos.cpp @@ -0,0 +1,113 @@ +/* MemoServ functions. + * + * (C) 2003-2012 Anope Team + * Contact us at team@anope.org + * + * Please read COPYING and README for further details. + * + * Based on the original code of Epona by Lara. + * Based on the original code of Services by Andy Church. + * + */ + +#include "services.h" +#include "modules.h" +#include "service.h" +#include "memoserv.h" +#include "memo.h" +#include "users.h" +#include "account.h" +#include "regchannel.h" + +static const Anope::string MemoFlagString[] = { "MF_UNREAD", "MF_RECEIPT", "" }; +template<> const Anope::string* Flags<MemoFlag>::flags_strings = MemoFlagString; + +Memo::Memo() : Serializable("Memo") { } + +Serialize::Data Memo::Serialize() const +{ + Serialize::Data data; + + data["owner"] << this->owner; + data["time"].SetType(Serialize::DT_INT) << this->time; + data["sender"] << this->sender; + data["text"] << this->text; + data["flags"] << this->ToString(); + + return data; +} + +Serializable* Memo::Unserialize(Serializable *obj, Serialize::Data &data) +{ + if (!MemoServService) + return NULL; + + bool ischan; + MemoInfo *mi = MemoServService->GetMemoInfo(data["owner"].astr(), ischan); + if (!mi) + return NULL; + + Memo *m; + if (obj) + m = anope_dynamic_static_cast<Memo *>(obj); + else + m = new Memo(); + data["owner"] >> m->owner; + data["time"] >> m->time; + data["sender"] >> m->sender; + data["text"] >> m->text; + m->FromString(data["flags"].astr()); + + if (obj == NULL) + mi->memos->push_back(m); + return m; +} + +MemoInfo::MemoInfo() : memos("Memo") +{ +} + +Memo *MemoInfo::GetMemo(unsigned index) const +{ + if (index >= this->memos->size()) + return NULL; + Memo *m = (*memos)[index]; + m->QueueUpdate(); + return m; +} + +unsigned MemoInfo::GetIndex(Memo *m) const +{ + for (unsigned i = 0; i < this->memos->size(); ++i) + if (this->GetMemo(i) == m) + return i; + return -1; +} + +void MemoInfo::Del(unsigned index) +{ + if (index >= this->memos->size()) + return; + this->GetMemo(index)->Destroy(); + this->memos->erase(this->memos->begin() + index); +} + +void MemoInfo::Del(Memo *memo) +{ + std::vector<Memo *>::iterator it = std::find(this->memos->begin(), this->memos->end(), memo); + + if (it != this->memos->end()) + { + memo->Destroy(); + this->memos->erase(it); + } +} + +bool MemoInfo::HasIgnore(User *u) +{ + for (unsigned i = 0; i < this->ignores.size(); ++i) + if (u->nick.equals_ci(this->ignores[i]) || (u->Account() && u->Account()->display.equals_ci(this->ignores[i])) || Anope::Match(u->GetMask(), Anope::string(this->ignores[i]))) + return true; + return false; +} + |