+ ClientProtocol::MessageTagEvent tagevent;
+
+ void AddTag(ClientProtocol::Message& msg, const std::string& tagkey, std::string& tagval)
+ {
+ const Events::ModuleEventProvider::SubscriberList& list = tagevent.GetSubscribers();
+ for (Events::ModuleEventProvider::SubscriberList::const_iterator i = list.begin(); i != list.end(); ++i)
+ {
+ ClientProtocol::MessageTagProvider* const tagprov = static_cast<ClientProtocol::MessageTagProvider*>(*i);
+ const ModResult res = tagprov->OnProcessTag(ServerInstance->FakeClient, tagkey, tagval);
+ if (res == MOD_RES_ALLOW)
+ msg.AddTag(tagkey, tagprov, tagval);
+ else if (res == MOD_RES_DENY)
+ break;
+ }
+ }
+
+ void SendHistory(LocalUser* user, Channel* channel, HistoryList* list, time_t mintime)
+ {
+ if (batchmanager)
+ {
+ batchmanager->Start(batch);
+ batch.GetBatchStartMessage().PushParamRef(channel->name);
+ }
+
+ for(std::deque<HistoryItem>::iterator i = list->lines.begin(); i != list->lines.end(); ++i)
+ {
+ HistoryItem& item = *i;
+ if (item.ts >= mintime)
+ {
+ ClientProtocol::Messages::Privmsg msg(ClientProtocol::Messages::Privmsg::nocopy, item.sourcemask, channel, item.text, item.type);
+ for (HistoryTagMap::iterator iter = item.tags.begin(); iter != item.tags.end(); ++iter)
+ AddTag(msg, iter->first, iter->second);
+ if (servertimemanager)
+ servertimemanager->Set(msg, item.ts);
+ batch.AddToBatch(msg);
+ user->Send(ServerInstance->GetRFCEvents().privmsg, msg);
+ }
+ }
+
+ if (batchmanager)
+ batchmanager->End(batch);
+ }