summaryrefslogtreecommitdiff
path: root/src/memos.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/memos.cpp')
-rw-r--r--src/memos.cpp53
1 files changed, 35 insertions, 18 deletions
diff --git a/src/memos.cpp b/src/memos.cpp
index eb4d22107..1f8b00fff 100644
--- a/src/memos.cpp
+++ b/src/memos.cpp
@@ -24,6 +24,19 @@ Memo::Memo() : Serializable("Memo")
unread = receipt = false;
}
+Memo::~Memo()
+{
+ bool ischan;
+ MemoInfo *mi = MemoInfo::GetMemoInfo(this->owner, ischan);
+ if (mi)
+ {
+ std::vector<Memo *>::iterator it = std::find(mi->memos->begin(), mi->memos->end(), this);
+
+ if (it != mi->memos->end())
+ mi->memos->erase(it);
+ }
+}
+
void Memo::Serialize(Serialize::Data &data) const
{
data["owner"] << this->owner;
@@ -36,16 +49,12 @@ void Memo::Serialize(Serialize::Data &data) const
Serializable* Memo::Unserialize(Serializable *obj, Serialize::Data &data)
{
- ServiceReference<MemoServService> MemoServService("MemoServService", "MemoServ");
- if (!MemoServService)
- return NULL;
-
Anope::string owner;
data["owner"] >> owner;
bool ischan;
- MemoInfo *mi = MemoServService->GetMemoInfo(owner, ischan);
+ MemoInfo *mi = MemoInfo::GetMemoInfo(owner, ischan);
if (!mi)
return NULL;
@@ -55,7 +64,7 @@ Serializable* Memo::Unserialize(Serializable *obj, Serialize::Data &data)
else
m = new Memo();
- data["owner"] >> m->owner;
+ m->owner = owner;
data["time"] >> m->time;
data["sender"] >> m->sender;
data["text"] >> m->text;
@@ -93,18 +102,6 @@ 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)
@@ -115,3 +112,23 @@ bool MemoInfo::HasIgnore(User *u)
return false;
}
+MemoInfo *MemoInfo::GetMemoInfo(const Anope::string &target, bool &ischan)
+{
+ if (!target.empty() && target[0] == '#')
+ {
+ ischan = true;
+ ChannelInfo *ci = ChannelInfo::Find(target);
+ if (ci != NULL)
+ return &ci->memos;
+ }
+ else
+ {
+ ischan = false;
+ NickAlias *na = NickAlias::Find(target);
+ if (na != NULL)
+ return &na->nc->memos;
+ }
+
+ return NULL;
+}
+