1. The style

    I was contemplating a plaintext file, so anything beyond is "fancy". Don't bother me with CSS or images etc.
  2. Abstract

    This isn't a paper, but all the same...
    I use ArchLinux for most my stuff. Without a GUI. I use ssh + screen. I like text-based interfaces. A lot. I also like consolidating multiple programs into one and multiple screen-windows into one.
    My IRC client (irssi) lets me chat on IRC. It also, with the help of Bitlbee, allows me to chat on IM (all protocols). After all, IRC has PM (private messages) which, from the user side, are identical to IMs.
    IRC is also a live stream of information. (See IRChighway's #WootOff during a Woot.com WootOff - bot by me.) Which is more or less what RSS is. So I decided to write something that will let me watch RSS in my IRC client. (note: rsstail is interesting and along these lines, minus the irc client - "what tail does, but for rss".) Debating between a standalone IRC bot and an irssi plugin, I decided to write a standalone module and then do the irssi plugin. (Making a bot should be trivial by reusing the code.)
    My current RSS reader is newsbeuter, and I love it. And this will not replace it. This just adds another channel of infomation to my IRC client.
    The rest of this page will discuss my idea for my module(s) and plugin, in an attempt to help clarify my ideas to myself and maybe even garner some feedback! (yitz_ on FreeNode)
  3. RSS::FeedManager

    I got no idea how the naming of modules work; I am going to have to determine if that is a valid name.
    This module is essentially the RSS client. It contains and manages multiple feeds, allowing you to refresh their data, add/remove/filter feeds and otherwise control what is going on. This is what you create an instance of and you bind irssi commands to its methods.
    Feature/Function list:

      General Feed Control

    • addFeed

      Takes a list of items which can be scalars or hash refs. Scalars are feed URLs and a hash ref will have to contain a URL and may contain an array ref of tags as well as a custom title for the feed.
    • deleteFeed

      Takes...? url or id?
    • refresh item/all

      Download the RSS file and parse.
    • getNewItems item/all

      Returns a list of items from the read not yet read
    • getOldItems item/all

      Returns a list of items still in the RSS feed that are already read.
    • markAllOld item/all

    • getFeedItem

      For access to stuff not made available directly
    • filter(tag list)

      Set enable/disable based on a tag list
    • new()

      Pass it stuff to pass to addFeed()
  4. RSS::FeedManager::FeedItem

    This would have the RSS feed itself and all related info and calls.
    • new( url[, customTitle] )

    • refresh()

      Downloads new items. Returns success/fail.
    • newItems()

      Returns a list of items not yet read as... some RSS Item object. Marks all read.
    • oldItems()

      Returns a list of items in the feed that have been read already.
    • markAllRead()

    • info()

      Creation date, last refresh, RSS info from feed, custom title, tags
    • getTags()

      Returns a list
    • setTags()

      Takes a list. Overwrites old values.
    • hasTag()

      Takes a list. Returns if one tag matches it.
    • setEnabled()

      Can disable the refresh() with this, making it do nothing.