Fix bug with MP3 player synchronization file name encodings
[gpodder.git] / ChangeLog
blob9ccb287560187edebb31498bb30e9031bfe26a07
1 Tue, 19 Feb 2008 07:46:28 +0100 <thp@perli.net>
2 Fix bug with MP3 player synchronization file name encodings
4         * src/gpodder/sync.py: Apply patch to fix problems with native
5         language encodings on MP3 player synchronization; thanks to Bernd
6         Schlapsi for reporting the problem in Bugzilla
7         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=34)
9 Mon, 18 Feb 2008 21:17:48 +0100 <thp@perli.net>
10 Updated French translation for 0.11.0
12         * data/po/fr.po: Updated French translation by Jérôme Chabod
14 Sun, 17 Feb 2008 13:50:09 +0100 <thp@perli.net>
15 Fix calculation of average percentage done
17         * src/gpodder/services.py: Fix calculation of average percentage done
18         for downloads, thanks to Jérôme Chabod <jerome.chabod@ifrance.com> for
19         the patch
21 Sun, 17 Feb 2008 13:33:38 +0100 <thp@perli.net>
22 Updated translations for 0.11.0
24         * data/messages.pot: Refreshed messages.pot from source code
25         * data/po/de.po: Updated German translation
26         * data/po/nl.po: Updated Dutch translation by Pieter De Decker
27         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
28         * data/po/cs.po: Updated Czech translation by Ondrej Vesely
29         * data/po/sv.po: Updated Swedish translation by Anders Kvist
31 Thu, 07 Feb 2008 22:15:40 +0100 <thp@perli.net>
32 Hello, new "expert" configuration editor (about:config-like)
34         * data/gpodder.glade: Add gPodderConfigEditor window and add an
35         "Advanced..." button to the preferences dialog
36         * src/gpodder/config.py: Add a gtk.ListStore tree model to the
37         configuration manager and update it when configuration variables
38         change; add toggle_flag() and update_field() methods for easy updating
39         of fields from the new config editor
40         * src/gpodder/gui.py: Add glue code for opening the advanced
41         configuration editor from the preferences dialog; add code for the
42         gPodder configuration editor (including filtering and field updating);
43         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=10)
45 Thu, 07 Feb 2008 20:22:08 +0100 <thp@perli.net>
46 Support buggy OPML feeds, notify user on OPML import
48         * src/gpodder/gui.py: Notify user when no items were found when trying
49         to import OPML feeds
50         * src/gpodder/opml.py: Make the OPML importer a bit more relaxed, and
51         make it accept "url" instead of "xmlUrl", too (for buggy OPML feeds)
53 Wed, 06 Feb 2008 17:34:56 +0100 <thp@perli.net>
54 Fix the track length detection
56         * src/gpodder/sync.py: Fix the iPod sync track length detection code,
57         reported by Paul Rudkin <paul@thegithouse.com> and tested by
58         FriedBunny <friedbunny@kulturny.com>; make default length 3 hours
59         Closes: http://bugs.gpodder.org/show_bug.cgi?id=29
61 Wed, 06 Feb 2008 10:59:25 +0100 <thp@perli.net>
62 NLS encoding support for MP3 player synchronization (from gdfs)
64         * src/gpodder/sync.py: Add NLS encoding support from Leonid Ponomarev
65         <leonid.phoenix@gmail.com>; patch modified a bit to better fit the
66         code and be more verbose, so the user knows how we encode the names
68 Wed, 06 Feb 2008 10:43:47 +0100 <thp@perli.net>
69 Hide to systray on exit during download
71         * src/gpodder/gui.py: Apply patch from Jérôme Chabod
72         <jerome.chabod@ifrance.com> to fix a bug: When closing gPodder during
73         a download, and "on_quit_hide" is on, gPodder asks for a confirmation
74         It should hide gPodder without asking. This patch fix that.
76 Wed, 06 Feb 2008 10:18:30 +0100 <thp@perli.net>
77 Usability GUI update (after Rafael Proença's proposal)
79         * data/gpodder.glade: Add "Ctrl+L" hotkey to Add new channel; add
80         "View" menu with show/hide Toolbar (Ctrl+T) and show/hide episode
81         descriptions (Ctrl+D); remove "Update Feeds" button from toolbar and
82         add Check for updates button below channel navigator; move the add
83         episodes entry and buttons above the channel navigator; thanks to the
84         following people who shared their opinions on the mailing list: Rafael
85         Proença, Paul Rudkin, Ondrej Vesely, Leonid Ponomarev, Shane Donohoe,
86         Jérôme Chabod, Nick (nikosapi); the GUI mockups and the initial idea
87         were posted by Rafael Proença
88         * src/gpodder/config.py: Add "episode_list_descriptions" and
89         "show_toolbar" configuration options that modify the look of the main
90         window (both default to "True")
91         * src/gpodder/gui.py: Show feed description in seperate line (this
92         feature was suggested by narf@inode.at); make the episode list
93         treeview widget use the space more efficient; show/hide toolbar and
94         show/hide episode description GUI glue code
95         * src/gpodder/libgpodder.py: Add "digits" keyword argument to
96         format_filesize() (defaults to 2), this is a pass-thru function for
97         gpodder.util.format_filesize() (see below)
98         * src/gpodder/libpodcasts.py: Support for small- and large-sized
99         icons,modify liststore creation code to add description to the title
100         column
101         * src/gpodder/util.py: Add "digits" keyword argument to
102         format_filesize() (defaults to 2), this is used to define the format
103         of the filesize; add "icon_size" keyword argument (defaults to 32) to
104         get_tree_icon() and modify the function so that it dynamically
105         generates the correct icon with the correct sizes
107 Mon, 04 Feb 2008 11:26:14 +0100 <thp@perli.net>
108 Apply patchset from Jérôme Chabod to fix tray icon behaviour
110         * data/gpodder.glade: Change behaviour of the "display tray icon"
111         checkbox, rename and retitle some configuration options
112         * src/gpodder/config.py: Rename "download_after_update" to
113         "auto_download_when_minimized" and rename "disable_notifications" to
114         "enable_notifications".
115         * src/gpodder/gui.py: Add glue code for config and GUI, change
116         behaviour as described in http://bugs.gpodder.org/show_bug.cgi?id=3
117         * src/gpodder/trayicon.py: Clean-up and fix behaviour as described in
118         our Bugzilla Bug #3 (see above); thanks to Jérôme Chabod for
119         implementing all these changes and the patch
121 Mon, 04 Feb 2008 09:32:56 +0100 <thp@perli.net>
122 Output pretty-printed OPML when saving channels list
124         * src/gpodder/opml.py: Patch from Nick (nikosapi.org) to output the
125         channels.opml file pretty-printed, so it's easier to read and easier
126         to edit when working on the file outside of gPodder
128 Sun, 03 Feb 2008 23:02:47 +0100 <thp@perli.net>
129 Don't code late at night, it breaks the sync code ;)
131         * src/gpodder/sync.py: Add brackets because I wrote bad code in the
132         first place (fix video sync for iPods); thanks to Dave Perdue
133         <dave@minusvince.com> for reporting this in our bug tracker
134         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=28)
136 Sat, 02 Feb 2008 11:36:35 +0100 <thp@perli.net>
137 Make feed update display "Loading" titles, only run auto update when minimized
139         * src/gpodder/gui.py: Usability patch from NIkosapi <nikosapi.org>:
140         Make the feed update dialog display "Loading feeds" instead of
141         "Downloading feeds" when its loading the feeds from the local cache;
142         only run the automatic, periodic update when gPodder is minimized,
143         because it would pop up a dialog while gPodder is in use otherwise
145 Sat, 02 Feb 2008 11:33:48 +0100 <thp@perli.net>
146 Pressing Enter in the add channel entry adds the channel
148         * data/gpodder.glade: Usability patch from Nikosapi <nikosapi.org>:
149         Add an action handler to the gladefile, so the user can simply press
150         Enter in the gtk.Entry instead of having to tab to or click on the
151         button for adding a channel
153 Wed, 30 Jan 2008 09:47:21 +0100 <thp@perli.net>
154 Fix another bug in file_modification_datetime
156         * src/gpodder/util.py: Another problem that happens with special
157         iTunesDB settings, thanks to FriedBunny <friedbunny@kulturny.com>
159 Wed, 30 Jan 2008 09:23:19 +0100 <thp@perli.net>
160 Fix a bug in the file size calculation
162         * src/gpodder/util.py: calculate_filesize should deal with "None"
163         passed as filename (now returns zero-size);
164         Fixes: Bug #23 (http://gpodder.thegithouse.com/show_bug.cgi?id=23)
165         Thanks to FriedBunny <friedbunny@kulturny.com> for reporting this
166         issue in our bug tracker
168 Mon, 28 Jan 2008 12:33:13 +0100 <thp@perli.net>
169 Merge new sync code from thp's private branch
171         * bin/gpodder: Add "--sync"/"-s" command-line option to start the
172         device synchronization process from the CLI interface - syncing can
173         now be scripted, baby :) (you still have to configure the sync device
174         via the GUI first, though)
175         * data/gpodder.glade: Simplify gPodderSync dialog and remove some
176         obsolete options from the channel dialog
177         * src/gpodder/console.py: Add code for command-line sync support
178         * src/gpodder/gui.py: Remove obsolete code for libipodsync and import
179         the new "sync" module; simplify Sync<->GUI interface; clean-up
180         gPodderSync dialog code to interface with new sync code; remove some
181         config glue code for the channel properties dialog
182         * src/gpodder/libconverter.py: Make libconverter work even if the
183         percentage callback would fail in certain conditions (try..except)
184         * src/gpodder/libipodsync.py: Removed
185         * src/gpodder/libpodcasts.py: Refactor age_in_days() and
186         get_age_string() to simple calls to utility functions and move the
187         code to gpodder.util
188         * src/gpodder/sync.py: Added new sync module :) Very modular, yesaya!
189         * src/gpodder/util.py: Add file_age_in_days() and file_age_to_string()
190         helper functions that use code from libpodcasts and return the age of
191         a file in the filesystem
193 Thu, 24 Jan 2008 14:51:48 +0100 <thp@perli.net>
194 Fix a bug for show_message and tray_icon/minimized
196         * src/gpodder/gui.py: Fix a bug when messages are shown for
197         non-gPodderMainWindow windows (that don't have tray_icon)
199 Wed, 23 Jan 2008 11:55:35 +0100 <thp@perli.net>
200 Make gpodder.desktop pass desktop-file-validate tests
202         * data/gpodder.desktop: Update "Categories" and remove "Encoding",
203         following the freedesktop.org Desktop Entry specification
205 Wed, 23 Jan 2008 09:06:32 +0100 <thp@perli.net>
206 Do not show notifications when gPodder is minimized
208         * src/gpodder/gui.py: Merge patch from Jérôme Chabod to fix problems
209         with the gPodder window re-appearing after having been minimized;
210         use the notification icon when possible; initially reported by Shane
211         Donohoe
213 Tue, 22 Jan 2008 10:19:46 +0100 <thp@perli.net>
214 Add "releasetest" target to Makefile (automated testing)
216         * Makefile: Add "releasetest" target that can be used to do some
217         automatic testing before releases; thanks to Götz Waschk for giving
218         some hint on "desktop-entry-validate" :)
220 Tue, 22 Jan 2008 10:09:16 +0100 <thp@perli.net>
221 Use Episode Selector for per-channel new episodes
223         * src/gpodder/gui.py: Reorganize code to use the episode selector for
224         both all-channels and per-channel new episodes
225         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=14)
227 Tue, 22 Jan 2008 09:42:01 +0100 <thp@perli.net>
228 Fix problem in gpodder.desktop file
230         * bin/gpodder: We're in development again (+svn)
231         * data/gpodder.desktop: Fix problem in .desktop file (Thanks to Götz
232         Waschk for reporting this bug, detected via desktop-entry-validate)
234 Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
235 gPodder 0.10.4 "Faster Pussycats Kill" released
237         * bin/gpodder: gpodder 0.10.4 released :)
238         * README: gPodder 0.10.4 released :)
239         * doc/man/gpodder.1: gPodder 0.10.4 released :)
240         * data/po/de.po: Updated German translation
241         * data/messages.pot: Updated from source
242         * data/po/*.po: Updated from messages.pot
244 Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
245 Create Bittorrent download directory on startup
247         * src/gpodder/libgpodder.py: Create Bittorrent download directory on
248         startup, so the first time gPodder preferences are shown, the download
249         folder will exist and now throw an error
251 Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
252 Updated French translation file with correct encoding
254         * data/po/fr.po: Updated French translation with correct encoding by
255         Jérôme Chabod - thanks!
257 Mon, 21 Jan 2008 10:47:49 +0100 <thp@perli.net>
258 Add support for sending files via Bluetooth
260         * data/gpodder.glade: Add "Bluetooth" configuration page to
261         preferences dialog
262         * src/gpodder/config.py: Add Bluetooth-related configuration options
263         * src/gpodder/gui.py: Add support for sending (and converting) files
264         for bluetooth file transfer; add glue code for preferences dialog and
265         configuration manager
266         * src/gpodder/libgpodder.py: Add "tempdir" variable to gPodderLibClass
267         that specifies a temporary directory to be used (currently only for
268         converting files for bluetooth transfer, might be migrated to a
269         configuration option later)
270         * src/gpodder/util.py: Add discover_bluetooth_devices() function that
271         searches for nearby devices (either via python-bluez or via hcitool,
272         so one of them has to be installed as a dependency); add
273         bluetooth_send_file() convenience function that starts a file transfer
274         via Bluetooth OBEX - uses gnome-obex-send, which has to be installed
275         for Bluetooth file transfer to work
277 Mon, 21 Jan 2008 09:52:09 +0100 <thp@perli.net>
278 Support for different audio/video player selection
280         * data/gpodder.glade: Add video selection to preferences dialog
281         * src/gpodder/config.py: Add "videoplayer" configuration option
282         * src/gpodder/gui.py: Add glue code for configuration and preferences
283         dialog (audio/video player selector)
284         * src/gpodder/libgpodder.py: Add code to migrate from older gPodder
285         configurations (videoplayer is set to "unspecified") to the same value
286         as the currently selected audio player; when "playing" a file,
287         determine the file type and start the right player application
288         * src/gpodder/libplayers.py: Parameterize the UserAppsReader class to
289         accept a mime type (e.g. "video" or "audio") after which to filter
291 Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
292 Czech translation update: gpodder.desktop
294         * data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
295         Czech translation strings to the gpodder.desktop file - thanks
297 Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
298 Added Czech translation by Ondrej Vesely
300         * data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
301         <xorwen@gmail.com>; the completed translation will be updated when
302         it's done
303         * setup.py: Add "cs" (Czech) to list of translations
305 Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
306 Updated Swedish translation from Anders Kvist
308         * data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
309         now up-to-date again
311 Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
312 Updated French translation from Jérôme Chabod
314         * data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
315         now up-to-date again
317 Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
318 Updated Dutch translation from Pieter De Decker
320         * data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
321         now up-to-date again
323 Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
324 Update translation template and translations from source
326         * data/messages.pot: Updated potfile from source code
327         * data/po/*.po: Updated translation templates from potfile
329 Wed, 16 Jan 2008 08:36:12 +0100 <thp@perli.net>
330 Remove the "Ignore" button in tray icon notifications
332         * src/gpodder/trayicon.py: Remove the "ignore" action and button when
333         a download has finished; the "ignore" button is redundant, as the same
334         functionality can be achieved by clicking on the "x" of the bubble
336 Tue, 15 Jan 2008 14:50:13 +0100 <thp@perli.net>
337 Modularize calls to gobject.idle_add (for non-GTK support)
339         * bin/gpodder: Set interface_is_gui to True when running the GUI
340         * src/gpodder/*.py: Use util.idle_add instead of gobject.idle_add
341         * src/gpodder/gui.py: Simplify some idle_add calls, code clean-up
342         * src/gpodder/__init__.py: Add "interface_is_gui" boolean variable
343         that tells us if we are running in GUI or CLI mode (this is needed for
344         util.idle_add to determine if it's going to use the gobject module or
345         not)
346         * src/gpodder/util.py: Add new function idle_add() that acts as a
347         wrapper to gobject.idle_add(); this will only use gobject.idle_add if
348         we are in GUI mode, and will call the callback directly when we are in
349         command-line mode (because we don't have to watch out for threading
350         race conditions there, compared to what GTK+ gives us)
352 Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
353 Add menu item that links to gPodder's new bug tracker
355         * data/gpodder.glade: Add bug tracker item to help menu
356         * src/gpodder/gui.py: Add code to open a webbrowser with the bug
357         tracker when the bug tracker icon is clicked
359 Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
360 Add a checkbox to keep episodes when removing channels
362         * src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
363         removing a podcast channel, so the user has the option to remove the
364         podcast feed from gPodder's subscription list, but still keep the
365         downloaded files on the harddisk (via a checkbox in the dialog)
366         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)
368 Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
369 Updated Russian translation by Hex
371         * data/po/ru.po: Updated Russian translation by
372         Hex <justin.forest@gmail.com>
374 Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
375 Merge tray icon and notification patch by Jérôme Chabod
377         * data/gpodder.glade: UI support for tray icon settings and
378         configuration options for auto update feeds (auto update based on a
379         patch by Nick (nikosapi.org)
380         * src/gpodder/config.py: Add configuration options that support the
381         tray icon, notification bubble and automatic update/close functions
382         * src/gpodder/gui.py: Support the tray icon in the GUI; link the
383         configuration options with the preferences dialog; re-work the channel
384         update dialog to be more slipstreamed
385         * src/gpodder/trayicon.py: Added new tray icon module by
386         Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
387         gPodder TODO list by Holger Bauer
389 Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
390 Updated Swedish translation by Anders Kvist
392         * data/po/sv.po: Swedish translation updated by
393         Anders Kvist <kvistkvist@telia.com>
395 Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
396 Use os.rename to make channel list saving atomic
398         * src/gpodder/opml.py: Make the saving of the channel list atomic by
399         first saving it to a temporary file and then using os.rename to really
400         move the file in place (this should make the channel list saving very
401         stable and protect against certain bad system conditions where the
402         channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
403         the suggestion and pointers to improve the channel saving code
405 Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
406 Make logging in libpodcasts less verbose
408         * src/gpodder/libpodcasts.py: Remove some verbose logging code
410 Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
411 Migrate from channels.xml (from 0.9.4) to channels.opml if needed
413         * src/gpodder/libgpodder.py: Add code to check if channels.xml exists
414         but channels.opml doesn't and if so, try to convert from channels.xml
415         to channels.opml, so users upgrading from 0.9.4 directly will have
416         their channel list automatically converted;
417         thanks to Tim Michelsen for the bug report and helpful Ubuntu info
419 Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
420 Add download completion notification support
422         * src/gpodder/download.py: Notify the download status manager when a
423         download has been completed successfully
424         * src/gpodder/services.py: Add download-complete signal to list of
425         possible signals and download_completed() method to be used by
426         downloads to notify the status manager of a successful download
428 Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
429 Patch the feedparser module to correctly process democracynow.org
431         * src/gpodder/cache.py: Add a patch_feedparser() method that checks of
432         the feedparser module correctly maps the "plain" content-type to the
433         correct "text/plain" content-type and if not, replace the
434         mapContentType method with a fixed one; this should make the audio
435         podcast on democracynow.org working (thanks to Clark Burbidge for the
436         bug report)
438 Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
439 Better username/password extraction from URLs
441         * src/gpodder/util.py: Improve username and password extraction for
442         authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
443         Donohoe <priestoftime@googlemail.com> for reporting this bug and
444         sending in a patch; this should allow for e-mail address usernames
446 Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
447 Also delete old episodes that have disappeared from the feed
449         * src/gpodder/gui.py: When deleting old episodes automatically, also
450         delete episodes that have disappeared from the RSS feed and are only
451         available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
452         for the very detailed and helpful bug report :)
454 Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
455 Stability updates: Feed cache update, old PyCairo versions
457         * src/gpodder/draw.py: Add a workaround for pycairo versions less than
458         1.1.6. Thanks to Chris Arnold for reporting this bug on the
459         gpodder-devel mailing list and taking the time to test the patch and
460         report back and provide useful information for debugging this error
461         * src/gpodder/gui.py: Close the feed cache update dialog even when the
462         user clicks on "cancel" (would have stayed there otherwise)
464 Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
465 Merge "delete episode after sync" patch from Jérôme Chabod
467         * data/gpodder.glade: Add GUI elements in preferences dialog to select
468         what to do after episode sync (nothing, delete or mark played)
469         * src/gpodder/config.py: Add "on_sync_delete" configuration option
470         * src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
471         * src/gpodder/libipodsync.py: If the configuration option
472         on_sync_delete is set, remove the episode after successfully copying
473         it to the iPod or MP3 player (the whole patch has been initially done
474         by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
475         * src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
476         robust, so it doesn't disturb libipodsync's functionality
478 Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
479 Remove invalid channel cover images when loading fails
481         * src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
482         it cannot be loaded (assume something went wrong when downloading the
483         cover file); re-downloading the cover manually can solve the problem
485 Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
486 Fix typo in last commit
488         * src/gpodder/libipodsync.py: Fix typo in last commit
490 Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
491 Modify played handling in iPod sync when "on sync mark played" is active
493         * src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
494         if the on_sync_mark_played option is set
496 Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
497 Merge patch from Leonid Ponomarev to gdfs
499         * doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
500         support for the system's native encoding, based on the $LANG
501         environment variable. This should add support for episodes and
502         channels with international characters as titles
504 Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
505 Updated Dutch translation by Pieter De Decker
507         * bin/gpodder: We're in development again: "+svn"
508         * data/po/nl.po: Updated Dutch translation from Pieter De Decker
510 Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
511 gPodder 0.10.3 "A Stop at Willoughby" released
513         * bin/gpodder: gPodder 0.10.3 released :)
514         * README: gPodder 0.10.3 released :)
515         * doc/man/gpodder.1: gPodder 0.10.3 released :)
516         * data/messages.pot: Updated from source
517         * data/po/de.po: Updated German translation
518         * data/po/*.po: Updated from messages.pot
520 Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
521 Link the gPodder Documentation Wiki from the help pages
523         * data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
524         and Documentation Wiki (instead of Mailing list)
525         * src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page
527 Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
528 Remove TODO file from MANIFEST.in
530         * MANIFEST.in: Of course we have to remove non-existing files from the
531         MANIFEST.in file, too.. so TODO is now finally gone :)
533 Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
534 Manage TODO list on the gPodder Wiki
536         * TODO: Removed; new location: http://gpodderwiki.jottit.com/todo
538 Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
539 Configuration for "old" episodes; automatically remove old episodes
541         * src/gpodder/config.py: New boolean auto_remove_old_episodes
542         configuration option that defaults to False (remove on startup)
543         * src/gpodder/gui.py: Add code to automatically remove old, unplayed
544         episodes on startup if the specific configuration options have been
545         set; connect config manager to GUI items for the preferences dialog
546         * data/gpodder.glade: Add checkbox for automatically removing old,
547         unplayed episodes from gPodder on startup and a spinbutton to set the
548         amount of days after which an episode is considered "old"
550 Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
551 Merged episode locking patch from Paul Rudkin
553         * src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
554         locked, patch by Paul Rudkin <paul@thegithouse.com>
555         * data/gpodder.glade: Add menu item for toggle locked status
556         * src/gpodder/libgpodder.py: Add "locked" history
557         * src/gpodder/libpodcasts.py: When requesting a status icon, also draw
558         the "Locked" status; is_locked() in podcastItem
559         * src/gpodder/util.py: Added code for drawing a padlock icon on top of
560         another (file type) icon; this is used for the "lock episodes" feature
562 Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
563 Updated TODO list
565         * TODO: Updated TODO list
567 Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
568 Move observer code out of DownloadStatusManager into ObservableService
570         * src/gpodder/services.py: Move out all observer-related code like
571         registration, unregistration and notification to a new
572         ObservableService class; subclass ObservableService in
573         DownloadStatusManager; this makes the observer code in
574         DownloadStatusManager re-usable (will be needed for new sync code)
576 Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
577 Selective iPod episode clean-up; "delete older than X days"
579         * src/gpodder/config.py: Add episode_old_age configuration variable;
580         is an integer, defaults to 7. This is the number of days after which
581         an episode will be considered "old"
582         * src/gpodder/gui.py: iPod cleanup is now done selectively using the
583         episode selector dialog; the code has been split, because we do not
584         yet have an episode selector dialog for FS-based sync; add "Downloaded
585         x days ago" column to "Delete old episodes" dialog and a corresponding
586         button; call the callback even when no episodes are selected in
587         gPodderEpisodeSelector
588         * src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
589         moved to __init__ to be instance variables (this should fix a bug that
590         crops up now that we can selectively delete episodes); remove_tracks()
591         and clean_playlist() have been modified/added to support new episode
592         selector deletion code
593         * src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
594         podcastChannel (it really belongs to the item; this makes code more
595         readable in other parts of the codebase); add age_in_days(), is_old(),
596         get_age_string() and age_prop to podcastItem
597         * src/gpodder/util.py: New function: file_modification_datetime();
598         returns a datetime.datetime instance of the MTIME (modification
599         timestamp) of the filename given as parameter or None if the filename
600         cannot be determined; this is used for the "old episodes" feature
602 Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
603 Make has_converter() a bit more intelligent in detecting extensions
605         * src/gpodder/libconverter.py: Convert given extension to lowercase
606         and strip a leading "." from the extension, so calling code can also
607         give the second value of the os.path.splitext() result directly to
608         has_converter()
610 Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
611 Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin
613         * src/gpodder/config.py: Fix pre-setting code for filechooser-related
614         code; use set_current_folder() instead of set_filename()
615         * src/gpodder/gui.py: Fix pre-setting code for filechooser-related
616         code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch
618 Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
619 Support for itms:// links (direct links to the Apple iTunes Music Store)
621         * src/gpodder/util.py: Support direct itms:// links by splitting out
622         the iTunes Podcast links parsing routines. This should put us in for
623         some nice iTunes podcast link support that will automagically
624         translate iTunes podcast links to the correct RSS feed URL
626 Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
627 Support for iTunes Podcast links (http://phobos.apple.com/...)
629         * src/gpodder/util.py: Add support for subscribing to iTunes Podcast
630         links (those with phobos.apple.com); new functions:
631         parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()
633 Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
634 Added Galician translation from Teo Ramirez
636         * data/gpodder.desktop: Added Spanish and Galician translations;
637         thanks to Teo Ramirez <teoramirez@gmail.com>
638         * data/messages.pot: Updated from source
639         * data/po/de.po: Updated
640         * data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
641         * data/po/*.po: Updated from source
642         * setup.py: Added Galician (gl) translation by Teo Ramirez
644 Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
645 Sort channel list (finally ;)
647         * src/gpodder/libpodcasts.py: Sort channels by lowercase title before
648         returning the channel list in load_channels(); this automagically
649         makes gPodder's channel list always sorted :)
650         Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
651         sending in an intial patch that led to this patch =)
652         * TODO: Remove implemented item: Sort channel list
654 Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
655 Do grayscale "pill" instead of theme-based colors (for bad themes)
657         * src/gpodder/draw.py: Always draw the "pill" in semi-transparent
658         black/grey shades so it will work for all GTK themes (even Ubuntu's)
660 Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
661 Update channel navigator when iPod/MP3 player sync has finished
663         * src/gpodder/gui.py: Update channel navigator when iPod sync has
664         finished, so we can update the "played" status in the channel
665         navigator when this status has changed after we've synced ("on sync
666         mark played" option)
668 Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
669 Add option to mark episodes as played after transfer to device
671         * data/gpodder.glade: Option added to preferences dialog
672         * src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
673         an episode as played when it gets transferred to a device
674         * src/gpodder/gui.py: Glue code for GUI + gpodder.config
675         * src/gpodder/libipodsync.py: On sync, mark episode as played if the
676         user has selected the "on_sync_mark_played" option
677         * TODO: Remove implemented/integrated items
679 Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
680 Fix a fatal bug with first-run that prevents channel list saving
682         * src/gpodder/util.py: Always use a file's parent directory to get the
683         free disk space and return zero free disk space when the parent
684         directory does not exist
686 Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
687 Support for itpc:// URLs
689         * src/gpodder/util.py: Add support for adding "itpc://" URLs (these
690         are simply http:// URLs with a different schema, for iTunes)
692 Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
693 Draw channel stats (unplayed, downloaded) on channel navigator
695         * bin/gpodder: We're in development again, so add "+svn"
696         * src/gpodder/draw.py: Added
697         * src/gpodder/gui.py: Fix import of renamed "channels_to_model";
698         re-assign new column numbers for treeChannels' data model; add
699         cell renderer for pill pixbuf and remove cell renderer for status text
700         * src/gpodder/libpodcasts.py: Add episode_is_new() function to
701         podcastChannel to check if an episode can be considered "new"; use the
702         episode_is_new function in get_new_episodes; add get_episode_stats()
703         after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
704         channels_to_model and clean out old, unused code and columns
706 Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
707 gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released
709         * bin/gpodder: gPodder 0.10.2 released :)
710         * doc/man/gpodder.1: gPodder 0.10.2 released :)
711         * README: gPodder 0.10.2 released :)
713 Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
714 Translation updates
716         * data/messages.pot: Refreshed from source
717         * data/po/*.po: Refreshed from messages.pot
718         * data/po/de.po: Updated German translation
720 Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
721 Make sure there is enough free disk space when saving OPML channel list
723         * src/gpodder/gui.py: Notify user that there's some problem saving the
724         current channel list when save_channels() return False
725         * src/gpodder/libpodcasts.py: Pass-through the return value of
726         gpodder.opml.Exporter.write so calling code knows if saving the
727         channel list was successful or not
728         * src/gpodder/opml.py: Check free disk space before saving OPML
729         channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
730         for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)
732 Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
733 Don't send Referer header when downloading episodes
735         * src/gpodder/download.py: Some podcasts now implement an
736         "anti-bandwidth-theft" code that should provide other websites from
737         not linking to the episodes; as we have sent a Referer header
738         containing the RSS feed URL, this causes problems; Referer header
739         sending is therefore disabled now
741 Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
742 TODO items from Katy G. B.
744         * TODO: Updated TODO list
746 Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
747 Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)
749         * src/gpodder/gui.py: Do not hook up tooltip handlers when we are
750         using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)
752 Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
753 Check free disk space before copying files to iPod
755         * src/gpodder/libipodsync.py: Check if the iPod's filesystem has
756         enough free disk space before copying files over to it, as to not
757         corrupt the iTunesDB in certain situations and fail when disk is full;
758         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
759         * src/gpodder/util.py: Add get_free_disk_space() function that
760         calculates the free (user-available) disk space on a given path
762 Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
763 Add informative tooltips to channel navigator
765         * src/gpodder/gui.py: Add tooltips to channel navigator that show a
766         bigger cover image, the title, description, url and used disk space
767         * src/gpodder/libpodcasts.py: Add save_dir_size property to
768         podcastChannel that contains the disk usage of the channel's save_dir;
769         this can be manually updated by calling update_save_dir_size() and
770         will automatically be updated when the GUI code hooks into the
771         channel; also add get_cover_pixbuf() that returns a pixbuf of the
772         cover for a given size or None if there is no valid cover file
774 Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
775 Slipstream code (enumerate instead of simple position tracking)
776         * src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
777         of episodes instead of keeping track of the position "by hand"
779 Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
780 Ignore initial window events from GtkWindow in Config
782         * src/gpodder/config.py: Add a flag to config manager to ignore window
783         events until the window has been realized; then, start taking position
784         and size updates
786 Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
787 Improve caching for HTTP redirects and minor errors; cache clean-up
789         * src/gpodder/cache.py: Cache content when it comes from a HTTP
790         redirect (301, 302, 307); cache feeds even with parsing errors, so we
791         can "fill" our cache and not download on every startup
792         * src/gpodder/libpodcasts.py: Add cache clean-up code after loading
793         channels; this should keep the feedcache.db file smaller for users
794         that like to try out new channels (or have used gPodder for a while)
796 Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
797 Better file extension guessing for URLs
799         * src/gpodder/util.py: Improve file_extension_from_url() by adding
800         additional checks for known good extensions and recurse into the query
801         string if it looks like an URL; this should fix compatibility problems
802         for feeds with strange URLs; should provide more reliable guessing;
803         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
805 Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
806 Fix format_filesize() usage in episodes selector and podcastItem
808         * src/gpodder/gui.py: Use the correct (config-using) format_filesize()
809         function to generate the total size string in the episode selector
810         * src/gpodder/libpodcasts.py: Use the correct (config-usig
811         format_filesize() function to generate the total size string in
812         podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
813         pointing that out
814         * data/gpodder.glade: Use "Preferences" instead of "Preferences..."
815         which feels a bit better in the GUI
817 Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
818 Add "gPodder download folder synchronizer" scripts to repository
820         * doc/dev/gdfs/gdfs-check.py: Added
821         * doc/dev/gdfs/gdfs-init.py: Added
822         * doc/dev/gdfs/README: Added
824 Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
825 The mighty episode selector dialog and some menu re-arrangements
827         * src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
828         positioning code to GladeWidget to be universally usable; update
829         "Device" menu item on startup; new functions: delete_episode_list()
830         and download_episode_list() that both operate on lists of episodes;
831         add code for invoking gPodderEpisodeSelector for deleting old
832         episodes; re-work on_itemDownloadAllNew_activate to use the episode
833         selector instead of hand-crafting a message dialog text; add
834         update_item_device() function that will handle the hiding, showing and
835         renaming of the "Device" menu in the menubar; clean-up
836         gPodderProperties with callback_finished setting (now kwarg-based);
837         new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
838         that will prove to be useful in some places in our codebase: it
839         basically allows the user to select a subset of episodes from a given
840         list in a quite sophisticated way; new "delete old episodes" menu item
841         added for cleaning up gPodder's downloads
842         * src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
843         method to podcastItem; other convenience properties and functions
844         needed for the new episode selector dialog: pubdate_prop,
845         get_filesize_string(), filesize_prop, get_channel_title(),
846         channel_prop, get_played_string(), played_prop
847         * data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
848         gPodder's main menu to be more usable and more compact; also added the
849         Ctrl+K "Remove old episodes" menu item; also use the correct
850         "multimedia-player" icon name of a not really representative icon
852 Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
853 Support syncing to FS-based MP3 players without subfolders
855         * data/gpodder.glade: Add checkbox "Create a subfolder for each
856         channel" to preferences dialog and rename some widgets
857         * src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
858         option that defaults to True (create subfolder for each channel)
859         * src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
860         to preferences dialog; do more intelligent widget hiding for the
861         "Player" tab in the preferences dialog (only show relevant widgets)
862         * src/gpodder/libipodsync.py: Only append channel name as subfolder to
863         destination folder name when the "fssync_channel_subfolders" option is
864         True; suggested by Paul Elliot <omahns.home@gmail.com>
866 Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
867 Fix offline cache behaviour when time is not set
869         * src/gpodder/cache.py: Return cached_content in offline mode when
870         cached_content "is not None" (instead of cached_time "is not None")
872 Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
873 Process events before connecting Config to gtk windows
875         * data/gpodder.glade: Remove default size for main gPodder window, as
876         this is now handled by the config manager
877         * src/gpodder/config.py: Process GTK events in the event queue before
878         connecting to the "configure-event" signal, so we won't get two
879         configure events for the window for the initial size change
881 Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
882 Add error reporting when download fails because of an I/O error
884         * src/gpodder/download.py: Catch and handle I/O errors in
885         DownloadThread and format and pass on messages to GUI code when
886         required; thanks to Florian Richter <Florian_Richter@gmx.de> for
887         suggesting this feature after having a full disk
888         * src/gpodder/gui.py: Update tree view when adding a new episode;
889         add new notification() method and pass this method through to
890         DownloadThread, so it can present messages to the user (i.e. errors)
892 Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
893 Use util.find_command in more places (mplayer detection, ...)
895         * src/gpodder/libgpodder.py: Use util.find_command to detect the
896         existence of the "gnome-btdownload" command and spit out a warning log
897         message when the command is not available
898         * src/gpodder/libipodsync.py: Use util.find_command to check for an
899         installed mplayer binary (instead of relying on os.system("which...")
901 Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
902 Better command detection for the converter library
904         * src/gpodder/libconverter.py: Detect existence of commands before
905         invoking them for converting files; based on a patch by
906         Nick (nikosapi.org); ConverterCollection is now a dict itself :)
907         * src/gpodder/util.py: Add new find_command() function that will
908         search the system's PATH for a specific executable command
910 Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
911 Remove extracted cover art when deleting episode files
913         * src/gpodder/util.py: Apply modified version of a patch from
914         Nick (nikosapi.org) that is better suited for deleting cover art that
915         has been extracted with the new eyeD3 cover art extraction code
917 Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
918 Patch from Nick (nikosapi) to support eyeD3 cover art extraction
920         * src/gpodder/libipodsync.py: Apply modified version of a patch from
921         Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
922         sync code; remove dependency on PyID3
923         * README: PyID3 is not a dependency anymore, as we can now use eyeD3
924         for the same purpose (cover art extraction)
926 Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
927 Fix format_filesize() function to be standards-conformant (unit prefixes)
929         * src/gpodder/config.py: Add "use_si_units" configuration option; if
930         True, the user will see SI units (MB, kB, ...); if False (the
931         default); the user will see binary-prefix units (MiB, KiB, ..)
932         * src/gpodder/libgpodder.py: Add pass-through function
933         "format_filesize()" to gPodderLib that combines the
934         util.format_filesize function with the gPodder-specific config option
935         * src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
936         <z0idberg@gmx.de> to add support for SI units and binary prefixes to
937         format_filesize(); this makes the function standards-compliant
938         * src/gpodder/download.py: Updated to use new format_filesize
939         * src/gpodder/gui.py: Updated to use new format_filesize
940         * src/gpodder/libpodcasts.py: Updated to use new format_filesize
942 Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
943 New Configuration/Settings Manager; massive code clean-ups
945         * src/gpodder/config.py: Added new Configuration Manager that
946         automatically keeps track of saving changed values and is also able to
947         watch GTK widgets for changes; this should simplify our settings
948         management and give us a single place for maintaining settings
949         * src/gpodder/download.py: Access settings from new config manager
950         * src/gpodder/gui.py: Make use of new config manager to connect
951         widgets and settings from the GUI directly to the config manager;
952         remove manual loading and saving of settings; auto-connect as much as
953         possible in the gPodderProperties dialog to get real-time automatic
954         configuration saving; fix the other code to use new config manager
955         * src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
956         old cruft and dead code that has been lying around in libgpodder for
957         some time now; remove configuration code; utilize config manager;
958         unify DownloadHistory+PlaybackHistory in new HistoryStore class;
959         reduce number of import statements
960         * src/gpodder/libipodsync.py: Access settings from new config manager
961         * src/gpodder/libplayers.py: Removed dotdesktop_command()
962         * src/gpodder/libpodcasts.py: Move locking functionality into this
963         module, as locking is only used here; access config from new manager
964         * src/gpodder/services.py: Use config manager to get settings
965         * src/gpodder/util.py: Add format_desktop_command() function, based on
966         the dotdesktop_command() function from libplayers
968 Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
969 Add ability to open download folder from channel's context menu
971         * src/gpodder/gui.py: Add "Open download folder" menu item to channel
972         navigator context menu
973         * src/gpodder/libgpodder.py: Add open_folder() method that will open
974         the DE's default folder browser via "xdg-open"
976 Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
977 Limit filename on FS-based sync to 50 characters
979         * src/gpodder/libipodsync.py: Do not allow extremely long file names
980         that could theoretically be generated by using data from RSS feeds;
981         this is needed to make FAT-based drives work with files that would
982         otherwise have file names that are too long
984 Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
985 Escape RSS-provided strings in Pango markup
987         * src/gpodder/gui.py: Escape strings in Pango markup
988         * bin/gpodder: we're in development again, so "+svn"
990 Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
991 gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released
993         * bin/gpodder: gPodder 0.10.1 released :)
994         * doc/man/gpodder.1: gPodder 0.10.1 released :)
995         * README: gPodder 0.10.1 released :)
996         * data/messages.pot: Refreshed template from source files
997         * data/po/de.po: Updated German translation for the 0.10.1 release
998         * data/po/*.po: Refreshed translation files from template
1000 Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
1001 Add "Save episode to file" handling to episode list context menu
1003         * data/gpodder.glade: Use a stock "Save As" button for the "Copy
1004         episode to file" button
1005         * src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
1006         that shows a copy dialog where a user can copy a file to a selected
1007         destination (this is used for "Save episode to file"); use
1008         show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
1009         folder" menu item in episode list context menu and use
1010         show_copy_dialog to carry out the user interaction
1012 Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
1013 Allow "https://" URLs for episode URLs, as we can handle these, too
1015         * src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
1016         can handle https URLs, thanks to Aravind Seshadri
1017         <aravind@aravind.name> who initially reported this bug
1019 Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
1020 Sync videos to the "Video Podcasts" playlist instead of the "Video" menu
1022         * src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
1023         <niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
1024         of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB
1026 Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
1027 sync_filename in podcastItem; cleanup; hide extra progressbar on transfer
1029         * src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
1030         unnecessary second progressbar when only syncing one channel (i.e.
1031         when clicking on the "transfer" button in the main window
1032         * src/gpodder/libgpodder.py: Remove unneeded lexists import and
1033         warning; clean-up
1034         * src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
1035         * src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
1036         returns the custom_sync_name or the title of the episode, based on the
1037         user's configuration settings for FS-based MP3 player sync
1039 Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
1040 Add wishlist items to TODO list from Paul and Wilfred
1042         * TODO: New wishlist items, ideas and suggestions
1044 Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
1045 Limit download progress status updates to reduce CPU load
1047         * src/gpodder/download.py: Limit the amount of status updates the
1048         download threads send to the DownloadStatusManager to one per second;
1049         this should make gPodder less CPU-intensive with many parallel
1050         downloads; thanks to Wilfred van Rooijen for reporting and testing
1052 Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
1053 Update channel models (icons) after iPod synchronization
1055         * src/gpodder/gui.py: Call update_model() on each channel after an
1056         iPod sync, so we can update the played state on the available episodes
1057         lists when played state was changed by the iPod sync
1059 Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
1060 Fix loading of channel metadata (load auth data and settings)
1062         * src/gpodder/libpodcasts.py: Load channel metadata when loading a
1063         podcastChannel object from OPML/LocalDB. This fixes a problem with
1064         authentication data being not loaded and also fixes a bug when the
1065         custom-set channel title was not correctly used throughout the GUI.
1066         Thanks to Nick (nikosapi) for reporting and providing a patch
1068 Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
1069 Finally remove Desktop symlink code; several compatibility fixes
1071         * src/gpodder/download.py: Prevent divide-by-zero errors when
1072         calculating download speed
1073         * src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
1074         percentage done in code for moving the downloaded items folder
1075         * src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
1076         because it's not GUI-accessible anymore and we didn't use it anyway
1077         * src/gpodder/opml.py: Better local filename detection by using
1078         os.path.exists() instead of .startswith('/'); this is also good for
1079         cross-platform compatibility where parts don't usually start with a
1080         forward slash (i.e. Win32)
1082 Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
1083 Channel list selection bug fixes
1085         * src/gpodder/gui.py: Fix some channel list-related problems and
1086         annoyances, based on a patch by Nick (nikosapi)
1087         * bin/gpodder: We're in development again, so "+svn"
1089 Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
1090 gPodder 0.10.0 "Hier spricht Frank Drebin" released
1092         * bin/gpodder: gPodder 0.10.0 released :)
1093         * doc/man/gpodder.1: gPodder 0.10.0 released :)
1094         * README: gPodder 0.10.0 released :) (and: updated dependencies)
1095         * TODO: Updated TODO list (some items are done for 0.10.0 :)
1097 Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
1098 Updated translations from Rosetta (Launchpad.net)
1100         * data/po/es.po: Spanish translation by Julio Acuña
1101         * data/po/pt.po: Portuguese translation by Joel Calado (completed :)
1103 Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
1104 Fix problems with path selection in treeChannels
1106         * src/gpodder/gui.py: Simple bugfix
1108 Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
1109 Center gPodderEpisode on treeAvailable for less mouse hopping
1111         * src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
1112         window on the treeAvailable, because that makes the position of the
1113         opened dialog more predictable and easier to use (as if the
1114         gPodderEpisode dialog was "inside" the treeView from which it opened)
1116 Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
1117 Don't translate feed format string examples
1119         * src/gpodder/gui.py: Don't mark format string examples as
1120         translatable
1122 Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
1123 Small bugfix for updating treeChannels when its model changes
1125         * src/gpodder/gui.py: Bugfix
1127 Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
1128 Removed channel combobox, drag'n'drop improvements + new channel cover editor
1130         * data/gpodder.glade: Remove comboAvailable in gPodder (main window);
1131         add download+clear button in gPodderChannel, rename some items that
1132         are now used in code; make the channel navigator non-shrinkable (so
1133         it is always visible, because we don't have comboAvailable anymore)
1134         * src/gpodder/gui.py: Remove support for the channel combo box,
1135         also known as comboAvailable; clean-up DND code and make treeChannels
1136         the only DND target in the main window; remove some unnecessary
1137         updating of the channel list (calls to updateComboBox);
1138         Changes for the gPodderChannel dialog: Don't automatically download
1139         channel cover when dialog pops up; add "Download" and "Clear" buttons
1140         to the cover editor; add DND support for dropping local files or
1141         images from the web browser to the cover editor (for setting custom
1142         covers on channels with bad or no cover)
1143         * src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
1144         URL is invalid, but the image has already been downloaded (because we
1145         read the downloaded image in the code when it exists, without URL)
1147 Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
1148 Center feed update dialog on main window; scroll reset in chan.navigator
1149         * src/gpodder/gui.py: Reset the current scroll position of the channel
1150         navigator when re-loading the channel list; this fixes an annoyance
1151         that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
1152         with a HUGE channel list (more than 50 channels); also removed the
1153         scroll position reset code from treeAvailable, as we already managed
1154         to only edit the model instead of re-loading it every time; added code
1155         to really center the feed update dialog on gPodder's main window
1157 Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
1158 Replace wget with new gpodder.download module; User-agent support
1160         * bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
1161         for wget, as this is not needed anymore
1162         * src/gpodder/cache.py: Clean-up; remove old logging code; add support
1163         for gpodder.user_agent; log info when there is an error in parsing the
1164         feed, so the user knows why this feed is not cached
1165         * src/gpodder/console.py: Remove DownloadPool, Use new
1166         gpodder.download module for carrying out downloads, remove
1167         wget_version() tester, as this is not needed anymore =)
1168         * src/gpodder/download.py: Added new downloader module that uses
1169         urllib and some custom classes and functions to provide the equivalent
1170         functionality of the obsolete "libwget", but without the wget
1171         dependency and with better accuracy (progress reporting, etc..)
1172         * src/gpodder/gui.py: Utilize new gpodder.download module instead of
1173         libwget
1174         * src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
1175         module that holds the value of the "User-agent" header to send to web
1176         servers when requesting OPMLs, Feeds or download data
1177         * src/gpodder/opml.py: Add support for sending the User-agent header
1178         * src/gpodder/services.py: Make the progress column a float column to
1179         have smoother progress indicuation; add the "acquired" keyword
1180         argument to s_release(); default 'speed' to a translated "Queued"
1181         * src/gpodder/libwget.py: Removed
1182         * doc/dev/redhat-wget-output.txt: Removed
1184 Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
1185 Refreshed pot files and po templates; updated German translation
1187         * data/messages.pot: Refreshed from current source
1188         * data/po/de.po: Refreshed and updated translation
1189         * data/po/*.po: Refreshed from new .pot file
1191 Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
1192 Imported updated translations from Rosetta (Launchpad.net)
1194         * data/po/it.po: Italian translation updated by FFranci72
1195         * data/po/nl.po: Dutch translation updated by Roel Groeneveld
1196         * data/po/pt.po: Portuguese translation updated by Joel Calado
1198 Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
1199 Offline support for feedcache, faster startup, code simplification
1201         * src/gpodder/cache.py: Add support for "offline" keyword argument
1202         * src/gpodder/gui.py: Make intelligent use of "offline" keyword
1203         argument when passed to load_channels(); simplify code for selecting
1204         the active channel in updateComboBox()
1205         * src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
1206         argument in all relevant function calls
1208 Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
1209 New LocalDB using DOM (removes python-xml dependency); channel context menu
1211         * bin/gpodder: Don't check for xml.sax package and modules anymore, as
1212         the dependency on python-xml has been removed with this release
1213         * data/gpodder.glade: Remove the "info" button for the current channel
1214         * src/gpodder/gui.py: Remove localdb-related code and adopt code for
1215         new LocalDB code; add context menu to channel navigator (edit/delete)
1216         * src/gpodder/libipodsync.py: Don't import "liblocaldb" module
1217         * src/gpodder/liblocaldb.py: Removed
1218         * src/gpodder/liblocdbreader.py: Removed
1219         * src/gpodder/liblocdbwriter.py: Removed
1220         * src/gpodder/liblogger.py: Add "traceback" keyword argument to the
1221         log() function; if "True" and in debugging mode, print traceback
1222         * src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
1223         liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
1224         LocalDBReader; customize podcastChannel to new LocalDB code
1225         * src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)
1227 Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
1228 Fix a bug when traversing directories with loop symlinks
1230         * src/gpodder/util.py: Don't dive into subdirectories that are
1231         symbolic links, this is to avoid a situation where looping symlinks
1232         result in the function dead-locking in a endless recursive loop,
1233         thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
1234         out and providing the necessary bug report to fix this issue
1236 Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
1237 Mark episodes as downloaded/deleted when deleting episodes
1239         * src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
1240         as deleted" and mark episodes as downloaded when removing selected
1241         episodes that have not been downloaded yet, as suggested by Holger
1242         Leskien <holger leskien.com>
1243         * src/gpodder/libpodcasts.py: Fix problem when trying to delete
1244         episodes that have not been downloaded
1246 Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
1247 Support for customized file names in MP3 player sync code
1249         * src/gpodder/gui.py: Add supporting code for reading/setting
1250         configuration options for the preferences dialog and a help display
1251         code that displays a guide on how to write custom sync name strings
1252         * src/gpodder/libgpodder.py: New configuration options:
1253         custom_sync_name (holds format string) and
1254         custom_sync_name_enabled (boolean, if the above string should be used)
1255         * src/gpodder/libipodsync.py: Use custom sync name format string and
1256         util's object_string_formatter() function to obtain a file name for
1257         the synchronized episode (or default to episode.title if disabled)
1258         * src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
1259         basename (returns the basename of the URL, without extension) and
1260         published (returns the pubDate of the episode in YYYYMMDD format)
1261         * src/gpodder/util.py: New object_string_formatter() method that
1262         replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
1263         corresponding values of passed-in keyword argument objects
1264         * data/gpodder.glade: Added preferences GUI elements
1266 Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
1267 Check for installed python-xml package on startup (hard dependency)
1269         * bin/gpodder: Add dependency check for PyXML
1271 Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
1272 Fix bug with default window title in gPodder window
1274         * src/gpodder/gui.py: Always set gPodder's default_title attribute
1276 Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
1277 Updated Russian translation from Vladimir Zemlyakov
1279         * data/po/ru.po: Updated
1281 Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
1282 More sanitizing hacks for ugly feeds we don't really like
1284         * src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
1285         multiple enclosures, if there are more than one available; skip
1286         episodes with a buggy download URL (i.e. no supported URL scheme)
1287         * src/gpodder/util.py: Return "(unknown)" if file size cannot be
1288         determined from the string passed to format_filesize(); return "None"
1289         in file_type_by_extension() if the extension is an empty string
1291 Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
1292 Handle enclosures (or lack thereof) better if fields are missing
1294         * src/gpodder/gui.py: Remove refetch_channel_list() function, as this
1295         is not called anywhere from the code (uh, how did i miss that?)
1296         * src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
1297         without length or mime type; ignore episodes without enclosures (it's
1298         not len(enclosures) == 0, but the enclosures attribute doesn't even
1299         exist on entries without enclosures, so make sure to check for that
1301 Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
1302 Use Python's webbrowser module for URL opening; channel dialog clean-up
1304         * bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
1305         * data/gpodder.glade: Remove "cancel" button from gPodderChannel
1306         * src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
1307         of relying on "gnome-open" to be available; remove event handler for
1308         gPodderChannel's "cancel" button
1310 Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
1311 Dependency check for python-feedparser in bin/gpodder
1313         * bin/gpodder: Add dependency check and warning (with exit) if
1314         python-feedparser is not installed, as python-feedparser now is a
1315         dependency of gPodder
1317 Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
1318 Support for modifying DownloadHistory and PlaybackHistory in GUI
1320         * data/gpodder.glade: Added menu items in gPodder main window
1321         * src/gpodder/gui.py: Add menu items to treeAvailable's context menu
1322         to toggle/set downloaded and played status on selected episodes
1323         * src/gpodder/libgpodder.py: Add del_item() function to
1324         DownloadHistory to support removing items from the history list;
1325         enhance history_mark_{played,downloaded}() functions for add/delete
1327 Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
1328 Improved pubDate parsing; episode delete bugfix
1330         * src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
1331         of episodes and use new function in gpodder.util to convert the parsed
1332         pubDate to a string; bugfix for remove downloaded episode by URL
1333         * src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
1334         converts the "updated_parsed" field from feedparser to a RFC2822
1335         string
1337 Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
1338 Remove obsolete documentation in doc/dev; cosmetic changes
1340         * data/po/Makefile: Upgrade to GPLv3
1341         * data/po/README: Mention i18n page on gPodder's website
1342         * doc/dev/build-deps-breezy.txt: Removed
1343         * doc/dev/debian.txt: Removed
1344         * doc/dev/i18n.txt: Removed
1345         * doc/dev/porting.txt: Removed
1346         * doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
1347         files
1349 Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
1350 Upgrade to the GNU General Public License, Version 3
1352         * bin/gpodder: Upgrade to GPLv3
1353         * COPYING: Upgrade to GPLv3
1354         * doc/dev/copyright_notice: Upgrade to GPLv3
1355         * Makefile: Upgrade to GPLv3
1356         * README: Upgrade to GPLv3
1357         * setup.py: Upgrade to GPLv3
1358         * src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
1359         cache, as these are LGPL or other and do not originate from gPodder)
1361 Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
1362 Integration changes, commit and ChangeLog migration
1364         * doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
1365         * Makefile: Make $EDITOR edit "ChangeLog" directly
1367 Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
1368 Last batch of experimental change merges (up to svn r398)
1370         * doc/dev/tepache-howto.txt: Removed
1371         * doc/dev/tepache: Removed
1372         * src/gpodder/gui.py.orig: Removed
1373         * src/gpodder/libwget.py: Send progress = 0.0 on inital status update
1374         * src/gpodder/libpodcasts.py: Try to get episode metadata from several
1375         different properties of the corresponding feedparser entries; warn
1376         user when we couldn't get the episode title and try to get the episode
1377         title from the filename of the URL if we still have not found an
1378         episode title
1379         * src/gpodder/libgpodder.py: Add get_device_name() that returns a
1380         "nice" representative string of the currently selected device that can
1381         be used to represent the device in the GUI
1382         * src/gpodder/util.py: Return "(unknown)" string when bytesize in
1383         format_filesize() when the size has a negative value; make
1384         get_tree_icon() catch errors and be more corrent with icon creation;
1385         add get_first_line() function that extracts the first line of a string
1386         * src/gpodder/libipodsync.py: Add "divx" to list of video extensions
1387         * src/gpodder/services.py: DownloadStatusManager has a new observer
1388         notification: "progress-detail"; add unregister() functionality for
1389         observers; add request_progress_detail() function that can be used to
1390         force a "progress-detail" notification to be sent out to all relevant
1391         observers; remove get_url_by_iter() function as it is not needed
1392         anymore
1393         * src/gpodder/gui.py: Clean-up after tepache dependency removal; new
1394         GladeWidget base class that subclasses SimpleGladeApp and simplifies
1395         class creation for our gPodder windows; add context menu to
1396         treeAvailable; re-work play_or_download() and make it return a list of
1397         boolean indicators on which actions can be performed on the selected
1398         items; move show_message() and show_confirmation() to GladeWidget;
1399         disable editing of the URL in the channel info dialog, this simplifies
1400         code and editing the URL doesn't make so much sense anyway (adding the
1401         new url and removing the old does the same and is easier, code-wise);
1402         add support for cancelling downloads in the available podcasts view;
1403         support live status view and download cancelling in the gPodderEpisode
1404         dialog window by hooking up to DownloadStatusManager as observer
1405         * src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
1406         of weakref for keyword arguments -> properties of new object)
1407         * bin/gpodder: We're using a experimental development version now
1408         * data/gpodder.glade: Add progress bar and associated buttons to
1409         gPodderEpisode dialog
1410         * MANIFEST.in: Removed gpodder.py.orig inclusion
1411         * Makefile: Removed support for tepache
1413 Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
1414 More changes from the experimental branch (up to svn r382)
1416         * src/gpodder/liblocdbreader.py: Clean-up
1417         * src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
1418         a generic download status manager as constructor parameter; remove
1419         downloadStatusManager class (moved to gpodder.services)
1420         * src/gpodder/console.py: More clean-ups; use get_new_episodes()
1421         instead of duplicating code here; simplify the code for wget version
1422         detection
1423         * src/gpodder/libpodcasts.py: Improve channel/episode generation from
1424         feedparser objects (with error handling); utilize download status
1425         manager from "gpodder.services" instead of accepting a download status
1426         manager as parameter; clean up unneeded functions and rename some
1427         functions to make the code more readable; use util.get_tree_icon() for
1428         compositing a nice icon; remove the "played" column from the
1429         treemodel; add local_filename to treemodel
1430         * src/gpodder/liblocdbwriter.py: Clean-up
1431         * src/gpodder/libgpodder.py: Clean-up
1432         * src/gpodder/util.py: Add torrent_filename() function that tries to 
1433         extract the filename of the file a .torrent file contains; add
1434         file_extension_from_url() function that returns the file extension in
1435         a URL; add file_type_by_extension() that returns the type of a file
1436         based on its extension; add get_tree_icon() that loads a named icon
1437         and optionally adds a bullet to it (unplayed status indicator)
1438         * src/gpodder/libipodsync.py: Clean-up
1439         * src/gpodder/services.py: New module that currently contains the
1440         improved DownloadStatusManager and a single object that servces as
1441         download status manager for all parts of gpodder
1442         * src/gpodder/gui.py: Only one column for status/played; use
1443         "gpodder.services" for the download status manager; clean-up
1444         * src/gpodder/liblocaldb.py: Clean-up
1445         * bin/gpodder: Clean-up
1446         * data/gpodder.glade: Clean-up; removed "show played column"
1447         preference in gPodderProperties dialog
1449 Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
1450 First import from experimental branch (up to svn r375)
1452         * src/gpodder/librssreader.py: Removed in favor of python-feedparser
1453         * src/gpodder/libwget.py: Percentage is now a float, don't set to 0
1454         when there has been an error
1455         * src/gpodder/console.py: Use {load,save}_channels methods; code
1456         cleanup and simplification
1457         * src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
1458         * src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
1459         and RSS reading; use shelve for new ChannelSettings class; clean-up
1460         podcastChannel and podcastItem; better TreeModel generator for
1461         podcastChannel (try to cache the model, only updates icons, etc...);
1462         remove downloadRss method in podcastChannel; move DownloadHistory and
1463         Playbackhistory to libgpodder; new load_channels() and save_channels()
1464         functions to save/load the channel list to an OPML file
1465         * src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
1466         and gPodderChannelReader (this is now in libpodcasts as simple
1467         functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
1468         * src/gpodder/gui.py: Use new functions for channel list
1469         loading/saving; only update treemodel for treeAvailable when it's
1470         really necessary
1471         * src/gpodder/liblocaldb.py: Remove unnecessary functions that have
1472         not been used for a while (treemodel-related); use load_channels()
1473         instead of gPodderChannelReader
1476 Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
1477         * ChangeLog: Older changes can be found on the gPodder website at
1478         http://gpodder.berlios.de/releases/0.9.5/ChangeLog