summaryrefslogtreecommitdiff
path: root/modules/commands/cs_flags.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'modules/commands/cs_flags.cpp')
-rw-r--r--modules/commands/cs_flags.cpp39
1 files changed, 38 insertions, 1 deletions
diff --git a/modules/commands/cs_flags.cpp b/modules/commands/cs_flags.cpp
index 5ead6f2d9..1b790b5f1 100644
--- a/modules/commands/cs_flags.cpp
+++ b/modules/commands/cs_flags.cpp
@@ -15,7 +15,7 @@
static std::map<Anope::string, char> defaultFlags;
-class FlagsChanAccess : public ChanAccess
+class FlagsChanAccess : public ChanAccess, public Serializable<FlagsChanAccess>
{
public:
std::set<char> flags;
@@ -65,6 +65,41 @@ class FlagsChanAccess : public ChanAccess
return Anope::string(buffer.begin(), buffer.end());
}
+
+ Anope::string serialize_name() { return "FlagsChanAccess"; }
+ serialized_data serialize()
+ {
+ serialized_data data;
+
+ data["provider"] << this->provider->name;
+ data["ci"] << this->ci->name;
+ data["mask"] << this->mask;
+ data["creator"] << this->creator;
+ data["last_seen"].setType(Serialize::DT_INT) << this->last_seen;
+ data["created"].setType(Serialize::DT_INT) << this->created;
+ data["flags"] << this->Serialize();
+
+ return data;
+ }
+
+ static void unserialize(SerializableBase::serialized_data &data)
+ {
+ service_reference<AccessProvider> aprovider(data["provider"].astr());
+ ChannelInfo *ci = cs_findchan(data["ci"].astr());
+ if (!aprovider || !ci)
+ return;
+
+ FlagsChanAccess *access = new FlagsChanAccess(aprovider);
+ access->provider = aprovider;
+ access->ci = ci;
+ data["mask"] >> access->mask;
+ data["creator"] >> access->creator;
+ data["last_seen"] >> access->last_seen;
+ data["created"] >> access->created;
+ access->Unserialize(data["flags"].astr());
+
+ ci->AddAccess(access);
+ }
};
class FlagsAccessProvider : public AccessProvider
@@ -385,6 +420,8 @@ class CSFlags : public Module
ModuleManager::Attach(i, this, 1);
this->OnReload();
+
+ Serializable<FlagsChanAccess>::Alloc.Register("FlagsChanAccess");
}
void OnReload()