summaryrefslogtreecommitdiff
path: root/modules/commands/os_news.cpp
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2014-01-02 10:55:03 -0500
committerAdam <Adam@anope.org>2014-01-02 10:56:57 -0500
commit072202c181943901c727782e64881adadf13d7dd (patch)
tree22d50538ca4b44416aa4a27099d2d89fc7ca9c44 /modules/commands/os_news.cpp
parent595dad4ec17ec127e4865a5167ed6d52e52367b6 (diff)
Have db_old load news.db too
Diffstat (limited to 'modules/commands/os_news.cpp')
-rw-r--r--modules/commands/os_news.cpp43
1 files changed, 41 insertions, 2 deletions
diff --git a/modules/commands/os_news.cpp b/modules/commands/os_news.cpp
index 36a2b9c32..6672e481d 100644
--- a/modules/commands/os_news.cpp
+++ b/modules/commands/os_news.cpp
@@ -59,6 +59,40 @@ struct NewsMessages msgarray[] = {
}
};
+struct MyNewsItem : NewsItem
+{
+ void Serialize(Serialize::Data &data) const anope_override
+ {
+ data["type"] << this->type;
+ data["text"] << this->text;
+ data["who"] << this->who;
+ data["time"] << this->time;
+ }
+
+ static Serializable* Unserialize(Serializable *obj, Serialize::Data &data) anope_override
+ {
+ if (!news_service)
+ return NULL;
+
+ NewsItem *ni;
+ if (obj)
+ ni = anope_dynamic_static_cast<NewsItem *>(obj);
+ else
+ ni = new MyNewsItem();
+
+ unsigned int t;
+ data["type"] >> t;
+ ni->type = static_cast<NewsType>(t);
+ data["text"] >> ni->text;
+ data["who"] >> ni->who;
+ data["time"] >> ni->time;
+
+ if (!obj)
+ news_service->AddNewsItem(ni);
+ return ni;
+ }
+};
+
class MyNewsService : public NewsService
{
std::vector<NewsItem *> newsItems[3];
@@ -72,6 +106,11 @@ class MyNewsService : public NewsService
delete newsItems[i][j];
}
+ NewsItem *CreateNewsItem() anope_override
+ {
+ return new MyNewsItem();
+ }
+
void AddNewsItem(NewsItem *n)
{
this->newsItems[n->type].push_back(n);
@@ -151,7 +190,7 @@ class NewsBase : public Command
if (Anope::ReadOnly)
source.Reply(READ_ONLY_MODE);
- NewsItem *news = new NewsItem();
+ NewsItem *news = new MyNewsItem();
news->type = ntype;
news->text = text;
news->time = Anope::CurTime;
@@ -390,7 +429,7 @@ class OSNews : public Module
public:
OSNews(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR),
- newsservice(this), newsitem_type("NewsItem", NewsItem::Unserialize),
+ newsservice(this), newsitem_type("NewsItem", MyNewsItem::Unserialize),
commandoslogonnews(this), commandosopernews(this), commandosrandomnews(this)
{
}