Saturday, November 22, 2008

rcFeedMe - A Fully Automated Podcatcher (v1.44 - 11/8/2011) (source is included)

rcFeedMe is now Open Source (Apache License, Version 2.0) and the latest source is located here :

- So I've been using Juice for a while as my podcatcher. It works ok most of the time but there were a few things that annoyed me: Sometimes downloads would just hang, no way to group feeds into different download directories, and sometimes something about a feed would change and all of the files would download. That last one might not be Juice's fault but still there are ways to solve this problem in the podcatcher.
- So I went looking to see if there was a better free alternative. Also, I'm one of those people who refuses to install itunes. I tried a few from this site: but most of them had more issues than Juice with interfaces that seemed to make the whole process of configuring your feeds a chore.
- So I did what any programmer would do. I wrote my own. rcFeedMe is a podcatcher - basically it reads rss feeds and downloads them unattended all automatically on a schedule. It is NOT a rss reader. I use google reader for that. Once you set it up you shouldn't have to touch it anymore except when you want to add/remove feeds.
- Tip: If you find a show that only has an itunes feed and not a regular rss xml one read this article. I found it quite helpful.

Design goals/features:
- Quick and easy interface. It might not be that pretty but I wanted something that I could quickly enter settings for all aspects of the program.
- OPML import/export.
- Complete automation. Once setup, it just runs in the tray and checks the feeds for new downloads at an interval you set. No annoying popups or notifications. I just want it to silently do its thing. Downloads have to be as robust as possible and retry automatically if the download stalls.
- Maintain a history of every file downloaded so you will never get flooded with downloads when a feed changes or download something you've previously downloaded.
- Flexible system to determine where feed downloads are saved.
- Multi threaded with the ability to set the number of threads to use.
- Some basic abilities to sync to a mp3 player. I want to keep this program pretty focused on just downloading.
- Clean install. You just unzip the files and run so it's completely self contained and portable. All persisted data is stored in clear xml files.
- Source included

