static std::string permchannelsconf;
static bool WriteDatabase(PermChannel& permchanmode, Module* mod, bool save_listmodes)
{
- ChanModeReference ban(mod, "ban");
/*
* We need to perform an atomic write so as not to fuck things up.
* So, let's write to a temporary file, flush it, then rename the file..
return true;
}
-class ModulePermanentChannels : public Module
+class ModulePermanentChannels
+ : public Module
+ , public Timer
+
{
PermChannel p;
bool dirty;
public:
ModulePermanentChannels()
- : p(this), dirty(false), loaded(false)
+ : Timer(0, true)
+ , p(this)
+ , dirty(false)
+ , loaded(false)
{
}
ConfigTag* tag = ServerInstance->Config->ConfValue("permchanneldb");
permchannelsconf = tag->getString("filename");
save_listmodes = tag->getBool("listmodes");
+ SetInterval(tag->getDuration("saveperiod", 5));
if (!permchannelsconf.empty())
permchannelsconf = ServerInstance->Config->Paths.PrependConfig(permchannelsconf);
std::string channel = tag->getString("channel");
std::string modes = tag->getString("modes");
- if ((channel.empty()) || (channel.length() > ServerInstance->Config->Limits.ChanMax))
+ if (!ServerInstance->IsChannel(channel))
{
- ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Ignoring permchannels tag with empty or too long channel name (\"" + channel + "\")");
+ ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Ignoring permchannels tag with invalid channel name (\"" + channel + "\")");
continue;
}
time_t TS = tag->getInt("ts", ServerInstance->Time(), 1);
c = new Channel(channel, TS);
- unsigned int topicset = tag->getInt("topicts", 0);
+ time_t topicset = tag->getInt("topicts", 0);
std::string topic = tag->getString("topic");
if ((topicset != 0) || (!topic.empty()))
dirty = true;
}
- void OnBackgroundTimer(time_t) CXX11_OVERRIDE
+ bool Tick(time_t) CXX11_OVERRIDE
{
if (dirty)
WriteDatabase(p, this, save_listmodes);
dirty = false;
+ return true;
}
void Prioritize() CXX11_OVERRIDE
Version GetVersion() CXX11_OVERRIDE
{
- return Version("Provides support for channel mode +P to provide permanent channels",VF_VENDOR);
+ return Version("Provides channel mode +P to provide permanent channels", VF_VENDOR);
}
ModResult OnChannelPreDelete(Channel *c) CXX11_OVERRIDE