Sat, 29 Mar 2008 16:30:02 +0100 <thp@perli.net>
[gpodder.git] / ChangeLog
blobf2cd8ce01b80493bdabe87321e781ac3b2690a74
1 Sat, 29 Mar 2008 16:30:02 +0100 <thp@perli.net>
2 Report errors in parsing/loading an already-added channel in the navigator
4         * src/gpodder/gui.py: Show the error from feedparser in the channel's
5         tooltip if there has been an error loading the channel
6         * src/gpodder/libpodcasts.py: Make sure we can load a default title
7         when using get_by_url(); save the parse_error variable for each
8         channel (it defaults to None if there is no error); mark the
9         description text for the channel navigator in red color if there has
10         been a parser error and add the parse_error variable to the liststore
11         model
12         * src/gpodder/util.py: Strip whitespace before and after the string in
13         remove_html_tags()
15 Sat, 29 Mar 2008 16:18:59 +0100 <thp@perli.net>
16 Add support for Rockbox' AudioScrobbler logfile to update played status
18         * src/gpodder/config.py: Add "mp3_player_use_scrobbler_log"
19         configuration option (defaulting to False) which controls if we are
20         going to try and find a ".scrobbler.log" file that contains
21         information on which tracks have been played; for this to work, you
22         also have to enable the "Updated tags after download" option
23         * src/gpodder/sync.py: Support for finding the .scrobbler.log file and
24         updating the played status of episodes in the MP3 player sync code
25         * src/gpodder/util.py: Add "find_mount_point()" function that tries to
26         determine the mount point on which the given directory (or file) lies
27         and returns the mount point or "/" if the directory/file resides on
28         the root filesystem.
30         This whole patch has been contributed by Nick <nikosapi.org> - thanks!
32 Sat, 29 Mar 2008 16:16:06 +0100 <thp@perli.net>
33 Merge sv.po translation from 0.11.1 release tarball
35         * data/po/sv.po: It seems like I somehow messed up the translations
36         merge, so here's the correct sv.po translation file, merged from the
37         0.11.1 tarball; thanks to Anders Kvist <kvistkvist@telia.com> for
38         pointing that out :)
40 Sat, 29 Mar 2008 01:20:46 +0100 <thp@perli.net>
41 Make sure we ignore the updated_parsed of a channel if it's None
43         * src/gpodder/libpodcasts.py: Only try to convert the "updated_parsed"
44         field if it's not "None"
45         * src/gpodder/util.py: Make sure we receive a valid 9-tuple when
46         converting dates from updated_parsed; if we receive a None value or
47         some value that isn't "9" in length, return None
48         Thanks to Chris Arnold <carnold@electrichendrix.com> for reporting
49         this bug on the gpodder-devel mailing list
51 Thu, 27 Mar 2008 13:10:58 +0100 <thp@perli.net>
52 This is trunk, so set version to 0.11.1+svn
54         * bin/gpodder: Set version to 0.11.1+svn
56 Thu, 27 Mar 2008 12:57:56 +0100 <thp@perli.net>
57 gPodder 0.11.1 "Attacked by Killer Tomatoes" released
59         * bin/gpodder: gPodder 0.11.1 released :)
60         * README: gPodder 0.11.1 released :)
61         * doc/man/gpodder.1: gPodder 0.11.1 released :)
62         * data/icons/24/gpodder.png: Updated from the dataset
63         * data/messages.pot: Updated from source
64         * data/po/*.po: Updated from messages.pot
65         * data/po/de.po: Updated German translation
67 Thu, 27 Mar 2008 11:52:35 +0100 <thp@perli.net>
68 Use cPickle for dumbshelve - it's compatible and faster
70         * src/gpodder/dumbshelve.py: Improve saving of channel cache and
71         metadata (and basically all that currently depends on dumbshelve) by
72         using cPickle as a drop-in replacement for pickle
74 Thu, 27 Mar 2008 11:28:31 +0100 <thp@perli.net>
75 Fix problem with pickle when there is a feed parsing exception
77         * src/gpodder/cache.py: When the feedparser returns an exception, this
78         will be stored as object in bozo_exception. Convert this to a string,
79         so the pickle module doesn't complain; thanks to VladDrac in #python
80         on FreeNode for pointing me to the right direction to fix this bug
82 Mon, 24 Mar 2008 10:42:19 +0100 <thp@perli.net>
83 Add "3gp" to the list of video file extensions, so we detect these files
85         * src/gpodder/util.py: Add the .3gp video file extension to the list
86         of known video file extensions, so we can detect that these are video
87         files and act accordingly (in the UI and on sync); thanks to Atte
88         André Jensen for reporting this bug on the gpodder-devel mailing list
90 Sun, 23 Mar 2008 10:39:24 +0100 <thp@perli.net>
91 Fix a bug when loading invalid image data (delete cover file then)
93         * src/gpodder/libgpodder.py: Fix a bug when gPodder is unable to load
94         an invalid cover image (i.e. when dragging a linked image from the
95         browser to the gPodder window, the link is sent, not the image)
97 Sat, 22 Mar 2008 21:08:06 +0100 <thp@perli.net>
98 Make bluetooth device discover a bit nicer
100         * src/gpodder/gui.py: Improve bluetooth device discovery button by not
101         destroying its design when it has been clicked and the label is
102         modified
104 Sat, 22 Mar 2008 20:45:27 +0100 <thp@perli.net>
105 Revert previous insanity (where I selected an awful "Transfer" toolbar icon)
107         * data/gpodder.glade: I wonder why I selected "gtk-network" as the
108         icon for the "Transfer" button on gPodder's toolbar. It surely is
109         irritating and illogical as hell.. Hmm. Anyway - now, there is a nice
110         "multimedia-player" icon which probably depicts an iPod-like device
111         if you use a good icon set. This makes much more sense. Go usability!
113 Sat, 22 Mar 2008 20:41:54 +0100 <thp@perli.net>
114 Add "Visit website" menu items to channel and episode list; simple chan menu
116         * src/gpodder/gui.py: Add "Visit website" menu items to the context
117         menu of both the episode list and the channel navigator; also, make
118         the channel context menu easier to use by replacing the old
119         "Edit [Channelname]" and "Remove [Channelname]" items with stock items
121 Sat, 22 Mar 2008 18:41:30 +0100 <thp@perli.net>
122 Fix "Podcasts not being marked as new when synced to iPod" (#70)
124         * src/gpodder/sync.py: Fix bug when podcasts were not marked as new
125         when synced to iPod and "on_sync_mark_played" was enabled;
126         Bug URL: http://bugs.gpodder.org/show_bug.cgi?id=70
127         Thanks to defrex (defrex0 gmail com) for report this bug in Bugzilla
129 Thu, 20 Mar 2008 11:21:06 +0100 <thp@perli.net>
130 Delay loading of UserAppsReader and improve libplayers
132         * src/gpodder/gui.py: Only load UserAppsReader's database three
133         seconds after gPodder start (because we only need it when the user
134         opens the preferences dialog, and if she opens it before these three
135         seconds, the UserAppsReader data is loaded on demand); because we load
136         the database (and generate the model) before we display the
137         preferences dialog, the preferences dialog usually comes up faster
138         than before (except for the situation where it is opened right after
139         gPodder startup); have only one UserAppsReader for audio/video and not
140         both (would duplicate the amount of work needed to read desktop
141         files); cleanup some UserAppsReader-related code in the prefs dialog
142         * src/gpodder/libplayers.py: Improve the reading code and make it
143         possible to support multiple mime types per-UserAppsReader (i.e. both
144         audio and video types are read by a single UAR instance); clean up the
145         imports for this module and do other related changes to make the code
146         nicer to read and understand
148 Thu, 20 Mar 2008 11:18:51 +0100 <thp@perli.net>
149 Add option to limit the maximum number of episodes per feed
151         * src/gpodder/config.py: Add "max_episodes_per_feed" configuration
152         option (int, defaults to 200) that determines the maximum number of
153         episodes that are parsed per channel/feed; if there are more episodes,
154         they are ignored. This value can be adjusted via the extended
155         configuration editor if you need more episodes
156         * src/gpodder/libpodcasts.py: Add support for the
157         max_episodes_per_feed configuration option above
159 Thu, 20 Mar 2008 11:13:16 +0100 <thp@perli.net>
160 Fix bug with unneeded download directory being created
162         * src/gpodder/libpodcasts.py: Fix bug when an unneeded download
163         directory would be created on every gPodder startup
165 Thu, 20 Mar 2008 11:11:18 +0100 <thp@perli.net>
166 Only serialize DumbShelve to disk when we have changed/deleted items in it
168         * src/gpodder/dumbshelve.py: Add a "__dirty" flag to DumbShelve to
169         know if we have to write the DumbShelve to the disk or if nothing has
170         changed since the last write (and therefore no need to run the
171         time-consuming serialization code again); this speeds up initial
172         loading time and probably also speeds up other parts of the code
174 Thu, 20 Mar 2008 11:09:27 +0100 <thp@perli.net>
175 Timestamp and benchmark functions for logger
177         * src/gpodder/liblogger.py: Add support for timestamping and benchmark
178         functions to liblogger, so we see the microtime since gPodder startup
179         and can also use the logging module to benchmark the speed of certain
180         code parts; this is helpful for our performance patches :)
182 Thu, 20 Mar 2008 11:07:48 +0100 <thp@perli.net>
183 Performance-improving patch from Nick (nikosapi) to html entity replacement
185         * src/gpodder/util.py: Merge patch from Nick (nikosapi.org) to really
186         improve performance of the HTML tag stripper/entity replacement code
187         by using regular expressions and some more intelligent code for
188         converting numeric entities to Unicode characters
190 Thu, 20 Mar 2008 11:06:32 +0100 <thp@perli.net>
191 Add demo code for displaying a splash screen
193         * doc/dev/splash-logo.py: Added testing code that would display a
194         splash screen (transparent if compositing is enabled); we currently
195         don't plan to use this code for reasons described on gpodder-devel
197 Thu, 20 Mar 2008 10:04:14 +0100 <thp@perli.net>
198 Filter "None" filenames from GtkFileChooser widgets
200         * src/gpodder/config.py: Make sure we don't receive a "None" filename
201         from GtkFileChooser widgets when connecting to the config manager
203 Wed, 19 Mar 2008 18:06:58 +0100 <thp@perli.net>
204 Change the context menu of the episode list popup menu
206         * src/gpodder/gui.py: Simplify, re-structure and improve the context
207         menu of the episode list popup menu (right-click menu); thanks to hex
208         (justin.forest gmail.com) for suggesting this change and giving
209         valuable input on gpodder-devel
211 Wed, 19 Mar 2008 15:45:15 +0100 <thp@perli.net>
212 Patch from Nikosapi to fix MP3 player sync progress
214         * src/gpodder/sync.py: Patch from Nick (nikosapi.org) to fix MP3
215         player sync problems: "Instead of displaying the proper percentage of
216         the copied file in the FS-based sync dialog, gPodder would initially
217         report 100% and near the end of the copy it would report percentages
218         >100%."
220 Wed, 19 Mar 2008 15:02:10 +0100 <thp@perli.net>
221 Various Bluetooth-related fixes
223         * data/gpodder.glade: Use the "bluetooth" icon instead of the (old?)
224         "stock_bluetooth" icon; in Gnome 2.22, the "bluetooth" icon is nicer,
225         i.e. more Tango-ish than the "stock_bluetooth" icon
226         * src/gpodder/gui.py: Fix a logging error; Only show "Send to [...]
227         via bluetooth"/"Send to bluetooth device" when we have already
228         downloaded the episodes (won't obviously work otherwise..)
229         * src/gpodder/util.py: Fix bluetooth_send_file to work with both
230         bluetooth-sendto and gnome-obex-send (different command line argument
231         format for both)
233 Sun, 16 Mar 2008 12:55:49 +0100 <thp@perli.net>
234 Python-feedparser is a dependency, so mention it in the README
236         * README: Mention python-feedparser as a dependency in the README
237         file; thanks to Alain Tauch for pointing this out on the mailing list
239 Wed, 12 Mar 2008 12:38:19 +0100 <thp@perli.net>
240 Updated translations for 0.11.1 stabilization period
242         * data/messages.pot: Updated from source
243         * data/po/*.po: Updated from messages.pot
245 Tue, 11 Mar 2008 18:53:25 +0100 <thp@perli.net>
246 Add option to write gtkpod extended database on sync
248         * data/gpodder.glade: Add a check box for the new config option
249         * src/gpodder/config.py: Add ipod_write_gtkpod_extended boolean
250         configuration variable that controls if we want to write iTunesDB.ext
251         after synchronization (defaults to False)
252         * src/gpodder/gui.py: Glue code for UI<->Config manager
253         * src/gpodder/sync.py: Use libgpod's "gtkpod" module to write the
254         extended gtkpod database (iTunesDB.ext) to the iPod after sync - this
255         has to be enabled via an option
257 Tue, 11 Mar 2008 18:44:19 +0100 <thp@perli.net>
258 Fix problem with old PyGTK versions when importing gpodder.trayicon
260         * src/gpodder/gui.py: Apply patch from Bill Barnard
261         <bill@barnard-engineering.com>, based on a patch from Jérôme Chabod
262         <jerome.chabod@ifrance.com> that makes sure we can import the tray
263         icon module. If not, we disable the tray icon functionality
265 Mon, 10 Mar 2008 16:37:38 +0100 <thp@perli.net>
266 Add support for creating M3U playlist files in download folders
268         * src/gpodder/config.py: Add "create_m3u_playlists" boolean
269         configuration option (default False) that controls if we want to
270         generate per-channel M3U playlists in our download folders
271         * src/gpodder/gui.py: Add context menu entry for manually updating an
272         M3U playlist for the channel navigator (only visible when updating m3u
273         playlists is enabled
274         * src/gpodder/libpodcasts.py: Add update_m3u_playlist() function to
275         podcastChannel and call it when removing and adding downloaded
276         episodes
277         * src/gpodder/util.py: Add sanitize_filename() function that tries to
278         encode a file name in the system's encoding, stripping all chars that
279         are invalid on FAT32 and other systems (e.g. slash, etc..)
281 Thu, 06 Mar 2008 17:46:21 +0100 <thp@perli.net>
282 Be less verbose, consider episodes with length<=100 to have invalid length
284         * src/gpodder/libpodcasts.py: Remove verbose logging for episode
285         metadata (seems to work now); consider episodes with a small length
286         value to have invalid length, i.e. try to find the length of the
287         episode by looking at the HTTP header; thanks to Bernd
288         <schlaber@gmail.com> for sending in the feed URL with which this bug
289         happens (length was 1) during the gPodder workflow survey :)
291 Tue, 04 Mar 2008 12:15:53 +0100 <thp@perli.net>
292 Fix KeyError bug in custom_selection_button_clicked (from LP)
294         * src/gpodder/gui.py: Fix problem with localized strings on the custom
295         selection buttons, i.e. pass the label to the function directly
296         instead of relying on the gtk.Button to have the label in the correct
297         encoding (LP: #192918); thanks to Pavel Mlčoch for reporting this bug
298         on Launchpad
300 Tue, 04 Mar 2008 12:05:23 +0100 <thp@perli.net>
301 Fix AttributeError bug in updateTreeView (from LP)
303         * src/gpodder/gui.py: Make sure that we have a valid "active_channel"
304         when updating the tree view (LP: #183667); thanks to red26wings for
305         reporting this bug on Launchpad
307 Mon, 03 Mar 2008 23:06:30 +0100 <thp@perli.net>
308 Add support for changing the URL of a subscribed channel (bug #42)
310         * data/gpodder.glade: Make the URL entry in the channel dialog
311         editable
312         * src/gpodder/gui.py: Add support for changing the URL of a subscribed
313         channel (i.e. move from the "latest" RSS feed to the "complete" RSS
314         feed, as is the case with Chaosradio podcasts, for example); ask user
315         if she really wants to move; handle case where the new URL is wrong
316         by reverting to old URL; Improve code for moving the download
317         directory; thanks to Steve Garcia <sgarcia@bak.rr.com> for the bug
318         report
320 Mon, 03 Mar 2008 21:14:55 +0100 <thp@perli.net>
321 Small fix for moving downloads progress bar
323         * src/gpodder/gui.py: Make sure the value for set_fraction of the
324         progress bar is in 0.0..1.0
326 Mon, 03 Mar 2008 20:53:15 +0100 <thp@perli.net>
327 Add "Go to website" buttons to episode and channel (bug #43)
329         * data/gpodder.glade: Add "Go to website" buttons to episode and
330         channel info dialogs
331         * src/gpodder/gui.py: Add code to open website URL or hide the "Go to
332         website" button when there is no valid website link for an episode or
333         channel
335 Mon, 03 Mar 2008 20:37:02 +0100 <thp@perli.net>
336 Move webbrowser code to util.open_website; fix URLs to gpodder.org
338         * src/gpodder/gui.py: Use new gpodder.org URLs; use
339         util.open_website() instead of directly interfacing with threads and
340         the "webbrowser" module
341         * src/gpodder/util.py: New function open_website() that takes care of
342         opening the system's default web browser and opening the specified URL
344 Sun, 02 Mar 2008 14:20:56 +0100 <thp@perli.net>
345 Make "gl" a global-accessible object in libgpodder
347         * doc/dev/gdfs/gdfs-check.py: Adapt to new structure of gPodderLib
348         * src/gpodder/*.py: Use "gl" instead of all incarnations of
349         "gPodderLib()" or "libgpodder.gPodderLib()", and weed out all "gl =
350         gPodderLib() lines, because it makes the code look unnecessarily
351         bloated ;)
352         * src/gpodder/libgpodder.py: Make "gl" a global instance of the
353         gPodderLib() object, and rename gPodderLibClass to gPodderLib and do
354         some more cleaning-up
356 Sun, 02 Mar 2008 14:03:40 +0100 <thp@perli.net>
357 Move gPodderLib().open_folder to util.gui_open
359         * src/gpodder/gui.py: Use util.gui_open instead of gl.open_folder
360         * src/gpodder/libgpodder.py: Remove open_folder (move to gpodder.util)
361         * src/gpodder/util.py: Add gui_open function that uses xdg_open to
362         open files and folders with their default application in the GUI
364 Sun, 02 Mar 2008 13:52:42 +0100 <thp@perli.net>
365 Pickle-based storage method (dumbshelve); HTTP HEAD requests; buggy feed fixes
367         * src/gpodder/dumbshelve.py: Added (replacement for "shelve" using
368         pickle)
369         * src/gpodder/libgpodder.py: Rename *.db files to *.pickle.db, so we
370         don't clash with old-style shelve .db files
371         * src/gpodder/libpodcasts.py: Use dumbshelve as a replacement for
372         shelve; add EpisodeURLMetainfo that keeps track of metainfo downloaded
373         via HTTP HEAD requests; make getting episode length and pubDate a bit
374         more intelligent by trying to find correct values via HTTP HEAD;
375         improve episode sorting by falling back to episode titles when no
376         pubDate has been found (or pubDate is equal); 
377         * src/gpodder/util.py: Add get_episode_info_from_url() function that
378         tries to find out the length and pubDate of an episode by looking at
379         the data from the HTTP HEAD; also support HTTP proxys via an optional
380         "proxy" keyword argument
382 Wed, 27 Feb 2008 10:44:48 +0100 <thp@perli.net>
383 Notify user about no new episodes when updating from tray icon
385         * src/gpodder/gui.py: Patch from Jérôme Chabod
386         <jerome.chabod@ifrance.com> to notify the user about "no new episodes"
387         when updating the feed cache manually via the tray icon
388         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=3)
389         * src/gpodder/trayicon.py: See above
391 Wed, 27 Feb 2008 09:52:14 +0100 <thp@perli.net>
392 Use xdg-open for files that we don't know the file type of
394         * src/gpodder/libgpodder.py: If the file we want to open/play is not
395         an audio or video file, we use "xdg-open" to open the file (this is
396         used for things like PDF files and the like, e.g. in Chaos TV)
398 Wed, 27 Feb 2008 09:46:55 +0100 <thp@perli.net>
399 Add Flash Video (flv) and Windows Media Video (wmv) to file detection
401         * src/gpodder/util.py: Detect *.flv and *.wmv files as video files
403 Wed, 27 Feb 2008 09:39:42 +0100 <thp@perli.net>
404 When sending via Bluetooth, always rename/copy the file
406         * src/gpodder/gui.py: When sending files via Bluetooth, and the file
407         converter script is not enabled, we are simply copying the file to the
408         sync_filename of the episode, therefore creating a nice name. We have
409         to copy the file, because neither gnome-obex-send nor bluetooth-sendto
410         let us specify the destination filename when sending the file, these
411         utilities always take the input filename (thanks to Chris
412         <gpodder@noreply.org.uk> for the bug report)
413         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=49)
415 Tue, 26 Feb 2008 16:49:06 +0100 <thp@perli.net>
416 Python code fixup: Compare "None" with "is" instead of "=="
418         * doc/dev/daap2rss.py: "== None" => "is None"
419         * src/gpodder/config.py: "== None" => "is None"
420         * src/gpodder/gui.py: "== None" => "is None"
421         * src/gpodder/libgpodder.py: "== None" => "is None"
422         * src/gpodder/libpodcasts.py: "== None" => "is None"
424 Tue, 26 Feb 2008 16:30:56 +0100 <thp@perli.net>
425 Add support for new "bluetooth-sendto" utility
427         * README: Ask for either "gnome-obex-send" or "bluetooth-sendto",
428         which are needed for the Bluetooth file transfer
429         * src/gpodder/util.py: Add support for "bluetooth-sendto" as an
430         alternative to "gnome-obex-send"; initial bug report and patch by
431         Leonid Ponomarev (this probably adds bluez-gnome as an optional
432         dependency if you want bluetooth send support)
434 Mon, 25 Feb 2008 15:51:16 +0100 <thp@perli.net>
435 Show more description text in episode list
437         * src/gpodder/libpodcasts.py: Join all lines and strip unnecessary
438         data for the episode description that is displayed in the episode list
439         when descriptions are enabled (suggested by Jérôme Chabod)
441 Mon, 25 Feb 2008 14:39:15 +0100 <thp@perli.net>
442 Merge changes from 0.11.0 release after release
444         * bin/gpodder: Merge changes from 0.11.0
445         * README: Merge changes from 0.11.0
447 Sun, 24 Feb 2008 14:52:04 +0100 <thp@perli.net>
448 Cosmetic changes to the makefile
450         * Makefile: Cosmetic changes
452 Sun, 24 Feb 2008 13:55:42 +0100 <thp@perli.net>
453 Cairo-based progress bar on system tray icon
455         * src/gpodder/draw.py: Add Cairo-based drawing code for generating a
456         nice, transparent progress bar icon
457         * src/gpodder/services.py: Fix a problem with the wrong download done
458         percentage (i.e. when cancelling downloads instead of finishing them)
459         * src/gpodder/trayicon.py: Add code to draw the progress bar on the
460         tray icon; initial idea and most parts of this patch by Jérôme Chabod
462 Sat, 23 Feb 2008 14:18:53 +0100 <thp@perli.net>
463 Set the xterm title when running "make test"
465         * Makefile: Set the xterm title when running "make test"
467 Wed, 20 Feb 2008 13:38:58 +0100 <thp@perli.net>
468 Estimated time left and synchronization support for tray icon by Jérôme Chabod
470         * src/gpodder/gui.py: Send update status information to the tray icon
471         on update; add glue code for synchronization device and tray icon
472         * src/gpodder/trayicon.py: Add status and tooltip during device
473         synchronization; add estimated download time to tooltip during
474         download; set the correct caption for the synchronization menu item in
475         the tray icon (and don't add a synchronize menu item when not needed);
476         some small code-cleanups and fixes
477         * src/gpodder/util.py: Add format_seconds_to_hour_min_sec() function
478         that converts a numeric amount of seconds into a human-readable string
480 Tue, 19 Feb 2008 07:46:28 +0100 <thp@perli.net>
481 Fix bug with MP3 player synchronization file name encodings
483         * src/gpodder/sync.py: Apply patch to fix problems with native
484         language encodings on MP3 player synchronization; thanks to Bernd
485         Schlapsi for reporting the problem in Bugzilla
486         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=34)
488 Mon, 18 Feb 2008 21:17:48 +0100 <thp@perli.net>
489 Updated French translation for 0.11.0
491         * data/po/fr.po: Updated French translation by Jérôme Chabod
493 Sun, 17 Feb 2008 13:50:09 +0100 <thp@perli.net>
494 Fix calculation of average percentage done
496         * src/gpodder/services.py: Fix calculation of average percentage done
497         for downloads, thanks to Jérôme Chabod <jerome.chabod@ifrance.com> for
498         the patch
500 Sun, 17 Feb 2008 13:33:38 +0100 <thp@perli.net>
501 Updated translations for 0.11.0
503         * data/messages.pot: Refreshed messages.pot from source code
504         * data/po/de.po: Updated German translation
505         * data/po/nl.po: Updated Dutch translation by Pieter De Decker
506         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
507         * data/po/cs.po: Updated Czech translation by Ondrej Vesely
508         * data/po/sv.po: Updated Swedish translation by Anders Kvist
510 Thu, 07 Feb 2008 22:15:40 +0100 <thp@perli.net>
511 Hello, new "expert" configuration editor (about:config-like)
513         * data/gpodder.glade: Add gPodderConfigEditor window and add an
514         "Advanced..." button to the preferences dialog
515         * src/gpodder/config.py: Add a gtk.ListStore tree model to the
516         configuration manager and update it when configuration variables
517         change; add toggle_flag() and update_field() methods for easy updating
518         of fields from the new config editor
519         * src/gpodder/gui.py: Add glue code for opening the advanced
520         configuration editor from the preferences dialog; add code for the
521         gPodder configuration editor (including filtering and field updating);
522         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=10)
524 Thu, 07 Feb 2008 20:22:08 +0100 <thp@perli.net>
525 Support buggy OPML feeds, notify user on OPML import
527         * src/gpodder/gui.py: Notify user when no items were found when trying
528         to import OPML feeds
529         * src/gpodder/opml.py: Make the OPML importer a bit more relaxed, and
530         make it accept "url" instead of "xmlUrl", too (for buggy OPML feeds)
532 Wed, 06 Feb 2008 17:34:56 +0100 <thp@perli.net>
533 Fix the track length detection
535         * src/gpodder/sync.py: Fix the iPod sync track length detection code,
536         reported by Paul Rudkin <paul@thegithouse.com> and tested by
537         FriedBunny <friedbunny@kulturny.com>; make default length 3 hours
538         Closes: http://bugs.gpodder.org/show_bug.cgi?id=29
540 Wed, 06 Feb 2008 10:59:25 +0100 <thp@perli.net>
541 NLS encoding support for MP3 player synchronization (from gdfs)
543         * src/gpodder/sync.py: Add NLS encoding support from Leonid Ponomarev
544         <leonid.phoenix@gmail.com>; patch modified a bit to better fit the
545         code and be more verbose, so the user knows how we encode the names
547 Wed, 06 Feb 2008 10:43:47 +0100 <thp@perli.net>
548 Hide to systray on exit during download
550         * src/gpodder/gui.py: Apply patch from Jérôme Chabod
551         <jerome.chabod@ifrance.com> to fix a bug: When closing gPodder during
552         a download, and "on_quit_hide" is on, gPodder asks for a confirmation
553         It should hide gPodder without asking. This patch fix that.
555 Wed, 06 Feb 2008 10:18:30 +0100 <thp@perli.net>
556 Usability GUI update (after Rafael Proença's proposal)
558         * data/gpodder.glade: Add "Ctrl+L" hotkey to Add new channel; add
559         "View" menu with show/hide Toolbar (Ctrl+T) and show/hide episode
560         descriptions (Ctrl+D); remove "Update Feeds" button from toolbar and
561         add Check for updates button below channel navigator; move the add
562         episodes entry and buttons above the channel navigator; thanks to the
563         following people who shared their opinions on the mailing list: Rafael
564         Proença, Paul Rudkin, Ondrej Vesely, Leonid Ponomarev, Shane Donohoe,
565         Jérôme Chabod, Nick (nikosapi); the GUI mockups and the initial idea
566         were posted by Rafael Proença
567         * src/gpodder/config.py: Add "episode_list_descriptions" and
568         "show_toolbar" configuration options that modify the look of the main
569         window (both default to "True")
570         * src/gpodder/gui.py: Show feed description in seperate line (this
571         feature was suggested by narf@inode.at); make the episode list
572         treeview widget use the space more efficient; show/hide toolbar and
573         show/hide episode description GUI glue code
574         * src/gpodder/libgpodder.py: Add "digits" keyword argument to
575         format_filesize() (defaults to 2), this is a pass-thru function for
576         gpodder.util.format_filesize() (see below)
577         * src/gpodder/libpodcasts.py: Support for small- and large-sized
578         icons,modify liststore creation code to add description to the title
579         column
580         * src/gpodder/util.py: Add "digits" keyword argument to
581         format_filesize() (defaults to 2), this is used to define the format
582         of the filesize; add "icon_size" keyword argument (defaults to 32) to
583         get_tree_icon() and modify the function so that it dynamically
584         generates the correct icon with the correct sizes
586 Mon, 04 Feb 2008 11:26:14 +0100 <thp@perli.net>
587 Apply patchset from Jérôme Chabod to fix tray icon behaviour
589         * data/gpodder.glade: Change behaviour of the "display tray icon"
590         checkbox, rename and retitle some configuration options
591         * src/gpodder/config.py: Rename "download_after_update" to
592         "auto_download_when_minimized" and rename "disable_notifications" to
593         "enable_notifications".
594         * src/gpodder/gui.py: Add glue code for config and GUI, change
595         behaviour as described in http://bugs.gpodder.org/show_bug.cgi?id=3
596         * src/gpodder/trayicon.py: Clean-up and fix behaviour as described in
597         our Bugzilla Bug #3 (see above); thanks to Jérôme Chabod for
598         implementing all these changes and the patch
600 Mon, 04 Feb 2008 09:32:56 +0100 <thp@perli.net>
601 Output pretty-printed OPML when saving channels list
603         * src/gpodder/opml.py: Patch from Nick (nikosapi.org) to output the
604         channels.opml file pretty-printed, so it's easier to read and easier
605         to edit when working on the file outside of gPodder
607 Sun, 03 Feb 2008 23:02:47 +0100 <thp@perli.net>
608 Don't code late at night, it breaks the sync code ;)
610         * src/gpodder/sync.py: Add brackets because I wrote bad code in the
611         first place (fix video sync for iPods); thanks to Dave Perdue
612         <dave@minusvince.com> for reporting this in our bug tracker
613         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=28)
615 Sat, 02 Feb 2008 11:36:35 +0100 <thp@perli.net>
616 Make feed update display "Loading" titles, only run auto update when minimized
618         * src/gpodder/gui.py: Usability patch from NIkosapi <nikosapi.org>:
619         Make the feed update dialog display "Loading feeds" instead of
620         "Downloading feeds" when its loading the feeds from the local cache;
621         only run the automatic, periodic update when gPodder is minimized,
622         because it would pop up a dialog while gPodder is in use otherwise
624 Sat, 02 Feb 2008 11:33:48 +0100 <thp@perli.net>
625 Pressing Enter in the add channel entry adds the channel
627         * data/gpodder.glade: Usability patch from Nikosapi <nikosapi.org>:
628         Add an action handler to the gladefile, so the user can simply press
629         Enter in the gtk.Entry instead of having to tab to or click on the
630         button for adding a channel
632 Wed, 30 Jan 2008 09:47:21 +0100 <thp@perli.net>
633 Fix another bug in file_modification_datetime
635         * src/gpodder/util.py: Another problem that happens with special
636         iTunesDB settings, thanks to FriedBunny <friedbunny@kulturny.com>
638 Wed, 30 Jan 2008 09:23:19 +0100 <thp@perli.net>
639 Fix a bug in the file size calculation
641         * src/gpodder/util.py: calculate_filesize should deal with "None"
642         passed as filename (now returns zero-size);
643         Fixes: Bug #23 (http://gpodder.thegithouse.com/show_bug.cgi?id=23)
644         Thanks to FriedBunny <friedbunny@kulturny.com> for reporting this
645         issue in our bug tracker
647 Mon, 28 Jan 2008 12:33:13 +0100 <thp@perli.net>
648 Merge new sync code from thp's private branch
650         * bin/gpodder: Add "--sync"/"-s" command-line option to start the
651         device synchronization process from the CLI interface - syncing can
652         now be scripted, baby :) (you still have to configure the sync device
653         via the GUI first, though)
654         * data/gpodder.glade: Simplify gPodderSync dialog and remove some
655         obsolete options from the channel dialog
656         * src/gpodder/console.py: Add code for command-line sync support
657         * src/gpodder/gui.py: Remove obsolete code for libipodsync and import
658         the new "sync" module; simplify Sync<->GUI interface; clean-up
659         gPodderSync dialog code to interface with new sync code; remove some
660         config glue code for the channel properties dialog
661         * src/gpodder/libconverter.py: Make libconverter work even if the
662         percentage callback would fail in certain conditions (try..except)
663         * src/gpodder/libipodsync.py: Removed
664         * src/gpodder/libpodcasts.py: Refactor age_in_days() and
665         get_age_string() to simple calls to utility functions and move the
666         code to gpodder.util
667         * src/gpodder/sync.py: Added new sync module :) Very modular, yesaya!
668         * src/gpodder/util.py: Add file_age_in_days() and file_age_to_string()
669         helper functions that use code from libpodcasts and return the age of
670         a file in the filesystem
672 Thu, 24 Jan 2008 14:51:48 +0100 <thp@perli.net>
673 Fix a bug for show_message and tray_icon/minimized
675         * src/gpodder/gui.py: Fix a bug when messages are shown for
676         non-gPodderMainWindow windows (that don't have tray_icon)
678 Wed, 23 Jan 2008 11:55:35 +0100 <thp@perli.net>
679 Make gpodder.desktop pass desktop-file-validate tests
681         * data/gpodder.desktop: Update "Categories" and remove "Encoding",
682         following the freedesktop.org Desktop Entry specification
684 Wed, 23 Jan 2008 09:06:32 +0100 <thp@perli.net>
685 Do not show notifications when gPodder is minimized
687         * src/gpodder/gui.py: Merge patch from Jérôme Chabod to fix problems
688         with the gPodder window re-appearing after having been minimized;
689         use the notification icon when possible; initially reported by Shane
690         Donohoe
692 Tue, 22 Jan 2008 10:19:46 +0100 <thp@perli.net>
693 Add "releasetest" target to Makefile (automated testing)
695         * Makefile: Add "releasetest" target that can be used to do some
696         automatic testing before releases; thanks to Götz Waschk for giving
697         some hint on "desktop-entry-validate" :)
699 Tue, 22 Jan 2008 10:09:16 +0100 <thp@perli.net>
700 Use Episode Selector for per-channel new episodes
702         * src/gpodder/gui.py: Reorganize code to use the episode selector for
703         both all-channels and per-channel new episodes
704         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=14)
706 Tue, 22 Jan 2008 09:42:01 +0100 <thp@perli.net>
707 Fix problem in gpodder.desktop file
709         * bin/gpodder: We're in development again (+svn)
710         * data/gpodder.desktop: Fix problem in .desktop file (Thanks to Götz
711         Waschk for reporting this bug, detected via desktop-entry-validate)
713 Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
714 gPodder 0.10.4 "Faster Pussycats Kill" released
716         * bin/gpodder: gpodder 0.10.4 released :)
717         * README: gPodder 0.10.4 released :)
718         * doc/man/gpodder.1: gPodder 0.10.4 released :)
719         * data/po/de.po: Updated German translation
720         * data/messages.pot: Updated from source
721         * data/po/*.po: Updated from messages.pot
723 Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
724 Create Bittorrent download directory on startup
726         * src/gpodder/libgpodder.py: Create Bittorrent download directory on
727         startup, so the first time gPodder preferences are shown, the download
728         folder will exist and now throw an error
730 Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
731 Updated French translation file with correct encoding
733         * data/po/fr.po: Updated French translation with correct encoding by
734         Jérôme Chabod - thanks!
736 Mon, 21 Jan 2008 10:47:49 +0100 <thp@perli.net>
737 Add support for sending files via Bluetooth
739         * data/gpodder.glade: Add "Bluetooth" configuration page to
740         preferences dialog
741         * src/gpodder/config.py: Add Bluetooth-related configuration options
742         * src/gpodder/gui.py: Add support for sending (and converting) files
743         for bluetooth file transfer; add glue code for preferences dialog and
744         configuration manager
745         * src/gpodder/libgpodder.py: Add "tempdir" variable to gPodderLibClass
746         that specifies a temporary directory to be used (currently only for
747         converting files for bluetooth transfer, might be migrated to a
748         configuration option later)
749         * src/gpodder/util.py: Add discover_bluetooth_devices() function that
750         searches for nearby devices (either via python-bluez or via hcitool,
751         so one of them has to be installed as a dependency); add
752         bluetooth_send_file() convenience function that starts a file transfer
753         via Bluetooth OBEX - uses gnome-obex-send, which has to be installed
754         for Bluetooth file transfer to work
756 Mon, 21 Jan 2008 09:52:09 +0100 <thp@perli.net>
757 Support for different audio/video player selection
759         * data/gpodder.glade: Add video selection to preferences dialog
760         * src/gpodder/config.py: Add "videoplayer" configuration option
761         * src/gpodder/gui.py: Add glue code for configuration and preferences
762         dialog (audio/video player selector)
763         * src/gpodder/libgpodder.py: Add code to migrate from older gPodder
764         configurations (videoplayer is set to "unspecified") to the same value
765         as the currently selected audio player; when "playing" a file,
766         determine the file type and start the right player application
767         * src/gpodder/libplayers.py: Parameterize the UserAppsReader class to
768         accept a mime type (e.g. "video" or "audio") after which to filter
770 Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
771 Czech translation update: gpodder.desktop
773         * data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
774         Czech translation strings to the gpodder.desktop file - thanks
776 Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
777 Added Czech translation by Ondrej Vesely
779         * data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
780         <xorwen@gmail.com>; the completed translation will be updated when
781         it's done
782         * setup.py: Add "cs" (Czech) to list of translations
784 Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
785 Updated Swedish translation from Anders Kvist
787         * data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
788         now up-to-date again
790 Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
791 Updated French translation from Jérôme Chabod
793         * data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
794         now up-to-date again
796 Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
797 Updated Dutch translation from Pieter De Decker
799         * data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
800         now up-to-date again
802 Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
803 Update translation template and translations from source
805         * data/messages.pot: Updated potfile from source code
806         * data/po/*.po: Updated translation templates from potfile
808 Wed, 16 Jan 2008 08:36:12 +0100 <thp@perli.net>
809 Remove the "Ignore" button in tray icon notifications
811         * src/gpodder/trayicon.py: Remove the "ignore" action and button when
812         a download has finished; the "ignore" button is redundant, as the same
813         functionality can be achieved by clicking on the "x" of the bubble
815 Tue, 15 Jan 2008 14:50:13 +0100 <thp@perli.net>
816 Modularize calls to gobject.idle_add (for non-GTK support)
818         * bin/gpodder: Set interface_is_gui to True when running the GUI
819         * src/gpodder/*.py: Use util.idle_add instead of gobject.idle_add
820         * src/gpodder/gui.py: Simplify some idle_add calls, code clean-up
821         * src/gpodder/__init__.py: Add "interface_is_gui" boolean variable
822         that tells us if we are running in GUI or CLI mode (this is needed for
823         util.idle_add to determine if it's going to use the gobject module or
824         not)
825         * src/gpodder/util.py: Add new function idle_add() that acts as a
826         wrapper to gobject.idle_add(); this will only use gobject.idle_add if
827         we are in GUI mode, and will call the callback directly when we are in
828         command-line mode (because we don't have to watch out for threading
829         race conditions there, compared to what GTK+ gives us)
831 Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
832 Add menu item that links to gPodder's new bug tracker
834         * data/gpodder.glade: Add bug tracker item to help menu
835         * src/gpodder/gui.py: Add code to open a webbrowser with the bug
836         tracker when the bug tracker icon is clicked
838 Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
839 Add a checkbox to keep episodes when removing channels
841         * src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
842         removing a podcast channel, so the user has the option to remove the
843         podcast feed from gPodder's subscription list, but still keep the
844         downloaded files on the harddisk (via a checkbox in the dialog)
845         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)
847 Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
848 Updated Russian translation by Hex
850         * data/po/ru.po: Updated Russian translation by
851         Hex <justin.forest@gmail.com>
853 Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
854 Merge tray icon and notification patch by Jérôme Chabod
856         * data/gpodder.glade: UI support for tray icon settings and
857         configuration options for auto update feeds (auto update based on a
858         patch by Nick (nikosapi.org)
859         * src/gpodder/config.py: Add configuration options that support the
860         tray icon, notification bubble and automatic update/close functions
861         * src/gpodder/gui.py: Support the tray icon in the GUI; link the
862         configuration options with the preferences dialog; re-work the channel
863         update dialog to be more slipstreamed
864         * src/gpodder/trayicon.py: Added new tray icon module by
865         Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
866         gPodder TODO list by Holger Bauer
868 Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
869 Updated Swedish translation by Anders Kvist
871         * data/po/sv.po: Swedish translation updated by
872         Anders Kvist <kvistkvist@telia.com>
874 Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
875 Use os.rename to make channel list saving atomic
877         * src/gpodder/opml.py: Make the saving of the channel list atomic by
878         first saving it to a temporary file and then using os.rename to really
879         move the file in place (this should make the channel list saving very
880         stable and protect against certain bad system conditions where the
881         channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
882         the suggestion and pointers to improve the channel saving code
884 Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
885 Make logging in libpodcasts less verbose
887         * src/gpodder/libpodcasts.py: Remove some verbose logging code
889 Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
890 Migrate from channels.xml (from 0.9.4) to channels.opml if needed
892         * src/gpodder/libgpodder.py: Add code to check if channels.xml exists
893         but channels.opml doesn't and if so, try to convert from channels.xml
894         to channels.opml, so users upgrading from 0.9.4 directly will have
895         their channel list automatically converted;
896         thanks to Tim Michelsen for the bug report and helpful Ubuntu info
898 Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
899 Add download completion notification support
901         * src/gpodder/download.py: Notify the download status manager when a
902         download has been completed successfully
903         * src/gpodder/services.py: Add download-complete signal to list of
904         possible signals and download_completed() method to be used by
905         downloads to notify the status manager of a successful download
907 Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
908 Patch the feedparser module to correctly process democracynow.org
910         * src/gpodder/cache.py: Add a patch_feedparser() method that checks of
911         the feedparser module correctly maps the "plain" content-type to the
912         correct "text/plain" content-type and if not, replace the
913         mapContentType method with a fixed one; this should make the audio
914         podcast on democracynow.org working (thanks to Clark Burbidge for the
915         bug report)
917 Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
918 Better username/password extraction from URLs
920         * src/gpodder/util.py: Improve username and password extraction for
921         authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
922         Donohoe <priestoftime@googlemail.com> for reporting this bug and
923         sending in a patch; this should allow for e-mail address usernames
925 Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
926 Also delete old episodes that have disappeared from the feed
928         * src/gpodder/gui.py: When deleting old episodes automatically, also
929         delete episodes that have disappeared from the RSS feed and are only
930         available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
931         for the very detailed and helpful bug report :)
933 Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
934 Stability updates: Feed cache update, old PyCairo versions
936         * src/gpodder/draw.py: Add a workaround for pycairo versions less than
937         1.1.6. Thanks to Chris Arnold for reporting this bug on the
938         gpodder-devel mailing list and taking the time to test the patch and
939         report back and provide useful information for debugging this error
940         * src/gpodder/gui.py: Close the feed cache update dialog even when the
941         user clicks on "cancel" (would have stayed there otherwise)
943 Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
944 Merge "delete episode after sync" patch from Jérôme Chabod
946         * data/gpodder.glade: Add GUI elements in preferences dialog to select
947         what to do after episode sync (nothing, delete or mark played)
948         * src/gpodder/config.py: Add "on_sync_delete" configuration option
949         * src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
950         * src/gpodder/libipodsync.py: If the configuration option
951         on_sync_delete is set, remove the episode after successfully copying
952         it to the iPod or MP3 player (the whole patch has been initially done
953         by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
954         * src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
955         robust, so it doesn't disturb libipodsync's functionality
957 Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
958 Remove invalid channel cover images when loading fails
960         * src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
961         it cannot be loaded (assume something went wrong when downloading the
962         cover file); re-downloading the cover manually can solve the problem
964 Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
965 Fix typo in last commit
967         * src/gpodder/libipodsync.py: Fix typo in last commit
969 Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
970 Modify played handling in iPod sync when "on sync mark played" is active
972         * src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
973         if the on_sync_mark_played option is set
975 Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
976 Merge patch from Leonid Ponomarev to gdfs
978         * doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
979         support for the system's native encoding, based on the $LANG
980         environment variable. This should add support for episodes and
981         channels with international characters as titles
983 Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
984 Updated Dutch translation by Pieter De Decker
986         * bin/gpodder: We're in development again: "+svn"
987         * data/po/nl.po: Updated Dutch translation from Pieter De Decker
989 Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
990 gPodder 0.10.3 "A Stop at Willoughby" released
992         * bin/gpodder: gPodder 0.10.3 released :)
993         * README: gPodder 0.10.3 released :)
994         * doc/man/gpodder.1: gPodder 0.10.3 released :)
995         * data/messages.pot: Updated from source
996         * data/po/de.po: Updated German translation
997         * data/po/*.po: Updated from messages.pot
999 Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
1000 Link the gPodder Documentation Wiki from the help pages
1002         * data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
1003         and Documentation Wiki (instead of Mailing list)
1004         * src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page
1006 Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
1007 Remove TODO file from MANIFEST.in
1009         * MANIFEST.in: Of course we have to remove non-existing files from the
1010         MANIFEST.in file, too.. so TODO is now finally gone :)
1012 Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
1013 Manage TODO list on the gPodder Wiki
1015         * TODO: Removed; new location: http://gpodderwiki.jottit.com/todo
1017 Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
1018 Configuration for "old" episodes; automatically remove old episodes
1020         * src/gpodder/config.py: New boolean auto_remove_old_episodes
1021         configuration option that defaults to False (remove on startup)
1022         * src/gpodder/gui.py: Add code to automatically remove old, unplayed
1023         episodes on startup if the specific configuration options have been
1024         set; connect config manager to GUI items for the preferences dialog
1025         * data/gpodder.glade: Add checkbox for automatically removing old,
1026         unplayed episodes from gPodder on startup and a spinbutton to set the
1027         amount of days after which an episode is considered "old"
1029 Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
1030 Merged episode locking patch from Paul Rudkin
1032         * src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
1033         locked, patch by Paul Rudkin <paul@thegithouse.com>
1034         * data/gpodder.glade: Add menu item for toggle locked status
1035         * src/gpodder/libgpodder.py: Add "locked" history
1036         * src/gpodder/libpodcasts.py: When requesting a status icon, also draw
1037         the "Locked" status; is_locked() in podcastItem
1038         * src/gpodder/util.py: Added code for drawing a padlock icon on top of
1039         another (file type) icon; this is used for the "lock episodes" feature
1041 Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
1042 Updated TODO list
1044         * TODO: Updated TODO list
1046 Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
1047 Move observer code out of DownloadStatusManager into ObservableService
1049         * src/gpodder/services.py: Move out all observer-related code like
1050         registration, unregistration and notification to a new
1051         ObservableService class; subclass ObservableService in
1052         DownloadStatusManager; this makes the observer code in
1053         DownloadStatusManager re-usable (will be needed for new sync code)
1055 Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
1056 Selective iPod episode clean-up; "delete older than X days"
1058         * src/gpodder/config.py: Add episode_old_age configuration variable;
1059         is an integer, defaults to 7. This is the number of days after which
1060         an episode will be considered "old"
1061         * src/gpodder/gui.py: iPod cleanup is now done selectively using the
1062         episode selector dialog; the code has been split, because we do not
1063         yet have an episode selector dialog for FS-based sync; add "Downloaded
1064         x days ago" column to "Delete old episodes" dialog and a corresponding
1065         button; call the callback even when no episodes are selected in
1066         gPodderEpisodeSelector
1067         * src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
1068         moved to __init__ to be instance variables (this should fix a bug that
1069         crops up now that we can selectively delete episodes); remove_tracks()
1070         and clean_playlist() have been modified/added to support new episode
1071         selector deletion code
1072         * src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
1073         podcastChannel (it really belongs to the item; this makes code more
1074         readable in other parts of the codebase); add age_in_days(), is_old(),
1075         get_age_string() and age_prop to podcastItem
1076         * src/gpodder/util.py: New function: file_modification_datetime();
1077         returns a datetime.datetime instance of the MTIME (modification
1078         timestamp) of the filename given as parameter or None if the filename
1079         cannot be determined; this is used for the "old episodes" feature
1081 Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
1082 Make has_converter() a bit more intelligent in detecting extensions
1084         * src/gpodder/libconverter.py: Convert given extension to lowercase
1085         and strip a leading "." from the extension, so calling code can also
1086         give the second value of the os.path.splitext() result directly to
1087         has_converter()
1089 Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
1090 Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin
1092         * src/gpodder/config.py: Fix pre-setting code for filechooser-related
1093         code; use set_current_folder() instead of set_filename()
1094         * src/gpodder/gui.py: Fix pre-setting code for filechooser-related
1095         code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch
1097 Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
1098 Support for itms:// links (direct links to the Apple iTunes Music Store)
1100         * src/gpodder/util.py: Support direct itms:// links by splitting out
1101         the iTunes Podcast links parsing routines. This should put us in for
1102         some nice iTunes podcast link support that will automagically
1103         translate iTunes podcast links to the correct RSS feed URL
1105 Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
1106 Support for iTunes Podcast links (http://phobos.apple.com/...)
1108         * src/gpodder/util.py: Add support for subscribing to iTunes Podcast
1109         links (those with phobos.apple.com); new functions:
1110         parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()
1112 Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
1113 Added Galician translation from Teo Ramirez
1115         * data/gpodder.desktop: Added Spanish and Galician translations;
1116         thanks to Teo Ramirez <teoramirez@gmail.com>
1117         * data/messages.pot: Updated from source
1118         * data/po/de.po: Updated
1119         * data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
1120         * data/po/*.po: Updated from source
1121         * setup.py: Added Galician (gl) translation by Teo Ramirez
1123 Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
1124 Sort channel list (finally ;)
1126         * src/gpodder/libpodcasts.py: Sort channels by lowercase title before
1127         returning the channel list in load_channels(); this automagically
1128         makes gPodder's channel list always sorted :)
1129         Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
1130         sending in an intial patch that led to this patch =)
1131         * TODO: Remove implemented item: Sort channel list
1133 Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
1134 Do grayscale "pill" instead of theme-based colors (for bad themes)
1136         * src/gpodder/draw.py: Always draw the "pill" in semi-transparent
1137         black/grey shades so it will work for all GTK themes (even Ubuntu's)
1139 Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
1140 Update channel navigator when iPod/MP3 player sync has finished
1142         * src/gpodder/gui.py: Update channel navigator when iPod sync has
1143         finished, so we can update the "played" status in the channel
1144         navigator when this status has changed after we've synced ("on sync
1145         mark played" option)
1147 Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
1148 Add option to mark episodes as played after transfer to device
1150         * data/gpodder.glade: Option added to preferences dialog
1151         * src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
1152         an episode as played when it gets transferred to a device
1153         * src/gpodder/gui.py: Glue code for GUI + gpodder.config
1154         * src/gpodder/libipodsync.py: On sync, mark episode as played if the
1155         user has selected the "on_sync_mark_played" option
1156         * TODO: Remove implemented/integrated items
1158 Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
1159 Fix a fatal bug with first-run that prevents channel list saving
1161         * src/gpodder/util.py: Always use a file's parent directory to get the
1162         free disk space and return zero free disk space when the parent
1163         directory does not exist
1165 Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
1166 Support for itpc:// URLs
1168         * src/gpodder/util.py: Add support for adding "itpc://" URLs (these
1169         are simply http:// URLs with a different schema, for iTunes)
1171 Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
1172 Draw channel stats (unplayed, downloaded) on channel navigator
1174         * bin/gpodder: We're in development again, so add "+svn"
1175         * src/gpodder/draw.py: Added
1176         * src/gpodder/gui.py: Fix import of renamed "channels_to_model";
1177         re-assign new column numbers for treeChannels' data model; add
1178         cell renderer for pill pixbuf and remove cell renderer for status text
1179         * src/gpodder/libpodcasts.py: Add episode_is_new() function to
1180         podcastChannel to check if an episode can be considered "new"; use the
1181         episode_is_new function in get_new_episodes; add get_episode_stats()
1182         after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
1183         channels_to_model and clean out old, unused code and columns
1185 Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
1186 gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released
1188         * bin/gpodder: gPodder 0.10.2 released :)
1189         * doc/man/gpodder.1: gPodder 0.10.2 released :)
1190         * README: gPodder 0.10.2 released :)
1192 Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
1193 Translation updates
1195         * data/messages.pot: Refreshed from source
1196         * data/po/*.po: Refreshed from messages.pot
1197         * data/po/de.po: Updated German translation
1199 Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
1200 Make sure there is enough free disk space when saving OPML channel list
1202         * src/gpodder/gui.py: Notify user that there's some problem saving the
1203         current channel list when save_channels() return False
1204         * src/gpodder/libpodcasts.py: Pass-through the return value of
1205         gpodder.opml.Exporter.write so calling code knows if saving the
1206         channel list was successful or not
1207         * src/gpodder/opml.py: Check free disk space before saving OPML
1208         channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
1209         for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)
1211 Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
1212 Don't send Referer header when downloading episodes
1214         * src/gpodder/download.py: Some podcasts now implement an
1215         "anti-bandwidth-theft" code that should provide other websites from
1216         not linking to the episodes; as we have sent a Referer header
1217         containing the RSS feed URL, this causes problems; Referer header
1218         sending is therefore disabled now
1220 Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
1221 TODO items from Katy G. B.
1223         * TODO: Updated TODO list
1225 Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
1226 Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)
1228         * src/gpodder/gui.py: Do not hook up tooltip handlers when we are
1229         using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)
1231 Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
1232 Check free disk space before copying files to iPod
1234         * src/gpodder/libipodsync.py: Check if the iPod's filesystem has
1235         enough free disk space before copying files over to it, as to not
1236         corrupt the iTunesDB in certain situations and fail when disk is full;
1237         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1238         * src/gpodder/util.py: Add get_free_disk_space() function that
1239         calculates the free (user-available) disk space on a given path
1241 Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
1242 Add informative tooltips to channel navigator
1244         * src/gpodder/gui.py: Add tooltips to channel navigator that show a
1245         bigger cover image, the title, description, url and used disk space
1246         * src/gpodder/libpodcasts.py: Add save_dir_size property to
1247         podcastChannel that contains the disk usage of the channel's save_dir;
1248         this can be manually updated by calling update_save_dir_size() and
1249         will automatically be updated when the GUI code hooks into the
1250         channel; also add get_cover_pixbuf() that returns a pixbuf of the
1251         cover for a given size or None if there is no valid cover file
1253 Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
1254 Slipstream code (enumerate instead of simple position tracking)
1255         * src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
1256         of episodes instead of keeping track of the position "by hand"
1258 Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
1259 Ignore initial window events from GtkWindow in Config
1261         * src/gpodder/config.py: Add a flag to config manager to ignore window
1262         events until the window has been realized; then, start taking position
1263         and size updates
1265 Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
1266 Improve caching for HTTP redirects and minor errors; cache clean-up
1268         * src/gpodder/cache.py: Cache content when it comes from a HTTP
1269         redirect (301, 302, 307); cache feeds even with parsing errors, so we
1270         can "fill" our cache and not download on every startup
1271         * src/gpodder/libpodcasts.py: Add cache clean-up code after loading
1272         channels; this should keep the feedcache.db file smaller for users
1273         that like to try out new channels (or have used gPodder for a while)
1275 Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
1276 Better file extension guessing for URLs
1278         * src/gpodder/util.py: Improve file_extension_from_url() by adding
1279         additional checks for known good extensions and recurse into the query
1280         string if it looks like an URL; this should fix compatibility problems
1281         for feeds with strange URLs; should provide more reliable guessing;
1282         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1284 Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
1285 Fix format_filesize() usage in episodes selector and podcastItem
1287         * src/gpodder/gui.py: Use the correct (config-using) format_filesize()
1288         function to generate the total size string in the episode selector
1289         * src/gpodder/libpodcasts.py: Use the correct (config-usig
1290         format_filesize() function to generate the total size string in
1291         podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
1292         pointing that out
1293         * data/gpodder.glade: Use "Preferences" instead of "Preferences..."
1294         which feels a bit better in the GUI
1296 Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
1297 Add "gPodder download folder synchronizer" scripts to repository
1299         * doc/dev/gdfs/gdfs-check.py: Added
1300         * doc/dev/gdfs/gdfs-init.py: Added
1301         * doc/dev/gdfs/README: Added
1303 Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
1304 The mighty episode selector dialog and some menu re-arrangements
1306         * src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
1307         positioning code to GladeWidget to be universally usable; update
1308         "Device" menu item on startup; new functions: delete_episode_list()
1309         and download_episode_list() that both operate on lists of episodes;
1310         add code for invoking gPodderEpisodeSelector for deleting old
1311         episodes; re-work on_itemDownloadAllNew_activate to use the episode
1312         selector instead of hand-crafting a message dialog text; add
1313         update_item_device() function that will handle the hiding, showing and
1314         renaming of the "Device" menu in the menubar; clean-up
1315         gPodderProperties with callback_finished setting (now kwarg-based);
1316         new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
1317         that will prove to be useful in some places in our codebase: it
1318         basically allows the user to select a subset of episodes from a given
1319         list in a quite sophisticated way; new "delete old episodes" menu item
1320         added for cleaning up gPodder's downloads
1321         * src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
1322         method to podcastItem; other convenience properties and functions
1323         needed for the new episode selector dialog: pubdate_prop,
1324         get_filesize_string(), filesize_prop, get_channel_title(),
1325         channel_prop, get_played_string(), played_prop
1326         * data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
1327         gPodder's main menu to be more usable and more compact; also added the
1328         Ctrl+K "Remove old episodes" menu item; also use the correct
1329         "multimedia-player" icon name of a not really representative icon
1331 Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
1332 Support syncing to FS-based MP3 players without subfolders
1334         * data/gpodder.glade: Add checkbox "Create a subfolder for each
1335         channel" to preferences dialog and rename some widgets
1336         * src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
1337         option that defaults to True (create subfolder for each channel)
1338         * src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
1339         to preferences dialog; do more intelligent widget hiding for the
1340         "Player" tab in the preferences dialog (only show relevant widgets)
1341         * src/gpodder/libipodsync.py: Only append channel name as subfolder to
1342         destination folder name when the "fssync_channel_subfolders" option is
1343         True; suggested by Paul Elliot <omahns.home@gmail.com>
1345 Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
1346 Fix offline cache behaviour when time is not set
1348         * src/gpodder/cache.py: Return cached_content in offline mode when
1349         cached_content "is not None" (instead of cached_time "is not None")
1351 Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
1352 Process events before connecting Config to gtk windows
1354         * data/gpodder.glade: Remove default size for main gPodder window, as
1355         this is now handled by the config manager
1356         * src/gpodder/config.py: Process GTK events in the event queue before
1357         connecting to the "configure-event" signal, so we won't get two
1358         configure events for the window for the initial size change
1360 Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
1361 Add error reporting when download fails because of an I/O error
1363         * src/gpodder/download.py: Catch and handle I/O errors in
1364         DownloadThread and format and pass on messages to GUI code when
1365         required; thanks to Florian Richter <Florian_Richter@gmx.de> for
1366         suggesting this feature after having a full disk
1367         * src/gpodder/gui.py: Update tree view when adding a new episode;
1368         add new notification() method and pass this method through to
1369         DownloadThread, so it can present messages to the user (i.e. errors)
1371 Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
1372 Use util.find_command in more places (mplayer detection, ...)
1374         * src/gpodder/libgpodder.py: Use util.find_command to detect the
1375         existence of the "gnome-btdownload" command and spit out a warning log
1376         message when the command is not available
1377         * src/gpodder/libipodsync.py: Use util.find_command to check for an
1378         installed mplayer binary (instead of relying on os.system("which...")
1380 Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
1381 Better command detection for the converter library
1383         * src/gpodder/libconverter.py: Detect existence of commands before
1384         invoking them for converting files; based on a patch by
1385         Nick (nikosapi.org); ConverterCollection is now a dict itself :)
1386         * src/gpodder/util.py: Add new find_command() function that will
1387         search the system's PATH for a specific executable command
1389 Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
1390 Remove extracted cover art when deleting episode files
1392         * src/gpodder/util.py: Apply modified version of a patch from
1393         Nick (nikosapi.org) that is better suited for deleting cover art that
1394         has been extracted with the new eyeD3 cover art extraction code
1396 Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
1397 Patch from Nick (nikosapi) to support eyeD3 cover art extraction
1399         * src/gpodder/libipodsync.py: Apply modified version of a patch from
1400         Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
1401         sync code; remove dependency on PyID3
1402         * README: PyID3 is not a dependency anymore, as we can now use eyeD3
1403         for the same purpose (cover art extraction)
1405 Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
1406 Fix format_filesize() function to be standards-conformant (unit prefixes)
1408         * src/gpodder/config.py: Add "use_si_units" configuration option; if
1409         True, the user will see SI units (MB, kB, ...); if False (the
1410         default); the user will see binary-prefix units (MiB, KiB, ..)
1411         * src/gpodder/libgpodder.py: Add pass-through function
1412         "format_filesize()" to gPodderLib that combines the
1413         util.format_filesize function with the gPodder-specific config option
1414         * src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
1415         <z0idberg@gmx.de> to add support for SI units and binary prefixes to
1416         format_filesize(); this makes the function standards-compliant
1417         * src/gpodder/download.py: Updated to use new format_filesize
1418         * src/gpodder/gui.py: Updated to use new format_filesize
1419         * src/gpodder/libpodcasts.py: Updated to use new format_filesize
1421 Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
1422 New Configuration/Settings Manager; massive code clean-ups
1424         * src/gpodder/config.py: Added new Configuration Manager that
1425         automatically keeps track of saving changed values and is also able to
1426         watch GTK widgets for changes; this should simplify our settings
1427         management and give us a single place for maintaining settings
1428         * src/gpodder/download.py: Access settings from new config manager
1429         * src/gpodder/gui.py: Make use of new config manager to connect
1430         widgets and settings from the GUI directly to the config manager;
1431         remove manual loading and saving of settings; auto-connect as much as
1432         possible in the gPodderProperties dialog to get real-time automatic
1433         configuration saving; fix the other code to use new config manager
1434         * src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
1435         old cruft and dead code that has been lying around in libgpodder for
1436         some time now; remove configuration code; utilize config manager;
1437         unify DownloadHistory+PlaybackHistory in new HistoryStore class;
1438         reduce number of import statements
1439         * src/gpodder/libipodsync.py: Access settings from new config manager
1440         * src/gpodder/libplayers.py: Removed dotdesktop_command()
1441         * src/gpodder/libpodcasts.py: Move locking functionality into this
1442         module, as locking is only used here; access config from new manager
1443         * src/gpodder/services.py: Use config manager to get settings
1444         * src/gpodder/util.py: Add format_desktop_command() function, based on
1445         the dotdesktop_command() function from libplayers
1447 Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
1448 Add ability to open download folder from channel's context menu
1450         * src/gpodder/gui.py: Add "Open download folder" menu item to channel
1451         navigator context menu
1452         * src/gpodder/libgpodder.py: Add open_folder() method that will open
1453         the DE's default folder browser via "xdg-open"
1455 Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
1456 Limit filename on FS-based sync to 50 characters
1458         * src/gpodder/libipodsync.py: Do not allow extremely long file names
1459         that could theoretically be generated by using data from RSS feeds;
1460         this is needed to make FAT-based drives work with files that would
1461         otherwise have file names that are too long
1463 Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
1464 Escape RSS-provided strings in Pango markup
1466         * src/gpodder/gui.py: Escape strings in Pango markup
1467         * bin/gpodder: we're in development again, so "+svn"
1469 Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
1470 gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released
1472         * bin/gpodder: gPodder 0.10.1 released :)
1473         * doc/man/gpodder.1: gPodder 0.10.1 released :)
1474         * README: gPodder 0.10.1 released :)
1475         * data/messages.pot: Refreshed template from source files
1476         * data/po/de.po: Updated German translation for the 0.10.1 release
1477         * data/po/*.po: Refreshed translation files from template
1479 Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
1480 Add "Save episode to file" handling to episode list context menu
1482         * data/gpodder.glade: Use a stock "Save As" button for the "Copy
1483         episode to file" button
1484         * src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
1485         that shows a copy dialog where a user can copy a file to a selected
1486         destination (this is used for "Save episode to file"); use
1487         show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
1488         folder" menu item in episode list context menu and use
1489         show_copy_dialog to carry out the user interaction
1491 Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
1492 Allow "https://" URLs for episode URLs, as we can handle these, too
1494         * src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
1495         can handle https URLs, thanks to Aravind Seshadri
1496         <aravind@aravind.name> who initially reported this bug
1498 Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
1499 Sync videos to the "Video Podcasts" playlist instead of the "Video" menu
1501         * src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
1502         <niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
1503         of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB
1505 Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
1506 sync_filename in podcastItem; cleanup; hide extra progressbar on transfer
1508         * src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
1509         unnecessary second progressbar when only syncing one channel (i.e.
1510         when clicking on the "transfer" button in the main window
1511         * src/gpodder/libgpodder.py: Remove unneeded lexists import and
1512         warning; clean-up
1513         * src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
1514         * src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
1515         returns the custom_sync_name or the title of the episode, based on the
1516         user's configuration settings for FS-based MP3 player sync
1518 Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
1519 Add wishlist items to TODO list from Paul and Wilfred
1521         * TODO: New wishlist items, ideas and suggestions
1523 Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
1524 Limit download progress status updates to reduce CPU load
1526         * src/gpodder/download.py: Limit the amount of status updates the
1527         download threads send to the DownloadStatusManager to one per second;
1528         this should make gPodder less CPU-intensive with many parallel
1529         downloads; thanks to Wilfred van Rooijen for reporting and testing
1531 Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
1532 Update channel models (icons) after iPod synchronization
1534         * src/gpodder/gui.py: Call update_model() on each channel after an
1535         iPod sync, so we can update the played state on the available episodes
1536         lists when played state was changed by the iPod sync
1538 Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
1539 Fix loading of channel metadata (load auth data and settings)
1541         * src/gpodder/libpodcasts.py: Load channel metadata when loading a
1542         podcastChannel object from OPML/LocalDB. This fixes a problem with
1543         authentication data being not loaded and also fixes a bug when the
1544         custom-set channel title was not correctly used throughout the GUI.
1545         Thanks to Nick (nikosapi) for reporting and providing a patch
1547 Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
1548 Finally remove Desktop symlink code; several compatibility fixes
1550         * src/gpodder/download.py: Prevent divide-by-zero errors when
1551         calculating download speed
1552         * src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
1553         percentage done in code for moving the downloaded items folder
1554         * src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
1555         because it's not GUI-accessible anymore and we didn't use it anyway
1556         * src/gpodder/opml.py: Better local filename detection by using
1557         os.path.exists() instead of .startswith('/'); this is also good for
1558         cross-platform compatibility where parts don't usually start with a
1559         forward slash (i.e. Win32)
1561 Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
1562 Channel list selection bug fixes
1564         * src/gpodder/gui.py: Fix some channel list-related problems and
1565         annoyances, based on a patch by Nick (nikosapi)
1566         * bin/gpodder: We're in development again, so "+svn"
1568 Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
1569 gPodder 0.10.0 "Hier spricht Frank Drebin" released
1571         * bin/gpodder: gPodder 0.10.0 released :)
1572         * doc/man/gpodder.1: gPodder 0.10.0 released :)
1573         * README: gPodder 0.10.0 released :) (and: updated dependencies)
1574         * TODO: Updated TODO list (some items are done for 0.10.0 :)
1576 Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
1577 Updated translations from Rosetta (Launchpad.net)
1579         * data/po/es.po: Spanish translation by Julio Acuña
1580         * data/po/pt.po: Portuguese translation by Joel Calado (completed :)
1582 Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
1583 Fix problems with path selection in treeChannels
1585         * src/gpodder/gui.py: Simple bugfix
1587 Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
1588 Center gPodderEpisode on treeAvailable for less mouse hopping
1590         * src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
1591         window on the treeAvailable, because that makes the position of the
1592         opened dialog more predictable and easier to use (as if the
1593         gPodderEpisode dialog was "inside" the treeView from which it opened)
1595 Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
1596 Don't translate feed format string examples
1598         * src/gpodder/gui.py: Don't mark format string examples as
1599         translatable
1601 Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
1602 Small bugfix for updating treeChannels when its model changes
1604         * src/gpodder/gui.py: Bugfix
1606 Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
1607 Removed channel combobox, drag'n'drop improvements + new channel cover editor
1609         * data/gpodder.glade: Remove comboAvailable in gPodder (main window);
1610         add download+clear button in gPodderChannel, rename some items that
1611         are now used in code; make the channel navigator non-shrinkable (so
1612         it is always visible, because we don't have comboAvailable anymore)
1613         * src/gpodder/gui.py: Remove support for the channel combo box,
1614         also known as comboAvailable; clean-up DND code and make treeChannels
1615         the only DND target in the main window; remove some unnecessary
1616         updating of the channel list (calls to updateComboBox);
1617         Changes for the gPodderChannel dialog: Don't automatically download
1618         channel cover when dialog pops up; add "Download" and "Clear" buttons
1619         to the cover editor; add DND support for dropping local files or
1620         images from the web browser to the cover editor (for setting custom
1621         covers on channels with bad or no cover)
1622         * src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
1623         URL is invalid, but the image has already been downloaded (because we
1624         read the downloaded image in the code when it exists, without URL)
1626 Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
1627 Center feed update dialog on main window; scroll reset in chan.navigator
1628         * src/gpodder/gui.py: Reset the current scroll position of the channel
1629         navigator when re-loading the channel list; this fixes an annoyance
1630         that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
1631         with a HUGE channel list (more than 50 channels); also removed the
1632         scroll position reset code from treeAvailable, as we already managed
1633         to only edit the model instead of re-loading it every time; added code
1634         to really center the feed update dialog on gPodder's main window
1636 Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
1637 Replace wget with new gpodder.download module; User-agent support
1639         * bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
1640         for wget, as this is not needed anymore
1641         * src/gpodder/cache.py: Clean-up; remove old logging code; add support
1642         for gpodder.user_agent; log info when there is an error in parsing the
1643         feed, so the user knows why this feed is not cached
1644         * src/gpodder/console.py: Remove DownloadPool, Use new
1645         gpodder.download module for carrying out downloads, remove
1646         wget_version() tester, as this is not needed anymore =)
1647         * src/gpodder/download.py: Added new downloader module that uses
1648         urllib and some custom classes and functions to provide the equivalent
1649         functionality of the obsolete "libwget", but without the wget
1650         dependency and with better accuracy (progress reporting, etc..)
1651         * src/gpodder/gui.py: Utilize new gpodder.download module instead of
1652         libwget
1653         * src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
1654         module that holds the value of the "User-agent" header to send to web
1655         servers when requesting OPMLs, Feeds or download data
1656         * src/gpodder/opml.py: Add support for sending the User-agent header
1657         * src/gpodder/services.py: Make the progress column a float column to
1658         have smoother progress indicuation; add the "acquired" keyword
1659         argument to s_release(); default 'speed' to a translated "Queued"
1660         * src/gpodder/libwget.py: Removed
1661         * doc/dev/redhat-wget-output.txt: Removed
1663 Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
1664 Refreshed pot files and po templates; updated German translation
1666         * data/messages.pot: Refreshed from current source
1667         * data/po/de.po: Refreshed and updated translation
1668         * data/po/*.po: Refreshed from new .pot file
1670 Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
1671 Imported updated translations from Rosetta (Launchpad.net)
1673         * data/po/it.po: Italian translation updated by FFranci72
1674         * data/po/nl.po: Dutch translation updated by Roel Groeneveld
1675         * data/po/pt.po: Portuguese translation updated by Joel Calado
1677 Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
1678 Offline support for feedcache, faster startup, code simplification
1680         * src/gpodder/cache.py: Add support for "offline" keyword argument
1681         * src/gpodder/gui.py: Make intelligent use of "offline" keyword
1682         argument when passed to load_channels(); simplify code for selecting
1683         the active channel in updateComboBox()
1684         * src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
1685         argument in all relevant function calls
1687 Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
1688 New LocalDB using DOM (removes python-xml dependency); channel context menu
1690         * bin/gpodder: Don't check for xml.sax package and modules anymore, as
1691         the dependency on python-xml has been removed with this release
1692         * data/gpodder.glade: Remove the "info" button for the current channel
1693         * src/gpodder/gui.py: Remove localdb-related code and adopt code for
1694         new LocalDB code; add context menu to channel navigator (edit/delete)
1695         * src/gpodder/libipodsync.py: Don't import "liblocaldb" module
1696         * src/gpodder/liblocaldb.py: Removed
1697         * src/gpodder/liblocdbreader.py: Removed
1698         * src/gpodder/liblocdbwriter.py: Removed
1699         * src/gpodder/liblogger.py: Add "traceback" keyword argument to the
1700         log() function; if "True" and in debugging mode, print traceback
1701         * src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
1702         liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
1703         LocalDBReader; customize podcastChannel to new LocalDB code
1704         * src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)
1706 Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
1707 Fix a bug when traversing directories with loop symlinks
1709         * src/gpodder/util.py: Don't dive into subdirectories that are
1710         symbolic links, this is to avoid a situation where looping symlinks
1711         result in the function dead-locking in a endless recursive loop,
1712         thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
1713         out and providing the necessary bug report to fix this issue
1715 Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
1716 Mark episodes as downloaded/deleted when deleting episodes
1718         * src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
1719         as deleted" and mark episodes as downloaded when removing selected
1720         episodes that have not been downloaded yet, as suggested by Holger
1721         Leskien <holger leskien.com>
1722         * src/gpodder/libpodcasts.py: Fix problem when trying to delete
1723         episodes that have not been downloaded
1725 Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
1726 Support for customized file names in MP3 player sync code
1728         * src/gpodder/gui.py: Add supporting code for reading/setting
1729         configuration options for the preferences dialog and a help display
1730         code that displays a guide on how to write custom sync name strings
1731         * src/gpodder/libgpodder.py: New configuration options:
1732         custom_sync_name (holds format string) and
1733         custom_sync_name_enabled (boolean, if the above string should be used)
1734         * src/gpodder/libipodsync.py: Use custom sync name format string and
1735         util's object_string_formatter() function to obtain a file name for
1736         the synchronized episode (or default to episode.title if disabled)
1737         * src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
1738         basename (returns the basename of the URL, without extension) and
1739         published (returns the pubDate of the episode in YYYYMMDD format)
1740         * src/gpodder/util.py: New object_string_formatter() method that
1741         replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
1742         corresponding values of passed-in keyword argument objects
1743         * data/gpodder.glade: Added preferences GUI elements
1745 Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
1746 Check for installed python-xml package on startup (hard dependency)
1748         * bin/gpodder: Add dependency check for PyXML
1750 Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
1751 Fix bug with default window title in gPodder window
1753         * src/gpodder/gui.py: Always set gPodder's default_title attribute
1755 Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
1756 Updated Russian translation from Vladimir Zemlyakov
1758         * data/po/ru.po: Updated
1760 Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
1761 More sanitizing hacks for ugly feeds we don't really like
1763         * src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
1764         multiple enclosures, if there are more than one available; skip
1765         episodes with a buggy download URL (i.e. no supported URL scheme)
1766         * src/gpodder/util.py: Return "(unknown)" if file size cannot be
1767         determined from the string passed to format_filesize(); return "None"
1768         in file_type_by_extension() if the extension is an empty string
1770 Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
1771 Handle enclosures (or lack thereof) better if fields are missing
1773         * src/gpodder/gui.py: Remove refetch_channel_list() function, as this
1774         is not called anywhere from the code (uh, how did i miss that?)
1775         * src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
1776         without length or mime type; ignore episodes without enclosures (it's
1777         not len(enclosures) == 0, but the enclosures attribute doesn't even
1778         exist on entries without enclosures, so make sure to check for that
1780 Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
1781 Use Python's webbrowser module for URL opening; channel dialog clean-up
1783         * bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
1784         * data/gpodder.glade: Remove "cancel" button from gPodderChannel
1785         * src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
1786         of relying on "gnome-open" to be available; remove event handler for
1787         gPodderChannel's "cancel" button
1789 Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
1790 Dependency check for python-feedparser in bin/gpodder
1792         * bin/gpodder: Add dependency check and warning (with exit) if
1793         python-feedparser is not installed, as python-feedparser now is a
1794         dependency of gPodder
1796 Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
1797 Support for modifying DownloadHistory and PlaybackHistory in GUI
1799         * data/gpodder.glade: Added menu items in gPodder main window
1800         * src/gpodder/gui.py: Add menu items to treeAvailable's context menu
1801         to toggle/set downloaded and played status on selected episodes
1802         * src/gpodder/libgpodder.py: Add del_item() function to
1803         DownloadHistory to support removing items from the history list;
1804         enhance history_mark_{played,downloaded}() functions for add/delete
1806 Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
1807 Improved pubDate parsing; episode delete bugfix
1809         * src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
1810         of episodes and use new function in gpodder.util to convert the parsed
1811         pubDate to a string; bugfix for remove downloaded episode by URL
1812         * src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
1813         converts the "updated_parsed" field from feedparser to a RFC2822
1814         string
1816 Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
1817 Remove obsolete documentation in doc/dev; cosmetic changes
1819         * data/po/Makefile: Upgrade to GPLv3
1820         * data/po/README: Mention i18n page on gPodder's website
1821         * doc/dev/build-deps-breezy.txt: Removed
1822         * doc/dev/debian.txt: Removed
1823         * doc/dev/i18n.txt: Removed
1824         * doc/dev/porting.txt: Removed
1825         * doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
1826         files
1828 Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
1829 Upgrade to the GNU General Public License, Version 3
1831         * bin/gpodder: Upgrade to GPLv3
1832         * COPYING: Upgrade to GPLv3
1833         * doc/dev/copyright_notice: Upgrade to GPLv3
1834         * Makefile: Upgrade to GPLv3
1835         * README: Upgrade to GPLv3
1836         * setup.py: Upgrade to GPLv3
1837         * src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
1838         cache, as these are LGPL or other and do not originate from gPodder)
1840 Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
1841 Integration changes, commit and ChangeLog migration
1843         * doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
1844         * Makefile: Make $EDITOR edit "ChangeLog" directly
1846 Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
1847 Last batch of experimental change merges (up to svn r398)
1849         * doc/dev/tepache-howto.txt: Removed
1850         * doc/dev/tepache: Removed
1851         * src/gpodder/gui.py.orig: Removed
1852         * src/gpodder/libwget.py: Send progress = 0.0 on inital status update
1853         * src/gpodder/libpodcasts.py: Try to get episode metadata from several
1854         different properties of the corresponding feedparser entries; warn
1855         user when we couldn't get the episode title and try to get the episode
1856         title from the filename of the URL if we still have not found an
1857         episode title
1858         * src/gpodder/libgpodder.py: Add get_device_name() that returns a
1859         "nice" representative string of the currently selected device that can
1860         be used to represent the device in the GUI
1861         * src/gpodder/util.py: Return "(unknown)" string when bytesize in
1862         format_filesize() when the size has a negative value; make
1863         get_tree_icon() catch errors and be more corrent with icon creation;
1864         add get_first_line() function that extracts the first line of a string
1865         * src/gpodder/libipodsync.py: Add "divx" to list of video extensions
1866         * src/gpodder/services.py: DownloadStatusManager has a new observer
1867         notification: "progress-detail"; add unregister() functionality for
1868         observers; add request_progress_detail() function that can be used to
1869         force a "progress-detail" notification to be sent out to all relevant
1870         observers; remove get_url_by_iter() function as it is not needed
1871         anymore
1872         * src/gpodder/gui.py: Clean-up after tepache dependency removal; new
1873         GladeWidget base class that subclasses SimpleGladeApp and simplifies
1874         class creation for our gPodder windows; add context menu to
1875         treeAvailable; re-work play_or_download() and make it return a list of
1876         boolean indicators on which actions can be performed on the selected
1877         items; move show_message() and show_confirmation() to GladeWidget;
1878         disable editing of the URL in the channel info dialog, this simplifies
1879         code and editing the URL doesn't make so much sense anyway (adding the
1880         new url and removing the old does the same and is easier, code-wise);
1881         add support for cancelling downloads in the available podcasts view;
1882         support live status view and download cancelling in the gPodderEpisode
1883         dialog window by hooking up to DownloadStatusManager as observer
1884         * src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
1885         of weakref for keyword arguments -> properties of new object)
1886         * bin/gpodder: We're using a experimental development version now
1887         * data/gpodder.glade: Add progress bar and associated buttons to
1888         gPodderEpisode dialog
1889         * MANIFEST.in: Removed gpodder.py.orig inclusion
1890         * Makefile: Removed support for tepache
1892 Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
1893 More changes from the experimental branch (up to svn r382)
1895         * src/gpodder/liblocdbreader.py: Clean-up
1896         * src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
1897         a generic download status manager as constructor parameter; remove
1898         downloadStatusManager class (moved to gpodder.services)
1899         * src/gpodder/console.py: More clean-ups; use get_new_episodes()
1900         instead of duplicating code here; simplify the code for wget version
1901         detection
1902         * src/gpodder/libpodcasts.py: Improve channel/episode generation from
1903         feedparser objects (with error handling); utilize download status
1904         manager from "gpodder.services" instead of accepting a download status
1905         manager as parameter; clean up unneeded functions and rename some
1906         functions to make the code more readable; use util.get_tree_icon() for
1907         compositing a nice icon; remove the "played" column from the
1908         treemodel; add local_filename to treemodel
1909         * src/gpodder/liblocdbwriter.py: Clean-up
1910         * src/gpodder/libgpodder.py: Clean-up
1911         * src/gpodder/util.py: Add torrent_filename() function that tries to 
1912         extract the filename of the file a .torrent file contains; add
1913         file_extension_from_url() function that returns the file extension in
1914         a URL; add file_type_by_extension() that returns the type of a file
1915         based on its extension; add get_tree_icon() that loads a named icon
1916         and optionally adds a bullet to it (unplayed status indicator)
1917         * src/gpodder/libipodsync.py: Clean-up
1918         * src/gpodder/services.py: New module that currently contains the
1919         improved DownloadStatusManager and a single object that servces as
1920         download status manager for all parts of gpodder
1921         * src/gpodder/gui.py: Only one column for status/played; use
1922         "gpodder.services" for the download status manager; clean-up
1923         * src/gpodder/liblocaldb.py: Clean-up
1924         * bin/gpodder: Clean-up
1925         * data/gpodder.glade: Clean-up; removed "show played column"
1926         preference in gPodderProperties dialog
1928 Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
1929 First import from experimental branch (up to svn r375)
1931         * src/gpodder/librssreader.py: Removed in favor of python-feedparser
1932         * src/gpodder/libwget.py: Percentage is now a float, don't set to 0
1933         when there has been an error
1934         * src/gpodder/console.py: Use {load,save}_channels methods; code
1935         cleanup and simplification
1936         * src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
1937         * src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
1938         and RSS reading; use shelve for new ChannelSettings class; clean-up
1939         podcastChannel and podcastItem; better TreeModel generator for
1940         podcastChannel (try to cache the model, only updates icons, etc...);
1941         remove downloadRss method in podcastChannel; move DownloadHistory and
1942         Playbackhistory to libgpodder; new load_channels() and save_channels()
1943         functions to save/load the channel list to an OPML file
1944         * src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
1945         and gPodderChannelReader (this is now in libpodcasts as simple
1946         functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
1947         * src/gpodder/gui.py: Use new functions for channel list
1948         loading/saving; only update treemodel for treeAvailable when it's
1949         really necessary
1950         * src/gpodder/liblocaldb.py: Remove unnecessary functions that have
1951         not been used for a while (treemodel-related); use load_channels()
1952         instead of gPodderChannelReader
1955 Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
1956         * ChangeLog: Older changes can be found on the gPodder website at
1957         http://gpodder.berlios.de/releases/0.9.5/ChangeLog