Although easy to store on the web , and easy to use to share your feed list, OPML Reading Lists need new features including server-side, stored, state information and access to a networked valueHolder object type version of readingList state. A reading list user would then be able to seamlessly use any instance of any feedReading client to pick up the feeds encapsulated by specific list exactly where that specific user last left the list. Lets say that there are 50 new feed items belonging to 10 of my ReadingList’s URLs in the morning. On my laptop at home, i manage to read 10 . Then, in my car on the way to work, via a Reader equipped satellite radio, i listen to 5 more podcaste items before arriving at work where i scan the remaining 35 feed items. This scenario involves 3 clients and 3 separate feedReaders that in today’s world are each capable of subscribing to and downloading all 50 feeds in triplicate. Today, there is no way for these readers to share state, to share the data that progressively updates as i wade through the 50 feeds. What i want is a seamless handoff off an updated awareness of both read and unread items as my presence shifts among the devices on the way to work. The rest of the post is a discussion what and how for one possible solution that extends reading lists and that adds an app server that can update and hold values of these networked list objects.
If you use reading lists and just 1 client to check for feeds there is no need for new features. That single client would be the only location needed for storage of important meta information regarding the feeds and the delivery of items on those feeds. For any given feed or url in the list, the client knows when it needs to poll, requesting a pull of new feeds from that url. As long as you always use the same client the reading list entries are handled correctly regarding last visited state and with respect to dupes because a single client knows how to avoid duplicate feeds on the url. It can diff the meta data just received against data from older items. Now introduce a 2nd feedReader client by sharing the reading lists on your PC with the reader installed on your phone and see what happens. Everything gets pulled twice. Without access to the same internal state information used by the first client, the phone has no visibility into what time each url in the list was last requested and no access to meta data like the most recent pubDate on items just pulled by the other client. Nor does it have any information on duplicates. On the phone, you can get your feeds but it will be just as if you are using an email account where you save all mail items on the server while using multiple mail clients. Each client downloads the entire list of mail in the inbox even thou you may have already read the mail.
A shared folder of MyFeeds as I last accessed them , stored server-side where it associates users (myself) and lists (mylist) with a 1 : 1 cardinality is one solultion to the problem. The virtual folder encapsulates client state information like the last time that i read a particular <title> belonging to a feed URL, storing server-side attributes like "last_access_date" on the feed and "has_been_read" on each title in the feed. Any feedReading client on any device has access to the folder and to accurate context covering details on what i last read and when. All that i have to do to use the reading list in a consistent fashion is get access to the web on a device with a reader capable of accessing this shared folder.
Assume that you have http://code.google.com/apis/gdata/protocol.html providing "shared folder" features. Look at the Gdata link for "Inserting-a-new-entry". Its focused on the provider and not the consumers of feeds, but it is so close to being a compelling example that some speculation around the fringe of the supported functionality is merited. This is scalable and it supports a full Rest interface. In the details of the "201 Created" section you can see the xml code excerpt below:
<id>1 </id>
<link rel="edit" xhref="http://example.com/myFeed/1/1/"/>
<updated>2006-01-23T16:26:03-08:00 </updated>
The link and the id above are pretty close to what you would need to have a uuid on the association between the user (myself) and the <entry.title> where you want to store the attribute "read or unread". Once someone convinces google to extend this initial offering for rss in the GData api, support for the reading list with shared state is done. Any feedReader on any device marks a title to "has-been-read", generating a local event that delegates to a proxy to GData where a POST/UPDATE occurs on the URI and data entry representing the distributed object encapsulating the state of my interaction with the collection of titles that belong to a specific feed. I could switch devices and do a GET to access the shared folder in the state where i left off while i previously was accessing my reading list.