Developer Notes:
- Written in Visual Studio 2008 - c# targeting .net 3.5 framework. It took about a week to write the core functionality. It took another week to flesh out a few features and bug fixes.
- Utilizes Windows Communication Foundation (WCF) SyndicationFeed. I coded around their publish date parsing bug. Try it with ask a ninja and you'll see. SyndicationFeed isn't a very robust class and there were several feeds I had to massage the xml before it would load into a SyndicationFeed.
- I started with a pretty clean OO design but it broke down toward the end with me taking all sorts of shortcuts especially with presentation elements getting mixed in (mostly to help performance). This also means the memory footprint grew a bit too though cpu utilization is low.
- All persisted data is in clear xml files.
- Thread management is a bit of a mess. I'm sure there is a much better/cleaner way to do things.
- Overall life cycle of a file: First you subscribe to a feed (class Feed), I refresh that feed and get a list of all files (MediaFeed which is a keyed collection of Media; attribute on Feed). At this point in time I figure out what the filename will be and verify that a good link exists pointing to the file that will be downloaded. Next, the queue (class Queue which is a collection of Media) is built taking into account check keep counts and history. I then process the queue downloading all the files trying to spread download across different sites (this algorithm can be improved, it's very simplified right now). Once the entire queue is finished (or the user stops the downloads) I cleanup the queue. All successfully downloaded files are moved to History (collection of Media), all the ones stopped or errored are moved to errors (temporary collection of Media, never persisted to disk). Then I trim files based on keep count. It's a very safe and conservative trim. I walk the save paths resolved from Feeds (collection of Feed), I then search history by filename, if I find a match in history then it's considered for deletion based on save flag and keep count. Keyed collections were used instead of dictionaries because I needed serialization.
- I don't check free space anywhere so ummm yeah manage your disk space. The idea is keep count should keep space usage pretty constant.
- CleanupConfig.xml. This file is used to help cleanup the raw xml that causes issues with SyndicationFeed class. This has two sections in it. One is for search and replace, the other removes text between the start and end strings inclusive. In the future, as more problematic feeds are reported and fixed, hopefully I can just release an updated CleanupConfig.xml file instead of doing a new build. There is no gui for this file so if you want to manually edit it just use notepad.
- Other code used: (make sure you apply the fixes mentioned in the comments) - DataGridView progress bar - Save DataGridView column widths and position. Modified to persist settings in appSettings instead of user.config to keep rcFeedMe portable. - Checkbox in DataGridView column header - ID3 Tag Library (icons)
- Thanks to coolmoedee345 for helping with the testing who listens and watches more podcasts than I think is humanly possible which of course made him the ideal tester.

- Windows XP, Vista, or Windows 7 (I've tested in both 32bit and 64bit)
- .net framework 3.5

Quick Start:
- Import an opml file or enter the url for the feeds you are interested in.
- Update the path on the settings tab to where you want to save your downloads.
- Click Start.

- All the labels on the settings tab and many headers on the grids have tooltip text. That should help clarify some things.
- Command line parameters:
"1" or "auto" - (without quotes) to start in automatic mode. This means the app will minimize and the scheduler will start. This is useful as a shortcut in your startup group.
"2" or "lite" - The same as 1 except it puts it into "lite mode" which uses less memory but doesn't let you interact much at all with the program. Memory usage will still be pretty high when it's actually processing the download queue, but I try to free up as much resources as possible when rcFeedMe is idle and waiting for the next scheduled run.
"3" or "once" - Run Once: It's just like 1 except after finishing the run it will automatically exit. Useful if you would rather schedule rcFeedMe with windows scheduler and not have it running in the tray all the time.
"4" or "hidden" - This is exactly like run once but you never see a window. The only thing you will see is the system tray icon while it is running. This should be a lot less annoying than run once. Note: The gui is completely disabled in this mode so double clicking on the system tray icon does nothing.
- Right click on the grids for additional functionality. You can multi select rows in most grids by clicking the white space to the left of the row. Hold down ctrl to select multiple rows, shift for ranges of rows, and click the square in the top left corner to select all rows.
- Grids can be sorted by clicking on the header of the column.
- It should use proxy information that is setup for IE automatically though I haven't tested this.
- While a file is in the process of being downloaded it will have an extension of .rcFeedMeTemp. This extension is removed once the file has successfully completed downloading.

Main Menu:
File | Import opml: Import an opml file. Feeds with a url that already exists in the grid will be skipped.
File | Export opml: Export feeds to an opml file.
About: Shows the current version and a link to this post.
Debug | Save Settings: Not usually needed since Refresh All feeds saves all settings. Settings are also automatically saved when you close the application.
Debug | Load Settings: Not usually needed since Refresh All feeds saves all settings. Settings are automatically loaded on application start up.
Debug | Dump Raw XML Feeds: If you have a feed giving you problems (no files showing up/ERROR status when refreshing) you might want a raw dump of the rss feed. This will save the file in the same directory as the rcFeedMe.exe. It also dumps a fixed version if it's a problematic feed that I had to massage a bit to get working.
Debug | Sync Count: Count how many files that need to be synced and display it on the Sync button as Sync (n) where n = number of files that still need to be synced.

Start: Start the scheduler.
Stop: Stop the scheduler.
Save then Reload Settings: Click this if you changed something and want to save it immediately but don't want to refresh all the feeds.
Refresh All Feeds: Saves all Settings, re-loads all settings, and refreshes all feeds. This is the button you want to click after you've added/removed feeds.
Process All Feeds: Does a Refresh All feeds, builds the queue, and processes the queue. This is the same thing that the scheduler runs.
Sync: Syncs files to a path of your choice (usually to a mp3 player or something). Paths are defined just like Save Paths but instead use the Sync Path fields (in feeds, groups, and settings). Sync is really a one way copy from where the file was downloaded to the Sync Path. Once a file has been copied, it is flagged as Synced in History so it won't sync again even if you delete the file on the mp3 player. You can always uncheck Synced in the history if you want to sync the file again. One small difference is sync paths are created if they do not exist (this includes even base directories). After the downloads are finished it will count how many files that need to be synced and display it on the Sync button as Sync (n) where n = number of files that still need to be synced. This lets me know in the morning if I have new podcasts waiting for me to be synced to my mp3 player. You can also get a count immediately with the Sync Count menu item under Debug.
Search History: Type in the textbox any substring you want to search in your history on Feed Name, Title, and File Name.

Status bar:
- First area is just general information on the last action.
- The next grey label area is the current overall status of rcFeedMe.
Idle - not much is happening.
Feed - Feeds are in the process of being refreshed.
Queue - Queue is being processed. Files are being downloaded.
Sync - Files are being copied to your mp3 player.
You will see the word [Lite] next to the status if you are running in low memory usage Lite mode.
Depending on the status, certain functions might not be available.
- Progress Bar shows status of either the feeds refreshing or the download queue. Download progress is only updated every percentage change.
- The tray icon will show teeth while rcFeedMe is being fed (downloading). Actually, it's anytime it is not idle.

Feeds Tab:

At the top is a grid displaying all your rss feeds and a variety of parameters to customize how files are downloaded. At the bottom displays all the files associated with the feed you clicked on in the top grid. Note: You must click "Refresh All Feeds" before you will see anything in the lower grid.
- How the save path of a file is determined: If a path is specified at the feed level, then that exact path will be used. Next, if a group is specified, then the group path will be used as the base path, a sub directory with the feed name will be created in this base path, and then the file will be saved in that sub directory. Finally, if a feed has no save path defined, group is set to (None), then the Save Path on the Settings Tab will be used as the base path. The same sub directory logic is used as in the group scenario. Note: Sync Path follows the same logic.
- Please make sure all base directories are created first or the program will throw an error.

Feeds Grid (top):
- Name: The name of the feed. Please be careful when editing this field. It's best not to touch it once you've begun downloading files for the feed since I use feed name + file name as the key to determine if something has already been downloaded (history).
- Url: The address that points to the feed. If you enter this first and leave Name blank then it will try and fetch the name of the feed for you. It's not quite as robust as refreshing the feed so if this fails, try typing the feed name manually and then refreshing the feed. There is a chance it still might work.
- Group: Any groups defined on the group tab will be in this drop down. Assign this feed to a group or leave it set to (None).
- Keep Count: This number determines two things. 1) It determines the maximum number of possible files that can be downloaded for the feed. So if it is set to 5 then at most 5 of the most recent files will be downloaded for this feed. 2) It also determines the maximum number of shows to keep on your hard drive. So if you download the latest 5 files, then a new one shows up in the rss feed, then the new show will be downloaded and the oldest existing file will be deleted. This is the primary method of managing disk space. By specifying keep counts your disk space used shouldn't change much. Set it to 0 to disable the feed. Enter -1 if you want to download and keep everything. I've seen other podcatchers use number of days or something like that which I find inconvenient since different feeds publish new shows at different or irregular intervals.
- Include Extension: Pipe(|) delimited list of file extensions(include period(.)) to match against for downloads. Sometimes undesirable file types get included into the feed (say a .aspx or something) or the feed is a consolidated feed with the same show in different file formats (say wmv, mov, avi, etc). This lets you filter down the files to download by a list of extensions. Example: if you only want wmv files to download from the feed then enter ".wmv" (with the period but no quotes, search is case insensitive). If you wanted wmv and mov files then enter ".wmv|.mov".
- Include Text: pipe(|) delimited list of substrings that are compared to the filenames for download. This is similar to extension but is a substring search of the entire filename. If it finds a matches then the file will be downloaded. This is useful if a feed contains many different versions of the same show in the same file format but at different quality levels/bit rates. Example: a feed has Show01High.wmv,Show01Med.wmv,Show01Low.wmv. If you wanted just the high quality ones you would enter "High" (without the quotes, search is case insensitive).
- Save Path: Enter the complete path where the podcasts for this feed will be saved. This path overrides all other paths (groups and global settings). If you use this feature please make sure you specify a unique path here that is NOT shared with any other feed. Having more than one feed save to the same path will cause unpredictable results.
- Prepend Date? Prepend the Publish Date to filename. Useful to make the filenames unique or help with sorting. Date format used is YYYYMMDD so it sorts propery. If both Prepend Date and Prepend Title are checked, then Date comes first.
- Prepend Title?: Prepend title to filename. Useful to make the filenames unique if only a generic filename is used in the feed. Take a look at the GameTrailers feeds. All the filenames are just download.mp4. Checking this will take the title of the show and prepend it to the filename. So download.mp4 will become "show title - download.mp4".
- Sync Path: Just like save Path but defines where files are copied to when you click the Sync button.
- Sync?: Check if you want files from this feed to sync to your mp3 player.
- Apply Cache Fix?: Appends a fake query string to the end of the url when making the request for the feed. This guarantees a cached copy will not be used but also causes some sites to throw an error. Most sites don't need this. If you do check this, then do a refresh and make sure the feed still works. To be honest I'm not sure if this "fix" really helps anything. I notice on a few feeds (like hdtv podcast) where there is a bit of a lag before the latest show appears in the feed. What is odd is if you view the feed in a browser (and therefore the xslt is applied) you see the latest version of the rss feed. If you instead grab the raw xml (I use webClient but trying httpwebrequest doesn't make a difference) it's the previous version and takes a while before it's updated. If I use WebBrowser class then yeah I get the latest data but it's after the xslt is applied so it's html and no longer rss xml. It's pretty odd. It only happens on a few feeds, and it's not a big deal since the raw rss xml eventually does get updated. If any programmers out there can explain to me what is happening, why, and maybe how to fix it that would be great.
- Username: Enter a user name if the site requires login credentials.
- Password: Enter a password if the site requires login credentials. Once you save, this field will show only the encrypted version (I also save it encrypted in the feeds.xml file). Type over it to change it or just erase it if you no longer need a password.
- Priority: Used to help sort mp3's during playlist creation. See the playlist section below for more information. Leave it blank to exclude the podcast from the playlist.
- Decode?: Apply url decode to filename
- Prepend Short Date? Just like Prepend Date but a shorter format: M/D
- Post DL Exe: This command will be executed after every single media that is downloaded from this feed. You can also specify a .cmd batch file if you wish. This process is launched asynchronously when a download is completed successfully (user aborts and failures do not count). Do NOT use double quotes even if the path contains a space.
- Post DL Args: Include any arguments needed to run the above exe. Please use double quotes around anything that might contain spaces (even tokens).
- Pre Sync Exe: Like the post except this executes right before the copy is done during a sync. This is executed synchronously.
- Pre Sync Args: arguments for pre sync exe.
- Suppress Sync: This suppresses the actual copy command that Sync usually does but it still does all the other things that sync normally does like updating the sync flag in history. This is very useful if the pre sync exe will actually be doing the copying for you.

available substitution tokens:
%filename% - just the file name of what was downloaded
%fullname% - complete path and filename
%savepath% - where the file is located
%groupname% - group name (if one exists)
%syncpath% - sync path
%feedname% - feed name
%date% - publish date in the same format as prepend date (yyyymmdd)

example: I want my mp3's split into 20 min chunks when I sync to my usb thumb drive.
First, you need a command line utility that will split mp3's. I like mp3split.
Next, I would setup my feed as follows:
feed name: This is Only a Test
Sync path: d:\portableDrive
post dl exe: blank
post dl args: blank
pre sync exe: C:\Apps\mp3splt_2.4_i386\mp3splt.exe
pre sync args: -t 20.0 -d "%syncpath%\%feedname%" "%fullname%"
Suppress Sync: checked

After token substitution it would generate the following:
Pre Sync exe = C:\Apps\mp3splt_2.4_i386\mp3splt.exe
Pre Sync args = -t 20.0 -d "d:\portableDrive\This is Only a Test" "c:\podcasts\This is Only a Test\thisisonlyatest-90-20111103.mp3"

Notice how you can combine tokens but just be careful where you place your double quotes.
What this would do instead of just copying the mp3 to the sync path it would instead execute the above which would chop up the mp3 into 20min chunks and output them to the destination directory d:\portableDrive\This is Only a Test.

- Right Click menu lets you abort refreshing feeds.

Files Grid (bottom)
- Add to Queue: Manually add the file to the download queue. The file will be automatically flagged as "Keep". See History Tab for more information.
- In Queue?: Read only - checked if the file is already in the queue.
- Title: Show title. This is the text used in the filename if Prepend Title? was checked above.
- Summary: Show summary
- Publish Date: Date the show was published. This is the date used in determining the latest shows to download. By default the grid is sorted descending on this field.
- File Name: Filename that will be used when downloading and saving the file.
- Link: The url pointing to the actual file that will be downloaded.

Download Queue Tab:

- I attempt to spread the downloads across different feeds to help maximize speed and thread efficiency.
- Feed Name: Name of the feed.
- Title: Show Title
- Link: The url pointing to the actual file that will be downloaded.
- File Name: Complete path and filename of what is being downloaded and saved.
- Publish Date: Date the show was published.
- Status:
Queued - In the download queue but has not started downloading yet.
Downloading - Download is in progress.
Downloaded - File was downloaded successfully.
Error - File was not downloaded properly. Some sort of error occurred. Partially downloaded files in error status are automatically deleted.
Stopped - User right clicked on the Queue grid and selected "Stop All Downloads". Any downloads in progress will be stopped immediately and have this status. The partially downloaded file will be deleted.
Bytes - Number of bytes currently downloaded/Total Bytes.
Progress - % downloaded
Attempt - How many times rcFeedMe tried to download this file. Once attempts hits the download retry maximum (set in the Settings tab) then the file will be set to Error status.

Download Queue Context Sensitive Menu (right click):
- Build Queue: Not used often unless you want manual control over some of the steps that "Process All Feeds" does. Click this after doing a Refresh All Feeds. It will build the queue but not actually start downloading yet.
- Process Queue: Begins downloading the files in the queue.
- Stop all Downloads: Immediately stop all downloads and halts the processing of the queue.
- Remove Selected Rows: Remove the files from the download queue.
- Move Selected Rows to History. This is more for debug but it might come in handy. After build queue you can move rows from the queue to History. This will trick the program into thinking these files were already downloaded. Useful in some situations where you want to pre-populate the history. Maybe there is a specific show you just don't want to download.

Download History Tab:

- After the queue is completely finished processing, all successfully downloaded files are moved here. The history will continue to grow over time. It might be a good idea to trim it down once in a while by sorting by date and then selecting multiple rows of the oldest data and deleting it.
- I won't go through all the columns since I've already describe most of them by now. Three columns are editable on this grid: Title, File Name, and Keep?.
- I allow editing of Title and File Name since these combined is the primary key I use to determine if a show has already been downloaded. This is just in case somebody wants to tweak something in the history.
- Keep?: Checking this prevents rcFeedMe from deleting the file. This goes along with Keep Count back on the feed tab. Any files you added manually from the files grid on the feeds tab will have this already checked. It makes sense because you added the file manually (and not by the scheduling engine) so the scheduler shouldn't delete it. Kept shows are excluded from the keep count calculation.
- Right click | purge history: This will clear the entire history file (a backup is created though just in case). Useful if you want to reset and re-download
- Synced?: If checked it means the file has already been synced to your mp3 player so it won't get synced again in the future. I you wish to sync the file again for some reason just uncheck this box.
- Make sure you save any changes made before leaving this tab since this tab gets refreshed whenever you click on it.

Recent Errors Tab:

- After the queue is completely finished processing, all the files that failed to download are moved here. This only shows files that error out on the most recent run. The data in this tab is not persisted anywhere so if you close rcFeedMe and then restart it, it will be blank. If you want to see a running history of all the errors from this tab, please see Errors Log Tab.

Group Defaults Tab:

- Save Path: Specify the download path for the group. The groups you define here appear in the drop down on the Feeds tab.
- Sync Path: Default path to sync to for the group.
- Playlist Path: If a path is specified then a playlist will be created at the end of the batch run for all podcasts in this group with a priority specified.
- Playlist Cutoff Days: Go back this many days to figure out how many podcasts to include. This is based on the podcast publish date.

Settings Tab:

These are your global preferences.
- Frequency: This is how often the scheduler should refresh all feeds and download any new files. Default is 360 minutes (every 6 hrs).
- Default Save Path: If a feed doesn't have a path specified and group is set to none, then this path will be used as the base path. See Feeds Tab for a more detailed explanation of how the download path is determined for a file.
- Default Sync Path: If a feed doesn't have a path specified and group is set to none, then this path will be used as the base Sync path.
- Keep Count: Default value used to populate the Keep Count field on the feeds tab when importing an opml file. Default is 5. See Feeds Tab for more information.
- Threads used to Scan: Number of threads to use when refreshing the rss feeds. Default is 6. Maximum allowed is 16.
- Threads used to download: Number of threads to use when downloading files. I would recommend 2. Any higher and some sites limit the number of simultaneous downloads and could produce false failed downloads. I try to minimize this by spreading out simultaneous downloads across different feeds. Maximum allowed is 6.
- Scan Stall: Number of seconds that elapse of inactivity while a feed is being refreshed. If the feed refresh stalls for this many seconds, it will be considered an error.
- Download Stall: Number of seconds that elapse of inactivity while a file is being downloaded. If the download stalls for this many seconds, it will be considered an error.
- Scan Timeout: If the total time for a feed refresh takes longer than this many seconds, it is considered an error.
- Download Timeout: If the total time for a file download takes longer than this many seconds, it is considered an error.
- Scan Retry: When an error occurs during a feed refresh, retry this many times before giving up.
- Download Retry: When an error occurs during a file download, retry this many times before giving up.
- Time Zones (Advanced): Used to help parse Publish Date. Sometimes it helps to strip out the time zone.
- Date Formats (Advanced): Used to help parse Publish Date. Specify the .net Custom Date and Time Format string. see:

Log Tab:

- A very detailed log of everything that happens in the program. The log self trims so it won't grow in size forever. The log is refreshed every time you go to this tab or you can right click and refresh immediately. The log will grow until it hits 1.5MB. After that the oldest entries will be deleted and the log will be automatically trimmed down to 1MB. This cycle just keeps repeating. Log size check and trimming occurs when you process your queue.

Error Log Tab:

- Since the Recent Errors Tab isn't saved anywhere I decided to create a separate error log. The information is also buried in the complete log but this log only contains information that was in the recent errors tab. This log also self trims.

Playlist Creation
- This is a new feature I added basically to use with subsonic, isub, and my iphone and it's a new way for me to listen to podcasts on my commute without ever having to use itunes/sync again.
- This is all optional. You start by specifying a full path and filename in Group Defaults tab. So say I want a .m3u playlist generated for my audio podcasts. I would enter something like:
For this to work properly with subsonic/iSub I setup in subsonic|settings|general|Playlist Folder to:
- Next, you put in a playlist cutoffdays value in group defaults. This tells how far back to include podcasts. So if I use 14 that means only podcasts with a publish date within the last two weeks would be included in the playlist.
- Finally, on the feeds tab you need to give a priority number for each podcast in that group you want included in the playlist. Leave priority blank if you want that podcasts excluded from the playlist.
The Instance - 5
GWJ - 10
Maximum PC - 15
TWIT - 20
I like to number by 5's so it's easier if I need to re-prioritize later.
- At the end of a process all feeds (which happens in any schedule run or run once) I generate the playlist as follows:
For any groups with a playlist path and cut off days defined, find all podcasts with a priority. I start with the lowest priority first. I get the most recent podcast (within cutoff days) and add that to the playlist first. Then I get the next lowest priority and the most recent podcast for that feed, and so on. Once I've walked all the feeds with priorities defined, I start over again at the top and pick up any remaining podcasts that fall within the cutoff days and throw them at the bottom of the playlist.
- NOTE: I retag the mp3 files when I do this with a short date: M/D-title. I have to do it b/c this is how I want to see it in iSub and it allows me the quickest way to scan for new podcasts from the feeds I care about the most. The original tag is written to the ID3 comment field with a prefix of [ORI].
- NOTE: Only file extensions with .mp3 are supported.
- Then in iSub I go to playlists|server and pick AudioPodcasts. With the bookmarking system in iSub this works out really well and lets me listen to podcasts on my commute but music while at the office.
- So what you end up with all of this is a constantly refreshing (however you schedule rcFeedMe to run) server playlist that I can hit with iSub, quickly glance over and see any new podcasts with the ones I care about most bubbling to the top of the list (instead of a strict latest date sort), all streaming without ever having to sync to my iPhone. I've been listening to podcasts this way for the last few weeks and it's been working great. Of course this helps if you have an unlimited data plan which I do.

Upgrading from a previous version
- Usually you only need to copy over the following files:
cleanupconfig.xml (if you have added your own entries in this file you'll have to manually merge them)

Hopefully you find this program useful. Leave any questions or suggestions in the comments, and I'll try to respond.

UPDATE: If you have issues with a specific feed give a try. It's quite helpful in pointing out where the problem might be.

Version History:

- I've been making some updates to this release. It is now on version 1.44f. If you aren't running the latest version please re-download.
- Fixed a bug where you couldn't erase a playlist path from the groups tab.
- Known issue: adding a new feed by entering a url and them immediately checking any checkbox will throw an error. The work around is simply to either leave the row first or save your settings before checking any of the checkboxes.
- There is a new setting: Log duplicate errors. By default these are not logged since they are mostly harmless and just clutter up the log. This happens when a feed happens to list the exact same file twice.
- Maximum log size has been increased from 1.5 MB to 10 MB.
- Added 5 new columns to feeds: Post DL Exe, Post DL Args, Pre Sync Exe, Pre Sync Args, Suppress Sync. Please see the above section Feeds Tab for more details. This adds the ability to hook in your own post download process or pre sync process.
- Added new command line option 4 (or "hidden"). This is just like run once but you will never see a window (only the system tray icon).
- Made a preliminary fix to an obscure error when syncing (or getting sync count): "An item with the same key has already been added."
- Properly set status to idle before calling create play list to prevent the busy error during a batch run.
- NOTE: The source has been updated to visual studio 2010 (though it still targets the .net 3.5 framework).

v1.43 (8/22/2010)
- Added Url Decode option on filename
- Added ability to generate playlists. See above for more Information.
- Note: I now change last modified date to equal publish date after the file has been downloaded.

v1.42 (4/4/2010)
- Added a fix for EA podcast in the cleanupconfig.xml
- Added preliminary support for userid/password for sites that require it. I wasn't really able to really test it because I don't have any podcasts that require a login. See the Feeds Tab section above for more information.

v1.41 (11/5/09)
- This is mainly user interface tweaks. All checkbox columns now have a checkbox in the column header so you can easily toggle the checkboxes for all rows.
- All grid column positions and widths are now saved. Even the split location on the first tab is saved. All these settings are saved in rcFeedMe.exe.Config. So if you want to reset just delete the appSettings section.

v1.40 (11/2/09)
- added httpWebRequest useUnsafeHeaderParsing="true" to rcFeedMe.exe.config. This fixed an issue with a specific feed. You can read more about the issue here.
- cleanupconfig.xml is now a lot more flexible. You can now add fixes that only apply to a particular feed url instead of globally to all feeds. This allows me to add specific feed fixes without the risk of breaking some other feed. Just add the optional attribute feedUrl to either ReplaceStruct or RemoveStruct. If you leave feedUrl attribute off then it still applies globally.
- Added Restore to the right click menu on the tray icon. It does the same thing as double clicking the tray icon.

v1.39 (4/21/09)
- updated CleanupConfig.xml to handle another problem feed. Fixed a rare issue where if a filename differed only in case it would hang the feed refresh process.

v1.38 (2/22/09)
- Fixed a bug where I was never using DL stall time from the config (I was accidentally using scan stall). Also, rcFeedMe no longer shows up in the alt-tab list when minimized to the tray.

v1.37 (2/16/09)
- Fixed a problem with idle thumbs feed. Added better error logging when there is an xml parsing error. I now try and extract the xml fragment that was causing the problems and save that into the log.

v1.36 (1/27/09)
- Some feeds are missing the type attribute on the enclosure tag. I've added some code that should work around this issue.

v1.35 (1/11/09)
- added new Error Log tab. Anything that ever shows up in the Recent Errors tab is archived in this log. Sure the same information is also captured in the compete Log but this is easier to read if you just want to look at your failed downloads. This log also self trims.

v1.34 (1/7/09)
- added a size check. When media is finished downloading, I check received bytes against total bytes expected. If it received less then it is considered an error.
- latest CleanupConfig.xml is rolled into this release

v1.33 (12/12/08)
- fixed a tiny bug where I forgot to reset the tray icon tool tip text and form title after doing a sync.

v1.32 (12/11/08)
- Files that are too long are now trimmed down. This can happen if you prepend the Title and it happens to be a very long title. I've set maximum file name length to be 240. It will be less than this since I subtract out the full path. Any filenames that needed trimming will show up in the log.
- Fixed a bug when deleting rows out of the Groups tab.

v1.31 (12/10/08)
- Improved error messages in the log if a download fails.
- Sync Count now also displays in the window title and the tooltip text for the tray icon.

v1.30 (12/03/08)
- added a new feature: Sync Count. After the downloads are finished it will count how many files that need to be synced and display it on the Sync button as Sync (n) where n = number of files that still need to be synced. This lets me know in the morning if I have new podcasts waiting for me to be synced to my mp3 player. You can also get a count immediately with the Sync Count menu item under Debug.

v1.29 (12/03/08)
- fixed a bug introduced in the new feature in v1.27 and made worse in v1.28: Crash bug when editing existing feeds.

v1.28 (12/02/08)
- fixed a bug where if you had no group assigned to the feed, clicking add to queue button would cause the app to blow up.
- fixed a crash bug where feed name was null when it is trying to fetch the name.
- added a new xml file: CleanupConfig.xml. This file is used to help cleanup the raw xml that causes issues with SyndicationFeed class. This has two sections in it. One is for search and replace, the other removes text between the start and end strings inclusive. In the future, as more problematic feeds are reported and fixed, hopefully I can just release an updated CleanupConfig.xml file instead of doing a new build. There is no gui for this file so if you want to manually edit it just use notepad.

v1.27 (12/01/08)
- When subscribing to new feeds, if you enter the url first and leave the Name blank, then it will try and fetch the name of the feed for you.

v1.26 (11/24/08)
- fixed some problem feeds that use dc:date instead of pubDate tag in the rss xml.

v1.25 (11/21/2008)
- Initial public release


Anonymous said...


Thanks for rcFeedMe! Works fine for my german podcasts (with "umlaute" like "ä"). Juice doesn't like umlaute at all and throws lots of errors...

Is there any way to let rcFeedMe import the feed title automatically from feeds url?

ARogan said...

Actually I could code that. That's not a bad idea. I might add that feature when I have the time. But for now you'll just have to type it. I know it's a bit of a pain but it is really something you only have to do once per feed.

ARogan said...

Ralf, ok feature has been added. Go give 1.27 a try.

Anonymous said...

Feed title from url works for me in v1.27. Thank you!

I'm just beginning to see how useful rcFeedMe is. Prepend date/title on downloaded file names, for example, is very handy. No other podcatcher I tried can do that...

Um, in Feeds view, clicking on "Add to Queue" when the file is already downloaded, throws an unhandled exception (System.Collections.Generic.KeyNotFoundException) here on my german WinXP Prof. with german .NET. does not work at all. rcFeedMe does not read the title from url and does not display any feed contents. Looks like malformatted xml on feed's side to me. From rcfeedme.log:

02.12.2008 09:07:39 ERROR: (Feed)[hr2 Praxis Dr. Hirschhausen]'Element' ist ein ungültiger XmlNodeType. Zeile 1, Position 17450.;

02.12.2008 09:07:39 (Feed)Finished feed refresh with ERRORS: hr2 Praxis Dr. Hirschhausen = 0

But WinAmp and Juice work with this feed; and it displays fine on firefox. Maybe rcFeedMe is too picky here? :-)

Anonymous said...

PS: 'Element' ist ein ungültiger XmlNodeType. Zeile 1, Position 17450
'Element' is an invalid XmlNodeType. Line 1, Position 17450

ARogan said...

Ralf, give 1.28 a try. I fixed the bug you mentioned and another one I found. The feed was giving SyndicationFeed fits because it has template tags in the xml. Why SyndicationFeed even cares about extra tags is beyond me. It really should just ignore it. I blame the microsoft .net team. Anyways, it should be all good now. Let me know if you have any other issues.

Anonymous said...

Thanks again for your work! v1.28 handles the problematic feed well.

But... Try (de-)selecting "Prepend Title" or "Prepend Date" on a feed while another row is selected:

System.InvalidCastException: Das Objekt des Typs System.Boolean kann nicht in Typ System.String umgewandelt werden.
bei rcFeedMe.frmRcFeedMe.dgvFeeds_CellEndEdit(Object sender, DataGridViewCellEventArgs e)
bei System.Windows.Forms.DataGridView.OnCellEndEdit(DataGridViewCellEventArgs e)
bei System.Windows.Forms.DataGridView.EndEdit(DataGridViewDataErrorContexts context, DataGridViewValidateCellInternal validateCell, Boolean fireCellLeave, Boolean fireCellEnter, Boolean fireRowLeave, Boolean fireRowEnter, Boolean fireLeave, Boolean keepFocus, Boolean resetCurrentCell, Boolean resetAnchorCell)
bei System.Windows.Forms.DataGridView.SetCurrentCellAddressCore(Int32 columnIndex, Int32 rowIndex, Boolean setAnchorCellAddress, Boolean validateCurrentCell, Boolean throughMouseClick)
bei System.Windows.Forms.DataGridView.OnCellMouseDown(HitTestInfo hti, Boolean isShiftDown, Boolean isControlDown)
bei System.Windows.Forms.DataGridView.OnCellMouseDown(DataGridViewCellMouseEventArgs e)
bei System.Windows.Forms.DataGridView.OnMouseDown(MouseEventArgs e)
bei System.Windows.Forms.Control.WmMouseDown(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.DataGridView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

"The object of type System.Boolean can not be converted to type System.String"

Haven't seen that in older versions.

ARogan said...

Oops my bad. I didn't test the new feature back in v1.27 very well. It's fixed now. Thanks for helping me test this thing. Keep hammering on it and let me know what else you find.

Anonymous said...

v1.30 works fine for me, as v1.29 did. Apart from prepend date/title I am using no advanced functions (like groups or syncing). rcFeedMe just does its job, 4 times a day (using windows scheduler and command line option "3").

Some more questions and maybe feature request, though:

- Is logfile size in any way limited?

- Could rcFeedMe provide the reason for failed downloads in logfile, like HTTP error codes? Now it just says something like "file not downloaded".

- Is command line option "3" really starting rcFeedMe in "full mode", like "1"? Because on auto exit no user interaction is needed, "lite mode" (like "2") seems more suitable for me.

Greets Ralf

ARogan said...

- Glad it's working for you.
- Log size - It will grow until it hits 1.5MB. After that the oldest entries will be deleted and the log will be automatically trimmed down to 1MB. This cycle just keeps repeating. Log size check and trimming occurs when you process your queue.
- I'll look into bubbling up better error messages.
- Lite mode (option 2) really doesn't apply to option 3. The only thing option 2 does is try to free up as much memory as possible when it's sitting idle in the tray waiting for the next scheduled run. While the queue is being processed, the same amount of resources is used in all 3 modes. So run once (mode 3) doesn't really matter since after it's done it completely closes the program.

ARogan said...

Ralf, 1.31 should now log the error message that comes back from the WebClient object. It usually has the http error code in it (I tested with a forced 404).

Anonymous said...

Yes, now I can see why some downloads failed (all 404s, actually). Thank you again.

Now I ran in a kind of problem with path/filename length. At least one (german) feed seems to put quite long content summaries in title tag. In some cases prepending title to filename and having a detailed feed name (= long pathname on disk) leads to pathnames > 248 chars and/or filenames > 260 chars and a subsequent System.IO.PathTooLongException error in rcFeedMe:

Ausnahmefehler während einer WebClient-Anforderung.; System.IO.PathTooLongException: Der angegebene Pfad und/oder Dateiname ist zu lang. Der vollständig qualifizierte Dateiname muss kürzer als 260 Zeichen und der Pfadname kürzer als 248 Zeichen sein.
bei System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
bei System.IO.Path.GetFullPathInternal(String path)
bei System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
bei System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
bei System.Net.WebClient.DownloadFileAsync(Uri address, String fileName, Object userToken)

It's no problem to deselect "prepend title" after the error, but then rcFeedMe re-downloads all "keep count"-files because of the "new" filenames.

So, IMHO rcFeedMe should test this condition before downloads start and either shorten oversized path-/filenames by itself or warn the user.

BTW, I noticed saved filenames are "cleaned" of unwritable characters in a way. Sometimes this leads to subsequent "_" in filenames, like 20080515-sind_wir_allein_im_universum___1___harald_lesch_ueber_science_fiction_und_wissenschaft.mp3. It's ugly :-), and adds to path-/filename size unnecessarily.

ARogan said...

Ralf, great testing. I totally missed that. Yeah I scrub the filenames to make sure they are all valid characters but I forgot to check length. Give 1.32 a try. It now trims the filename down if it's too long. I start with max 240 characters and then subtract the length of the full path. Whenever a trim happens I log it. Filename is determined at the time of refreshing the feed. I had to make a few internal changes to properly implement the fix. I tried to do some proper regression testing. Let me know if I broke anything in the process.

ARogan said...

Ralf, not sure where the "_" are coming from. Maybe microsoft's SyndicationFeed object is doing this when it parses the xml. I just double checked. When I scrub out invalid filename characters I just remove them. I do NOT replace them with "_".

ARogan said...

Ralf, here is tip you might want to try. If you have a feed that links to non existent files and you want to stop the 404's and having them show up in the error tab try this: Refresh all feeds. Go to the download queue tab, right click, build queue. This builds your download queue without actually starting your download. Select all the rows that you know will error. Right click, move selected rows to history, save/reload settings. What you have done is manually populated those items into the history. Now rcFeedMe thinks those files have already been downloaded and will never try to download them again.

Anonymous said...

Wonderful, oversized filenames seem to be no problem anymore. Obviously no other functions I'm using are broken, so far. Another big THANK YOU, also for the hint on "hiding" 404s.

The "_": I am really embarrassed here. All multiple "_" are in the server side filenames. Could have easily checked that before. Sorry for wasting your time on this...

ARogan said...

Ralf, no problem. You've really helped in finding bugs. Glad you find this app useful. I released 1.33. It's a really tiny fix (forgot to reset text in the tray icon tool tip after you sync).

Anonymous said...

This is a great piece of software! Thanks a lot for this. Especially the pretend date feature is cool.

One problem here. I can´t see the right scrollbar and can´t scroll to the rightmost rows. Also i don´t see the arrow of the horizontal scrollbar. E.g. if i scroll to the right in feed-tab the rightmost row i see is the half of the row "sync path".

Anonymous said...

I´ve just added another Feed, and now the problem is gone. I can see the scrollbar and everything is fine..

ARogan said...

Stefan, glad you got it working.

dans said...

Thanks for the podcatcher! It works very well - only trouble I'm having currently is with feeds from (Buzz Out Loud and Gadgettes). Error like the following appear: "ERROR: (Feed)[BOL]Error in line 93 position 441. An error was encountered when parsing the item's XML. Refer to the inner exception for more details.; Specified argument was out of the range of valid values.
Parameter name: value"

I have added a few lines of code to work around an iPhone shortcoming ... the iPhone is great at many things, but it does not have an automatic and robust podcatcher. I wanted a way to easily access the latest newscasts and some other podcasts without constantly syncing to iTunes. I have been using an iPhone app from Simplify Media to serve my iTunes content (including podcasts) from my PC over the air, but this has a couple of limitations (poor playback control, and iTunes drops podcast subscriptions without asking if you don't listen from the PC).
Using your source, I set up some code to update a web page each time the scheduler runs. The web page simply has links to the online url for the .mp3 file. From my iPhone, when I browse this page, I can easily listen to the podcast using the iPhone's native Quicktime player (which has good controls). And unlike iTunes, your podcatcher does not drop subscriptions if I don't happen to listen :)

Anyhow, thanks again for sharing your good work - if you have any interest in my cludgey add-on code to publish a web page, let me know.

ARogan said...

dans, you might want to look into dropbox (which I just tried out). Basically, if you have rcfeedme download into a dropbox sub directory, then you can browse to it on the iphone with safari. Clicking on the media files will then launch quicktime. Dropbox has a pretty nice web site customized for iphone. It streams just fine over 3g. As far as the cnet feeds go, I took a quick look. SyndicationFeed is choking on it. Not sure if it is microsoft or cnet's fault but I'll have to code around it yet again. I might have some time tomorrow to look into it more.

ARogan said...

dans, I found the issue with those two cnet feeds. They had invalid crap in the enclosure tag. Anyways, grab the latest CleanupConfig.xml. Link is at the top of the post now. Just replace your existing cleanupconfig.xml and give it a try. Basically I strip out length="-1".

Anonymous said...

Hi there "ARogan".

Thanks for rcFeedMe 1.33. Like you I've been using Juice for a good while now .... but I'm sick of the deficiencies & errors and there's no further development.

So I started trying rcFeedMe before Xmas. You should be proud! A neat piece of software with a very light footprint. I've started transferring across from Juice - indiovidually - podcast by podcast.

I've encountered something and wonder could help me:

I've found on a few podcasts (emphasise: not all podcasts) it's not picking up the latest available episodes (which I refresh it). However when I check on podcasts RSS web site they are there. Same when I check on Juice.
Take an example: The latest episode (03/01/2009) is "EP185: Union Dues - All About the Sponsors". However, rcFeedMe is only showing episodes up to "Escape Pod Flash Fiction Contest, Honorable Mention: Silence" - that's 3 episodes earlier. There are about 40 episides available - it only picks up 36. No erro in Log.

An example that is working: It's got over a 100 episodes and works fine.

Any thoughts?

ARogan said...

Michaelc, I have had similar issues. Usually if you wait about 24 hrs it will catch up. You will see that the raw XML (you can dump it from the debug menu) that the latest show is missing. But if you then browse to the feed you will see that the latest is there. But what you are seeing in the browser is HTML After the xslt has been applied to the XML. I usually see this issue with feedburner feeds. It's not anything I'm doing in rcfeedme.

ARogan said...

Michaelc, so I just tried your escape pod feed in rcfeedme and it's working fine now. I see episode 185 both in rcfeedme and in the browser.

Anonymous said...

Yes you're 100%, I've tried it myself just now and they're all coming up! Weird eh? Thanks for that.

Something else ... do you notice a problem that some screens do not appear to "fit" within their window. For example: on Download Queue, I have to do a bunch of resizing to get to the right hand 'Progress' column? (My screen has been acting up a bit so I'm not sure if it's just me!). There's no scroll bar below and maximizing the screen doesn't show it either (without some resizing of the name & file columns).

An additional suggestion for a future release... any of those screens where you resize or rearrange the columns ... it would be useful to be able to save that setting permanently (like with, say, Windows Explorer).

Keep up the good work. And thanks again - much appreciated.

Anonymous said...

Hi ARogan

I have transferred over most of my podcasts from Juice to rcFeedMe. It's working a treat. Running in "once" mode every night and can then see what's available for me next morning. Haven't used the Synch option much - that's next. Just wanted to say THANKS AGAIN.

And could I be cheeky and query 2 somethings!?! ... perhaps you might be able to shed some light? ...

1) Incomplete Download
I have this podcast "RTE-Documentaries" .... this is what's in rcFeedMe history:

"RTE-Documentaries The Cons are Coming This programme tells the story of the annual visit of a family from America and England to their homeplace in Ballyjamesduff in County Cavan. pod-v-040109-41m39s-doconone.mp3 C:\Documents and Settings\Administrator\My Documents\rcFeedMe\RTE-Documentaries\pod-v-040109-41m39s-doconone.mp3 06/01/2009 06:00 Downloaded False 40,312,692 False"

Note the size! However this is what came down: "pod-v-040109-41m39s-doconone 545KB". Yet rcFeedMe moved it to History and considers it "Downloaded"

An extract from log file:

07/01/2009 03:56:53 Processing Queue. Files downloaded: 14/16
07/01/2009 03:56:53 (Media)Started downloading: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\RTE-Documentaries\pod-v-040109-41m39s-doconone.mp3
07/01/2009 03:57:09 (Media)Finished download: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\RTE-Documentaries\pod-v-040109-41m39s-doconone.mp3
07/01/2009 03:57:09 Renaming temp file to the actual filename: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\RTE-Documentaries\pod-v-040109-41m39s-doconone.mp3.rcFeedMeTemp -> C:\Documents and Settings\Administrator\My Documents\rcFeedMe\RTE-Documentaries\pod-v-040109-41m39s-doconone.mp3

I got a warning "An item with the same key has already been added" on this podcast though not on this particular episode. Would that have anything to do with it??

07/01/2009 01:33:24 Refreshing feed: 37/39
07/01/2009 01:33:24 (Feed)Start feed refresh: RTE-Documentaries
07/01/2009 01:33:28 WARNING: (feed)[RTE-Documentaries]An item with the same key has already been added.; RTE-Documentaries;pod-v-121008-38m11s-doconone.mp3
07/01/2009 01:33:28 (Feed)Finished feed refresh: RTE-Documentaries = 80

It looks as though it correctly identified the true size of the file (40,312,692).

What criteria does it use to figure that a download is finished/"downloaded"?

2) Resuming Downloads
A sort of related query really. Sometimes my ISP connection drops or times out. How do I tell rcFeedme in a "once" mode to resume a partial download?

