summaryrefslogtreecommitdiff
path: root/modules/memoserv
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2016-07-28 21:29:35 -0400
committerAdam <Adam@anope.org>2016-07-28 21:29:35 -0400
commit0e758a2ac23dc4a001e8e126cec14588da9a9769 (patch)
tree45df813323e023c5c89db7279426c4ad0943b4a9 /modules/memoserv
parenta3c8afae00c54d5b95c620248b51f90679d7d53f (diff)
Allow serializable fields to use storage in the respective objects.
Split service management code nito a proper servicemanager. Make service references managed instead of lazy lookup. Also made events and serializable use service manager instead of their respective systems for management
Diffstat (limited to 'modules/memoserv')
-rw-r--r--modules/memoserv/cancel.cpp5
-rw-r--r--modules/memoserv/del.cpp9
-rw-r--r--modules/memoserv/ignore.cpp4
-rw-r--r--modules/memoserv/main/ignore.h5
-rw-r--r--modules/memoserv/main/ignoretype.cpp6
-rw-r--r--modules/memoserv/main/memo.h9
-rw-r--r--modules/memoserv/main/memoinfo.cpp4
-rw-r--r--modules/memoserv/main/memoinfo.h5
-rw-r--r--modules/memoserv/main/memoinfotype.cpp6
-rw-r--r--modules/memoserv/main/memoserv.cpp49
-rw-r--r--modules/memoserv/main/memotype.cpp14
-rw-r--r--modules/memoserv/rsend.cpp3
-rw-r--r--modules/memoserv/set.cpp10
13 files changed, 67 insertions, 62 deletions
diff --git a/modules/memoserv/cancel.cpp b/modules/memoserv/cancel.cpp
index e3da82581..fe61fe18c 100644
--- a/modules/memoserv/cancel.cpp
+++ b/modules/memoserv/cancel.cpp
@@ -32,7 +32,7 @@ class CommandMSCancel : public Command
const Anope::string &nname = params[0];
bool ischan, isregistered;
- MemoServ::MemoInfo *mi = MemoServ::service->GetMemoInfo(name, ischan, isregistered, false);
+ MemoServ::MemoInfo *mi = MemoServ::service->GetMemoInfo(nname, ischan, isregistered, false);
if (!isregistered)
{
@@ -57,8 +57,7 @@ class CommandMSCancel : public Command
MemoServ::Memo *m = memos[i];
if (m->GetUnread() && source.nc->GetDisplay().equals_ci(m->GetSender()))
{
- if (MemoServ::Event::OnMemoDel)
- MemoServ::Event::OnMemoDel(&MemoServ::Event::MemoDel::OnMemoDel, ischan ? ci->GetName() : na->GetAccount()->GetDisplay(), mi, m);
+ EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ischan ? ci->GetName() : na->GetAccount()->GetDisplay(), mi, m);
mi->Del(i);
source.Reply(_("Your last memo to \002{0}\002 has been cancelled."), nname);
return;
diff --git a/modules/memoserv/del.cpp b/modules/memoserv/del.cpp
index 79af11adc..dffa3c8cd 100644
--- a/modules/memoserv/del.cpp
+++ b/modules/memoserv/del.cpp
@@ -81,8 +81,7 @@ class CommandMSDel : public Command
if (!number || number > memos.size())
return;
- if (MemoServ::Event::OnMemoDel)
- MemoServ::Event::OnMemoDel(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, mi->GetMemo(number - 1));
+ EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, mi->GetMemo(number - 1));
mi->Del(number - 1);
source.Reply(_("Memo \002{0}\002 has been deleted."), number);
@@ -92,8 +91,7 @@ class CommandMSDel : public Command
else if (numstr.equals_ci("LAST"))
{
/* Delete last memo. */
- if (MemoServ::Event::OnMemoDel)
- MemoServ::Event::OnMemoDel(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, mi->GetMemo(memos.size() - 1));
+ EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, mi->GetMemo(memos.size() - 1));
mi->Del(memos.size() - 1);
source.Reply(_("Memo \002{0}\002 has been deleted."), memos.size() + 1);
}
@@ -103,8 +101,7 @@ class CommandMSDel : public Command
std::for_each(memos.begin(), memos.end(),
[&](MemoServ::Memo *m)
{
- if (MemoServ::Event::OnMemoDel)
- MemoServ::Event::OnMemoDel(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, m);
+ EventManager::Get()->Dispatch(&MemoServ::Event::MemoDel::OnMemoDel, ci ? ci->GetName() : source.nc->GetDisplay(), mi, m);
delete m;
});
if (!chan.empty())
diff --git a/modules/memoserv/ignore.cpp b/modules/memoserv/ignore.cpp
index c454444ea..7dad842cf 100644
--- a/modules/memoserv/ignore.cpp
+++ b/modules/memoserv/ignore.cpp
@@ -66,7 +66,7 @@ class CommandMSIgnore : public Command
if (command.equals_ci("ADD") && !param.empty())
{
- if (ignores.size() >= Config->GetModule(this->owner)->Get<unsigned>("max", "32"))
+ if (ignores.size() >= Config->GetModule(this->GetOwner())->Get<unsigned>("max", "32"))
{
source.Reply(_("Sorry, the memo ignore list for \002{0}\002 is full."), channel);
return;
@@ -79,7 +79,7 @@ class CommandMSIgnore : public Command
return;
}
- MemoServ::Ignore *ign = MemoServ::service->CreateIgnore();
+ MemoServ::Ignore *ign = Serialize::New<MemoServ::Ignore *>();
ign->SetMemoInfo(mi);
ign->SetMask(param);
diff --git a/modules/memoserv/main/ignore.h b/modules/memoserv/main/ignore.h
index c98b44adf..0147cc2be 100644
--- a/modules/memoserv/main/ignore.h
+++ b/modules/memoserv/main/ignore.h
@@ -2,6 +2,11 @@
class IgnoreImpl : public MemoServ::Ignore
{
+ friend class IgnoreType;
+
+ MemoServ::MemoInfo *memoinfo = nullptr;
+ Anope::string mask;
+
public:
IgnoreImpl(Serialize::TypeBase *type) : MemoServ::Ignore(type) { }
IgnoreImpl(Serialize::TypeBase *type, Serialize::ID id) : MemoServ::Ignore(type, id) { }
diff --git a/modules/memoserv/main/ignoretype.cpp b/modules/memoserv/main/ignoretype.cpp
index 375f83272..015925b5f 100644
--- a/modules/memoserv/main/ignoretype.cpp
+++ b/modules/memoserv/main/ignoretype.cpp
@@ -1,9 +1,9 @@
#include "module.h"
#include "ignoretype.h"
-IgnoreType::IgnoreType(Module *me) : Serialize::Type<IgnoreImpl>(me, "MemoIgnore")
- , mi(this, "mi", true)
- , mask(this, "mask")
+IgnoreType::IgnoreType(Module *me) : Serialize::Type<IgnoreImpl>(me)
+ , mi(this, "mi", &IgnoreImpl::memoinfo, true)
+ , mask(this, "mask", &IgnoreImpl::mask)
{
}
diff --git a/modules/memoserv/main/memo.h b/modules/memoserv/main/memo.h
index 1a230c1e9..c0000259a 100644
--- a/modules/memoserv/main/memo.h
+++ b/modules/memoserv/main/memo.h
@@ -2,11 +2,16 @@
class MemoImpl : public MemoServ::Memo
{
+ friend class MemoType;
+
+ MemoServ::MemoInfo *memoinfo = nullptr;
+ Anope::string text, sender;
+ time_t time = 0;
+ bool unread = false, receipt = false;
+
public:
MemoImpl(Serialize::TypeBase *type) : MemoServ::Memo(type) { }
MemoImpl(Serialize::TypeBase *type, Serialize::ID id) : MemoServ::Memo(type, id) { }
- //using MemoServ::Memo::Memo;
-// MemoImpl();
~MemoImpl();
MemoServ::MemoInfo *GetMemoInfo() override;
diff --git a/modules/memoserv/main/memoinfo.cpp b/modules/memoserv/main/memoinfo.cpp
index 45d95533e..5f3b4cccc 100644
--- a/modules/memoserv/main/memoinfo.cpp
+++ b/modules/memoserv/main/memoinfo.cpp
@@ -53,11 +53,11 @@ void MemoInfoImpl::SetMemoMax(const int16_t &i)
std::vector<MemoServ::Memo *> MemoInfoImpl::GetMemos()
{
- return GetRefs<MemoServ::Memo *>(MemoServ::memo);
+ return GetRefs<MemoServ::Memo *>();
}
std::vector<MemoServ::Ignore *> MemoInfoImpl::GetIgnores()
{
- return GetRefs<MemoServ::Ignore *>(MemoServ::ignore);
+ return GetRefs<MemoServ::Ignore *>();
}
diff --git a/modules/memoserv/main/memoinfo.h b/modules/memoserv/main/memoinfo.h
index 22ea0734f..42f5483ac 100644
--- a/modules/memoserv/main/memoinfo.h
+++ b/modules/memoserv/main/memoinfo.h
@@ -2,6 +2,11 @@
class MemoInfoImpl : public MemoServ::MemoInfo
{
+ friend class MemoInfoType;
+
+ Serialize::Object *owner = nullptr;
+ int16_t memomax = 0;
+
public:
MemoInfoImpl(Serialize::TypeBase *type) : MemoServ::MemoInfo(type) { }
MemoInfoImpl(Serialize::TypeBase *type, Serialize::ID id) : MemoServ::MemoInfo(type, id) { }
diff --git a/modules/memoserv/main/memoinfotype.cpp b/modules/memoserv/main/memoinfotype.cpp
index 7eb3af72c..ff387e883 100644
--- a/modules/memoserv/main/memoinfotype.cpp
+++ b/modules/memoserv/main/memoinfotype.cpp
@@ -1,9 +1,9 @@
#include "module.h"
#include "memoinfotype.h"
-MemoInfoType::MemoInfoType(Module *me) : Serialize::Type<MemoInfoImpl>(me, "MemoInfo")
- , owner(this, "owner", true)
- , memomax(this, "memomax")
+MemoInfoType::MemoInfoType(Module *me) : Serialize::Type<MemoInfoImpl>(me)
+ , owner(this, "owner", &MemoInfoImpl::owner, true)
+ , memomax(this, "memomax", &MemoInfoImpl::memomax)
{
}
diff --git a/modules/memoserv/main/memoserv.cpp b/modules/memoserv/main/memoserv.cpp
index ed3939ef7..79344b25e 100644
--- a/modules/memoserv/main/memoserv.cpp
+++ b/modules/memoserv/main/memoserv.cpp
@@ -14,16 +14,13 @@
#include "modules/help.h"
#include "modules/botserv/bot.h"
#include "modules/memoserv.h"
-//#include "memoinfo.h"
-//#include "memo.h"
-//#include "ignore.h"
#include "memotype.h"
#include "memoinfotype.h"
#include "ignoretype.h"
class MemoServCore : public Module, public MemoServ::MemoServService
- , public EventHook<Event::NickCoreCreate>
- , public EventHook<Event::CreateChan>
+ , public EventHook<NickServ::Event::NickRegister>
+ , public EventHook<Event::ChanRegistered>
, public EventHook<Event::BotDelete>
, public EventHook<Event::NickIdentify>
, public EventHook<Event::JoinChannel>
@@ -32,8 +29,6 @@ class MemoServCore : public Module, public MemoServ::MemoServService
, public EventHook<Event::Help>
{
Reference<ServiceBot> MemoServ;
- EventHandlers<MemoServ::Event::MemoSend> onmemosend;
- EventHandlers<MemoServ::Event::MemoDel> onmemodel;
MemoInfoType memoinfo_type;
MemoType memo_type;
@@ -62,8 +57,16 @@ class MemoServCore : public Module, public MemoServ::MemoServService
public:
MemoServCore(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, PSEUDOCLIENT | VENDOR)
, MemoServ::MemoServService(this)
- , onmemosend(this)
- , onmemodel(this)
+
+ , EventHook<NickServ::Event::NickRegister>(this)
+ , EventHook<Event::ChanRegistered>(this)
+ , EventHook<Event::BotDelete>(this)
+ , EventHook<Event::NickIdentify>(this)
+ , EventHook<Event::JoinChannel>(this)
+ , EventHook<Event::UserAway>(this)
+ , EventHook<Event::NickUpdate>(this)
+ , EventHook<Event::Help>(this)
+
, memoinfo_type(this)
, memo_type(this)
, ignore_type(this)
@@ -95,14 +98,14 @@ class MemoServCore : public Module, public MemoServ::MemoServService
if (sender != NULL)
sender->lastmemosend = Anope::CurTime;
- MemoServ::Memo *m = new MemoImpl(&memo_type);
+ MemoServ::Memo *m = Serialize::New<MemoServ::Memo *>();
m->SetMemoInfo(mi);
m->SetSender(source);
m->SetTime(Anope::CurTime);
m->SetText(message);
m->SetUnread(true);
- this->onmemosend(&MemoServ::Event::MemoSend::OnMemoSend, source, target, mi, m);
+ EventManager::Get()->Dispatch(&MemoServ::Event::MemoSend::OnMemoSend, source, target, mi, m);
if (ischan)
{
@@ -160,16 +163,6 @@ class MemoServCore : public Module, public MemoServ::MemoServService
}
}
- MemoServ::Memo *CreateMemo() override
- {
- return new MemoImpl(&memo_type);
- }
-
- MemoServ::Ignore *CreateIgnore() override
- {
- return new IgnoreImpl(&ignore_type);
- }
-
MemoServ::MemoInfo *GetMemoInfo(const Anope::string &target, bool &is_registered, bool &ischan, bool create) override
{
if (!target.empty() && target[0] == '#')
@@ -181,7 +174,7 @@ class MemoServCore : public Module, public MemoServ::MemoServService
is_registered = true;
if (create && !ci->GetMemos())
{
- MemoServ::MemoInfo *mi = new MemoInfoImpl(&memoinfo_type);
+ MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
mi->SetOwner(ci);
}
return ci->GetMemos();
@@ -198,7 +191,7 @@ class MemoServCore : public Module, public MemoServ::MemoServService
is_registered = true;
if (create && !na->GetAccount()->GetMemos())
{
- MemoServ::MemoInfo *mi = new MemoInfoImpl(&memoinfo_type);
+ MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
mi->SetOwner(na->GetAccount());
}
return na->GetAccount()->GetMemos();
@@ -224,16 +217,16 @@ class MemoServCore : public Module, public MemoServ::MemoServService
MemoServ = bi;
}
- void OnNickCoreCreate(NickServ::Account *nc) override
+ void OnNickRegister(User *, NickServ::Nick *na, const Anope::string &) override
{
- MemoServ::MemoInfo *mi = new MemoInfoImpl(&memoinfo_type);
- mi->SetOwner(mi);
+ MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
+ mi->SetOwner(na->GetAccount());
mi->SetMemoMax(Config->GetModule(this)->Get<int>("maxmemos"));
}
- void OnCreateChan(ChanServ::Channel *ci) override
+ void OnChanRegistered(ChanServ::Channel *ci) override
{
- MemoServ::MemoInfo *mi = new MemoInfoImpl(&memoinfo_type);
+ MemoServ::MemoInfo *mi = Serialize::New<MemoServ::MemoInfo *>();
mi->SetOwner(ci);
mi->SetMemoMax(Config->GetModule(this)->Get<int>("maxmemos"));
}
diff --git a/modules/memoserv/main/memotype.cpp b/modules/memoserv/main/memotype.cpp
index c9144bbaa..57cf3ba31 100644
--- a/modules/memoserv/main/memotype.cpp
+++ b/modules/memoserv/main/memotype.cpp
@@ -1,13 +1,13 @@
#include "module.h"
#include "memotype.h"
-MemoType::MemoType(Module *me) : Serialize::Type<MemoImpl>(me, "Memo")
- , mi(this, "mi", true)
- , time(this, "time")
- , sender(this, "sender")
- , text(this, "text")
- , unread(this, "unread")
- , receipt(this, "receipt")
+MemoType::MemoType(Module *me) : Serialize::Type<MemoImpl>(me)
+ , mi(this, "mi", &MemoImpl::memoinfo, true)
+ , time(this, "time", &MemoImpl::time)
+ , sender(this, "sender", &MemoImpl::sender)
+ , text(this, "text", &MemoImpl::text)
+ , unread(this, "unread", &MemoImpl::unread)
+ , receipt(this, "receipt", &MemoImpl::receipt)
{
}
diff --git a/modules/memoserv/rsend.cpp b/modules/memoserv/rsend.cpp
index 16f6105fa..887c87cc6 100644
--- a/modules/memoserv/rsend.cpp
+++ b/modules/memoserv/rsend.cpp
@@ -23,6 +23,7 @@ class CommandMSRSend : public Command
void Execute(CommandSource &source, const std::vector<Anope::string> &params) override
{
+#warning "this is completely disabled"
#if 0
if (!MemoServ::service)
return;
@@ -44,7 +45,7 @@ class CommandMSRSend : public Command
return;
}
- if (Config->GetModule(this->owner)->Get<bool>("operonly") && !source.IsServicesOper())
+ if (Config->GetModule(this->GetOwner())->Get<bool>("operonly") && !source.IsServicesOper())
source.Reply(_("Access denied. This command is for operators only."));
else
{
diff --git a/modules/memoserv/set.cpp b/modules/memoserv/set.cpp
index c924d0ea0..361ebeba3 100644
--- a/modules/memoserv/set.cpp
+++ b/modules/memoserv/set.cpp
@@ -301,11 +301,11 @@ class MSSet : public Module
public:
MSSet(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR)
, commandmsset(this)
- , memo_signon(this, NickServ::account, "MEMO_SIGNON")
- , memo_receive(this, NickServ::account, "MEMO_RECEIVE")
- , memo_mail(this, NickServ::account, "MEMO_MAIL")
- , memo_hardmax_nick(this, NickServ::account, "MEMO_HARDMAX")
- , memo_hardmax_channel(this, ChanServ::channel, "MEMO_HARDMAX")
+ , memo_signon(this, "MEMO_SIGNON")
+ , memo_receive(this, "MEMO_RECEIVE")
+ , memo_mail(this, "MEMO_MAIL")
+ , memo_hardmax_nick(this, "MEMO_HARDMAX")
+ , memo_hardmax_channel(this, "MEMO_HARDMAX")
{
}