diff options
author | Adam <Adam@anope.org> | 2014-01-02 10:55:03 -0500 |
---|---|---|
committer | Adam <Adam@anope.org> | 2014-01-02 10:56:57 -0500 |
commit | 072202c181943901c727782e64881adadf13d7dd (patch) | |
tree | 22d50538ca4b44416aa4a27099d2d89fc7ca9c44 /modules/commands/os_news.cpp | |
parent | 595dad4ec17ec127e4865a5167ed6d52e52367b6 (diff) |
Have db_old load news.db too
Diffstat (limited to 'modules/commands/os_news.cpp')
-rw-r--r-- | modules/commands/os_news.cpp | 43 |
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) { } |