Thanks again.

ARogan said...

MichaelC, Give v1.34 a try. I now do a size check. I hope that helps. Also, just delete the partial download out of the history and it will try to download it again the next time you run rcfeedme.

Anonymous said...

Hi ARogan
Thanks for that. Installed 1.34 and ran it last night. New feature ("Downloaded file seems to be too small: 5,857,370 / 58,547,969") working a treat.

Is it supposed to move/highlight download errors (inc. this "too small" one) in the Recent Errors screen? It didn't!

End of Log:
09/01/2009 09:33:10 (Cleanup)deleted queue items: 25; moved to history: 22; moved to errors: 3

Sample Error:
09/01/2009 04:08:02 ERROR: Downloaded file seems to be too small: 5,857,370 / 58,547,969
09/01/2009 04:08:03 ERROR: (Media)[teaandchatep9-300608.mp3]File failed to download: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\FictionGeneral-VariantFrequencies\teaandchatep9-300608.mp3; An exception occurred during a WebClient request.; System.IO.IOException: Unable to read data from the transport connection: The connection was closed.
at System.Net.ConnectStream.EndRead(IAsyncResult asyncResult)
at System.Net.WebClient.DownloadBitsReadCallbackState(DownloadBitsState state, IAsyncResult result); ; attempt = 1


