Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
gPodder 0.10.4 "Faster Pussycats Kill" released

	* bin/gpodder: gpodder 0.10.4 released :)
	* README: gPodder 0.10.4 released :)
	* doc/man/gpodder.1: gPodder 0.10.4 released :)
	* data/po/de.po: Updated German translation
	* data/messages.pot: Updated from source
	* data/po/*.po: Updated from messages.pot

Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
Create Bittorrent download directory on startup

	* src/gpodder/libgpodder.py: Create Bittorrent download directory on
	startup, so the first time gPodder preferences are shown, the download
	folder will exist and now throw an error

Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
Updated French translation file with correct encoding

	* data/po/fr.po: Updated French translation with correct encoding by
	Jérôme Chabod - thanks!

Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
Czech translation update: gpodder.desktop

	* data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
	Czech translation strings to the gpodder.desktop file - thanks

Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
Added Czech translation by Ondrej Vesely

	* data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
	<xorwen@gmail.com>; the completed translation will be updated when
	it's done
	* setup.py: Add "cs" (Czech) to list of translations

Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
Updated Swedish translation from Anders Kvist

	* data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
	now up-to-date again

Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
Updated French translation from Jérôme Chabod

	* data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
	now up-to-date again

Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
Updated Dutch translation from Pieter De Decker

	* data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
	now up-to-date again

Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
Update translation template and translations from source

	* data/messages.pot: Updated potfile from source code
	* data/po/*.po: Updated translation templates from potfile

Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
Add menu item that links to gPodder's new bug tracker

	* data/gpodder.glade: Add bug tracker item to help menu
	* src/gpodder/gui.py: Add code to open a webbrowser with the bug
	tracker when the bug tracker icon is clicked

Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
Add a checkbox to keep episodes when removing channels

	* src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
	removing a podcast channel, so the user has the option to remove the
	podcast feed from gPodder's subscription list, but still keep the
	downloaded files on the harddisk (via a checkbox in the dialog)
	(Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)

Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
Updated Russian translation by Hex

	* data/po/ru.po: Updated Russian translation by
	Hex <justin.forest@gmail.com>

Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
Updated Swedish translation by Anders Kvist

	* data/po/sv.po: Swedish translation updated by
	Anders Kvist <kvistkvist@telia.com>

Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
Use os.rename to make channel list saving atomic

	* src/gpodder/opml.py: Make the saving of the channel list atomic by
	first saving it to a temporary file and then using os.rename to really
	move the file in place (this should make the channel list saving very
	stable and protect against certain bad system conditions where the
	channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
	the suggestion and pointers to improve the channel saving code

Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
Make logging in libpodcasts less verbose

	* src/gpodder/libpodcasts.py: Remove some verbose logging code

Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
Migrate from channels.xml (from 0.9.4) to channels.opml if needed

	* src/gpodder/libgpodder.py: Add code to check if channels.xml exists
	but channels.opml doesn't and if so, try to convert from channels.xml
	to channels.opml, so users upgrading from 0.9.4 directly will have
	their channel list automatically converted;
	thanks to Tim Michelsen for the bug report and helpful Ubuntu info

Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
Add download completion notification support

	* src/gpodder/download.py: Notify the download status manager when a
	download has been completed successfully
	* src/gpodder/services.py: Add download-complete signal to list of
	possible signals and download_completed() method to be used by
	downloads to notify the status manager of a successful download

Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
Patch the feedparser module to correctly process democracynow.org

	* src/gpodder/cache.py: Add a patch_feedparser() method that checks of
	the feedparser module correctly maps the "plain" content-type to the
	correct "text/plain" content-type and if not, replace the
	mapContentType method with a fixed one; this should make the audio
	podcast on democracynow.org working (thanks to Clark Burbidge for the
	bug report)

Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
Better username/password extraction from URLs

	* src/gpodder/util.py: Improve username and password extraction for
	authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
	Donohoe <priestoftime@googlemail.com> for reporting this bug and
	sending in a patch; this should allow for e-mail address usernames

Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
Also delete old episodes that have disappeared from the feed

	* src/gpodder/gui.py: When deleting old episodes automatically, also
	delete episodes that have disappeared from the RSS feed and are only
	available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
	for the very detailed and helpful bug report :)

Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
Stability updates: Feed cache update, old PyCairo versions

	* src/gpodder/draw.py: Add a workaround for pycairo versions less than
	1.1.6. Thanks to Chris Arnold for reporting this bug on the
	gpodder-devel mailing list and taking the time to test the patch and
	report back and provide useful information for debugging this error
	* src/gpodder/gui.py: Close the feed cache update dialog even when the
	user clicks on "cancel" (would have stayed there otherwise)

Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
Merge "delete episode after sync" patch from Jérôme Chabod

	* data/gpodder.glade: Add GUI elements in preferences dialog to select
	what to do after episode sync (nothing, delete or mark played)
	* src/gpodder/config.py: Add "on_sync_delete" configuration option
	* src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
	* src/gpodder/libipodsync.py: If the configuration option
	on_sync_delete is set, remove the episode after successfully copying
	it to the iPod or MP3 player (the whole patch has been initially done
	by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
	* src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
	robust, so it doesn't disturb libipodsync's functionality

Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
Remove invalid channel cover images when loading fails

	* src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
	it cannot be loaded (assume something went wrong when downloading the
	cover file); re-downloading the cover manually can solve the problem

Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
Fix typo in last commit

	* src/gpodder/libipodsync.py: Fix typo in last commit

Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
Modify played handling in iPod sync when "on sync mark played" is active

	* src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
	if the on_sync_mark_played option is set

Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
Merge patch from Leonid Ponomarev to gdfs

	* doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
	support for the system's native encoding, based on the $LANG
	environment variable. This should add support for episodes and
	channels with international characters as titles

Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
Updated Dutch translation by Pieter De Decker

	* bin/gpodder: We're in development again: "+svn"
	* data/po/nl.po: Updated Dutch translation from Pieter De Decker

Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
gPodder 0.10.3 "A Stop at Willoughby" released

	* bin/gpodder: gPodder 0.10.3 released :)
	* README: gPodder 0.10.3 released :)
	* doc/man/gpodder.1: gPodder 0.10.3 released :)
	* data/messages.pot: Updated from source
	* data/po/de.po: Updated German translation
	* data/po/*.po: Updated from messages.pot

Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
Link the gPodder Documentation Wiki from the help pages

	* data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
	and Documentation Wiki (instead of Mailing list)
	* src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page

Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
Remove TODO file from MANIFEST.in

	* MANIFEST.in: Of course we have to remove non-existing files from the
	MANIFEST.in file, too.. so TODO is now finally gone :)

Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
Manage TODO list on the gPodder Wiki

	* TODO: Removed; new location: http://gpodderwiki.jottit.com/todo

Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
Configuration for "old" episodes; automatically remove old episodes

	* src/gpodder/config.py: New boolean auto_remove_old_episodes
	configuration option that defaults to False (remove on startup)
	* src/gpodder/gui.py: Add code to automatically remove old, unplayed
	episodes on startup if the specific configuration options have been
	set; connect config manager to GUI items for the preferences dialog
	* data/gpodder.glade: Add checkbox for automatically removing old,
	unplayed episodes from gPodder on startup and a spinbutton to set the
	amount of days after which an episode is considered "old"

Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
Merged episode locking patch from Paul Rudkin

	* src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
	locked, patch by Paul Rudkin <paul@thegithouse.com>
	* data/gpodder.glade: Add menu item for toggle locked status
	* src/gpodder/libgpodder.py: Add "locked" history
	* src/gpodder/libpodcasts.py: When requesting a status icon, also draw
	the "Locked" status; is_locked() in podcastItem
	* src/gpodder/util.py: Added code for drawing a padlock icon on top of
	another (file type) icon; this is used for the "lock episodes" feature

Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
Updated TODO list

	* TODO: Updated TODO list

Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
Move observer code out of DownloadStatusManager into ObservableService

	* src/gpodder/services.py: Move out all observer-related code like
	registration, unregistration and notification to a new
	ObservableService class; subclass ObservableService in
	DownloadStatusManager; this makes the observer code in
	DownloadStatusManager re-usable (will be needed for new sync code)

Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
Selective iPod episode clean-up; "delete older than X days"

	* src/gpodder/config.py: Add episode_old_age configuration variable;
	is an integer, defaults to 7. This is the number of days after which
	an episode will be considered "old"
	* src/gpodder/gui.py: iPod cleanup is now done selectively using the
	episode selector dialog; the code has been split, because we do not
	yet have an episode selector dialog for FS-based sync; add "Downloaded
	x days ago" column to "Delete old episodes" dialog and a corresponding
	button; call the callback even when no episodes are selected in
	gPodderEpisodeSelector
	* src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
	moved to __init__ to be instance variables (this should fix a bug that
	crops up now that we can selectively delete episodes); remove_tracks()
	and clean_playlist() have been modified/added to support new episode
	selector deletion code
	* src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
	podcastChannel (it really belongs to the item; this makes code more
	readable in other parts of the codebase); add age_in_days(), is_old(),
	get_age_string() and age_prop to podcastItem
	* src/gpodder/util.py: New function: file_modification_datetime();
	returns a datetime.datetime instance of the MTIME (modification
	timestamp) of the filename given as parameter or None if the filename
	cannot be determined; this is used for the "old episodes" feature

Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
Make has_converter() a bit more intelligent in detecting extensions

	* src/gpodder/libconverter.py: Convert given extension to lowercase
	and strip a leading "." from the extension, so calling code can also
	give the second value of the os.path.splitext() result directly to
	has_converter()

Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin

	* src/gpodder/config.py: Fix pre-setting code for filechooser-related
	code; use set_current_folder() instead of set_filename()
	* src/gpodder/gui.py: Fix pre-setting code for filechooser-related
	code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch

Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
Support for itms:// links (direct links to the Apple iTunes Music Store)

	* src/gpodder/util.py: Support direct itms:// links by splitting out
	the iTunes Podcast links parsing routines. This should put us in for
	some nice iTunes podcast link support that will automagically
	translate iTunes podcast links to the correct RSS feed URL

Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
Support for iTunes Podcast links (http://phobos.apple.com/...)

	* src/gpodder/util.py: Add support for subscribing to iTunes Podcast
	links (those with phobos.apple.com); new functions:
	parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()

Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
Added Galician translation from Teo Ramirez

	* data/gpodder.desktop: Added Spanish and Galician translations;
	thanks to Teo Ramirez <teoramirez@gmail.com>
	* data/messages.pot: Updated from source
	* data/po/de.po: Updated
	* data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
	* data/po/*.po: Updated from source
	* setup.py: Added Galician (gl) translation by Teo Ramirez

Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
Sort channel list (finally ;)

	* src/gpodder/libpodcasts.py: Sort channels by lowercase title before
	returning the channel list in load_channels(); this automagically
	makes gPodder's channel list always sorted :)
	Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
	sending in an intial patch that led to this patch =)
	* TODO: Remove implemented item: Sort channel list

Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
Do grayscale "pill" instead of theme-based colors (for bad themes)

	* src/gpodder/draw.py: Always draw the "pill" in semi-transparent
	black/grey shades so it will work for all GTK themes (even Ubuntu's)

Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
Update channel navigator when iPod/MP3 player sync has finished

	* src/gpodder/gui.py: Update channel navigator when iPod sync has
	finished, so we can update the "played" status in the channel
	navigator when this status has changed after we've synced ("on sync
	mark played" option)

Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
Add option to mark episodes as played after transfer to device

	* data/gpodder.glade: Option added to preferences dialog
	* src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
	an episode as played when it gets transferred to a device
	* src/gpodder/gui.py: Glue code for GUI + gpodder.config
	* src/gpodder/libipodsync.py: On sync, mark episode as played if the
	user has selected the "on_sync_mark_played" option
	* TODO: Remove implemented/integrated items

Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
Fix a fatal bug with first-run that prevents channel list saving

	* src/gpodder/util.py: Always use a file's parent directory to get the
	free disk space and return zero free disk space when the parent
	directory does not exist

Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
Support for itpc:// URLs

	* src/gpodder/util.py: Add support for adding "itpc://" URLs (these
	are simply http:// URLs with a different schema, for iTunes)

Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
Draw channel stats (unplayed, downloaded) on channel navigator

	* bin/gpodder: We're in development again, so add "+svn"
	* src/gpodder/draw.py: Added
	* src/gpodder/gui.py: Fix import of renamed "channels_to_model";
	re-assign new column numbers for treeChannels' data model; add
	cell renderer for pill pixbuf and remove cell renderer for status text
	* src/gpodder/libpodcasts.py: Add episode_is_new() function to
	podcastChannel to check if an episode can be considered "new"; use the
	episode_is_new function in get_new_episodes; add get_episode_stats()
	after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
	channels_to_model and clean out old, unused code and columns

Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released

	* bin/gpodder: gPodder 0.10.2 released :)
	* doc/man/gpodder.1: gPodder 0.10.2 released :)
	* README: gPodder 0.10.2 released :)

Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
Translation updates

	* data/messages.pot: Refreshed from source
	* data/po/*.po: Refreshed from messages.pot
	* data/po/de.po: Updated German translation

Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
Make sure there is enough free disk space when saving OPML channel list

	* src/gpodder/gui.py: Notify user that there's some problem saving the
	current channel list when save_channels() return False
	* src/gpodder/libpodcasts.py: Pass-through the return value of
	gpodder.opml.Exporter.write so calling code knows if saving the
	channel list was successful or not
	* src/gpodder/opml.py: Check free disk space before saving OPML
	channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
	for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)

Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
Don't send Referer header when downloading episodes

	* src/gpodder/download.py: Some podcasts now implement an
	"anti-bandwidth-theft" code that should provide other websites from
	not linking to the episodes; as we have sent a Referer header
	containing the RSS feed URL, this causes problems; Referer header
	sending is therefore disabled now

Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
TODO items from Katy G. B.

	* TODO: Updated TODO list

Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)

	* src/gpodder/gui.py: Do not hook up tooltip handlers when we are
	using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)

Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
Check free disk space before copying files to iPod

	* src/gpodder/libipodsync.py: Check if the iPod's filesystem has
	enough free disk space before copying files over to it, as to not
	corrupt the iTunesDB in certain situations and fail when disk is full;
	thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
	* src/gpodder/util.py: Add get_free_disk_space() function that
	calculates the free (user-available) disk space on a given path

Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
Add informative tooltips to channel navigator

	* src/gpodder/gui.py: Add tooltips to channel navigator that show a
	bigger cover image, the title, description, url and used disk space
	* src/gpodder/libpodcasts.py: Add save_dir_size property to
	podcastChannel that contains the disk usage of the channel's save_dir;
	this can be manually updated by calling update_save_dir_size() and
	will automatically be updated when the GUI code hooks into the
	channel; also add get_cover_pixbuf() that returns a pixbuf of the
	cover for a given size or None if there is no valid cover file

Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
Slipstream code (enumerate instead of simple position tracking)
	* src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
	of episodes instead of keeping track of the position "by hand"

Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
Ignore initial window events from GtkWindow in Config

	* src/gpodder/config.py: Add a flag to config manager to ignore window
	events until the window has been realized; then, start taking position
	and size updates

Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
Improve caching for HTTP redirects and minor errors; cache clean-up

	* src/gpodder/cache.py: Cache content when it comes from a HTTP
	redirect (301, 302, 307); cache feeds even with parsing errors, so we
	can "fill" our cache and not download on every startup
	* src/gpodder/libpodcasts.py: Add cache clean-up code after loading
	channels; this should keep the feedcache.db file smaller for users
	that like to try out new channels (or have used gPodder for a while)

Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
Better file extension guessing for URLs

	* src/gpodder/util.py: Improve file_extension_from_url() by adding
	additional checks for known good extensions and recurse into the query
	string if it looks like an URL; this should fix compatibility problems
	for feeds with strange URLs; should provide more reliable guessing;
	thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report

Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
Fix format_filesize() usage in episodes selector and podcastItem

	* src/gpodder/gui.py: Use the correct (config-using) format_filesize()
	function to generate the total size string in the episode selector
	* src/gpodder/libpodcasts.py: Use the correct (config-usig
	format_filesize() function to generate the total size string in
	podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
	pointing that out
	* data/gpodder.glade: Use "Preferences" instead of "Preferences..."
	which feels a bit better in the GUI

Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
Add "gPodder download folder synchronizer" scripts to repository

	* doc/dev/gdfs/gdfs-check.py: Added
	* doc/dev/gdfs/gdfs-init.py: Added
	* doc/dev/gdfs/README: Added

Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
The mighty episode selector dialog and some menu re-arrangements

	* src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
	positioning code to GladeWidget to be universally usable; update
	"Device" menu item on startup; new functions: delete_episode_list()
	and download_episode_list() that both operate on lists of episodes;
	add code for invoking gPodderEpisodeSelector for deleting old
	episodes; re-work on_itemDownloadAllNew_activate to use the episode
	selector instead of hand-crafting a message dialog text; add
	update_item_device() function that will handle the hiding, showing and
	renaming of the "Device" menu in the menubar; clean-up
	gPodderProperties with callback_finished setting (now kwarg-based);
	new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
	that will prove to be useful in some places in our codebase: it
	basically allows the user to select a subset of episodes from a given
	list in a quite sophisticated way; new "delete old episodes" menu item
	added for cleaning up gPodder's downloads
	* src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
	method to podcastItem; other convenience properties and functions
	needed for the new episode selector dialog: pubdate_prop,
	get_filesize_string(), filesize_prop, get_channel_title(),
	channel_prop, get_played_string(), played_prop
	* data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
	gPodder's main menu to be more usable and more compact; also added the
	Ctrl+K "Remove old episodes" menu item; also use the correct
	"multimedia-player" icon name of a not really representative icon

Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
Support syncing to FS-based MP3 players without subfolders

	* data/gpodder.glade: Add checkbox "Create a subfolder for each
	channel" to preferences dialog and rename some widgets
	* src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
	option that defaults to True (create subfolder for each channel)
	* src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
	to preferences dialog; do more intelligent widget hiding for the
	"Player" tab in the preferences dialog (only show relevant widgets)
	* src/gpodder/libipodsync.py: Only append channel name as subfolder to
	destination folder name when the "fssync_channel_subfolders" option is
	True; suggested by Paul Elliot <omahns.home@gmail.com>

Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
Fix offline cache behaviour when time is not set

	* src/gpodder/cache.py: Return cached_content in offline mode when
	cached_content "is not None" (instead of cached_time "is not None")

Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
Process events before connecting Config to gtk windows

	* data/gpodder.glade: Remove default size for main gPodder window, as
	this is now handled by the config manager
	* src/gpodder/config.py: Process GTK events in the event queue before
	connecting to the "configure-event" signal, so we won't get two
	configure events for the window for the initial size change

Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
Add error reporting when download fails because of an I/O error

	* src/gpodder/download.py: Catch and handle I/O errors in
	DownloadThread and format and pass on messages to GUI code when
	required; thanks to Florian Richter <Florian_Richter@gmx.de> for
	suggesting this feature after having a full disk
	* src/gpodder/gui.py: Update tree view when adding a new episode;
	add new notification() method and pass this method through to
	DownloadThread, so it can present messages to the user (i.e. errors)

Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
Use util.find_command in more places (mplayer detection, ...)

	* src/gpodder/libgpodder.py: Use util.find_command to detect the
	existence of the "gnome-btdownload" command and spit out a warning log
	message when the command is not available
	* src/gpodder/libipodsync.py: Use util.find_command to check for an
	installed mplayer binary (instead of relying on os.system("which...")

Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
Better command detection for the converter library

	* src/gpodder/libconverter.py: Detect existence of commands before
	invoking them for converting files; based on a patch by
	Nick (nikosapi.org); ConverterCollection is now a dict itself :)
	* src/gpodder/util.py: Add new find_command() function that will
	search the system's PATH for a specific executable command

Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
Remove extracted cover art when deleting episode files

	* src/gpodder/util.py: Apply modified version of a patch from
	Nick (nikosapi.org) that is better suited for deleting cover art that
	has been extracted with the new eyeD3 cover art extraction code

Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
Patch from Nick (nikosapi) to support eyeD3 cover art extraction

	* src/gpodder/libipodsync.py: Apply modified version of a patch from
	Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
	sync code; remove dependency on PyID3
	* README: PyID3 is not a dependency anymore, as we can now use eyeD3
	for the same purpose (cover art extraction)

Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
Fix format_filesize() function to be standards-conformant (unit prefixes)

	* src/gpodder/config.py: Add "use_si_units" configuration option; if
	True, the user will see SI units (MB, kB, ...); if False (the
	default); the user will see binary-prefix units (MiB, KiB, ..)
	* src/gpodder/libgpodder.py: Add pass-through function
	"format_filesize()" to gPodderLib that combines the
	util.format_filesize function with the gPodder-specific config option
	* src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
	<z0idberg@gmx.de> to add support for SI units and binary prefixes to
	format_filesize(); this makes the function standards-compliant
	* src/gpodder/download.py: Updated to use new format_filesize
	* src/gpodder/gui.py: Updated to use new format_filesize
	* src/gpodder/libpodcasts.py: Updated to use new format_filesize

Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
New Configuration/Settings Manager; massive code clean-ups

	* src/gpodder/config.py: Added new Configuration Manager that
	automatically keeps track of saving changed values and is also able to
	watch GTK widgets for changes; this should simplify our settings
	management and give us a single place for maintaining settings
	* src/gpodder/download.py: Access settings from new config manager
	* src/gpodder/gui.py: Make use of new config manager to connect
	widgets and settings from the GUI directly to the config manager;
	remove manual loading and saving of settings; auto-connect as much as
	possible in the gPodderProperties dialog to get real-time automatic
	configuration saving; fix the other code to use new config manager
	* src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
	old cruft and dead code that has been lying around in libgpodder for
	some time now; remove configuration code; utilize config manager;
	unify DownloadHistory+PlaybackHistory in new HistoryStore class;
	reduce number of import statements
	* src/gpodder/libipodsync.py: Access settings from new config manager
	* src/gpodder/libplayers.py: Removed dotdesktop_command()
	* src/gpodder/libpodcasts.py: Move locking functionality into this
	module, as locking is only used here; access config from new manager
	* src/gpodder/services.py: Use config manager to get settings
	* src/gpodder/util.py: Add format_desktop_command() function, based on
	the dotdesktop_command() function from libplayers

Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
Add ability to open download folder from channel's context menu

	* src/gpodder/gui.py: Add "Open download folder" menu item to channel
	navigator context menu
	* src/gpodder/libgpodder.py: Add open_folder() method that will open
	the DE's default folder browser via "xdg-open"

Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
Limit filename on FS-based sync to 50 characters

	* src/gpodder/libipodsync.py: Do not allow extremely long file names
	that could theoretically be generated by using data from RSS feeds;
	this is needed to make FAT-based drives work with files that would
	otherwise have file names that are too long

Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
Escape RSS-provided strings in Pango markup

	* src/gpodder/gui.py: Escape strings in Pango markup
	* bin/gpodder: we're in development again, so "+svn"

Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released

	* bin/gpodder: gPodder 0.10.1 released :)
	* doc/man/gpodder.1: gPodder 0.10.1 released :)
	* README: gPodder 0.10.1 released :)
	* data/messages.pot: Refreshed template from source files
	* data/po/de.po: Updated German translation for the 0.10.1 release
	* data/po/*.po: Refreshed translation files from template

Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
Add "Save episode to file" handling to episode list context menu

	* data/gpodder.glade: Use a stock "Save As" button for the "Copy
	episode to file" button
	* src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
	that shows a copy dialog where a user can copy a file to a selected
	destination (this is used for "Save episode to file"); use
	show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
	folder" menu item in episode list context menu and use
	show_copy_dialog to carry out the user interaction

Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
Allow "https://" URLs for episode URLs, as we can handle these, too

	* src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
	can handle https URLs, thanks to Aravind Seshadri
	<aravind@aravind.name> who initially reported this bug

Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
Sync videos to the "Video Podcasts" playlist instead of the "Video" menu

	* src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
	<niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
	of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB

Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
sync_filename in podcastItem; cleanup; hide extra progressbar on transfer

	* src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
	unnecessary second progressbar when only syncing one channel (i.e.
	when clicking on the "transfer" button in the main window
	* src/gpodder/libgpodder.py: Remove unneeded lexists import and
	warning; clean-up
	* src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
	* src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
	returns the custom_sync_name or the title of the episode, based on the
	user's configuration settings for FS-based MP3 player sync

Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
Add wishlist items to TODO list from Paul and Wilfred

	* TODO: New wishlist items, ideas and suggestions

Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
Limit download progress status updates to reduce CPU load

	* src/gpodder/download.py: Limit the amount of status updates the
	download threads send to the DownloadStatusManager to one per second;
	this should make gPodder less CPU-intensive with many parallel
	downloads; thanks to Wilfred van Rooijen for reporting and testing

Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
Update channel models (icons) after iPod synchronization

	* src/gpodder/gui.py: Call update_model() on each channel after an
	iPod sync, so we can update the played state on the available episodes
	lists when played state was changed by the iPod sync

Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
Fix loading of channel metadata (load auth data and settings)

	* src/gpodder/libpodcasts.py: Load channel metadata when loading a
	podcastChannel object from OPML/LocalDB. This fixes a problem with
	authentication data being not loaded and also fixes a bug when the
	custom-set channel title was not correctly used throughout the GUI.
	Thanks to Nick (nikosapi) for reporting and providing a patch

Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
Finally remove Desktop symlink code; several compatibility fixes

	* src/gpodder/download.py: Prevent divide-by-zero errors when
	calculating download speed
	* src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
	percentage done in code for moving the downloaded items folder
	* src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
	because it's not GUI-accessible anymore and we didn't use it anyway
	* src/gpodder/opml.py: Better local filename detection by using
	os.path.exists() instead of .startswith('/'); this is also good for
	cross-platform compatibility where parts don't usually start with a
	forward slash (i.e. Win32)

Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
Channel list selection bug fixes

	* src/gpodder/gui.py: Fix some channel list-related problems and
	annoyances, based on a patch by Nick (nikosapi)
	* bin/gpodder: We're in development again, so "+svn"

Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
gPodder 0.10.0 "Hier spricht Frank Drebin" released

	* bin/gpodder: gPodder 0.10.0 released :)
	* doc/man/gpodder.1: gPodder 0.10.0 released :)
	* README: gPodder 0.10.0 released :) (and: updated dependencies)
	* TODO: Updated TODO list (some items are done for 0.10.0 :)

Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
Updated translations from Rosetta (Launchpad.net)

	* data/po/es.po: Spanish translation by Julio Acuña
	* data/po/pt.po: Portuguese translation by Joel Calado (completed :)

Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
Fix problems with path selection in treeChannels

	* src/gpodder/gui.py: Simple bugfix

Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
Center gPodderEpisode on treeAvailable for less mouse hopping

	* src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
	window on the treeAvailable, because that makes the position of the
	opened dialog more predictable and easier to use (as if the
	gPodderEpisode dialog was "inside" the treeView from which it opened)

Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
Don't translate feed format string examples

	* src/gpodder/gui.py: Don't mark format string examples as
	translatable

Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
Small bugfix for updating treeChannels when its model changes

	* src/gpodder/gui.py: Bugfix

Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
Removed channel combobox, drag'n'drop improvements + new channel cover editor

	* data/gpodder.glade: Remove comboAvailable in gPodder (main window);
	add download+clear button in gPodderChannel, rename some items that
	are now used in code; make the channel navigator non-shrinkable (so
	it is always visible, because we don't have comboAvailable anymore)
	* src/gpodder/gui.py: Remove support for the channel combo box,
	also known as comboAvailable; clean-up DND code and make treeChannels
	the only DND target in the main window; remove some unnecessary
	updating of the channel list (calls to updateComboBox);
	Changes for the gPodderChannel dialog: Don't automatically download
	channel cover when dialog pops up; add "Download" and "Clear" buttons
	to the cover editor; add DND support for dropping local files or
	images from the web browser to the cover editor (for setting custom
	covers on channels with bad or no cover)
	* src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
	URL is invalid, but the image has already been downloaded (because we
	read the downloaded image in the code when it exists, without URL)

Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
Center feed update dialog on main window; scroll reset in chan.navigator
	* src/gpodder/gui.py: Reset the current scroll position of the channel
	navigator when re-loading the channel list; this fixes an annoyance
	that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
	with a HUGE channel list (more than 50 channels); also removed the
	scroll position reset code from treeAvailable, as we already managed
	to only edit the model instead of re-loading it every time; added code
	to really center the feed update dialog on gPodder's main window

Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
Replace wget with new gpodder.download module; User-agent support

	* bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
	for wget, as this is not needed anymore
	* src/gpodder/cache.py: Clean-up; remove old logging code; add support
	for gpodder.user_agent; log info when there is an error in parsing the
	feed, so the user knows why this feed is not cached
	* src/gpodder/console.py: Remove DownloadPool, Use new
	gpodder.download module for carrying out downloads, remove
	wget_version() tester, as this is not needed anymore =)
	* src/gpodder/download.py: Added new downloader module that uses
	urllib and some custom classes and functions to provide the equivalent
	functionality of the obsolete "libwget", but without the wget
	dependency and with better accuracy (progress reporting, etc..)
	* src/gpodder/gui.py: Utilize new gpodder.download module instead of
	libwget
	* src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
	module that holds the value of the "User-agent" header to send to web
	servers when requesting OPMLs, Feeds or download data
	* src/gpodder/opml.py: Add support for sending the User-agent header
	* src/gpodder/services.py: Make the progress column a float column to
	have smoother progress indicuation; add the "acquired" keyword
	argument to s_release(); default 'speed' to a translated "Queued"
	* src/gpodder/libwget.py: Removed
	* doc/dev/redhat-wget-output.txt: Removed

Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
Refreshed pot files and po templates; updated German translation

	* data/messages.pot: Refreshed from current source
	* data/po/de.po: Refreshed and updated translation
	* data/po/*.po: Refreshed from new .pot file

Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
Imported updated translations from Rosetta (Launchpad.net)

	* data/po/it.po: Italian translation updated by FFranci72
	* data/po/nl.po: Dutch translation updated by Roel Groeneveld
	* data/po/pt.po: Portuguese translation updated by Joel Calado

Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
Offline support for feedcache, faster startup, code simplification

	* src/gpodder/cache.py: Add support for "offline" keyword argument
	* src/gpodder/gui.py: Make intelligent use of "offline" keyword
	argument when passed to load_channels(); simplify code for selecting
	the active channel in updateComboBox()
	* src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
	argument in all relevant function calls

Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
New LocalDB using DOM (removes python-xml dependency); channel context menu

	* bin/gpodder: Don't check for xml.sax package and modules anymore, as
	the dependency on python-xml has been removed with this release
	* data/gpodder.glade: Remove the "info" button for the current channel
	* src/gpodder/gui.py: Remove localdb-related code and adopt code for
	new LocalDB code; add context menu to channel navigator (edit/delete)
	* src/gpodder/libipodsync.py: Don't import "liblocaldb" module
	* src/gpodder/liblocaldb.py: Removed
	* src/gpodder/liblocdbreader.py: Removed
	* src/gpodder/liblocdbwriter.py: Removed
	* src/gpodder/liblogger.py: Add "traceback" keyword argument to the
	log() function; if "True" and in debugging mode, print traceback
	* src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
	liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
	LocalDBReader; customize podcastChannel to new LocalDB code
	* src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)

Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
Fix a bug when traversing directories with loop symlinks

	* src/gpodder/util.py: Don't dive into subdirectories that are
	symbolic links, this is to avoid a situation where looping symlinks
	result in the function dead-locking in a endless recursive loop,
	thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
	out and providing the necessary bug report to fix this issue

Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
Mark episodes as downloaded/deleted when deleting episodes

	* src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
	as deleted" and mark episodes as downloaded when removing selected
	episodes that have not been downloaded yet, as suggested by Holger
	Leskien <holger leskien.com>
	* src/gpodder/libpodcasts.py: Fix problem when trying to delete
	episodes that have not been downloaded

Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
Support for customized file names in MP3 player sync code

	* src/gpodder/gui.py: Add supporting code for reading/setting
	configuration options for the preferences dialog and a help display
	code that displays a guide on how to write custom sync name strings
	* src/gpodder/libgpodder.py: New configuration options:
	custom_sync_name (holds format string) and
	custom_sync_name_enabled (boolean, if the above string should be used)
	* src/gpodder/libipodsync.py: Use custom sync name format string and
	util's object_string_formatter() function to obtain a file name for
	the synchronized episode (or default to episode.title if disabled)
	* src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
	basename (returns the basename of the URL, without extension) and
	published (returns the pubDate of the episode in YYYYMMDD format)
	* src/gpodder/util.py: New object_string_formatter() method that
	replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
	corresponding values of passed-in keyword argument objects
	* data/gpodder.glade: Added preferences GUI elements

Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
Check for installed python-xml package on startup (hard dependency)

	* bin/gpodder: Add dependency check for PyXML

Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
Fix bug with default window title in gPodder window

	* src/gpodder/gui.py: Always set gPodder's default_title attribute

Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
Updated Russian translation from Vladimir Zemlyakov

	* data/po/ru.po: Updated

Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
More sanitizing hacks for ugly feeds we don't really like

	* src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
	multiple enclosures, if there are more than one available; skip
	episodes with a buggy download URL (i.e. no supported URL scheme)
	* src/gpodder/util.py: Return "(unknown)" if file size cannot be
	determined from the string passed to format_filesize(); return "None"
	in file_type_by_extension() if the extension is an empty string

Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
Handle enclosures (or lack thereof) better if fields are missing

	* src/gpodder/gui.py: Remove refetch_channel_list() function, as this
	is not called anywhere from the code (uh, how did i miss that?)
	* src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
	without length or mime type; ignore episodes without enclosures (it's
	not len(enclosures) == 0, but the enclosures attribute doesn't even
	exist on entries without enclosures, so make sure to check for that

Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
Use Python's webbrowser module for URL opening; channel dialog clean-up

	* bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
	* data/gpodder.glade: Remove "cancel" button from gPodderChannel
	* src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
	of relying on "gnome-open" to be available; remove event handler for
	gPodderChannel's "cancel" button

Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
Dependency check for python-feedparser in bin/gpodder

	* bin/gpodder: Add dependency check and warning (with exit) if
	python-feedparser is not installed, as python-feedparser now is a
	dependency of gPodder

Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
Support for modifying DownloadHistory and PlaybackHistory in GUI

	* data/gpodder.glade: Added menu items in gPodder main window
	* src/gpodder/gui.py: Add menu items to treeAvailable's context menu
	to toggle/set downloaded and played status on selected episodes
	* src/gpodder/libgpodder.py: Add del_item() function to
	DownloadHistory to support removing items from the history list;
	enhance history_mark_{played,downloaded}() functions for add/delete

Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
Improved pubDate parsing; episode delete bugfix

	* src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
	of episodes and use new function in gpodder.util to convert the parsed
	pubDate to a string; bugfix for remove downloaded episode by URL
	* src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
	converts the "updated_parsed" field from feedparser to a RFC2822
	string

Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
Remove obsolete documentation in doc/dev; cosmetic changes

	* data/po/Makefile: Upgrade to GPLv3
	* data/po/README: Mention i18n page on gPodder's website
	* doc/dev/build-deps-breezy.txt: Removed
	* doc/dev/debian.txt: Removed
	* doc/dev/i18n.txt: Removed
	* doc/dev/porting.txt: Removed
	* doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
	files

Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
Upgrade to the GNU General Public License, Version 3

	* bin/gpodder: Upgrade to GPLv3
	* COPYING: Upgrade to GPLv3
	* doc/dev/copyright_notice: Upgrade to GPLv3
	* Makefile: Upgrade to GPLv3
	* README: Upgrade to GPLv3
	* setup.py: Upgrade to GPLv3
	* src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
	cache, as these are LGPL or other and do not originate from gPodder)

Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
Integration changes, commit and ChangeLog migration

	* doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
	* Makefile: Make $EDITOR edit "ChangeLog" directly

Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
Last batch of experimental change merges (up to svn r398)

	* doc/dev/tepache-howto.txt: Removed
	* doc/dev/tepache: Removed
	* src/gpodder/gui.py.orig: Removed
	* src/gpodder/libwget.py: Send progress = 0.0 on inital status update
	* src/gpodder/libpodcasts.py: Try to get episode metadata from several
	different properties of the corresponding feedparser entries; warn
	user when we couldn't get the episode title and try to get the episode
	title from the filename of the URL if we still have not found an
	episode title
	* src/gpodder/libgpodder.py: Add get_device_name() that returns a
	"nice" representative string of the currently selected device that can
	be used to represent the device in the GUI
	* src/gpodder/util.py: Return "(unknown)" string when bytesize in
	format_filesize() when the size has a negative value; make
	get_tree_icon() catch errors and be more corrent with icon creation;
	add get_first_line() function that extracts the first line of a string
	* src/gpodder/libipodsync.py: Add "divx" to list of video extensions
	* src/gpodder/services.py: DownloadStatusManager has a new observer
	notification: "progress-detail"; add unregister() functionality for
	observers; add request_progress_detail() function that can be used to
	force a "progress-detail" notification to be sent out to all relevant
	observers; remove get_url_by_iter() function as it is not needed
	anymore
	* src/gpodder/gui.py: Clean-up after tepache dependency removal; new
	GladeWidget base class that subclasses SimpleGladeApp and simplifies
	class creation for our gPodder windows; add context menu to
	treeAvailable; re-work play_or_download() and make it return a list of
	boolean indicators on which actions can be performed on the selected
	items; move show_message() and show_confirmation() to GladeWidget;
	disable editing of the URL in the channel info dialog, this simplifies
	code and editing the URL doesn't make so much sense anyway (adding the
	new url and removing the old does the same and is easier, code-wise);
	add support for cancelling downloads in the available podcasts view;
	support live status view and download cancelling in the gPodderEpisode
	dialog window by hooking up to DownloadStatusManager as observer
	* src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
	of weakref for keyword arguments -> properties of new object)
	* bin/gpodder: We're using a experimental development version now
	* data/gpodder.glade: Add progress bar and associated buttons to
	gPodderEpisode dialog
	* MANIFEST.in: Removed gpodder.py.orig inclusion
	* Makefile: Removed support for tepache

Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
More changes from the experimental branch (up to svn r382)

	* src/gpodder/liblocdbreader.py: Clean-up
	* src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
	a generic download status manager as constructor parameter; remove
	downloadStatusManager class (moved to gpodder.services)
	* src/gpodder/console.py: More clean-ups; use get_new_episodes()
	instead of duplicating code here; simplify the code for wget version
	detection
	* src/gpodder/libpodcasts.py: Improve channel/episode generation from
	feedparser objects (with error handling); utilize download status
	manager from "gpodder.services" instead of accepting a download status
	manager as parameter; clean up unneeded functions and rename some
	functions to make the code more readable; use util.get_tree_icon() for
	compositing a nice icon; remove the "played" column from the
	treemodel; add local_filename to treemodel
	* src/gpodder/liblocdbwriter.py: Clean-up
	* src/gpodder/libgpodder.py: Clean-up
	* src/gpodder/util.py: Add torrent_filename() function that tries to 
	extract the filename of the file a .torrent file contains; add
	file_extension_from_url() function that returns the file extension in
	a URL; add file_type_by_extension() that returns the type of a file
	based on its extension; add get_tree_icon() that loads a named icon
	and optionally adds a bullet to it (unplayed status indicator)
	* src/gpodder/libipodsync.py: Clean-up
	* src/gpodder/services.py: New module that currently contains the
	improved DownloadStatusManager and a single object that servces as
	download status manager for all parts of gpodder
	* src/gpodder/gui.py: Only one column for status/played; use
	"gpodder.services" for the download status manager; clean-up
	* src/gpodder/liblocaldb.py: Clean-up
	* bin/gpodder: Clean-up
	* data/gpodder.glade: Clean-up; removed "show played column"
	preference in gPodderProperties dialog

Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
First import from experimental branch (up to svn r375)

	* src/gpodder/librssreader.py: Removed in favor of python-feedparser
	* src/gpodder/libwget.py: Percentage is now a float, don't set to 0
	when there has been an error
	* src/gpodder/console.py: Use {load,save}_channels methods; code
	cleanup and simplification
	* src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
	* src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
	and RSS reading; use shelve for new ChannelSettings class; clean-up
	podcastChannel and podcastItem; better TreeModel generator for
	podcastChannel (try to cache the model, only updates icons, etc...);
	remove downloadRss method in podcastChannel; move DownloadHistory and
	Playbackhistory to libgpodder; new load_channels() and save_channels()
	functions to save/load the channel list to an OPML file
	* src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
	and gPodderChannelReader (this is now in libpodcasts as simple
	functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
	* src/gpodder/gui.py: Use new functions for channel list
	loading/saving; only update treemodel for treeAvailable when it's
	really necessary
	* src/gpodder/liblocaldb.py: Remove unnecessary functions that have
	not been used for a while (treemodel-related); use load_channels()
	instead of gPodderChannelReader


Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
	* ChangeLog: Older changes can be found on the gPodder website at
	http://gpodder.berlios.de/releases/0.9.5/ChangeLog

