mirror of
https://github.com/anope/anope.git
synced 2026-06-27 04:46:37 +02:00
mysql_insert_id doesn't return an id if one isnt generated, so
check that it really returns a value before using it. Also fix memos to cleanup after themselves when deleted.
This commit is contained in:
+35
-18
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user