When I open up rcFeedMe there wasn't any records in Recent Errors

ARogan said...

MichaelC, that would be because there is a default retry count of 3. So if it is too small it will try again up to your retry count (just like any other error). If it fails all 3 times then it will show up in the error tab. Otherwise if it does eventually download properly it will be in history.

Anonymous said...

Hi ARogan

This Recent Errors thing ... I have my Download Retry set to 6. Last night 2 files encountered an error 6 times (inc. same file as night before as it happens). And it still didn't appear in Recent Errors.

10/01/2009 03:44:56 (Media)Started downloading: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\FictionGeneral-VariantFrequencies\VariantforSigler.mp3
10/01/2009 03:45:03 ERROR: (Media)[VariantforSigler.mp3]File failed to download: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\FictionGeneral-VariantFrequencies\VariantforSigler.mp3; The remote server returned an error: (500) Internal Server Error.; ; attempt = 6
10/01/2009 03:45:03 (Media)Finished download with ERRORS: C:\Documents and Settings\Administrator\My Documents\rcFeedMe\FictionGeneral-VariantFrequencies\VariantforSigler.mp3

End of Log:
10/01/2009 09:15:41 (Cleanup)deleted queue items: 12; moved to history: 9; moved to errors: 3
10/01/2009 09:15:42 Queue has finished downloading.

