I saw the Windows RSS API was published the other day and so I just had to create something with it. What better than a podcast receiver!! I’ve gotten into podcasts since I bought myself a Zen MicroPhoto for x-mas. My previous client, Doppler, which I chose because it’s .NET, was using > 300MB of memory, so this seemed like a pretty good project. A couple days ago I began WinCast. It’s still in a rough state, but I’m using it for my podcasting client now, and have been fairly happy (except for the file handles bug below).
About WinCastWinCast runs in the system tray (incase you were wondering where it went when you started it). It is a very simple UI … after all this is a proof of concept. I left adding feeds to IE. Just browse to the RSS of a feed, and add a subscription to it using IE. When you add the subscription, make sure you save it in the WinCast feed folder and you select it to download enclosures automatically.
About the RSS API The RSS API is a COM based API, which was somewhat disappointing, but oh well. I created a RCW and was on my way. Because it’s COM and not .NET, the code is not as pretty. For instance, you have to call getEnum() on the collections to loop through them, but once you figure it out, it’s not so bad. I am pleased that the object model is very simple, and easy to use. For the most part, I was able to do most of the basic tasks with the API.
I did run into a lot of bugs that prevented me from doing things I wanted to. Here are some of the major ones: (1) Feed folder and feed events do not seem to work, which is why I had to implement polling of the RSS store. (2) After looping through many feeds, my process runs out of files handles!! It seems like the API does not dispose of the files it opens. I looked for a way to ensure the files are closed, but I couldn’t figure anything out. (3) Downloading seems to fail for a few subscriptions (4) File naming of enclosures doesn’t work so well. KPCC’s Air Talk from NPR names all their shows Hour 1 and Hour 2 for each day. Well, the RSS service, overwrites the previous day’s Hour 1.mp3 with the new day. (5) I wish there was an identifier for feeds, but for now I ended up making my own.