diff options
author | Adam <Adam@anope.org> | 2016-09-23 21:11:17 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2016-09-23 21:11:17 -0400 |
commit | 31947b5438cff427066a056ccf172b85ef680932 (patch) | |
tree | 5af727904f80463d01c5cc217ec581c328e4b57d | |
parent | 76175c8c44920ead8c42a87368307780dae7580e (diff) |
operserv/news: rewrite logic, include various fixes from 2.0
-rw-r--r-- | modules/operserv/news.cpp | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/modules/operserv/news.cpp b/modules/operserv/news.cpp index eb977d783..91e5a175a 100644 --- a/modules/operserv/news.cpp +++ b/modules/operserv/news.cpp @@ -378,8 +378,8 @@ class OSNews : public Module CommandOSRandomNews commandosrandomnews; Anope::string oper_announcer, announcer; - unsigned news_count; - unsigned cur_rand_news = 0; + unsigned int news_count; + unsigned int cur_rand_news = 0; void DisplayNews(User *u, NewsType Type) { @@ -401,40 +401,43 @@ class OSNews : public Module else if (Type == NEWS_OPER) msg = _("[\002Oper News\002 - {0}] {1}"); else if (Type == NEWS_RANDOM) - msg = _("[\002Random News\002 - {0}] {1]"); + msg = _("[\002Random News\002 - {0}] {1}"); else return; - unsigned int randnews = 0; - for (NewsItem *n : list) - if (n->GetNewsType() == NEWS_RANDOM) - ++randnews; - - /* Reset to head of list to get first random news value */ - if (Type == NEWS_RANDOM && cur_rand_news >= randnews) - cur_rand_news = 0; + unsigned int start; + unsigned int end; - unsigned i = 0, displayed = 0; - for (NewsItem *n : list) + if (Type == NEWS_RANDOM) { - if (n->GetNewsType() != Type) - continue; + /* Reset to head of list to get first random news value */ + if (cur_rand_news >= list.size()) + cur_rand_news = 0; - if (Type == NEWS_RANDOM && i++ != cur_rand_news) - continue; + /* only show one news entry */ + start = cur_rand_news; + end = cur_rand_news + 1; - u->SendMessage(bi, msg.c_str(), Anope::strftime(n->GetTime(), u->Account(), true), n->GetText()); + ++cur_rand_news; + } + else + { + if (list.size() < news_count) + start = 0; + else + start = list.size() - news_count; - ++displayed; + end = start + news_count; - if (Type == NEWS_RANDOM) - { - ++cur_rand_news; - break; - } + if (end > list.size()) + end = list.size(); + } - if (displayed >= news_count) - break; + for (unsigned int i = start; i < end; ++i) + { + NewsItem *n = list[i]; + + u->SendMessage(bi, msg.c_str(), Anope::strftime(n->GetTime(), u->Account(), true), n->GetText()); } } |