Would it be because I manually stopped the rcFeedMe run this morning (via Stop All Downloads ... I didn't want it running during the day when I'm browsing or working ... need all the bandwidth I can get!) rather than letting it finish "naturally"?

Also any further thoughts on displaying the most right hand columns without having to resize left hand columns?

Thanks for taking the time in answering these questions.

ARogan said...

1) 10/01/2009 09:15:41 (Cleanup)deleted queue items: 12; moved to history: 9; moved to errors: 3
that right there shows 3 were moved to the errors tab but you have to remember it is temporary. So on the next run the error tab is cleared. I don't store old errors. They get cleared every time you process all feeds. Can you confirm that they were missing from the error tab right after running process all feeds and the downloads were completed AND the log shows some items were moved to the error tab? I haven't run across this issue. As long as they are NOT in the history you should be ok since the key thing is you want it to try and download them again on the next run. If they are in the history can you check to see if the file was properly downloaded? Maybe it downloaded properly on a later run? I guess a separate running error report would be easy enough to create but I'm not sure how useful it would be. Stopping a download will move that file to the error tab since obviously you want to retry that download on the next run.
2) Again, I can resize the width of my window and I get a horizontal scroll bar every time on the download queue tab so I'm having problems understanding the problem.

Anonymous said...

Hi ARogan, Thanks for that.
1) The series of events are:
* I run it in Once mode @ 1am
* It hasn't finished in the morning so I do a "Stop All Downloads"
* rcFeedMe shuts down
* I open it up again and nothing appears in the Recent Errors.

I think I understand now! It only holds Recent Errors whilst rcFeedMe is open. Therefore either when closed manually (with Stop All Downloads) or when closed automatically (in Once mode) and then I re-openit, there are no Recent Errors. That explains it all right.

Maybe it would be useful if it could keep from the last run plus the current run?

Maybe I'll try Windows Scheduler it in Auto mode.

