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