]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/coremods/core_channel/invite.cpp
Fix overriding <options:exemptchanops> with the exemptchanops mode.
[user/henk/code/inspircd.git] / src / coremods / core_channel / invite.cpp
index 253c571caf60e212c9e6e87fe408599deb315607..51fb638f8e308d4c321a19068fe06c22cb7d1607 100644 (file)
@@ -38,6 +38,11 @@ void RemoveInvite(Invite::Invite* inv, bool remove_user, bool remove_chan)
        apiimpl->Destruct(inv, remove_user, remove_chan);
 }
 
+void UnserializeInvite(LocalUser* user, const std::string& str)
+{
+       apiimpl->Unserialize(user, str);
+}
+
 Invite::APIBase::APIBase(Module* parent)
        : DataProvider(parent, "core_channel_invite")
 {
@@ -150,6 +155,17 @@ const Invite::List* Invite::APIImpl::GetList(LocalUser* user)
        return NULL;
 }
 
+void Invite::APIImpl::Unserialize(LocalUser* user, const std::string& value)
+{
+       irc::spacesepstream ss(value);
+       for (std::string channame, exptime; (ss.GetToken(channame) && ss.GetToken(exptime)); )
+       {
+               Channel* chan = ServerInstance->FindChan(channame);
+               if (chan)
+                       Create(user, chan, ConvToNum<time_t>(exptime));
+       }
+}
+
 Invite::Invite::Invite(LocalUser* u, Channel* c)
        : user(u)
        , chan(c)
@@ -163,6 +179,21 @@ Invite::Invite::~Invite()
        ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Invite::~ %p", (void*) this);
 }
 
+void Invite::Invite::Serialize(SerializeFormat format, bool show_chans, std::string& out)
+{
+       if (show_chans)
+               out.append(this->chan->name);
+       else
+               out.append((format == FORMAT_USER) ? user->nick : user->uuid);
+       out.push_back(' ');
+
+       if (expiretimer)
+               out.append(ConvToStr(expiretimer->GetTrigger()));
+       else
+               out.push_back('0');
+       out.push_back(' ');
+}
+
 InviteExpireTimer::InviteExpireTimer(Invite::Invite* invite, time_t timeout)
        : Timer(timeout)
        , inv(invite)