2) Pretty weird. Definitely don't have bottom scroll bar. And do on other Apps e.g. IE. I'm on Win XP Pro SP3. And DotNet Framework 3.5 - that's what I installed. I've tried changing the display properties bt no luck.

Not a big deal anyway!


ARogan said...

ahhh it's all making sense now. Yeah I don't save the data in the errors tab anywhere so when you close rcFeedMe (and in the case of run once it auto closes when done downloading) that tab is wiped clear. I run in mode 1 so I have it running all the time 24/7 in the tray so that's why it didn't really affect me. But I can see how this could be a bit of an issue in run once mode. What I might do is just create a separate text file with a running history of everything that was sent into the error tab (and self trim it of course). Sure the data is captured in the log but the log is pretty cluttered. The horizontal scroll bar thing is weird. I'm running under vista 32bit.

ARogan said...

MichaelC, Give v1.35 a try. I've added an error log tab. I hope this makes things a bit more convenient.

Anonymous said...

Hi ARogan,
Put in 1.35 last night.
And would you believe it?? ... there wereno podcast errors to test out your new item!!!!

I'll let you know when there is one!

Thanks again.

Anonymous said...

Hi ARogan.

1.35 does the buesiness for writing slimmed down details of errors in Once mode to reFeedMe-errors.log. Thanks.

Anonymous said...

Having trouble with this feed:

Another catcher returns several podcasts while rcFeedMe returns 0.

Thanks and keep up the great work.

ARogan said...

Give v1.36 a try. GTYRadioBroadcast should work now. In their enclosure tag they were missing the type= attribute. I've added some code to work around this issue.

Anonymous said...

It worked perfectly.

Phil said...


I'm really amazed after several tries with a lot of downloaders. Unfortunately i have an issue with an Podcast that gives me the message that RssSerializer doesn't support RSS-Version '0.91'

Bright regards

ARogan said...

Phil, I'm going to need a bit more information. If it is a specific feed that is giving you issues, please post the url to the feed so I can take a look at it.

Ross said...


(Apologies if this is a double post. Something seemed to go wrong when I tried to post the first time).

Thank you very much for your efforts. rcFeedMe is exactly what I was looking for to replace Juice.

I get a parsing problem with this feed which (sort of unfortunately) works well on Juice.

From the error message it looks like for some strange reason the feed has a left parenthesis character at the start of the file length attribute. I'm not sure if that problem is introduced by Feedburner or the podcast author.

I wonder if you should perhaps ignore all non-numeric characters before trying to interpret it as a number. I guess it must be a balancing act in deciding how far to bend for bad feeds.


ARogan said...

Ross, I'll take a look at it as soon as possible. I still haven't done my taxes yet!!!! So it might be a couple of days. And to everyone: yes keep posting any feeds you have issues with and I will try and fix things.

Ross said...

Great stuff, thanks. No hurry.

Anonymous said...


thank you, once I got into it a great program.
However, one error from a long list of feeds hangs the complete program. It is the Nature podcast.

Part from the log:
18.04.2009 18:29:56 (Feed)Finished feed refresh: Nature Podcast = 29
18.04.2009 18:29:56 Refreshing feed: 1/1
18.04.2009 18:29:56 ERROR: Die Spalte 'PK' hat die Einschränkung, dass sie eindeutig sein muss. Der Wert 'Nature Podcast;20080618-Nature Extra Eppendorf-Eppendorf_podcast2.mp3' ist bereits vorhanden.

What means in English, that this "value" already exist.
When I open the xml with firefox the file is shown only once.
When I have several feeds to refresh and the Nature feed is included, I would then see the complete list of podcasts underneath (instead of only those from the active row) and would have to restart the program, because it would not start to download or react on any other input.
But again thank you for your efforts!


ARogan said...

Ross, tracked down your problem
On just one of the podcasts there is a stray "(":
Which causes the parsing issue. The quick fix for you is this:
Open CleanupConfig.xml in notepad.
Add this to the ReplaceStrings section add a new ReplaceStruct with oldString:

ARogan said...

Ross, Milan: I just posted v1.39. Give it a try. It should fix your issues.

Thorsten Albrecht said...

It would be nice if one could mark downloaded podcasts as read/non read. This would be useful in combination with a function which allows to delete files directly in rcFeedMe. (I am used to Ziepod, and despite its disadvantages the feature to delete files in Ziepod is very useful for me because I do not have to mess around in the filesystem).


ARogan said...

Thorsten, rcFeedme was really built for downloading only and syncing to some sort of mp3 player for playback. That's why rcFeedme doesn't have a player or really any actual file management. History is there really to facilitate downloads (prevent duplicates and floods) and also for tracking what was synced. The only file deleting/space management is the keep count. So yeah it's all kind of automatic without much manual control but it was done by design. I do look at all feedback and suggestions and do take them into consideration. I'm just not totally convinced this change fits well into the design. Thanks for looking though. The source is available so you are free to mold it into what you want if you can program (or know somebody who does).

suppa said...

Dear ARogan,

thank you, that worked great.
But I experience a new problem with the following feed:

From the log:
29.05.2009 18:45:31 [ERROR] GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!: 0
29.05.2009 18:45:35 Refreshing Selected feeds: 1
29.05.2009 18:45:35 (Feed)Start feed refresh: GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!
29.05.2009 18:45:36 LoadFromFileFast: C:\Programme\rcFeedMe\CleanupConfig.xml: failed while trying to load; Fehler im XML-Dokument (17,5).
29.05.2009 18:45:36 ERROR: (Feed)[GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!]LoadFromFileFast failed. tried too many times: C:\Programme\rcFeedMe\CleanupConfig.xml; ;
29.05.2009 18:45:36 (Feed)Start feed refresh: GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!
29.05.2009 18:45:36 LoadFromFileFast: C:\Programme\rcFeedMe\CleanupConfig.xml: failed while trying to load; Fehler im XML-Dokument (17,5).
29.05.2009 18:45:36 ERROR: (Feed)[GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!]LoadFromFileFast failed.
tried too many times: C:\Programme\rcFeedMe\CleanupConfig.xml; ;
29.05.2009 18:45:36 (Feed)Start feed refresh: GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!
29.05.2009 18:45:37 LoadFromFileFast: C:\Programme\rcFeedMe\CleanupConfig.xml: failed while trying to load; Fehler im XML-Dokument (17,5).
29.05.2009 18:45:37 ERROR: (Feed)[GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!]LoadFromFileFast failed. tried too many times: C:\Programme\rcFeedMe\CleanupConfig.xml; ;
29.05.2009 18:45:37 (Feed)Finished feed refresh with ERRORS: GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben! = 0
29.05.2009 18:45:37 Refreshing feed: 1/1
29.05.2009 18:45:38 [ERROR] GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!: 0
29.05.2009 18:45:38 [ERROR] GEOaudio: Hoeren und Reisen - Mit GEO die Welt erleben!: 0. Finished refreshing all feeds: 1

This is since a month or so.

Might the server be angry for my regular trying? Strange thing is I can access the podcasts with other programs.

Thank you very much in advance!

ARogan said...

Suppa, Oops!! I screwed up in that last release. The cleanupconfig.xml was messed up. It's fixed now. Please re-download the latest rcfeedme.

MichaelC said...

Hi ARogan

I been using app now sucessfully since Feb/Mar (see earlier postings under MichaelC name).

I now have a weird problem!

Problem: Anytime I run a refresh or process all feeds or a scheduled job, it doesn't put anything in the Download Queue. It keeps say the particular feed item is already in history. But it isn't! I completely purged history (having taken a copy of it first) - still the same "Media already exists in collection". I also tried deleting the history file in the install directory (again having taken a copy) - again the same.

I'm a bit mystified!

This is the error I'm getting:

14/06/2009 15:05:32 Saving Settings....
14/06/2009 15:05:32 Settings saved.
14/06/2009 15:06:17 Saving Settings....
14/06/2009 15:06:17 Settings saved.
14/06/2009 15:06:17 Loading Settings....
14/06/2009 15:06:17 Settings loaded.
14/06/2009 15:06:51 Refreshing Selected feeds: 1
14/06/2009 15:06:51 (Feed)Start feed refresh: Stories-The.Moth
14/06/2009 15:06:56 WARNING: (feed)[Stories-The.Moth]Media already exists in collection; Stories-The.Moth;Andrew Postman Look Away - Or Don’t-moth-podcast-72-andrew-postman.mp3
14/06/2009 15:06:56 (Feed)Finished feed refresh: Stories-The.Moth = 15
14/06/2009 15:06:56 Refreshing feed: 1/1
14/06/2009 15:06:56 Stories-The.Moth: 15
14/06/2009 15:06:56 Stories-The.Moth: 15. Finished refreshing all feeds: 1
14/06/2009 15:07:06 Log refreshed.

This is a sample feed setup:
Stories-The.Moth Default 5 False True False False

This may be unrelated ... I recently returned from a business trip which involved changing time zones on laptop.

Help! Any ideas?

ARogan said...

MichaelC, I tried your feed and it seemed to work fine. I had a keep count of 2 so 2 started downloading in the queue. That error message isn't really history related. Is it possible you accidentally added the feed twice? Why not give this a try: re-download the latest rcfeedme, unzip it into a different directory, set it up with just the one feed and let me know if it works or not.

Unknown said...

Hi ARogan,

I just downloaded your program as a replacement for both Juice and iTunes. It worked fine when I added the first feed, but as soon as I tried to add the second one, it froze up and I had to use Task Manager to close it. This happened over and over again when I tried to add this feed:

This is one of my favourite feeds so I don't really want to not add it, but yours seems to be the best podcatcher out there. Any ideas?



ARogan said...

Ted, I just tried your feed and it worked fine (refresh and started downloading). If you have a group specified make sure the path defined exists. You might also check the default save path in settings. Also, was there anything in the log?

David said...

Just wanted to note that I've been using this (awesome) software for over a month on a Vista 64-bit machine and it runs oh so smoothly.

Features that I love and (now) can't do without:
> No installation
> VERY lightweight and resource friendly
> "Once" switch so it doesn't stay on all the time
> No-frills approach

Thank you, thank you!

Houston, TX

ARogan said...

