Skip to content

Commit

Permalink
Add --random flag for 'rss' command
Browse files Browse the repository at this point in the history
  • Loading branch information
ssdaniel24 authored Dec 7, 2024
1 parent 941d312 commit 993cb23
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 5 deletions.
20 changes: 15 additions & 5 deletions plugins/RSS/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import time
import types
import string
import random
import socket
import threading
import feedparser
Expand Down Expand Up @@ -170,6 +171,9 @@ def sort_feed_items(items, order):
"""Return feed items, sorted according to sortFeedItems."""
if order == 'asInFeed':
return items
elif order == 'random':
random.shuffle(items)
return items
(key, reverse) = _sort_arguments(order)
try:
sitems = sorted(items, key=key, reverse=reverse)
Expand Down Expand Up @@ -695,11 +699,12 @@ def channels(self, irc, msg, args, feed):
channels = wrap(channels, ['feedName'])

@internationalizeDocstring
def rss(self, irc, msg, args, url, n):
"""<name|url> [<number of headlines>]
def rss(self, irc, msg, args, optlist, url, n):
"""[--random] <name|url> [<number of headlines>]
Gets the title components of the given RSS feed.
If <number of headlines> is given, return only that many headlines.
Use --random flag for random sorting of entries.
"""
self.log.debug('Fetching %u', url)
try:
Expand All @@ -719,17 +724,22 @@ def rss(self, irc, msg, args, url, n):
s += str(feed.last_exception)
irc.error(s)
return
n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network)
entries = list(filter(lambda e:self.should_send_entry(irc.network, channel, e),
feed.entries))
entries = sort_feed_items(entries, 'newestFirst')
order = 'newestFirst'
if 'random' in (k for k,v in optlist):
order = 'random'
entries = sort_feed_items(entries, order)
n = n or self.registryValue('defaultNumberOfHeadlines', channel, irc.network)
entries = entries[:n]
entries = sort_feed_items(entries, self.registryValue('sortFeedItems'))
headlines = map(lambda e:self.format_entry(irc.network, channel, feed, e, False),
entries)
sep = self.registryValue('headlineSeparator', channel, irc.network)
irc.replies(headlines, joiner=sep)
rss = wrap(rss, [first('url', 'feedName'), additional('int')])
rss = wrap(rss, [getopts({ 'random': '', }),
first('url', 'feedName'),
additional('int')])

@internationalizeDocstring
def info(self, irc, msg, args, url):
Expand Down
6 changes: 6 additions & 0 deletions plugins/RSS/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -571,6 +571,12 @@ def testRss(self):
m = self.assertNotError('rss %s 2' % url)
self.assertEqual(m.args[1].count(' | '), 1)

def testRssRandom(self):
timeFastForward(1.1)
self.assertNotError('rss --random %s' % url)
m = self.assertNotError('rss --random %s 2' % url)
self.assertEqual(m.args[1].count(' | '), 1)

def testRssAdd(self):
timeFastForward(1.1)
self.assertNotError('rss add advogato %s' % url)
Expand Down

0 comments on commit 993cb23

Please sign in to comment.