David, glad you found it useful and appreciate the same kind of features I do.

Fwaaa said...

yea i'm a user of juice that had trouble finding an alternative as well. juice likes to forget what i've already downloaded/removed as well occasionally. quite annoying, its also not at all portable.

so far so good with this new program good job:) i would suggest a check all button for many of the checkboxes though. i tried so many others, and they all sucked as said already

my trick with podcasts is to feed them through foobar+soundtouch dsp for time stretching.

Unknown said...

not sure if its a bug or if its a feature you've not implimented but it seems the columns can be rearranged, but they do not save themselves in the new positions. it would be awesome if they would stay put:)

also kuddos for making it more or less portable. running it off a memory stick is sweet:)

ARogan said...

wackawacka, kashatnic:
Good suggestions. Yeah, those are features I just haven't got around to implementing. I've been really busy lately and got some other coding projects I'm working on right now but I'll keep these suggestions in mind.

Unknown said...

Hi. I love rcFeedMe! I am having a problem with one of my podcasts and thought someone might be able to help. The feed link is

When I add it to my Feeds, I never download any podcasts. Here is what appears in the log:

ERROR: (Feed)[Philosophy Bites]'Text' is an invalid XmlNodeType. Line 5, position 2769.

Is there anything I can do to overcome this?


ARogan said...

LarryPM3, give ver 1.40 a try. It should fix the issue.

ARogan said...

Anybody with problematic feeds give this site a try:

Unknown said...

Huzzah! v1.40 fixes my problem! Thanks for the amazingly quick response! Good work!

- Larry

ARogan said...

wackawacka, kashatnic:
The features you have requested have been added! Check out ver 1.41.

Fwaaa said...


that is so kewl:)

Fwaaa said...

One thing, why is it that i cannot run multiple instances? I like to separate my video podcasts from my audio podcasts that way.:)

ARogan said...

Because two instances would totally mangle the xml files. What you might be able to do is copy your entire rcFeedMe directory to another directory, rename the .exe to something else (and maybe the .config file to match) and try it. Still, I really don't see why anybody would want to run two instances at the same time.

Fwaaa said...

Ah, i see, thats the bit i missed, renaming the exe. I already had kept a separate directory for the video podcast download copy of rcfeedme. I do this because i run podcasts through foobar+soundtouch dsp to time stretch them before i shove them on a portable player. mixing video into the directory would make for more work. mostly the video i download is from revision 3.

Anonymous said...

Thanks for the awesome program. I have it running on my Windows Home Server to download some Revision3 programs. I do have one question though... Since Rev3 shows are released around the same time each day, would it be possible to set manual times in the scheduler to run? Possibly in addition to the already set intervals?

Thanks! Awesome work!

ARogan said...

You can just use the run once mode and use the built in Windows Task Scheduler for that.

Anonymous said...

:) I was checking out your command parameters when I was originally setting it up as a service, and I guess it just didn't click with me that windows task scheduler will do what I was looking for.
Awesome :D

Unknown said...

Hi, nice programm! If you need some custome icons, contact me :)

Greets Patrick

MjH said...

This is a nice program, but I've found a couple of issues. The first one is minor. If, when entering a new feed URL, I go and select the 'Prepend Date' check box, I get the following error:

************** Exception Text **************
System.InvalidCastException: Specified cast is not valid.
at rcFeedMe.frmRcFeedMe.dgvFeeds_CellContentClick(Object sender, DataGridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnCellContentClick(DataGridViewCellEventArgs e)
at System.Windows.Forms.DataGridView.OnCommonCellContentClick(Int32 columnIndex, Int32 rowIndex, Boolean doubleClick)
at System.Windows.Forms.DataGridViewCell.OnMouseUpInternal(DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.OnCellMouseUp(DataGridViewCellMouseEventArgs e)
at System.Windows.Forms.DataGridView.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

The good news is that the rcFeedMe is able to continue correctly after the error.

The second issue I found is that the rcFeedMe cannot download from podcasts feeds that require a username and password. Is this something that you would be able to add?

ARogan said...

MJH, I'll look into the issue when I get a chance. Do you have a URL to the podcasts that requires userid/pw?

tchocky said...


Thanks for all your hard work on rcFeedme!

rcFeedme seems to be having trouble with 2 feeds for me. This American Life ( and RadioLab ( rcFeedme loads the feeds fine but it can't download the files. Is it because both of these are Feedburner feeds? Any ideas would be appreciated.


Unknown said...


finally a programme software that's well thought through in terms of user needs. No unnecessary extras, but all you could ever wish for if you're looking for a convenient way of updating your podcasts.
Just wondering if the sync function can be made to work with PDAs. My Syncpath is sth like Computer\HTC_P3650\SD_Card\Music. On hitting the Sync button, the synchronisation process is shown in the status bar and logged as correct, but no files land on my HTC's SD-Card.
I've also checked for workarounds like making Windows recognize my SD card as an external hard disk (assigning it a hard disk letter, e.g. H:\), but this would disallow my ActiceSync to recognize my PDA in turn...:)

If you have any advice, I'd be happy!

Thanks in advance,

ARogan said...

Wow, yeah I've been neglecting rcFeedMe for a bit recently. Been kind of sucked into Wow lately. Anyways, if you can get a unc path to your pda it should in theory work. You might try \\localhost\HTC_P3650\SD_Card\Music or maybe \\youripaddress or \\yourmachinename.

Fwaaa said...

Yea its ok, its been pretty stable.
sadly you didnt make it in the lifehacker top 5 podcatcher roundup.
that was an example of crowdsourcing fail, they actually nominated juice as one of the finalists...egads.

i couldn't nominate because of their stupid comment auditioning system. I guess they managed to weed out quality.

Unknown said...

Thanks for your tips. The funny thing is, that synchronizing to a non-existant folder prompts a failure message, while synchronizing to an existing folder (on my PDA's SD card) appears to work fine. The status bar then shows for some seconds the copying process, finishes it and leaves no error messages in the log file. Still, no files end up on my SD card.
Well, if I manage to find out my Phones virtual adress (IP or whatever it is called in this case), it might still have a chance to work, finally. Otherwise thank you for the cool programme, nonetheless!

Milan said...

Hi ARogan,

I've been using rcFeedMe for quite a while now, and it is absolutely the best Podcatcher around for automated podcatching!
I had a problem with two feeds just recently, and although I know nothing about XML, I could resolve it with the cleanup.xml - it is quite straight forward how to use it. That is a very good idea you had with the cleanup.xml.
A minor issue I found now: When using it on Win 7 with 125% font size I can't reach the bottom line, even when there is a scroll bar. The window content does not fit the window. But as I usually don't check the GUI, I don't really mind.

You should really get a donate button!


ARogan said...

Milan, glad you find it useful. I'll try and get a release out in a week or so. I'll take a look into the 125% issue. Also, great idea on the donate button. I've added one now on the right side :-)

ARogan said...

Wow thanks Milan. That was very generous. I feel a sudden surge of motivation to go fix that 125% font problem..... :-)

Anonymous said...

I'm looking for a lightweight podcatcher to grab a feed generated from an easynews search. However, I will require username/password support. Thanks!

ARogan said...

V1.42 has been released.
MJH, I've added userid/pw support. I need feedback to see if it actually works or not.

tchocky, I tested the two feeds you listed and both worked fine for me.

Milan, I changed my font size to 125% (win 7) and I wasn't able to reproduce the issue. I could change the size of the window all day, and I didn't notice any controls getting clipped. If you can send me a screenshot or something that would help.

Stefan said...


Thank you for the best podcatcher!

I have one suggestion:
My player dont play videos *.m4v, so i must rename them. I have written a batchfile for do this. My Idea is, rcFeedMe would do it. Maybe "Feeds" or "Group Defaults" can have two entries called Rename extension from and to.

Unknown said...

Strange bug/issue for the last couple releases with me. The add to queue button is basically hidden, the column width is too small, and cannot be drag resized.

luminarious said...

Hi! I am trying to use rcFeedMe to download the list of free mp3 files. Except, the filenames are URLencoded and saved to HDD as they are. I don't think it would be unreasonable to URLdecode filenames before saving them to disk, would it?

ARogan said...

kashatnic - very odd, I'll double check the minimum width on that column.

luminarious - Sure, I can take a look for you.

Give me a couple of days and I'll see what I can do for you guys. I'm a bit busy this weekend though.

Unknown said...

odd, the add queue buttons are now fixed again. argh, maybe i'll figure out what set of circumstances leads to the problem later.

ARogan said...

Testing a new release now. I've added urldecode on filename as an option. I also added some cool m3u playlist generation options. If you use subsonic + isub on iphone this might mean the end of syncing audio podcasts through itunes. I should be releasing it in about a week.

Milan said...

Hi ARogan,

I keep having a problem with this feed:

14.08.2010 11:39:32 Refreshing Selected feeds: 1
14.08.2010 11:39:32 (Feed)Start feed refresh: Der Europa-Report - B5 aktuell
14.08.2010 11:39:33 ERROR: (Feed)[Der Europa-Report - B5 aktuell]Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
Parametername: length; ;
14.08.2010 11:39:33 (Feed)Start feed refresh: Der Europa-Report - B5 aktuell
14.08.2010 11:39:33 ERROR: (Feed)[Der Europa-Report - B5 aktuell]Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
Parametername: length; ;
14.08.2010 11:39:33 (Feed)Start feed refresh: Der Europa-Report - B5 aktuell
14.08.2010 11:39:34 ERROR: (Feed)[Der Europa-Report - B5 aktuell]Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
Parametername: length; ;
14.08.2010 11:39:34 (Feed)Finished feed refresh with ERRORS: Der Europa-Report - B5 aktuell = 0
14.08.2010 11:39:34 Refreshing feed: 1/1
14.08.2010 11:39:34 [ERROR] Der Europa-Report - B5 aktuell: 0
14.08.2010 11:39:34 [ERROR] Der Europa-Report - B5 aktuell: 0. Finished refreshing all feeds: 1

I tried to cleanup the errors I find with feed validator, but still no success.
Can you help?


Milan said...

Hi ARogan,

when trying to getting rid of the problem I tried an "extreme" cleanup.

While this should reduce the fixed XML to a small fraction of the original, the fixed one is identical for the feed mentioned above, while this "cleanup" works for other feeds.

However, I found the same behaviour with this feed:

But this one does not make trouble with loading podcasts with rcFeedMe at the moment.

Strange, isn't it?

Milan said...

Sorry, seems you can't paste the XML code in this field.
The "extreme" cleanup was to remove all items.

ARogan said...

Milan, just tried that feed and it is refreshing and downloading fine for me now. Maybe they fixed their feed? Anyways, found an issue with the latest build (related to some new features). I'm going to test it some more and prep for a release soon. Those of you who use subsonic and iSub on iPhone will be pleasantly surprised by the new features.

ARogan said...

rcFeedMe 1.43 has been released.

Milan said...

Dear ARogan,

I keep having the problem with the mentioned feed (
I also get a "Media already exists in collection" error for some of the files, although they certainly are not. Even if I "reinstall from scratch" rcFeedMe to another directory and with other directory settings for downloading. Also, I keep having the problem on two separate systems with different operating system (Win 7 and XP).
Maybe you could have a second look some time?

ARogan said...

Milan, I tried that feed again and it's working fine for me:
feed refresh:

"Media already exists in collection" is only a warning and it is safe to ignore. This just means the exact same filename was listed in the feed more than once and I'm tossing out the duplicate.

Milan said...


I must apologize, the feed I mentioned in my last post was working also for me lately, I copied this adress by mistake, I ment
and also

However, I have found a solution. I need to rename the mentioned feed from the standard name which is extracted from the feed to anything else. Very strange though how the feed name can cause such a problem.

fiddlelearner said...

I'm getting errors that seem to mean that I don't have a folder C:/podcasts to download it to. However I have it set up to download to a different folder, and it was downloading podcasts fine before this morning. I opened config.xml in Notepad and put in my own download folder pathname, and when the program opens, it overwrites it.

22/11/2010 7:35:38 AM ERROR: (Feed)[Freakonomics Podcast]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:38 AM (Feed)Start feed refresh: Freakonomics Podcast
22/11/2010 7:35:38 AM ERROR: (Feed)[Freakonomics Podcast]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:38 AM (Feed)Start feed refresh: Freakonomics Podcast
22/11/2010 7:35:38 AM ERROR: (Feed)[This Week In Tech]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:38 AM (Feed)Finished feed refresh with ERRORS: This Week In Tech = 0
22/11/2010 7:35:38 AM Refreshing feed: 6/7
22/11/2010 7:35:38 AM ERROR: (Feed)[This Week In Tech]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:38 AM (Feed)Finished feed refresh with ERRORS: This Week In Tech = 0
22/11/2010 7:35:38 AM Refreshing feed: 6/7
22/11/2010 7:35:39 AM ERROR: (Feed)[Freakonomics Podcast]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:39 AM (Feed)Finished feed refresh with ERRORS: Freakonomics Podcast = 0
22/11/2010 7:35:39 AM Refreshing feed: 6/7
22/11/2010 7:35:39 AM [ERROR] This Week In Tech: 0
22/11/2010 7:35:39 AM [ERROR] This Week In Tech: 0. Finished refreshing all feeds: 6
22/11/2010 7:35:39 AM Build queue started....
22/11/2010 7:35:39 AM Build queue finished: 0
22/11/2010 7:35:39 AM Processing Queue....
22/11/2010 7:35:39 AM (Cleanup)deleted queue items: 0; moved to history: 0; moved to errors: 0
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM WARNING: (TrimFiles)Path doesn't exist: c:\podcasts
22/11/2010 7:35:39 AM Nothing in the queue to process.
22/11/2010 7:35:39 AM Finished RunBatch
22/11/2010 7:35:39 AM ++++++++++++++++++++++++++++++++++++++++++++++++++++++
22/11/2010 7:35:39 AM ERROR: (Feed)[Freakonomics Podcast]Path doesn't exist: c:\podcasts; ;
22/11/2010 7:35:39 AM (Feed)Finished feed refresh with ERRORS: Freakonomics Podcast = 0
22/11/2010 7:35:39 AM Refreshing feed: 0/0
22/11/2010 7:35:39 AM [ERROR] This Week In Tech: 0
22/11/2010 7:35:39 AM [ERROR] This Week In Tech: 0. Finished refreshing all feeds: 7
22/11/2010 7:35:48 AM Error Log refreshed.

Jake said...

Thanks for making rcFeedMe. I am an American living in Brazil. I work at an orphanage with some other Americans. We have a slow Internet connection. I am using rcFeedMe to download video podcasts, then I made a php script to create a new podcast feed on my server. Now my friends can download the podcasts over the LAN into their iTunes after rcFeedMe gets them from the internet. This saves bandwidth - we just download it once from the net instead of 3-4 times. Thanks!

Glenn Blinckmann said...

I'd also like to thank you for making rcFeedMe! I needed something that would download video podcasts for Windows Media Center. I tried Poca for Windows Home Server, but that couldn't download many of the podcasts I like. This rcFeedMe seems to work perfectly.

Anonymous said...

Hello, and thank you for a nice application. I would like to report what seems like a bug: non-ASCII/multibyte characters show up garbled; e.g. the presumably UTF8-encoded looks just fine in Firefox but has åäöÅÄÖ replaced by what I presume to be pairs of Windows-1252 characters (ä → ä and so on) in rcFeedMe.

Unknown said...

rcFeedMe is just the kind of clean, no-frills podcatcher I was looking for, thank you!

rcFeedMe seems unable to parse the GWJ Conference Call, however. When I "Refresh All Feeds" I get this error message:

1/24/2011 6:30:53 AM ERROR: (Feed)[GWJ Conf Call]Error in line 15 position 480. An error was encountered when parsing the item's XML. Refer to the inner exception for more details.; Input string was not in a correct format.

This is the url I'm using for the feed:

ARogan said...

error in the rss feed was here on line 123:

specifically the length="unknown". I modified the cleanupconfig.xml to strip that out so it works now. Just redownload the latest rcfeedme which now has the updated cleanupconfig.xml file.

Fwaaa said...

Its been pretty good except that it seems to get slower on the refresh feeds over time. I've tried reducing scan threads, but it is the same, I do have a lot of feeds though. Basically rcfeedme gets a bit unresponsive during this refresh even though it isn't obviously using more cpu or anything in process manager.

Anonymous said...

Bug report: I get an "unhandled exception" when I enter a URL (e.g. this one), press enter and tick that feed's "prepend date" box. This only seems to happen when I tick the box immediately upon adding the feed.

megajinn said...

Thank you for the excellent piece of software!
Works like a charm with the password-protected podcasts, where Ziepod fails.
And looking at the log, I can understand what the app is doing.
I've got a few unhandled exceptions, but they didn't prevent the app from functioning.
Great job!

Fwaaa said...

Looking to move my 150 feeds into rcFeedMe, I can set the Keep count to -1 so as to retain everything - this works fine. But it also downloads again everything I've already downloaded. Is there some way I can stop this behaviour ? Maybe add a cut-off date before which nothing should be processed by default ? Or separate the keep and download counts ?
Only if you don't build the queue, don't do the auto refresh and process in one step, refresh all, then build the queue, then send all the podcasts you've already downloaded to history.

ARogan said...

fwaa, what should be happening is when you first flip keep count to -1 it's going to download everything. Once that happens the history will be properly populated so those will never get downloaded again. Now, if you want to pre-populate history you can do that to as I described above in the queue tab. What you can do is build the queue, then move the queue items to history. Now, those files in history won't get downloaded. FYI, I'm working on a new release with some bug fixes, a new hidden mode (like run once but you no longer get that annoying window that shows up a few seconds), and a post processing cli hook.

Breg said...

Great Program

Is there a way to limit the download speed of podcasts like some bittorrent clients can do for torrents?

Karl said...

First off, thanks a lot for this great program, does exactly what I need - which can't be said about the rest I've tried!

I'm seeing a problem with one of my feeds though, it gives the following error:

ERROR: (Feed)[JFN ON THE WAY ジャーナル]'Text' is an invalid XmlNodeType. Line 346, position 247.; ;

Does that mean the feed is non-standard in some way? It shows up fine in my browser, and it used to work with rcFeedMe as well, but apparently they changed something. I'm using the latest v1.44f.

kiranmark42 said...

Hello,I love reading through your blog, I wanted to leave a little comment to support you and wish you a good continuation. Wishing you the best of luck for all your blogging efforts. javed chaudhry columns

Fwaaa said...

Feeds seem to be failing, downloading files sized 900~bytes each instead of the real file. I've tried redownloading the app, running a separate clean test version with just one feed and it does the same
stuff like

Fwaaa said...

Forgot to add there is no error logged as it thinks its downloaded the files.

ARogan said...

A friend reported this issue about a week ago. Problems seem to be with a lot of major aggregation and publication sites, like libsyn and Wordpress. I'll try to get to it soonish but I've been crazy busy at work (lots of overtime) so I haven't felt like looking at code at home in a while.

Fwaaa said...

Hm, it maybe fixed, perhaps the problem was with feedburner itself. So far today it has downloaded the feeds correctly.

Anonymous said...

Some suggestions:

1.- When choosing to stop all downloads, the currently downloading file disappears from the queue, is there a way to change this?

2.- Is there a way to keep the feeds sorted by name?

3.- Is there a way to not prepend the title but use it as the filename?

Fwaaa said...

Hi, I've noticed it fails in a bad way if you run out of space while downloading, you end up with a program that has no feeds on load, all the rrs links are gone even after you make space as if it has been corrupted.

I've taken to making sure I've got a second copy of the previous use of the program to make sure that if it goes to hell, I can fall back to just last time instead of starting over.

Any idea whats up? Or is there an easy way to fix this?

ARogan said...

Yeah, I never tested for out of space condition. The idea is to adjust your keep counts so you never run out. I'll try and at least put in a free space check for the next release. If it falls below a user set threshold it will just skip that run and log why.

Tom said...

Thanks so much. Nothing out there is as good as this.

Tom said...

Also thx for the command line options.