Fri, 02 May 2008 15:52:31 +0200 <thp@perli.net>
[gpodder/nikosapi.git] / ChangeLog
blob40b936e17d5b4e270355f74ff1d9be5d301654bc
1 Fri, 02 May 2008 15:52:31 +0200 <thp@perli.net>
2 Updated Portuguese translation by João Trindade
4         * data/gpodder.desktop: Updated Portuguese translation
5         * data/po/pt.po: Updated Portuguese translation
6         * src/gpodder/gui.py: Add João Trindade to list of contributors
8 Thu, 01 May 2008 11:20:28 +0200 <thp@perli.net>
9 Fix a spelling mistake in the French translation
11         * data/po/fr.po: Fixed French translation from Jérôme Chabod; thanks
12         to drust for pointing out the spelling mistake
13         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=101)
15 Tue, 29 Apr 2008 20:21:45 +0200 <thp@perli.net>
16 Fix problems with resizing the treeview on Maemo
18         * src/gpodder/gui.py: Fix problems with treeview resizing and remove
19         printing the percentage
20         * bin/gpodder: We're in development again, so "+svn"
22 Sat, 26 Apr 2008 08:34:37 +0200 <thp@perli.net>
23 Merge gPodder 0.11.2 release stuff and German translation update
25         * bin/gpodder: Updated version and release date
26         * data/po/de.po: Updated German translation
27         * data/messages.pot: Updated from source code
28         * data/po/*.po: Updated from messages.pot
29         * doc/man/gpodder.1: Updated manpage for release
30         * README: Updated README for release
32 Thu, 24 Apr 2008 19:40:55 +0200 <thp@perli.net>
33 Maemo-specific dialogs and UI improvements
35         * data/gpodder.glade: Maemo-specific "Add Podcast" dialog and
36         Maemo-specific, stripped-down "Preferences" dialog added
37         * src/gpodder/gui.py: Hide channel add UI from main window; make label
38         for update button even shorter; hide cover and pill cells in the
39         channel list if it gets too small; Maemo-specific dialogs for both
40         adding channels and editing preferences
42 Thu, 24 Apr 2008 18:19:02 +0200 <thp@perli.net>
43 Maemo finger-friendly updates; minor UI changes
45         * data/gpodder.glade: Ellipsize the feed update progressbar in the
46         middle instead of the end (to show progress)
47         * src/gpodder/gui.py: Add support for finger-friendly widget (buttons,
48         scroll areas, popup menus, etc..); text is "Loading [...]" when
49         loading feed cache and "Updating [...]" when updating feeds; on Maemo,
50         don't set the tab title to the current episode title; hide the heading
51         in gPodderEpisodeSelector on Maemo (to save screen space); add
52         finger_friendly_widgets class attribute to several gPodder windows;
53         make the tabs in the main window a bit taller, but remove the border
54         around the main window to gain some space on the screen
56 Thu, 24 Apr 2008 15:48:58 +0200 <thp@perli.net>
57 Updated Swedish translation by Anders Kvist
59         * data/po/sv.po: Updated Swedish translation by Anders Kvist
61 Wed, 23 Apr 2008 22:31:42 +0200 <thp@perli.net>
62 Merge patch from Junio C Hamano to fix problems with zero-length in feeds
64         * src/gpodder/gui.py: Update list of contributors/patch writers
65         * src/gpodder/services.py: Patch from Junio C Hamano to fix a problem
66         when a feed has zero length, which would otherwise result in a
67         divide-by-zero error
69 Tue, 22 Apr 2008 21:57:31 +0200 <thp@perli.net>
70 Typo from previous commit
72         * src/gpodder/libpodcasts.py: Fix typo
74 Tue, 22 Apr 2008 21:54:01 +0200 <thp@perli.net>
75 Diverse changes, code clean-ups and other small annoyances
77         * src/gpodder/config.py: Make sure we can load a default set of
78         configuration options, even if we are in CLI mode
79         * src/gpodder/download.py: Don't display a traceback when logging a
80         cancelled download
81         * src/gpodder/gui.py: Add Doug Hellmann to contributors/coders list in
82         the about dialog (Doug Hellmann has done the feed cache code); do not
83         center the gPodderEpisode dialog on the treeAvailable widget (this
84         looks ugly ;)
85         * src/gpodder/libpodcasts.py: Clean up import statements; Make sure we
86         always have icon names, even in CLI mode; Remove "is_music_channel"
87         property of podcastChannel (not needed anymore); 
89 Tue, 22 Apr 2008 21:15:40 +0200 <thp@perli.net>
90 Python code fixup: Compare "None" with "is not" instead of "!="
92         * src/gpodder/config.py: "!= None" => "is not None"
93         * src/gpodder/download.py: "!= None" => "is not None"
94         * src/gpodder/gui.py: "!= None" => "is not None"
95         * src/gpodder/libconverter.py: "!= None" => "is not None"
96         * src/gpodder/libgpodder.py: "!= None" => "is not None"
97         * src/gpodder/libpodcasts.py: "!= None" => "is not None"
98         * src/gpodder/services.py: "!= None" => "is not None"
99         * src/gpodder/util.py: "!= None" => "is not None"
101 Tue, 22 Apr 2008 20:30:28 +0200 <thp@perli.net>
102 Non-modal feed cache updates
104         * data/gpodder.glade: Feed cache update UI changes
105         * src/gpodder/gui.py: Fix problem with maemo window showing all
106         widgets on start; feed cache update changes; update list of
107         contributor (bug reporter for the cancel/skip button feature request
108         * src/gpodder/libpodcasts.py: Support cancelling a running feed cache
109         update by switching to offline mode when the cancel button is pressed
110         in load_channels(); idea by Paul Elliot, Pieter De Decker, Jürgen
111         Schinker and others, see the bug report page for more information
112         (Partly fixes: http://bugs.gpodder.org/show_bug.cgi?id=16)
114 Sat, 19 Apr 2008 20:16:11 +0200 <thp@perli.net>
115 Better tray icon menu item on Maemo-based platforms
117         * src/gpodder/trayicon.py: Better tray icon integration (show/hide
118         gPodder via tray icon) on Maemo
120 Sat, 19 Apr 2008 18:46:30 +0200 <thp@perli.net>
121 Additional fields for the device remove episodes dialog; refactoring
123         * src/gpodder/gui.py: Add "Podcast" and "Released" columns to the
124         episode selector; hide all columns in our "delete from device" episode
125         selector that have all rows set to "None"; make the first text column
126         of the gPodderEpisodeSelector bigger, so the episode selector is
127         easier to read when there are many columns
128         * src/gpodder/libpodcasts.py: Use util.format_date() for
129         cute_pubdate() in podcastItem
130         * src/gpodder/sync.py: Document SyncTrack a bit better, add
131         needed/possible keyword arguments that are used in the UI; default
132         some values to None in case they are not provided; get "released" date
133         from iPod's iTunesDB and get podcast name from MP3 player's sync
134         folder (if this feature has been activated)
135         * src/gpodder/util.py: Add format_date() function that converts a Unix
136         timestamp to a good representation for a date (either Today,
137         Yesterday, a weekday or the locale's appropriate representation); the
138         code has been re-factored from podcastItem's cute_pubdate() function
139         in gpodder.libpodcasts and is now used from there
141 Thu, 17 Apr 2008 17:54:48 +0200 <thp@perli.net>
142 Calculate total percentage based on byte size instead of percentage
144         * src/gpodder/download.py: Make sure we save the right size of a
145         currently in-progress download of an episode
146         * src/gpodder/services.py: Calculate the total percentage for all
147         episodes based on their file size instead of their percentage done;
148         this is especially important when downloading small files mixed with
149         large files; this makes the estimated download time more reliable;
150         thanks to Jérôme Chabod, who has done this patch
151         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=46)
153 Thu, 17 Apr 2008 17:42:31 +0200 <thp@perli.net>
154 Clean up preferences dialog + Move download settings to downloads tab
156         * data/gpodder.glade: UI-related changes to the preferences dialog
157         clean-up and the moving of the download settings to the downloads tab;
158         thanks to Paul Rudking for the download settings to downloads tab
159         patch
160         * src/gpodder/download.py: Better rate limiting, implemented by Paul
161         Rudkin
162         * src/gpodder/gui.py: UI-related changes to the preferences dialog
163         clean-up; the download settings changes are by Paul Rudkin
164         * src/gpodder/services.py: Improve the waiting/locking for the maximum
165         number of simultaneous downloads using a threading.Event
166         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=69)
167         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=83)
169 Tue, 15 Apr 2008 21:01:19 +0200 <thp@perli.net>
170 Updated French translation by Jérôme Chabod
172         * data/po/fr.po: Updated French translation by Jérôme Chabod
174 Tue, 15 Apr 2008 20:57:51 +0200 <thp@perli.net>
175 Merge patch from Jérôme Chabod to really pimp the tray icon tooltip :)
177         * src/gpodder/gui.py: Add some error reporting and change the code a
178         bit to support the new tooltips; thanks to Jérôme Chabod
179         * src/gpodder/trayicon.py: Add support for more elaborate tray icon
180         tooltips; patch by Jérôme Chabod
181         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=97)
183 Mon, 14 Apr 2008 13:51:23 +0200 <thp@perli.net>
184 Add bug reporter to list of contributors
186         * src/gpodder/gui.py: Bug #95 was reported by Tomas Matheson, so add
187         him to the list of contributors
189 Mon, 14 Apr 2008 13:45:34 +0200 <thp@perli.net>
190 Set Close and cancel buttons to the default on most dialogs
192         * data/gpodder.glade: Apply patch from Jerome Chabod that sets the
193         close and cancel buttons on most dialogs of gPodder to the default and
194         give them focus; this makes keyboard navigation possible and should
195         make it easier for keyboard fans to use gPodder UI :) This partially
196         fixes bug #95, but there are still some things to do for this bug.
198 Mon, 14 Apr 2008 13:40:32 +0200 <thp@perli.net>
199 Merge patch from Jerome Chabod to fix Remove podcasts for MP3 players
201         * src/gpodder/gui.py: Add warning message when we can't find a needed
202         attribute; add "Philippe Gouaillier" to list of contributors (bug
203         reporter for this bug)
204         * src/gpodder/sync.py: Add playcount attribute to MP3 player sync code
205         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=96)
207 Mon, 14 Apr 2008 13:37:03 +0200 <thp@perli.net>
208 Updated Russian translation by Leonid Ponomarev
210         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
212 Mon, 14 Apr 2008 13:33:44 +0200 <thp@perli.net>
213 Merge patch from Jerome Chabod to fix tray icon freeze (bug #55)
215         * src/gpodder/trayicon.py: Merge patch from Jerome Chabod to fix the
216         problem with the tray icon actions reported in bug #55; this is
217         basically attachment #33 with some cosmetic fixes
218         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)
220 Sun, 13 Apr 2008 22:27:28 +0200 <thp@perli.net>
221 Updating message files from source code for 0.11.2 freeze
223         * data/messages.pot: Updated from source code
224         * data/po/*.po: Updated from messages.pot
226 Fri, 11 Apr 2008 10:26:50 +0200 <thp@perli.net>
227 Correct "Close" and "Quit" behaviour
229         * data/gpodder.glade: Add a "Close" menu item to the podcasts menu and
230         rename the quit item to "Quit" (from "Close) to make the interface
231         more consistent and to support both Ctrl+W and Ctrl+Q
232         * src/gpodder/gui.py: Correct "Close" and "Quit" behaviour and make
233         Close be the "minimize to tray" function when the tray icon is
234         enabled; when not enabled, "Close" acts the same way as "Quit" (but is
235         left visible, so the Ctrl+W shortcut also works to close gPodder);
236         thanks to Harley Laue for the suggestion and initial patch
237         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=89)
239 Fri, 11 Apr 2008 10:11:33 +0200 <thp@perli.net>
240 Make RSS .torrent feeds from different Torrent sites work
242         * src/gpodder/libpodcasts.py: If an episode doesn't have an enclosure,
243         but its link looks like it's a media/torrent file, we are going do
244         interpret that as the enclosure URL; this makes feeds from different
245         torrent sites work with gPodder; thanks to Josh Gardner
246         <mellowcellofellow@gmail.com> for reporting this bug on Bugzilla
247         (http://bugs.gpodder.org/show_bug.cgi?id=74)
249 Tue, 08 Apr 2008 10:54:01 +0200 <thp@perli.net>
250 Updated Spanish translation
252         * data/po/es.po: Updated Spanish translation from Julio Acuña
254 Mon, 07 Apr 2008 23:06:53 +0200 <thp@perli.net>
255 Makre sure we can re-set the locale after changing it
257         * src/gpodder/util.py: Make sure we can re-set the locale after
258         changing it, and if we cannot, only print a warning, but don't throw
259         the exception outside of the function
261 Mon, 07 Apr 2008 23:05:05 +0200 <thp@perli.net>
262 Add 64x64 icon for Maemo's main menu and install it
264         * data/icons/64/gpodder.png: Added
265         * setup.py: Install the 64x64 icon in share/icons/hicolor
267 Mon, 07 Apr 2008 11:47:12 +0200 <thp@perli.net>
268 Install "pixmaps" icon on Maemo, too
270         * setup.py: Make sure we also install the "/usr/share/pixmaps/"
271         version of the gPodder icon on Maemo (for the task navigator)
273 Mon, 07 Apr 2008 11:24:54 +0200 <thp@perli.net>
274 Fix problems with the tray icon emblems
276         * src/gpodder/trayicon.py: Fix emblem drawing code for non-square
277         icons; use the "refresh" icon for feed updates and "multimedia-player"
278         icon for the iPod/MP3 player sync status emblem
280 Sun, 06 Apr 2008 17:22:11 +0200 <thp@perli.net>
281 Fix install Makefile bug; add donator; fix treeview header height
283         * Makefile: Add "generators" dependency for the "install" target
284         * src/gpodder/gui.py: Add Mark Alford (donator) to contributors list;
285         remove the hard-coded header height offset for the treeview, because
286         we don't need it anymore, because we hide the header (this is a good
287         thing, because we don't need to rely on a theme-specific header
288         height compared to what we did previously - one FIXME less :)
290 Sun, 06 Apr 2008 02:05:34 +0200 <thp@perli.net>
291 Initial upstream support for the Maemo platform (Nokia Internet Tablets)
293         * bin/gpodder: Add "--maemo/-m" option to enable running as a Maemo
294         application (this is only useful on Nokia Internet Tablets or in the
295         Maemo SDK environment); determine interface type and set the correct
296         variables on startup (gpodder.interface)
297         * data/gpodder.glade: Increase the default size of some widgets to
298         better fit the screens on Maemo (it won't do any harm on the "big"
299         Desktop screen
300         * data/icons/26/gpodder.png: Added
301         * data/icons/40/gpodder.png: Added
302         * data/maemo/gpodder.desktop: Added
303         * Makefile: Help2man variable; new "make mtest" target that runs
304         gPodder in Maemo scratchbox (probably useless for all other things);
305         update the command descriptions; don't run the "generators" target
306         from the "install" target; don't run "gen_graphics" from the
307         "generators" target, but make it depend on the 24-pixel logo, which
308         itself depends on the 22-pixel logo; this way, all should work out
309         well when trying to install on systems without ImageMagick installed;
310         remove *.pyo files on "make clean"
311         * setup.py: Support for build targets; use "TARGET=maemo" to enable
312         Maemo-specific installation options and files
313         * src/gpodder/config.py: Increase the WRITE_TO_DISK_TIMEOUT to 60
314         seconds, so we don't unnecessarily stress memory cards (on ITs);
315         modify default path variables on Maemo (/media/mmc2)
316         * src/gpodder/gui.py: Maemo-specific changes; clean-up the main window
317         a bit and make message and confirmation dialogs Hildon-compatible
318         * src/gpodder/__init__.py: Add enums for interface types: CLI, GUI and
319         MAEMO; remove the "interface_is_gui" variable and replace with
320         "interface", which is now used to determine where we are running
321         * src/gpodder/libgpodder.py: Use /media/mmc2/gpodder/ as configuration
322         folder on Maemo; use Nokia's Media player to playback files on Maemo
323         * src/gpodder/libpodcasts.py: Icon name changes (Maemo-specific)
324         * src/gpodder/trayicon.py: Maemo support; swap popup menu on Maemo;
325         Add support for hildon banners instead of pynotify on Maemo
326         * src/gpodder/util.py: Icon name changes (Maemo-specific); use new
327         gpodder.interface variable in idle_add
329 Sat, 05 Apr 2008 21:06:14 +0200 <thp@perli.net>
330 Make i18n help text work in the console help (gpodder --help)
332         * bin/gpodder: Fix a bug that would make the localized help string of
333         the CLI break; thanks to Pavel Mlcoch <pavkamlc@centrum.cz> for
334         reporting this bug on the gPodder bug tracker
335         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=53)
337 Fri, 04 Apr 2008 09:50:35 +0200 <thp@perli.net>
338 Use the correct multimedia-player icon for the transfer main menu item
340         * data/gpodder.glade: Use the multimedia-player icon for the transfer
341         to device menu item (was still gtk-network, forgot to change)
343 Fri, 04 Apr 2008 09:48:25 +0200 <thp@perli.net>
344 Fix gPodder freeze with open notifications on quit
346         * src/gpodder/trayicon.py: Fix a bug when gPodder would freeze when
347         a notification bubble was still open while closing the main
348         application; thanks to Jérôme Chabod for reporting this issue
349         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)
351 Fri, 04 Apr 2008 09:46:23 +0200 <thp@perli.net>
352 Increase filename size limitation from 50 to 100 chars in MP3 player sync
354         * src/gpodder/sync.py: Increase the number at which file names are cut
355         down in length to 100 characters and also cut folder names to that
356         length; thanks to Bernd Schlapsi for reporting this bug on the list
358 Sun, 30 Mar 2008 10:48:41 +0200 <thp@perli.net>
359 Make the Quit buttons actually quit when using the tray icon
361         * src/gpodder/gui.py: Patch from Nick L. to make the function of all
362         "Quit" buttons really quit gPodder and only make the window's "X"
363         button act as "minimize to tray" button; Also, update the credits name
365 Sat, 29 Mar 2008 17:13:26 +0100 <thp@perli.net>
366 Project management updates (authors, contributors and copyright)
368         * AUTHORS: Removed (was outdated); content now in gui.py (AboutDialog)
369         * bin/gpodder, data/po/Makefile, doc/dev/copyright_notice, 
370           doc/dev/win32/setup-win32.py, INSTALL, Makefile, README,
371           setup.py: Updated Copyright and old website URL to include 2008, the
372           gPodder team and www.gpodder.org
373         * src/gpodder/*.py: Updated Copyright years
374         * src/gpodder/gui.py: Add list of contributors from AUTHORS file and
375         from the content on the website's news page (please mail me if I
376         forgot to mention you as a contributor, I surely have missed a few);
377         make the AboutDialog's application name "gPodder" (from gpodder) and
378         add an URL hook function to the AboutDialog, so the website is opened
379         in the user's default web browser
381 Sat, 29 Mar 2008 16:30:02 +0100 <thp@perli.net>
382 Report errors in parsing/loading an already-added channel in the navigator
384         * src/gpodder/gui.py: Show the error from feedparser in the channel's
385         tooltip if there has been an error loading the channel
386         * src/gpodder/libpodcasts.py: Make sure we can load a default title
387         when using get_by_url(); save the parse_error variable for each
388         channel (it defaults to None if there is no error); mark the
389         description text for the channel navigator in red color if there has
390         been a parser error and add the parse_error variable to the liststore
391         model
392         * src/gpodder/util.py: Strip whitespace before and after the string in
393         remove_html_tags()
395 Sat, 29 Mar 2008 16:18:59 +0100 <thp@perli.net>
396 Add support for Rockbox' AudioScrobbler logfile to update played status
398         * src/gpodder/config.py: Add "mp3_player_use_scrobbler_log"
399         configuration option (defaulting to False) which controls if we are
400         going to try and find a ".scrobbler.log" file that contains
401         information on which tracks have been played; for this to work, you
402         also have to enable the "Updated tags after download" option
403         * src/gpodder/sync.py: Support for finding the .scrobbler.log file and
404         updating the played status of episodes in the MP3 player sync code
405         * src/gpodder/util.py: Add "find_mount_point()" function that tries to
406         determine the mount point on which the given directory (or file) lies
407         and returns the mount point or "/" if the directory/file resides on
408         the root filesystem.
410         This whole patch has been contributed by Nick <nikosapi.org> - thanks!
412 Sat, 29 Mar 2008 16:16:06 +0100 <thp@perli.net>
413 Merge sv.po translation from 0.11.1 release tarball
415         * data/po/sv.po: It seems like I somehow messed up the translations
416         merge, so here's the correct sv.po translation file, merged from the
417         0.11.1 tarball; thanks to Anders Kvist <kvistkvist@telia.com> for
418         pointing that out :)
420 Sat, 29 Mar 2008 01:20:46 +0100 <thp@perli.net>
421 Make sure we ignore the updated_parsed of a channel if it's None
423         * src/gpodder/libpodcasts.py: Only try to convert the "updated_parsed"
424         field if it's not "None"
425         * src/gpodder/util.py: Make sure we receive a valid 9-tuple when
426         converting dates from updated_parsed; if we receive a None value or
427         some value that isn't "9" in length, return None
428         Thanks to Chris Arnold <carnold@electrichendrix.com> for reporting
429         this bug on the gpodder-devel mailing list
431 Thu, 27 Mar 2008 13:10:58 +0100 <thp@perli.net>
432 This is trunk, so set version to 0.11.1+svn
434         * bin/gpodder: Set version to 0.11.1+svn
436 Thu, 27 Mar 2008 12:57:56 +0100 <thp@perli.net>
437 gPodder 0.11.1 "Attacked by Killer Tomatoes" released
439         * bin/gpodder: gPodder 0.11.1 released :)
440         * README: gPodder 0.11.1 released :)
441         * doc/man/gpodder.1: gPodder 0.11.1 released :)
442         * data/icons/24/gpodder.png: Updated from the dataset
443         * data/messages.pot: Updated from source
444         * data/po/*.po: Updated from messages.pot
445         * data/po/de.po: Updated German translation
447 Thu, 27 Mar 2008 11:52:35 +0100 <thp@perli.net>
448 Use cPickle for dumbshelve - it's compatible and faster
450         * src/gpodder/dumbshelve.py: Improve saving of channel cache and
451         metadata (and basically all that currently depends on dumbshelve) by
452         using cPickle as a drop-in replacement for pickle
454 Thu, 27 Mar 2008 11:28:31 +0100 <thp@perli.net>
455 Fix problem with pickle when there is a feed parsing exception
457         * src/gpodder/cache.py: When the feedparser returns an exception, this
458         will be stored as object in bozo_exception. Convert this to a string,
459         so the pickle module doesn't complain; thanks to VladDrac in #python
460         on FreeNode for pointing me to the right direction to fix this bug
462 Mon, 24 Mar 2008 10:42:19 +0100 <thp@perli.net>
463 Add "3gp" to the list of video file extensions, so we detect these files
465         * src/gpodder/util.py: Add the .3gp video file extension to the list
466         of known video file extensions, so we can detect that these are video
467         files and act accordingly (in the UI and on sync); thanks to Atte
468         André Jensen for reporting this bug on the gpodder-devel mailing list
470 Sun, 23 Mar 2008 10:39:24 +0100 <thp@perli.net>
471 Fix a bug when loading invalid image data (delete cover file then)
473         * src/gpodder/libgpodder.py: Fix a bug when gPodder is unable to load
474         an invalid cover image (i.e. when dragging a linked image from the
475         browser to the gPodder window, the link is sent, not the image)
477 Sat, 22 Mar 2008 21:08:06 +0100 <thp@perli.net>
478 Make bluetooth device discover a bit nicer
480         * src/gpodder/gui.py: Improve bluetooth device discovery button by not
481         destroying its design when it has been clicked and the label is
482         modified
484 Sat, 22 Mar 2008 20:45:27 +0100 <thp@perli.net>
485 Revert previous insanity (where I selected an awful "Transfer" toolbar icon)
487         * data/gpodder.glade: I wonder why I selected "gtk-network" as the
488         icon for the "Transfer" button on gPodder's toolbar. It surely is
489         irritating and illogical as hell.. Hmm. Anyway - now, there is a nice
490         "multimedia-player" icon which probably depicts an iPod-like device
491         if you use a good icon set. This makes much more sense. Go usability!
493 Sat, 22 Mar 2008 20:41:54 +0100 <thp@perli.net>
494 Add "Visit website" menu items to channel and episode list; simple chan menu
496         * src/gpodder/gui.py: Add "Visit website" menu items to the context
497         menu of both the episode list and the channel navigator; also, make
498         the channel context menu easier to use by replacing the old
499         "Edit [Channelname]" and "Remove [Channelname]" items with stock items
501 Sat, 22 Mar 2008 18:41:30 +0100 <thp@perli.net>
502 Fix "Podcasts not being marked as new when synced to iPod" (#70)
504         * src/gpodder/sync.py: Fix bug when podcasts were not marked as new
505         when synced to iPod and "on_sync_mark_played" was enabled;
506         Bug URL: http://bugs.gpodder.org/show_bug.cgi?id=70
507         Thanks to defrex (defrex0 gmail com) for report this bug in Bugzilla
509 Thu, 20 Mar 2008 11:21:06 +0100 <thp@perli.net>
510 Delay loading of UserAppsReader and improve libplayers
512         * src/gpodder/gui.py: Only load UserAppsReader's database three
513         seconds after gPodder start (because we only need it when the user
514         opens the preferences dialog, and if she opens it before these three
515         seconds, the UserAppsReader data is loaded on demand); because we load
516         the database (and generate the model) before we display the
517         preferences dialog, the preferences dialog usually comes up faster
518         than before (except for the situation where it is opened right after
519         gPodder startup); have only one UserAppsReader for audio/video and not
520         both (would duplicate the amount of work needed to read desktop
521         files); cleanup some UserAppsReader-related code in the prefs dialog
522         * src/gpodder/libplayers.py: Improve the reading code and make it
523         possible to support multiple mime types per-UserAppsReader (i.e. both
524         audio and video types are read by a single UAR instance); clean up the
525         imports for this module and do other related changes to make the code
526         nicer to read and understand
528 Thu, 20 Mar 2008 11:18:51 +0100 <thp@perli.net>
529 Add option to limit the maximum number of episodes per feed
531         * src/gpodder/config.py: Add "max_episodes_per_feed" configuration
532         option (int, defaults to 200) that determines the maximum number of
533         episodes that are parsed per channel/feed; if there are more episodes,
534         they are ignored. This value can be adjusted via the extended
535         configuration editor if you need more episodes
536         * src/gpodder/libpodcasts.py: Add support for the
537         max_episodes_per_feed configuration option above
539 Thu, 20 Mar 2008 11:13:16 +0100 <thp@perli.net>
540 Fix bug with unneeded download directory being created
542         * src/gpodder/libpodcasts.py: Fix bug when an unneeded download
543         directory would be created on every gPodder startup
545 Thu, 20 Mar 2008 11:11:18 +0100 <thp@perli.net>
546 Only serialize DumbShelve to disk when we have changed/deleted items in it
548         * src/gpodder/dumbshelve.py: Add a "__dirty" flag to DumbShelve to
549         know if we have to write the DumbShelve to the disk or if nothing has
550         changed since the last write (and therefore no need to run the
551         time-consuming serialization code again); this speeds up initial
552         loading time and probably also speeds up other parts of the code
554 Thu, 20 Mar 2008 11:09:27 +0100 <thp@perli.net>
555 Timestamp and benchmark functions for logger
557         * src/gpodder/liblogger.py: Add support for timestamping and benchmark
558         functions to liblogger, so we see the microtime since gPodder startup
559         and can also use the logging module to benchmark the speed of certain
560         code parts; this is helpful for our performance patches :)
562 Thu, 20 Mar 2008 11:07:48 +0100 <thp@perli.net>
563 Performance-improving patch from Nick (nikosapi) to html entity replacement
565         * src/gpodder/util.py: Merge patch from Nick (nikosapi.org) to really
566         improve performance of the HTML tag stripper/entity replacement code
567         by using regular expressions and some more intelligent code for
568         converting numeric entities to Unicode characters
570 Thu, 20 Mar 2008 11:06:32 +0100 <thp@perli.net>
571 Add demo code for displaying a splash screen
573         * doc/dev/splash-logo.py: Added testing code that would display a
574         splash screen (transparent if compositing is enabled); we currently
575         don't plan to use this code for reasons described on gpodder-devel
577 Thu, 20 Mar 2008 10:04:14 +0100 <thp@perli.net>
578 Filter "None" filenames from GtkFileChooser widgets
580         * src/gpodder/config.py: Make sure we don't receive a "None" filename
581         from GtkFileChooser widgets when connecting to the config manager
583 Wed, 19 Mar 2008 18:06:58 +0100 <thp@perli.net>
584 Change the context menu of the episode list popup menu
586         * src/gpodder/gui.py: Simplify, re-structure and improve the context
587         menu of the episode list popup menu (right-click menu); thanks to hex
588         (justin.forest gmail.com) for suggesting this change and giving
589         valuable input on gpodder-devel
591 Wed, 19 Mar 2008 15:45:15 +0100 <thp@perli.net>
592 Patch from Nikosapi to fix MP3 player sync progress
594         * src/gpodder/sync.py: Patch from Nick (nikosapi.org) to fix MP3
595         player sync problems: "Instead of displaying the proper percentage of
596         the copied file in the FS-based sync dialog, gPodder would initially
597         report 100% and near the end of the copy it would report percentages
598         >100%."
600 Wed, 19 Mar 2008 15:02:10 +0100 <thp@perli.net>
601 Various Bluetooth-related fixes
603         * data/gpodder.glade: Use the "bluetooth" icon instead of the (old?)
604         "stock_bluetooth" icon; in Gnome 2.22, the "bluetooth" icon is nicer,
605         i.e. more Tango-ish than the "stock_bluetooth" icon
606         * src/gpodder/gui.py: Fix a logging error; Only show "Send to [...]
607         via bluetooth"/"Send to bluetooth device" when we have already
608         downloaded the episodes (won't obviously work otherwise..)
609         * src/gpodder/util.py: Fix bluetooth_send_file to work with both
610         bluetooth-sendto and gnome-obex-send (different command line argument
611         format for both)
613 Sun, 16 Mar 2008 12:55:49 +0100 <thp@perli.net>
614 Python-feedparser is a dependency, so mention it in the README
616         * README: Mention python-feedparser as a dependency in the README
617         file; thanks to Alain Tauch for pointing this out on the mailing list
619 Wed, 12 Mar 2008 12:38:19 +0100 <thp@perli.net>
620 Updated translations for 0.11.1 stabilization period
622         * data/messages.pot: Updated from source
623         * data/po/*.po: Updated from messages.pot
625 Tue, 11 Mar 2008 18:53:25 +0100 <thp@perli.net>
626 Add option to write gtkpod extended database on sync
628         * data/gpodder.glade: Add a check box for the new config option
629         * src/gpodder/config.py: Add ipod_write_gtkpod_extended boolean
630         configuration variable that controls if we want to write iTunesDB.ext
631         after synchronization (defaults to False)
632         * src/gpodder/gui.py: Glue code for UI<->Config manager
633         * src/gpodder/sync.py: Use libgpod's "gtkpod" module to write the
634         extended gtkpod database (iTunesDB.ext) to the iPod after sync - this
635         has to be enabled via an option
637 Tue, 11 Mar 2008 18:44:19 +0100 <thp@perli.net>
638 Fix problem with old PyGTK versions when importing gpodder.trayicon
640         * src/gpodder/gui.py: Apply patch from Bill Barnard
641         <bill@barnard-engineering.com>, based on a patch from Jérôme Chabod
642         <jerome.chabod@ifrance.com> that makes sure we can import the tray
643         icon module. If not, we disable the tray icon functionality
645 Mon, 10 Mar 2008 16:37:38 +0100 <thp@perli.net>
646 Add support for creating M3U playlist files in download folders
648         * src/gpodder/config.py: Add "create_m3u_playlists" boolean
649         configuration option (default False) that controls if we want to
650         generate per-channel M3U playlists in our download folders
651         * src/gpodder/gui.py: Add context menu entry for manually updating an
652         M3U playlist for the channel navigator (only visible when updating m3u
653         playlists is enabled
654         * src/gpodder/libpodcasts.py: Add update_m3u_playlist() function to
655         podcastChannel and call it when removing and adding downloaded
656         episodes
657         * src/gpodder/util.py: Add sanitize_filename() function that tries to
658         encode a file name in the system's encoding, stripping all chars that
659         are invalid on FAT32 and other systems (e.g. slash, etc..)
661 Thu, 06 Mar 2008 17:46:21 +0100 <thp@perli.net>
662 Be less verbose, consider episodes with length<=100 to have invalid length
664         * src/gpodder/libpodcasts.py: Remove verbose logging for episode
665         metadata (seems to work now); consider episodes with a small length
666         value to have invalid length, i.e. try to find the length of the
667         episode by looking at the HTTP header; thanks to Bernd
668         <schlaber@gmail.com> for sending in the feed URL with which this bug
669         happens (length was 1) during the gPodder workflow survey :)
671 Tue, 04 Mar 2008 12:15:53 +0100 <thp@perli.net>
672 Fix KeyError bug in custom_selection_button_clicked (from LP)
674         * src/gpodder/gui.py: Fix problem with localized strings on the custom
675         selection buttons, i.e. pass the label to the function directly
676         instead of relying on the gtk.Button to have the label in the correct
677         encoding (LP: #192918); thanks to Pavel Mlčoch for reporting this bug
678         on Launchpad
680 Tue, 04 Mar 2008 12:05:23 +0100 <thp@perli.net>
681 Fix AttributeError bug in updateTreeView (from LP)
683         * src/gpodder/gui.py: Make sure that we have a valid "active_channel"
684         when updating the tree view (LP: #183667); thanks to red26wings for
685         reporting this bug on Launchpad
687 Mon, 03 Mar 2008 23:06:30 +0100 <thp@perli.net>
688 Add support for changing the URL of a subscribed channel (bug #42)
690         * data/gpodder.glade: Make the URL entry in the channel dialog
691         editable
692         * src/gpodder/gui.py: Add support for changing the URL of a subscribed
693         channel (i.e. move from the "latest" RSS feed to the "complete" RSS
694         feed, as is the case with Chaosradio podcasts, for example); ask user
695         if she really wants to move; handle case where the new URL is wrong
696         by reverting to old URL; Improve code for moving the download
697         directory; thanks to Steve Garcia <sgarcia@bak.rr.com> for the bug
698         report
700 Mon, 03 Mar 2008 21:14:55 +0100 <thp@perli.net>
701 Small fix for moving downloads progress bar
703         * src/gpodder/gui.py: Make sure the value for set_fraction of the
704         progress bar is in 0.0..1.0
706 Mon, 03 Mar 2008 20:53:15 +0100 <thp@perli.net>
707 Add "Go to website" buttons to episode and channel (bug #43)
709         * data/gpodder.glade: Add "Go to website" buttons to episode and
710         channel info dialogs
711         * src/gpodder/gui.py: Add code to open website URL or hide the "Go to
712         website" button when there is no valid website link for an episode or
713         channel
715 Mon, 03 Mar 2008 20:37:02 +0100 <thp@perli.net>
716 Move webbrowser code to util.open_website; fix URLs to gpodder.org
718         * src/gpodder/gui.py: Use new gpodder.org URLs; use
719         util.open_website() instead of directly interfacing with threads and
720         the "webbrowser" module
721         * src/gpodder/util.py: New function open_website() that takes care of
722         opening the system's default web browser and opening the specified URL
724 Sun, 02 Mar 2008 14:20:56 +0100 <thp@perli.net>
725 Make "gl" a global-accessible object in libgpodder
727         * doc/dev/gdfs/gdfs-check.py: Adapt to new structure of gPodderLib
728         * src/gpodder/*.py: Use "gl" instead of all incarnations of
729         "gPodderLib()" or "libgpodder.gPodderLib()", and weed out all "gl =
730         gPodderLib() lines, because it makes the code look unnecessarily
731         bloated ;)
732         * src/gpodder/libgpodder.py: Make "gl" a global instance of the
733         gPodderLib() object, and rename gPodderLibClass to gPodderLib and do
734         some more cleaning-up
736 Sun, 02 Mar 2008 14:03:40 +0100 <thp@perli.net>
737 Move gPodderLib().open_folder to util.gui_open
739         * src/gpodder/gui.py: Use util.gui_open instead of gl.open_folder
740         * src/gpodder/libgpodder.py: Remove open_folder (move to gpodder.util)
741         * src/gpodder/util.py: Add gui_open function that uses xdg_open to
742         open files and folders with their default application in the GUI
744 Sun, 02 Mar 2008 13:52:42 +0100 <thp@perli.net>
745 Pickle-based storage method (dumbshelve); HTTP HEAD requests; buggy feed fixes
747         * src/gpodder/dumbshelve.py: Added (replacement for "shelve" using
748         pickle)
749         * src/gpodder/libgpodder.py: Rename *.db files to *.pickle.db, so we
750         don't clash with old-style shelve .db files
751         * src/gpodder/libpodcasts.py: Use dumbshelve as a replacement for
752         shelve; add EpisodeURLMetainfo that keeps track of metainfo downloaded
753         via HTTP HEAD requests; make getting episode length and pubDate a bit
754         more intelligent by trying to find correct values via HTTP HEAD;
755         improve episode sorting by falling back to episode titles when no
756         pubDate has been found (or pubDate is equal); 
757         * src/gpodder/util.py: Add get_episode_info_from_url() function that
758         tries to find out the length and pubDate of an episode by looking at
759         the data from the HTTP HEAD; also support HTTP proxys via an optional
760         "proxy" keyword argument
762 Wed, 27 Feb 2008 10:44:48 +0100 <thp@perli.net>
763 Notify user about no new episodes when updating from tray icon
765         * src/gpodder/gui.py: Patch from Jérôme Chabod
766         <jerome.chabod@ifrance.com> to notify the user about "no new episodes"
767         when updating the feed cache manually via the tray icon
768         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=3)
769         * src/gpodder/trayicon.py: See above
771 Wed, 27 Feb 2008 09:52:14 +0100 <thp@perli.net>
772 Use xdg-open for files that we don't know the file type of
774         * src/gpodder/libgpodder.py: If the file we want to open/play is not
775         an audio or video file, we use "xdg-open" to open the file (this is
776         used for things like PDF files and the like, e.g. in Chaos TV)
778 Wed, 27 Feb 2008 09:46:55 +0100 <thp@perli.net>
779 Add Flash Video (flv) and Windows Media Video (wmv) to file detection
781         * src/gpodder/util.py: Detect *.flv and *.wmv files as video files
783 Wed, 27 Feb 2008 09:39:42 +0100 <thp@perli.net>
784 When sending via Bluetooth, always rename/copy the file
786         * src/gpodder/gui.py: When sending files via Bluetooth, and the file
787         converter script is not enabled, we are simply copying the file to the
788         sync_filename of the episode, therefore creating a nice name. We have
789         to copy the file, because neither gnome-obex-send nor bluetooth-sendto
790         let us specify the destination filename when sending the file, these
791         utilities always take the input filename (thanks to Chris
792         <gpodder@noreply.org.uk> for the bug report)
793         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=49)
795 Tue, 26 Feb 2008 16:49:06 +0100 <thp@perli.net>
796 Python code fixup: Compare "None" with "is" instead of "=="
798         * doc/dev/daap2rss.py: "== None" => "is None"
799         * src/gpodder/config.py: "== None" => "is None"
800         * src/gpodder/gui.py: "== None" => "is None"
801         * src/gpodder/libgpodder.py: "== None" => "is None"
802         * src/gpodder/libpodcasts.py: "== None" => "is None"
804 Tue, 26 Feb 2008 16:30:56 +0100 <thp@perli.net>
805 Add support for new "bluetooth-sendto" utility
807         * README: Ask for either "gnome-obex-send" or "bluetooth-sendto",
808         which are needed for the Bluetooth file transfer
809         * src/gpodder/util.py: Add support for "bluetooth-sendto" as an
810         alternative to "gnome-obex-send"; initial bug report and patch by
811         Leonid Ponomarev (this probably adds bluez-gnome as an optional
812         dependency if you want bluetooth send support)
814 Mon, 25 Feb 2008 15:51:16 +0100 <thp@perli.net>
815 Show more description text in episode list
817         * src/gpodder/libpodcasts.py: Join all lines and strip unnecessary
818         data for the episode description that is displayed in the episode list
819         when descriptions are enabled (suggested by Jérôme Chabod)
821 Mon, 25 Feb 2008 14:39:15 +0100 <thp@perli.net>
822 Merge changes from 0.11.0 release after release
824         * bin/gpodder: Merge changes from 0.11.0
825         * README: Merge changes from 0.11.0
827 Sun, 24 Feb 2008 14:52:04 +0100 <thp@perli.net>
828 Cosmetic changes to the makefile
830         * Makefile: Cosmetic changes
832 Sun, 24 Feb 2008 13:55:42 +0100 <thp@perli.net>
833 Cairo-based progress bar on system tray icon
835         * src/gpodder/draw.py: Add Cairo-based drawing code for generating a
836         nice, transparent progress bar icon
837         * src/gpodder/services.py: Fix a problem with the wrong download done
838         percentage (i.e. when cancelling downloads instead of finishing them)
839         * src/gpodder/trayicon.py: Add code to draw the progress bar on the
840         tray icon; initial idea and most parts of this patch by Jérôme Chabod
842 Sat, 23 Feb 2008 14:18:53 +0100 <thp@perli.net>
843 Set the xterm title when running "make test"
845         * Makefile: Set the xterm title when running "make test"
847 Wed, 20 Feb 2008 13:38:58 +0100 <thp@perli.net>
848 Estimated time left and synchronization support for tray icon by Jérôme Chabod
850         * src/gpodder/gui.py: Send update status information to the tray icon
851         on update; add glue code for synchronization device and tray icon
852         * src/gpodder/trayicon.py: Add status and tooltip during device
853         synchronization; add estimated download time to tooltip during
854         download; set the correct caption for the synchronization menu item in
855         the tray icon (and don't add a synchronize menu item when not needed);
856         some small code-cleanups and fixes
857         * src/gpodder/util.py: Add format_seconds_to_hour_min_sec() function
858         that converts a numeric amount of seconds into a human-readable string
860 Tue, 19 Feb 2008 07:46:28 +0100 <thp@perli.net>
861 Fix bug with MP3 player synchronization file name encodings
863         * src/gpodder/sync.py: Apply patch to fix problems with native
864         language encodings on MP3 player synchronization; thanks to Bernd
865         Schlapsi for reporting the problem in Bugzilla
866         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=34)
868 Mon, 18 Feb 2008 21:17:48 +0100 <thp@perli.net>
869 Updated French translation for 0.11.0
871         * data/po/fr.po: Updated French translation by Jérôme Chabod
873 Sun, 17 Feb 2008 13:50:09 +0100 <thp@perli.net>
874 Fix calculation of average percentage done
876         * src/gpodder/services.py: Fix calculation of average percentage done
877         for downloads, thanks to Jérôme Chabod <jerome.chabod@ifrance.com> for
878         the patch
880 Sun, 17 Feb 2008 13:33:38 +0100 <thp@perli.net>
881 Updated translations for 0.11.0
883         * data/messages.pot: Refreshed messages.pot from source code
884         * data/po/de.po: Updated German translation
885         * data/po/nl.po: Updated Dutch translation by Pieter De Decker
886         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
887         * data/po/cs.po: Updated Czech translation by Ondrej Vesely
888         * data/po/sv.po: Updated Swedish translation by Anders Kvist
890 Thu, 07 Feb 2008 22:15:40 +0100 <thp@perli.net>
891 Hello, new "expert" configuration editor (about:config-like)
893         * data/gpodder.glade: Add gPodderConfigEditor window and add an
894         "Advanced..." button to the preferences dialog
895         * src/gpodder/config.py: Add a gtk.ListStore tree model to the
896         configuration manager and update it when configuration variables
897         change; add toggle_flag() and update_field() methods for easy updating
898         of fields from the new config editor
899         * src/gpodder/gui.py: Add glue code for opening the advanced
900         configuration editor from the preferences dialog; add code for the
901         gPodder configuration editor (including filtering and field updating);
902         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=10)
904 Thu, 07 Feb 2008 20:22:08 +0100 <thp@perli.net>
905 Support buggy OPML feeds, notify user on OPML import
907         * src/gpodder/gui.py: Notify user when no items were found when trying
908         to import OPML feeds
909         * src/gpodder/opml.py: Make the OPML importer a bit more relaxed, and
910         make it accept "url" instead of "xmlUrl", too (for buggy OPML feeds)
912 Wed, 06 Feb 2008 17:34:56 +0100 <thp@perli.net>
913 Fix the track length detection
915         * src/gpodder/sync.py: Fix the iPod sync track length detection code,
916         reported by Paul Rudkin <paul@thegithouse.com> and tested by
917         FriedBunny <friedbunny@kulturny.com>; make default length 3 hours
918         Closes: http://bugs.gpodder.org/show_bug.cgi?id=29
920 Wed, 06 Feb 2008 10:59:25 +0100 <thp@perli.net>
921 NLS encoding support for MP3 player synchronization (from gdfs)
923         * src/gpodder/sync.py: Add NLS encoding support from Leonid Ponomarev
924         <leonid.phoenix@gmail.com>; patch modified a bit to better fit the
925         code and be more verbose, so the user knows how we encode the names
927 Wed, 06 Feb 2008 10:43:47 +0100 <thp@perli.net>
928 Hide to systray on exit during download
930         * src/gpodder/gui.py: Apply patch from Jérôme Chabod
931         <jerome.chabod@ifrance.com> to fix a bug: When closing gPodder during
932         a download, and "on_quit_hide" is on, gPodder asks for a confirmation
933         It should hide gPodder without asking. This patch fix that.
935 Wed, 06 Feb 2008 10:18:30 +0100 <thp@perli.net>
936 Usability GUI update (after Rafael Proença's proposal)
938         * data/gpodder.glade: Add "Ctrl+L" hotkey to Add new channel; add
939         "View" menu with show/hide Toolbar (Ctrl+T) and show/hide episode
940         descriptions (Ctrl+D); remove "Update Feeds" button from toolbar and
941         add Check for updates button below channel navigator; move the add
942         episodes entry and buttons above the channel navigator; thanks to the
943         following people who shared their opinions on the mailing list: Rafael
944         Proença, Paul Rudkin, Ondrej Vesely, Leonid Ponomarev, Shane Donohoe,
945         Jérôme Chabod, Nick (nikosapi); the GUI mockups and the initial idea
946         were posted by Rafael Proença
947         * src/gpodder/config.py: Add "episode_list_descriptions" and
948         "show_toolbar" configuration options that modify the look of the main
949         window (both default to "True")
950         * src/gpodder/gui.py: Show feed description in seperate line (this
951         feature was suggested by narf@inode.at); make the episode list
952         treeview widget use the space more efficient; show/hide toolbar and
953         show/hide episode description GUI glue code
954         * src/gpodder/libgpodder.py: Add "digits" keyword argument to
955         format_filesize() (defaults to 2), this is a pass-thru function for
956         gpodder.util.format_filesize() (see below)
957         * src/gpodder/libpodcasts.py: Support for small- and large-sized
958         icons,modify liststore creation code to add description to the title
959         column
960         * src/gpodder/util.py: Add "digits" keyword argument to
961         format_filesize() (defaults to 2), this is used to define the format
962         of the filesize; add "icon_size" keyword argument (defaults to 32) to
963         get_tree_icon() and modify the function so that it dynamically
964         generates the correct icon with the correct sizes
966 Mon, 04 Feb 2008 11:26:14 +0100 <thp@perli.net>
967 Apply patchset from Jérôme Chabod to fix tray icon behaviour
969         * data/gpodder.glade: Change behaviour of the "display tray icon"
970         checkbox, rename and retitle some configuration options
971         * src/gpodder/config.py: Rename "download_after_update" to
972         "auto_download_when_minimized" and rename "disable_notifications" to
973         "enable_notifications".
974         * src/gpodder/gui.py: Add glue code for config and GUI, change
975         behaviour as described in http://bugs.gpodder.org/show_bug.cgi?id=3
976         * src/gpodder/trayicon.py: Clean-up and fix behaviour as described in
977         our Bugzilla Bug #3 (see above); thanks to Jérôme Chabod for
978         implementing all these changes and the patch
980 Mon, 04 Feb 2008 09:32:56 +0100 <thp@perli.net>
981 Output pretty-printed OPML when saving channels list
983         * src/gpodder/opml.py: Patch from Nick (nikosapi.org) to output the
984         channels.opml file pretty-printed, so it's easier to read and easier
985         to edit when working on the file outside of gPodder
987 Sun, 03 Feb 2008 23:02:47 +0100 <thp@perli.net>
988 Don't code late at night, it breaks the sync code ;)
990         * src/gpodder/sync.py: Add brackets because I wrote bad code in the
991         first place (fix video sync for iPods); thanks to Dave Perdue
992         <dave@minusvince.com> for reporting this in our bug tracker
993         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=28)
995 Sat, 02 Feb 2008 11:36:35 +0100 <thp@perli.net>
996 Make feed update display "Loading" titles, only run auto update when minimized
998         * src/gpodder/gui.py: Usability patch from NIkosapi <nikosapi.org>:
999         Make the feed update dialog display "Loading feeds" instead of
1000         "Downloading feeds" when its loading the feeds from the local cache;
1001         only run the automatic, periodic update when gPodder is minimized,
1002         because it would pop up a dialog while gPodder is in use otherwise
1004 Sat, 02 Feb 2008 11:33:48 +0100 <thp@perli.net>
1005 Pressing Enter in the add channel entry adds the channel
1007         * data/gpodder.glade: Usability patch from Nikosapi <nikosapi.org>:
1008         Add an action handler to the gladefile, so the user can simply press
1009         Enter in the gtk.Entry instead of having to tab to or click on the
1010         button for adding a channel
1012 Wed, 30 Jan 2008 09:47:21 +0100 <thp@perli.net>
1013 Fix another bug in file_modification_datetime
1015         * src/gpodder/util.py: Another problem that happens with special
1016         iTunesDB settings, thanks to FriedBunny <friedbunny@kulturny.com>
1018 Wed, 30 Jan 2008 09:23:19 +0100 <thp@perli.net>
1019 Fix a bug in the file size calculation
1021         * src/gpodder/util.py: calculate_filesize should deal with "None"
1022         passed as filename (now returns zero-size);
1023         Fixes: Bug #23 (http://gpodder.thegithouse.com/show_bug.cgi?id=23)
1024         Thanks to FriedBunny <friedbunny@kulturny.com> for reporting this
1025         issue in our bug tracker
1027 Mon, 28 Jan 2008 12:33:13 +0100 <thp@perli.net>
1028 Merge new sync code from thp's private branch
1030         * bin/gpodder: Add "--sync"/"-s" command-line option to start the
1031         device synchronization process from the CLI interface - syncing can
1032         now be scripted, baby :) (you still have to configure the sync device
1033         via the GUI first, though)
1034         * data/gpodder.glade: Simplify gPodderSync dialog and remove some
1035         obsolete options from the channel dialog
1036         * src/gpodder/console.py: Add code for command-line sync support
1037         * src/gpodder/gui.py: Remove obsolete code for libipodsync and import
1038         the new "sync" module; simplify Sync<->GUI interface; clean-up
1039         gPodderSync dialog code to interface with new sync code; remove some
1040         config glue code for the channel properties dialog
1041         * src/gpodder/libconverter.py: Make libconverter work even if the
1042         percentage callback would fail in certain conditions (try..except)
1043         * src/gpodder/libipodsync.py: Removed
1044         * src/gpodder/libpodcasts.py: Refactor age_in_days() and
1045         get_age_string() to simple calls to utility functions and move the
1046         code to gpodder.util
1047         * src/gpodder/sync.py: Added new sync module :) Very modular, yesaya!
1048         * src/gpodder/util.py: Add file_age_in_days() and file_age_to_string()
1049         helper functions that use code from libpodcasts and return the age of
1050         a file in the filesystem
1052 Thu, 24 Jan 2008 14:51:48 +0100 <thp@perli.net>
1053 Fix a bug for show_message and tray_icon/minimized
1055         * src/gpodder/gui.py: Fix a bug when messages are shown for
1056         non-gPodderMainWindow windows (that don't have tray_icon)
1058 Wed, 23 Jan 2008 11:55:35 +0100 <thp@perli.net>
1059 Make gpodder.desktop pass desktop-file-validate tests
1061         * data/gpodder.desktop: Update "Categories" and remove "Encoding",
1062         following the freedesktop.org Desktop Entry specification
1064 Wed, 23 Jan 2008 09:06:32 +0100 <thp@perli.net>
1065 Do not show notifications when gPodder is minimized
1067         * src/gpodder/gui.py: Merge patch from Jérôme Chabod to fix problems
1068         with the gPodder window re-appearing after having been minimized;
1069         use the notification icon when possible; initially reported by Shane
1070         Donohoe
1072 Tue, 22 Jan 2008 10:19:46 +0100 <thp@perli.net>
1073 Add "releasetest" target to Makefile (automated testing)
1075         * Makefile: Add "releasetest" target that can be used to do some
1076         automatic testing before releases; thanks to Götz Waschk for giving
1077         some hint on "desktop-entry-validate" :)
1079 Tue, 22 Jan 2008 10:09:16 +0100 <thp@perli.net>
1080 Use Episode Selector for per-channel new episodes
1082         * src/gpodder/gui.py: Reorganize code to use the episode selector for
1083         both all-channels and per-channel new episodes
1084         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=14)
1086 Tue, 22 Jan 2008 09:42:01 +0100 <thp@perli.net>
1087 Fix problem in gpodder.desktop file
1089         * bin/gpodder: We're in development again (+svn)
1090         * data/gpodder.desktop: Fix problem in .desktop file (Thanks to Götz
1091         Waschk for reporting this bug, detected via desktop-entry-validate)
1093 Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
1094 gPodder 0.10.4 "Faster Pussycats Kill" released
1096         * bin/gpodder: gpodder 0.10.4 released :)
1097         * README: gPodder 0.10.4 released :)
1098         * doc/man/gpodder.1: gPodder 0.10.4 released :)
1099         * data/po/de.po: Updated German translation
1100         * data/messages.pot: Updated from source
1101         * data/po/*.po: Updated from messages.pot
1103 Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
1104 Create Bittorrent download directory on startup
1106         * src/gpodder/libgpodder.py: Create Bittorrent download directory on
1107         startup, so the first time gPodder preferences are shown, the download
1108         folder will exist and now throw an error
1110 Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
1111 Updated French translation file with correct encoding
1113         * data/po/fr.po: Updated French translation with correct encoding by
1114         Jérôme Chabod - thanks!
1116 Mon, 21 Jan 2008 10:47:49 +0100 <thp@perli.net>
1117 Add support for sending files via Bluetooth
1119         * data/gpodder.glade: Add "Bluetooth" configuration page to
1120         preferences dialog
1121         * src/gpodder/config.py: Add Bluetooth-related configuration options
1122         * src/gpodder/gui.py: Add support for sending (and converting) files
1123         for bluetooth file transfer; add glue code for preferences dialog and
1124         configuration manager
1125         * src/gpodder/libgpodder.py: Add "tempdir" variable to gPodderLibClass
1126         that specifies a temporary directory to be used (currently only for
1127         converting files for bluetooth transfer, might be migrated to a
1128         configuration option later)
1129         * src/gpodder/util.py: Add discover_bluetooth_devices() function that
1130         searches for nearby devices (either via python-bluez or via hcitool,
1131         so one of them has to be installed as a dependency); add
1132         bluetooth_send_file() convenience function that starts a file transfer
1133         via Bluetooth OBEX - uses gnome-obex-send, which has to be installed
1134         for Bluetooth file transfer to work
1136 Mon, 21 Jan 2008 09:52:09 +0100 <thp@perli.net>
1137 Support for different audio/video player selection
1139         * data/gpodder.glade: Add video selection to preferences dialog
1140         * src/gpodder/config.py: Add "videoplayer" configuration option
1141         * src/gpodder/gui.py: Add glue code for configuration and preferences
1142         dialog (audio/video player selector)
1143         * src/gpodder/libgpodder.py: Add code to migrate from older gPodder
1144         configurations (videoplayer is set to "unspecified") to the same value
1145         as the currently selected audio player; when "playing" a file,
1146         determine the file type and start the right player application
1147         * src/gpodder/libplayers.py: Parameterize the UserAppsReader class to
1148         accept a mime type (e.g. "video" or "audio") after which to filter
1150 Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
1151 Czech translation update: gpodder.desktop
1153         * data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
1154         Czech translation strings to the gpodder.desktop file - thanks
1156 Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
1157 Added Czech translation by Ondrej Vesely
1159         * data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
1160         <xorwen@gmail.com>; the completed translation will be updated when
1161         it's done
1162         * setup.py: Add "cs" (Czech) to list of translations
1164 Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
1165 Updated Swedish translation from Anders Kvist
1167         * data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
1168         now up-to-date again
1170 Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
1171 Updated French translation from Jérôme Chabod
1173         * data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
1174         now up-to-date again
1176 Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
1177 Updated Dutch translation from Pieter De Decker
1179         * data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
1180         now up-to-date again
1182 Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
1183 Update translation template and translations from source
1185         * data/messages.pot: Updated potfile from source code
1186         * data/po/*.po: Updated translation templates from potfile
1188 Wed, 16 Jan 2008 08:36:12 +0100 <thp@perli.net>
1189 Remove the "Ignore" button in tray icon notifications
1191         * src/gpodder/trayicon.py: Remove the "ignore" action and button when
1192         a download has finished; the "ignore" button is redundant, as the same
1193         functionality can be achieved by clicking on the "x" of the bubble
1195 Tue, 15 Jan 2008 14:50:13 +0100 <thp@perli.net>
1196 Modularize calls to gobject.idle_add (for non-GTK support)
1198         * bin/gpodder: Set interface_is_gui to True when running the GUI
1199         * src/gpodder/*.py: Use util.idle_add instead of gobject.idle_add
1200         * src/gpodder/gui.py: Simplify some idle_add calls, code clean-up
1201         * src/gpodder/__init__.py: Add "interface_is_gui" boolean variable
1202         that tells us if we are running in GUI or CLI mode (this is needed for
1203         util.idle_add to determine if it's going to use the gobject module or
1204         not)
1205         * src/gpodder/util.py: Add new function idle_add() that acts as a
1206         wrapper to gobject.idle_add(); this will only use gobject.idle_add if
1207         we are in GUI mode, and will call the callback directly when we are in
1208         command-line mode (because we don't have to watch out for threading
1209         race conditions there, compared to what GTK+ gives us)
1211 Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
1212 Add menu item that links to gPodder's new bug tracker
1214         * data/gpodder.glade: Add bug tracker item to help menu
1215         * src/gpodder/gui.py: Add code to open a webbrowser with the bug
1216         tracker when the bug tracker icon is clicked
1218 Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
1219 Add a checkbox to keep episodes when removing channels
1221         * src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
1222         removing a podcast channel, so the user has the option to remove the
1223         podcast feed from gPodder's subscription list, but still keep the
1224         downloaded files on the harddisk (via a checkbox in the dialog)
1225         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)
1227 Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
1228 Updated Russian translation by Hex
1230         * data/po/ru.po: Updated Russian translation by
1231         Hex <justin.forest@gmail.com>
1233 Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
1234 Merge tray icon and notification patch by Jérôme Chabod
1236         * data/gpodder.glade: UI support for tray icon settings and
1237         configuration options for auto update feeds (auto update based on a
1238         patch by Nick (nikosapi.org)
1239         * src/gpodder/config.py: Add configuration options that support the
1240         tray icon, notification bubble and automatic update/close functions
1241         * src/gpodder/gui.py: Support the tray icon in the GUI; link the
1242         configuration options with the preferences dialog; re-work the channel
1243         update dialog to be more slipstreamed
1244         * src/gpodder/trayicon.py: Added new tray icon module by
1245         Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
1246         gPodder TODO list by Holger Bauer
1248 Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
1249 Updated Swedish translation by Anders Kvist
1251         * data/po/sv.po: Swedish translation updated by
1252         Anders Kvist <kvistkvist@telia.com>
1254 Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
1255 Use os.rename to make channel list saving atomic
1257         * src/gpodder/opml.py: Make the saving of the channel list atomic by
1258         first saving it to a temporary file and then using os.rename to really
1259         move the file in place (this should make the channel list saving very
1260         stable and protect against certain bad system conditions where the
1261         channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
1262         the suggestion and pointers to improve the channel saving code
1264 Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
1265 Make logging in libpodcasts less verbose
1267         * src/gpodder/libpodcasts.py: Remove some verbose logging code
1269 Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
1270 Migrate from channels.xml (from 0.9.4) to channels.opml if needed
1272         * src/gpodder/libgpodder.py: Add code to check if channels.xml exists
1273         but channels.opml doesn't and if so, try to convert from channels.xml
1274         to channels.opml, so users upgrading from 0.9.4 directly will have
1275         their channel list automatically converted;
1276         thanks to Tim Michelsen for the bug report and helpful Ubuntu info
1278 Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
1279 Add download completion notification support
1281         * src/gpodder/download.py: Notify the download status manager when a
1282         download has been completed successfully
1283         * src/gpodder/services.py: Add download-complete signal to list of
1284         possible signals and download_completed() method to be used by
1285         downloads to notify the status manager of a successful download
1287 Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
1288 Patch the feedparser module to correctly process democracynow.org
1290         * src/gpodder/cache.py: Add a patch_feedparser() method that checks of
1291         the feedparser module correctly maps the "plain" content-type to the
1292         correct "text/plain" content-type and if not, replace the
1293         mapContentType method with a fixed one; this should make the audio
1294         podcast on democracynow.org working (thanks to Clark Burbidge for the
1295         bug report)
1297 Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
1298 Better username/password extraction from URLs
1300         * src/gpodder/util.py: Improve username and password extraction for
1301         authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
1302         Donohoe <priestoftime@googlemail.com> for reporting this bug and
1303         sending in a patch; this should allow for e-mail address usernames
1305 Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
1306 Also delete old episodes that have disappeared from the feed
1308         * src/gpodder/gui.py: When deleting old episodes automatically, also
1309         delete episodes that have disappeared from the RSS feed and are only
1310         available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
1311         for the very detailed and helpful bug report :)
1313 Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
1314 Stability updates: Feed cache update, old PyCairo versions
1316         * src/gpodder/draw.py: Add a workaround for pycairo versions less than
1317         1.1.6. Thanks to Chris Arnold for reporting this bug on the
1318         gpodder-devel mailing list and taking the time to test the patch and
1319         report back and provide useful information for debugging this error
1320         * src/gpodder/gui.py: Close the feed cache update dialog even when the
1321         user clicks on "cancel" (would have stayed there otherwise)
1323 Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
1324 Merge "delete episode after sync" patch from Jérôme Chabod
1326         * data/gpodder.glade: Add GUI elements in preferences dialog to select
1327         what to do after episode sync (nothing, delete or mark played)
1328         * src/gpodder/config.py: Add "on_sync_delete" configuration option
1329         * src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
1330         * src/gpodder/libipodsync.py: If the configuration option
1331         on_sync_delete is set, remove the episode after successfully copying
1332         it to the iPod or MP3 player (the whole patch has been initially done
1333         by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
1334         * src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
1335         robust, so it doesn't disturb libipodsync's functionality
1337 Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
1338 Remove invalid channel cover images when loading fails
1340         * src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
1341         it cannot be loaded (assume something went wrong when downloading the
1342         cover file); re-downloading the cover manually can solve the problem
1344 Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
1345 Fix typo in last commit
1347         * src/gpodder/libipodsync.py: Fix typo in last commit
1349 Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
1350 Modify played handling in iPod sync when "on sync mark played" is active
1352         * src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
1353         if the on_sync_mark_played option is set
1355 Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
1356 Merge patch from Leonid Ponomarev to gdfs
1358         * doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
1359         support for the system's native encoding, based on the $LANG
1360         environment variable. This should add support for episodes and
1361         channels with international characters as titles
1363 Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
1364 Updated Dutch translation by Pieter De Decker
1366         * bin/gpodder: We're in development again: "+svn"
1367         * data/po/nl.po: Updated Dutch translation from Pieter De Decker
1369 Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
1370 gPodder 0.10.3 "A Stop at Willoughby" released
1372         * bin/gpodder: gPodder 0.10.3 released :)
1373         * README: gPodder 0.10.3 released :)
1374         * doc/man/gpodder.1: gPodder 0.10.3 released :)
1375         * data/messages.pot: Updated from source
1376         * data/po/de.po: Updated German translation
1377         * data/po/*.po: Updated from messages.pot
1379 Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
1380 Link the gPodder Documentation Wiki from the help pages
1382         * data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
1383         and Documentation Wiki (instead of Mailing list)
1384         * src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page
1386 Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
1387 Remove TODO file from MANIFEST.in
1389         * MANIFEST.in: Of course we have to remove non-existing files from the
1390         MANIFEST.in file, too.. so TODO is now finally gone :)
1392 Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
1393 Manage TODO list on the gPodder Wiki
1395         * TODO: Removed; new location: http://gpodderwiki.jottit.com/todo
1397 Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
1398 Configuration for "old" episodes; automatically remove old episodes
1400         * src/gpodder/config.py: New boolean auto_remove_old_episodes
1401         configuration option that defaults to False (remove on startup)
1402         * src/gpodder/gui.py: Add code to automatically remove old, unplayed
1403         episodes on startup if the specific configuration options have been
1404         set; connect config manager to GUI items for the preferences dialog
1405         * data/gpodder.glade: Add checkbox for automatically removing old,
1406         unplayed episodes from gPodder on startup and a spinbutton to set the
1407         amount of days after which an episode is considered "old"
1409 Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
1410 Merged episode locking patch from Paul Rudkin
1412         * src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
1413         locked, patch by Paul Rudkin <paul@thegithouse.com>
1414         * data/gpodder.glade: Add menu item for toggle locked status
1415         * src/gpodder/libgpodder.py: Add "locked" history
1416         * src/gpodder/libpodcasts.py: When requesting a status icon, also draw
1417         the "Locked" status; is_locked() in podcastItem
1418         * src/gpodder/util.py: Added code for drawing a padlock icon on top of
1419         another (file type) icon; this is used for the "lock episodes" feature
1421 Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
1422 Updated TODO list
1424         * TODO: Updated TODO list
1426 Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
1427 Move observer code out of DownloadStatusManager into ObservableService
1429         * src/gpodder/services.py: Move out all observer-related code like
1430         registration, unregistration and notification to a new
1431         ObservableService class; subclass ObservableService in
1432         DownloadStatusManager; this makes the observer code in
1433         DownloadStatusManager re-usable (will be needed for new sync code)
1435 Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
1436 Selective iPod episode clean-up; "delete older than X days"
1438         * src/gpodder/config.py: Add episode_old_age configuration variable;
1439         is an integer, defaults to 7. This is the number of days after which
1440         an episode will be considered "old"
1441         * src/gpodder/gui.py: iPod cleanup is now done selectively using the
1442         episode selector dialog; the code has been split, because we do not
1443         yet have an episode selector dialog for FS-based sync; add "Downloaded
1444         x days ago" column to "Delete old episodes" dialog and a corresponding
1445         button; call the callback even when no episodes are selected in
1446         gPodderEpisodeSelector
1447         * src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
1448         moved to __init__ to be instance variables (this should fix a bug that
1449         crops up now that we can selectively delete episodes); remove_tracks()
1450         and clean_playlist() have been modified/added to support new episode
1451         selector deletion code
1452         * src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
1453         podcastChannel (it really belongs to the item; this makes code more
1454         readable in other parts of the codebase); add age_in_days(), is_old(),
1455         get_age_string() and age_prop to podcastItem
1456         * src/gpodder/util.py: New function: file_modification_datetime();
1457         returns a datetime.datetime instance of the MTIME (modification
1458         timestamp) of the filename given as parameter or None if the filename
1459         cannot be determined; this is used for the "old episodes" feature
1461 Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
1462 Make has_converter() a bit more intelligent in detecting extensions
1464         * src/gpodder/libconverter.py: Convert given extension to lowercase
1465         and strip a leading "." from the extension, so calling code can also
1466         give the second value of the os.path.splitext() result directly to
1467         has_converter()
1469 Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
1470 Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin
1472         * src/gpodder/config.py: Fix pre-setting code for filechooser-related
1473         code; use set_current_folder() instead of set_filename()
1474         * src/gpodder/gui.py: Fix pre-setting code for filechooser-related
1475         code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch
1477 Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
1478 Support for itms:// links (direct links to the Apple iTunes Music Store)
1480         * src/gpodder/util.py: Support direct itms:// links by splitting out
1481         the iTunes Podcast links parsing routines. This should put us in for
1482         some nice iTunes podcast link support that will automagically
1483         translate iTunes podcast links to the correct RSS feed URL
1485 Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
1486 Support for iTunes Podcast links (http://phobos.apple.com/...)
1488         * src/gpodder/util.py: Add support for subscribing to iTunes Podcast
1489         links (those with phobos.apple.com); new functions:
1490         parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()
1492 Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
1493 Added Galician translation from Teo Ramirez
1495         * data/gpodder.desktop: Added Spanish and Galician translations;
1496         thanks to Teo Ramirez <teoramirez@gmail.com>
1497         * data/messages.pot: Updated from source
1498         * data/po/de.po: Updated
1499         * data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
1500         * data/po/*.po: Updated from source
1501         * setup.py: Added Galician (gl) translation by Teo Ramirez
1503 Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
1504 Sort channel list (finally ;)
1506         * src/gpodder/libpodcasts.py: Sort channels by lowercase title before
1507         returning the channel list in load_channels(); this automagically
1508         makes gPodder's channel list always sorted :)
1509         Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
1510         sending in an intial patch that led to this patch =)
1511         * TODO: Remove implemented item: Sort channel list
1513 Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
1514 Do grayscale "pill" instead of theme-based colors (for bad themes)
1516         * src/gpodder/draw.py: Always draw the "pill" in semi-transparent
1517         black/grey shades so it will work for all GTK themes (even Ubuntu's)
1519 Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
1520 Update channel navigator when iPod/MP3 player sync has finished
1522         * src/gpodder/gui.py: Update channel navigator when iPod sync has
1523         finished, so we can update the "played" status in the channel
1524         navigator when this status has changed after we've synced ("on sync
1525         mark played" option)
1527 Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
1528 Add option to mark episodes as played after transfer to device
1530         * data/gpodder.glade: Option added to preferences dialog
1531         * src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
1532         an episode as played when it gets transferred to a device
1533         * src/gpodder/gui.py: Glue code for GUI + gpodder.config
1534         * src/gpodder/libipodsync.py: On sync, mark episode as played if the
1535         user has selected the "on_sync_mark_played" option
1536         * TODO: Remove implemented/integrated items
1538 Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
1539 Fix a fatal bug with first-run that prevents channel list saving
1541         * src/gpodder/util.py: Always use a file's parent directory to get the
1542         free disk space and return zero free disk space when the parent
1543         directory does not exist
1545 Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
1546 Support for itpc:// URLs
1548         * src/gpodder/util.py: Add support for adding "itpc://" URLs (these
1549         are simply http:// URLs with a different schema, for iTunes)
1551 Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
1552 Draw channel stats (unplayed, downloaded) on channel navigator
1554         * bin/gpodder: We're in development again, so add "+svn"
1555         * src/gpodder/draw.py: Added
1556         * src/gpodder/gui.py: Fix import of renamed "channels_to_model";
1557         re-assign new column numbers for treeChannels' data model; add
1558         cell renderer for pill pixbuf and remove cell renderer for status text
1559         * src/gpodder/libpodcasts.py: Add episode_is_new() function to
1560         podcastChannel to check if an episode can be considered "new"; use the
1561         episode_is_new function in get_new_episodes; add get_episode_stats()
1562         after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
1563         channels_to_model and clean out old, unused code and columns
1565 Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
1566 gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released
1568         * bin/gpodder: gPodder 0.10.2 released :)
1569         * doc/man/gpodder.1: gPodder 0.10.2 released :)
1570         * README: gPodder 0.10.2 released :)
1572 Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
1573 Translation updates
1575         * data/messages.pot: Refreshed from source
1576         * data/po/*.po: Refreshed from messages.pot
1577         * data/po/de.po: Updated German translation
1579 Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
1580 Make sure there is enough free disk space when saving OPML channel list
1582         * src/gpodder/gui.py: Notify user that there's some problem saving the
1583         current channel list when save_channels() return False
1584         * src/gpodder/libpodcasts.py: Pass-through the return value of
1585         gpodder.opml.Exporter.write so calling code knows if saving the
1586         channel list was successful or not
1587         * src/gpodder/opml.py: Check free disk space before saving OPML
1588         channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
1589         for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)
1591 Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
1592 Don't send Referer header when downloading episodes
1594         * src/gpodder/download.py: Some podcasts now implement an
1595         "anti-bandwidth-theft" code that should provide other websites from
1596         not linking to the episodes; as we have sent a Referer header
1597         containing the RSS feed URL, this causes problems; Referer header
1598         sending is therefore disabled now
1600 Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
1601 TODO items from Katy G. B.
1603         * TODO: Updated TODO list
1605 Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
1606 Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)
1608         * src/gpodder/gui.py: Do not hook up tooltip handlers when we are
1609         using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)
1611 Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
1612 Check free disk space before copying files to iPod
1614         * src/gpodder/libipodsync.py: Check if the iPod's filesystem has
1615         enough free disk space before copying files over to it, as to not
1616         corrupt the iTunesDB in certain situations and fail when disk is full;
1617         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1618         * src/gpodder/util.py: Add get_free_disk_space() function that
1619         calculates the free (user-available) disk space on a given path
1621 Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
1622 Add informative tooltips to channel navigator
1624         * src/gpodder/gui.py: Add tooltips to channel navigator that show a
1625         bigger cover image, the title, description, url and used disk space
1626         * src/gpodder/libpodcasts.py: Add save_dir_size property to
1627         podcastChannel that contains the disk usage of the channel's save_dir;
1628         this can be manually updated by calling update_save_dir_size() and
1629         will automatically be updated when the GUI code hooks into the
1630         channel; also add get_cover_pixbuf() that returns a pixbuf of the
1631         cover for a given size or None if there is no valid cover file
1633 Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
1634 Slipstream code (enumerate instead of simple position tracking)
1635         * src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
1636         of episodes instead of keeping track of the position "by hand"
1638 Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
1639 Ignore initial window events from GtkWindow in Config
1641         * src/gpodder/config.py: Add a flag to config manager to ignore window
1642         events until the window has been realized; then, start taking position
1643         and size updates
1645 Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
1646 Improve caching for HTTP redirects and minor errors; cache clean-up
1648         * src/gpodder/cache.py: Cache content when it comes from a HTTP
1649         redirect (301, 302, 307); cache feeds even with parsing errors, so we
1650         can "fill" our cache and not download on every startup
1651         * src/gpodder/libpodcasts.py: Add cache clean-up code after loading
1652         channels; this should keep the feedcache.db file smaller for users
1653         that like to try out new channels (or have used gPodder for a while)
1655 Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
1656 Better file extension guessing for URLs
1658         * src/gpodder/util.py: Improve file_extension_from_url() by adding
1659         additional checks for known good extensions and recurse into the query
1660         string if it looks like an URL; this should fix compatibility problems
1661         for feeds with strange URLs; should provide more reliable guessing;
1662         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1664 Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
1665 Fix format_filesize() usage in episodes selector and podcastItem
1667         * src/gpodder/gui.py: Use the correct (config-using) format_filesize()
1668         function to generate the total size string in the episode selector
1669         * src/gpodder/libpodcasts.py: Use the correct (config-usig
1670         format_filesize() function to generate the total size string in
1671         podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
1672         pointing that out
1673         * data/gpodder.glade: Use "Preferences" instead of "Preferences..."
1674         which feels a bit better in the GUI
1676 Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
1677 Add "gPodder download folder synchronizer" scripts to repository
1679         * doc/dev/gdfs/gdfs-check.py: Added
1680         * doc/dev/gdfs/gdfs-init.py: Added
1681         * doc/dev/gdfs/README: Added
1683 Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
1684 The mighty episode selector dialog and some menu re-arrangements
1686         * src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
1687         positioning code to GladeWidget to be universally usable; update
1688         "Device" menu item on startup; new functions: delete_episode_list()
1689         and download_episode_list() that both operate on lists of episodes;
1690         add code for invoking gPodderEpisodeSelector for deleting old
1691         episodes; re-work on_itemDownloadAllNew_activate to use the episode
1692         selector instead of hand-crafting a message dialog text; add
1693         update_item_device() function that will handle the hiding, showing and
1694         renaming of the "Device" menu in the menubar; clean-up
1695         gPodderProperties with callback_finished setting (now kwarg-based);
1696         new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
1697         that will prove to be useful in some places in our codebase: it
1698         basically allows the user to select a subset of episodes from a given
1699         list in a quite sophisticated way; new "delete old episodes" menu item
1700         added for cleaning up gPodder's downloads
1701         * src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
1702         method to podcastItem; other convenience properties and functions
1703         needed for the new episode selector dialog: pubdate_prop,
1704         get_filesize_string(), filesize_prop, get_channel_title(),
1705         channel_prop, get_played_string(), played_prop
1706         * data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
1707         gPodder's main menu to be more usable and more compact; also added the
1708         Ctrl+K "Remove old episodes" menu item; also use the correct
1709         "multimedia-player" icon name of a not really representative icon
1711 Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
1712 Support syncing to FS-based MP3 players without subfolders
1714         * data/gpodder.glade: Add checkbox "Create a subfolder for each
1715         channel" to preferences dialog and rename some widgets
1716         * src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
1717         option that defaults to True (create subfolder for each channel)
1718         * src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
1719         to preferences dialog; do more intelligent widget hiding for the
1720         "Player" tab in the preferences dialog (only show relevant widgets)
1721         * src/gpodder/libipodsync.py: Only append channel name as subfolder to
1722         destination folder name when the "fssync_channel_subfolders" option is
1723         True; suggested by Paul Elliot <omahns.home@gmail.com>
1725 Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
1726 Fix offline cache behaviour when time is not set
1728         * src/gpodder/cache.py: Return cached_content in offline mode when
1729         cached_content "is not None" (instead of cached_time "is not None")
1731 Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
1732 Process events before connecting Config to gtk windows
1734         * data/gpodder.glade: Remove default size for main gPodder window, as
1735         this is now handled by the config manager
1736         * src/gpodder/config.py: Process GTK events in the event queue before
1737         connecting to the "configure-event" signal, so we won't get two
1738         configure events for the window for the initial size change
1740 Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
1741 Add error reporting when download fails because of an I/O error
1743         * src/gpodder/download.py: Catch and handle I/O errors in
1744         DownloadThread and format and pass on messages to GUI code when
1745         required; thanks to Florian Richter <Florian_Richter@gmx.de> for
1746         suggesting this feature after having a full disk
1747         * src/gpodder/gui.py: Update tree view when adding a new episode;
1748         add new notification() method and pass this method through to
1749         DownloadThread, so it can present messages to the user (i.e. errors)
1751 Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
1752 Use util.find_command in more places (mplayer detection, ...)
1754         * src/gpodder/libgpodder.py: Use util.find_command to detect the
1755         existence of the "gnome-btdownload" command and spit out a warning log
1756         message when the command is not available
1757         * src/gpodder/libipodsync.py: Use util.find_command to check for an
1758         installed mplayer binary (instead of relying on os.system("which...")
1760 Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
1761 Better command detection for the converter library
1763         * src/gpodder/libconverter.py: Detect existence of commands before
1764         invoking them for converting files; based on a patch by
1765         Nick (nikosapi.org); ConverterCollection is now a dict itself :)
1766         * src/gpodder/util.py: Add new find_command() function that will
1767         search the system's PATH for a specific executable command
1769 Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
1770 Remove extracted cover art when deleting episode files
1772         * src/gpodder/util.py: Apply modified version of a patch from
1773         Nick (nikosapi.org) that is better suited for deleting cover art that
1774         has been extracted with the new eyeD3 cover art extraction code
1776 Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
1777 Patch from Nick (nikosapi) to support eyeD3 cover art extraction
1779         * src/gpodder/libipodsync.py: Apply modified version of a patch from
1780         Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
1781         sync code; remove dependency on PyID3
1782         * README: PyID3 is not a dependency anymore, as we can now use eyeD3
1783         for the same purpose (cover art extraction)
1785 Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
1786 Fix format_filesize() function to be standards-conformant (unit prefixes)
1788         * src/gpodder/config.py: Add "use_si_units" configuration option; if
1789         True, the user will see SI units (MB, kB, ...); if False (the
1790         default); the user will see binary-prefix units (MiB, KiB, ..)
1791         * src/gpodder/libgpodder.py: Add pass-through function
1792         "format_filesize()" to gPodderLib that combines the
1793         util.format_filesize function with the gPodder-specific config option
1794         * src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
1795         <z0idberg@gmx.de> to add support for SI units and binary prefixes to
1796         format_filesize(); this makes the function standards-compliant
1797         * src/gpodder/download.py: Updated to use new format_filesize
1798         * src/gpodder/gui.py: Updated to use new format_filesize
1799         * src/gpodder/libpodcasts.py: Updated to use new format_filesize
1801 Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
1802 New Configuration/Settings Manager; massive code clean-ups
1804         * src/gpodder/config.py: Added new Configuration Manager that
1805         automatically keeps track of saving changed values and is also able to
1806         watch GTK widgets for changes; this should simplify our settings
1807         management and give us a single place for maintaining settings
1808         * src/gpodder/download.py: Access settings from new config manager
1809         * src/gpodder/gui.py: Make use of new config manager to connect
1810         widgets and settings from the GUI directly to the config manager;
1811         remove manual loading and saving of settings; auto-connect as much as
1812         possible in the gPodderProperties dialog to get real-time automatic
1813         configuration saving; fix the other code to use new config manager
1814         * src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
1815         old cruft and dead code that has been lying around in libgpodder for
1816         some time now; remove configuration code; utilize config manager;
1817         unify DownloadHistory+PlaybackHistory in new HistoryStore class;
1818         reduce number of import statements
1819         * src/gpodder/libipodsync.py: Access settings from new config manager
1820         * src/gpodder/libplayers.py: Removed dotdesktop_command()
1821         * src/gpodder/libpodcasts.py: Move locking functionality into this
1822         module, as locking is only used here; access config from new manager
1823         * src/gpodder/services.py: Use config manager to get settings
1824         * src/gpodder/util.py: Add format_desktop_command() function, based on
1825         the dotdesktop_command() function from libplayers
1827 Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
1828 Add ability to open download folder from channel's context menu
1830         * src/gpodder/gui.py: Add "Open download folder" menu item to channel
1831         navigator context menu
1832         * src/gpodder/libgpodder.py: Add open_folder() method that will open
1833         the DE's default folder browser via "xdg-open"
1835 Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
1836 Limit filename on FS-based sync to 50 characters
1838         * src/gpodder/libipodsync.py: Do not allow extremely long file names
1839         that could theoretically be generated by using data from RSS feeds;
1840         this is needed to make FAT-based drives work with files that would
1841         otherwise have file names that are too long
1843 Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
1844 Escape RSS-provided strings in Pango markup
1846         * src/gpodder/gui.py: Escape strings in Pango markup
1847         * bin/gpodder: we're in development again, so "+svn"
1849 Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
1850 gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released
1852         * bin/gpodder: gPodder 0.10.1 released :)
1853         * doc/man/gpodder.1: gPodder 0.10.1 released :)
1854         * README: gPodder 0.10.1 released :)
1855         * data/messages.pot: Refreshed template from source files
1856         * data/po/de.po: Updated German translation for the 0.10.1 release
1857         * data/po/*.po: Refreshed translation files from template
1859 Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
1860 Add "Save episode to file" handling to episode list context menu
1862         * data/gpodder.glade: Use a stock "Save As" button for the "Copy
1863         episode to file" button
1864         * src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
1865         that shows a copy dialog where a user can copy a file to a selected
1866         destination (this is used for "Save episode to file"); use
1867         show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
1868         folder" menu item in episode list context menu and use
1869         show_copy_dialog to carry out the user interaction
1871 Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
1872 Allow "https://" URLs for episode URLs, as we can handle these, too
1874         * src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
1875         can handle https URLs, thanks to Aravind Seshadri
1876         <aravind@aravind.name> who initially reported this bug
1878 Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
1879 Sync videos to the "Video Podcasts" playlist instead of the "Video" menu
1881         * src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
1882         <niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
1883         of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB
1885 Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
1886 sync_filename in podcastItem; cleanup; hide extra progressbar on transfer
1888         * src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
1889         unnecessary second progressbar when only syncing one channel (i.e.
1890         when clicking on the "transfer" button in the main window
1891         * src/gpodder/libgpodder.py: Remove unneeded lexists import and
1892         warning; clean-up
1893         * src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
1894         * src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
1895         returns the custom_sync_name or the title of the episode, based on the
1896         user's configuration settings for FS-based MP3 player sync
1898 Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
1899 Add wishlist items to TODO list from Paul and Wilfred
1901         * TODO: New wishlist items, ideas and suggestions
1903 Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
1904 Limit download progress status updates to reduce CPU load
1906         * src/gpodder/download.py: Limit the amount of status updates the
1907         download threads send to the DownloadStatusManager to one per second;
1908         this should make gPodder less CPU-intensive with many parallel
1909         downloads; thanks to Wilfred van Rooijen for reporting and testing
1911 Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
1912 Update channel models (icons) after iPod synchronization
1914         * src/gpodder/gui.py: Call update_model() on each channel after an
1915         iPod sync, so we can update the played state on the available episodes
1916         lists when played state was changed by the iPod sync
1918 Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
1919 Fix loading of channel metadata (load auth data and settings)
1921         * src/gpodder/libpodcasts.py: Load channel metadata when loading a
1922         podcastChannel object from OPML/LocalDB. This fixes a problem with
1923         authentication data being not loaded and also fixes a bug when the
1924         custom-set channel title was not correctly used throughout the GUI.
1925         Thanks to Nick (nikosapi) for reporting and providing a patch
1927 Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
1928 Finally remove Desktop symlink code; several compatibility fixes
1930         * src/gpodder/download.py: Prevent divide-by-zero errors when
1931         calculating download speed
1932         * src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
1933         percentage done in code for moving the downloaded items folder
1934         * src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
1935         because it's not GUI-accessible anymore and we didn't use it anyway
1936         * src/gpodder/opml.py: Better local filename detection by using
1937         os.path.exists() instead of .startswith('/'); this is also good for
1938         cross-platform compatibility where parts don't usually start with a
1939         forward slash (i.e. Win32)
1941 Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
1942 Channel list selection bug fixes
1944         * src/gpodder/gui.py: Fix some channel list-related problems and
1945         annoyances, based on a patch by Nick (nikosapi)
1946         * bin/gpodder: We're in development again, so "+svn"
1948 Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
1949 gPodder 0.10.0 "Hier spricht Frank Drebin" released
1951         * bin/gpodder: gPodder 0.10.0 released :)
1952         * doc/man/gpodder.1: gPodder 0.10.0 released :)
1953         * README: gPodder 0.10.0 released :) (and: updated dependencies)
1954         * TODO: Updated TODO list (some items are done for 0.10.0 :)
1956 Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
1957 Updated translations from Rosetta (Launchpad.net)
1959         * data/po/es.po: Spanish translation by Julio Acuña
1960         * data/po/pt.po: Portuguese translation by Joel Calado (completed :)
1962 Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
1963 Fix problems with path selection in treeChannels
1965         * src/gpodder/gui.py: Simple bugfix
1967 Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
1968 Center gPodderEpisode on treeAvailable for less mouse hopping
1970         * src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
1971         window on the treeAvailable, because that makes the position of the
1972         opened dialog more predictable and easier to use (as if the
1973         gPodderEpisode dialog was "inside" the treeView from which it opened)
1975 Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
1976 Don't translate feed format string examples
1978         * src/gpodder/gui.py: Don't mark format string examples as
1979         translatable
1981 Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
1982 Small bugfix for updating treeChannels when its model changes
1984         * src/gpodder/gui.py: Bugfix
1986 Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
1987 Removed channel combobox, drag'n'drop improvements + new channel cover editor
1989         * data/gpodder.glade: Remove comboAvailable in gPodder (main window);
1990         add download+clear button in gPodderChannel, rename some items that
1991         are now used in code; make the channel navigator non-shrinkable (so
1992         it is always visible, because we don't have comboAvailable anymore)
1993         * src/gpodder/gui.py: Remove support for the channel combo box,
1994         also known as comboAvailable; clean-up DND code and make treeChannels
1995         the only DND target in the main window; remove some unnecessary
1996         updating of the channel list (calls to updateComboBox);
1997         Changes for the gPodderChannel dialog: Don't automatically download
1998         channel cover when dialog pops up; add "Download" and "Clear" buttons
1999         to the cover editor; add DND support for dropping local files or
2000         images from the web browser to the cover editor (for setting custom
2001         covers on channels with bad or no cover)
2002         * src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
2003         URL is invalid, but the image has already been downloaded (because we
2004         read the downloaded image in the code when it exists, without URL)
2006 Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
2007 Center feed update dialog on main window; scroll reset in chan.navigator
2008         * src/gpodder/gui.py: Reset the current scroll position of the channel
2009         navigator when re-loading the channel list; this fixes an annoyance
2010         that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
2011         with a HUGE channel list (more than 50 channels); also removed the
2012         scroll position reset code from treeAvailable, as we already managed
2013         to only edit the model instead of re-loading it every time; added code
2014         to really center the feed update dialog on gPodder's main window
2016 Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
2017 Replace wget with new gpodder.download module; User-agent support
2019         * bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
2020         for wget, as this is not needed anymore
2021         * src/gpodder/cache.py: Clean-up; remove old logging code; add support
2022         for gpodder.user_agent; log info when there is an error in parsing the
2023         feed, so the user knows why this feed is not cached
2024         * src/gpodder/console.py: Remove DownloadPool, Use new
2025         gpodder.download module for carrying out downloads, remove
2026         wget_version() tester, as this is not needed anymore =)
2027         * src/gpodder/download.py: Added new downloader module that uses
2028         urllib and some custom classes and functions to provide the equivalent
2029         functionality of the obsolete "libwget", but without the wget
2030         dependency and with better accuracy (progress reporting, etc..)
2031         * src/gpodder/gui.py: Utilize new gpodder.download module instead of
2032         libwget
2033         * src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
2034         module that holds the value of the "User-agent" header to send to web
2035         servers when requesting OPMLs, Feeds or download data
2036         * src/gpodder/opml.py: Add support for sending the User-agent header
2037         * src/gpodder/services.py: Make the progress column a float column to
2038         have smoother progress indicuation; add the "acquired" keyword
2039         argument to s_release(); default 'speed' to a translated "Queued"
2040         * src/gpodder/libwget.py: Removed
2041         * doc/dev/redhat-wget-output.txt: Removed
2043 Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
2044 Refreshed pot files and po templates; updated German translation
2046         * data/messages.pot: Refreshed from current source
2047         * data/po/de.po: Refreshed and updated translation
2048         * data/po/*.po: Refreshed from new .pot file
2050 Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
2051 Imported updated translations from Rosetta (Launchpad.net)
2053         * data/po/it.po: Italian translation updated by FFranci72
2054         * data/po/nl.po: Dutch translation updated by Roel Groeneveld
2055         * data/po/pt.po: Portuguese translation updated by Joel Calado
2057 Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
2058 Offline support for feedcache, faster startup, code simplification
2060         * src/gpodder/cache.py: Add support for "offline" keyword argument
2061         * src/gpodder/gui.py: Make intelligent use of "offline" keyword
2062         argument when passed to load_channels(); simplify code for selecting
2063         the active channel in updateComboBox()
2064         * src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
2065         argument in all relevant function calls
2067 Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
2068 New LocalDB using DOM (removes python-xml dependency); channel context menu
2070         * bin/gpodder: Don't check for xml.sax package and modules anymore, as
2071         the dependency on python-xml has been removed with this release
2072         * data/gpodder.glade: Remove the "info" button for the current channel
2073         * src/gpodder/gui.py: Remove localdb-related code and adopt code for
2074         new LocalDB code; add context menu to channel navigator (edit/delete)
2075         * src/gpodder/libipodsync.py: Don't import "liblocaldb" module
2076         * src/gpodder/liblocaldb.py: Removed
2077         * src/gpodder/liblocdbreader.py: Removed
2078         * src/gpodder/liblocdbwriter.py: Removed
2079         * src/gpodder/liblogger.py: Add "traceback" keyword argument to the
2080         log() function; if "True" and in debugging mode, print traceback
2081         * src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
2082         liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
2083         LocalDBReader; customize podcastChannel to new LocalDB code
2084         * src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)
2086 Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
2087 Fix a bug when traversing directories with loop symlinks
2089         * src/gpodder/util.py: Don't dive into subdirectories that are
2090         symbolic links, this is to avoid a situation where looping symlinks
2091         result in the function dead-locking in a endless recursive loop,
2092         thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
2093         out and providing the necessary bug report to fix this issue
2095 Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
2096 Mark episodes as downloaded/deleted when deleting episodes
2098         * src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
2099         as deleted" and mark episodes as downloaded when removing selected
2100         episodes that have not been downloaded yet, as suggested by Holger
2101         Leskien <holger leskien.com>
2102         * src/gpodder/libpodcasts.py: Fix problem when trying to delete
2103         episodes that have not been downloaded
2105 Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
2106 Support for customized file names in MP3 player sync code
2108         * src/gpodder/gui.py: Add supporting code for reading/setting
2109         configuration options for the preferences dialog and a help display
2110         code that displays a guide on how to write custom sync name strings
2111         * src/gpodder/libgpodder.py: New configuration options:
2112         custom_sync_name (holds format string) and
2113         custom_sync_name_enabled (boolean, if the above string should be used)
2114         * src/gpodder/libipodsync.py: Use custom sync name format string and
2115         util's object_string_formatter() function to obtain a file name for
2116         the synchronized episode (or default to episode.title if disabled)
2117         * src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
2118         basename (returns the basename of the URL, without extension) and
2119         published (returns the pubDate of the episode in YYYYMMDD format)
2120         * src/gpodder/util.py: New object_string_formatter() method that
2121         replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
2122         corresponding values of passed-in keyword argument objects
2123         * data/gpodder.glade: Added preferences GUI elements
2125 Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
2126 Check for installed python-xml package on startup (hard dependency)
2128         * bin/gpodder: Add dependency check for PyXML
2130 Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
2131 Fix bug with default window title in gPodder window
2133         * src/gpodder/gui.py: Always set gPodder's default_title attribute
2135 Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
2136 Updated Russian translation from Vladimir Zemlyakov
2138         * data/po/ru.po: Updated
2140 Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
2141 More sanitizing hacks for ugly feeds we don't really like
2143         * src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
2144         multiple enclosures, if there are more than one available; skip
2145         episodes with a buggy download URL (i.e. no supported URL scheme)
2146         * src/gpodder/util.py: Return "(unknown)" if file size cannot be
2147         determined from the string passed to format_filesize(); return "None"
2148         in file_type_by_extension() if the extension is an empty string
2150 Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
2151 Handle enclosures (or lack thereof) better if fields are missing
2153         * src/gpodder/gui.py: Remove refetch_channel_list() function, as this
2154         is not called anywhere from the code (uh, how did i miss that?)
2155         * src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
2156         without length or mime type; ignore episodes without enclosures (it's
2157         not len(enclosures) == 0, but the enclosures attribute doesn't even
2158         exist on entries without enclosures, so make sure to check for that
2160 Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
2161 Use Python's webbrowser module for URL opening; channel dialog clean-up
2163         * bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
2164         * data/gpodder.glade: Remove "cancel" button from gPodderChannel
2165         * src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
2166         of relying on "gnome-open" to be available; remove event handler for
2167         gPodderChannel's "cancel" button
2169 Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
2170 Dependency check for python-feedparser in bin/gpodder
2172         * bin/gpodder: Add dependency check and warning (with exit) if
2173         python-feedparser is not installed, as python-feedparser now is a
2174         dependency of gPodder
2176 Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
2177 Support for modifying DownloadHistory and PlaybackHistory in GUI
2179         * data/gpodder.glade: Added menu items in gPodder main window
2180         * src/gpodder/gui.py: Add menu items to treeAvailable's context menu
2181         to toggle/set downloaded and played status on selected episodes
2182         * src/gpodder/libgpodder.py: Add del_item() function to
2183         DownloadHistory to support removing items from the history list;
2184         enhance history_mark_{played,downloaded}() functions for add/delete
2186 Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
2187 Improved pubDate parsing; episode delete bugfix
2189         * src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
2190         of episodes and use new function in gpodder.util to convert the parsed
2191         pubDate to a string; bugfix for remove downloaded episode by URL
2192         * src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
2193         converts the "updated_parsed" field from feedparser to a RFC2822
2194         string
2196 Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
2197 Remove obsolete documentation in doc/dev; cosmetic changes
2199         * data/po/Makefile: Upgrade to GPLv3
2200         * data/po/README: Mention i18n page on gPodder's website
2201         * doc/dev/build-deps-breezy.txt: Removed
2202         * doc/dev/debian.txt: Removed
2203         * doc/dev/i18n.txt: Removed
2204         * doc/dev/porting.txt: Removed
2205         * doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
2206         files
2208 Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
2209 Upgrade to the GNU General Public License, Version 3
2211         * bin/gpodder: Upgrade to GPLv3
2212         * COPYING: Upgrade to GPLv3
2213         * doc/dev/copyright_notice: Upgrade to GPLv3
2214         * Makefile: Upgrade to GPLv3
2215         * README: Upgrade to GPLv3
2216         * setup.py: Upgrade to GPLv3
2217         * src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
2218         cache, as these are LGPL or other and do not originate from gPodder)
2220 Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
2221 Integration changes, commit and ChangeLog migration
2223         * doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
2224         * Makefile: Make $EDITOR edit "ChangeLog" directly
2226 Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
2227 Last batch of experimental change merges (up to svn r398)
2229         * doc/dev/tepache-howto.txt: Removed
2230         * doc/dev/tepache: Removed
2231         * src/gpodder/gui.py.orig: Removed
2232         * src/gpodder/libwget.py: Send progress = 0.0 on inital status update
2233         * src/gpodder/libpodcasts.py: Try to get episode metadata from several
2234         different properties of the corresponding feedparser entries; warn
2235         user when we couldn't get the episode title and try to get the episode
2236         title from the filename of the URL if we still have not found an
2237         episode title
2238         * src/gpodder/libgpodder.py: Add get_device_name() that returns a
2239         "nice" representative string of the currently selected device that can
2240         be used to represent the device in the GUI
2241         * src/gpodder/util.py: Return "(unknown)" string when bytesize in
2242         format_filesize() when the size has a negative value; make
2243         get_tree_icon() catch errors and be more corrent with icon creation;
2244         add get_first_line() function that extracts the first line of a string
2245         * src/gpodder/libipodsync.py: Add "divx" to list of video extensions
2246         * src/gpodder/services.py: DownloadStatusManager has a new observer
2247         notification: "progress-detail"; add unregister() functionality for
2248         observers; add request_progress_detail() function that can be used to
2249         force a "progress-detail" notification to be sent out to all relevant
2250         observers; remove get_url_by_iter() function as it is not needed
2251         anymore
2252         * src/gpodder/gui.py: Clean-up after tepache dependency removal; new
2253         GladeWidget base class that subclasses SimpleGladeApp and simplifies
2254         class creation for our gPodder windows; add context menu to
2255         treeAvailable; re-work play_or_download() and make it return a list of
2256         boolean indicators on which actions can be performed on the selected
2257         items; move show_message() and show_confirmation() to GladeWidget;
2258         disable editing of the URL in the channel info dialog, this simplifies
2259         code and editing the URL doesn't make so much sense anyway (adding the
2260         new url and removing the old does the same and is easier, code-wise);
2261         add support for cancelling downloads in the available podcasts view;
2262         support live status view and download cancelling in the gPodderEpisode
2263         dialog window by hooking up to DownloadStatusManager as observer
2264         * src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
2265         of weakref for keyword arguments -> properties of new object)
2266         * bin/gpodder: We're using a experimental development version now
2267         * data/gpodder.glade: Add progress bar and associated buttons to
2268         gPodderEpisode dialog
2269         * MANIFEST.in: Removed gpodder.py.orig inclusion
2270         * Makefile: Removed support for tepache
2272 Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
2273 More changes from the experimental branch (up to svn r382)
2275         * src/gpodder/liblocdbreader.py: Clean-up
2276         * src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
2277         a generic download status manager as constructor parameter; remove
2278         downloadStatusManager class (moved to gpodder.services)
2279         * src/gpodder/console.py: More clean-ups; use get_new_episodes()
2280         instead of duplicating code here; simplify the code for wget version
2281         detection
2282         * src/gpodder/libpodcasts.py: Improve channel/episode generation from
2283         feedparser objects (with error handling); utilize download status
2284         manager from "gpodder.services" instead of accepting a download status
2285         manager as parameter; clean up unneeded functions and rename some
2286         functions to make the code more readable; use util.get_tree_icon() for
2287         compositing a nice icon; remove the "played" column from the
2288         treemodel; add local_filename to treemodel
2289         * src/gpodder/liblocdbwriter.py: Clean-up
2290         * src/gpodder/libgpodder.py: Clean-up
2291         * src/gpodder/util.py: Add torrent_filename() function that tries to 
2292         extract the filename of the file a .torrent file contains; add
2293         file_extension_from_url() function that returns the file extension in
2294         a URL; add file_type_by_extension() that returns the type of a file
2295         based on its extension; add get_tree_icon() that loads a named icon
2296         and optionally adds a bullet to it (unplayed status indicator)
2297         * src/gpodder/libipodsync.py: Clean-up
2298         * src/gpodder/services.py: New module that currently contains the
2299         improved DownloadStatusManager and a single object that servces as
2300         download status manager for all parts of gpodder
2301         * src/gpodder/gui.py: Only one column for status/played; use
2302         "gpodder.services" for the download status manager; clean-up
2303         * src/gpodder/liblocaldb.py: Clean-up
2304         * bin/gpodder: Clean-up
2305         * data/gpodder.glade: Clean-up; removed "show played column"
2306         preference in gPodderProperties dialog
2308 Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
2309 First import from experimental branch (up to svn r375)
2311         * src/gpodder/librssreader.py: Removed in favor of python-feedparser
2312         * src/gpodder/libwget.py: Percentage is now a float, don't set to 0
2313         when there has been an error
2314         * src/gpodder/console.py: Use {load,save}_channels methods; code
2315         cleanup and simplification
2316         * src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
2317         * src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
2318         and RSS reading; use shelve for new ChannelSettings class; clean-up
2319         podcastChannel and podcastItem; better TreeModel generator for
2320         podcastChannel (try to cache the model, only updates icons, etc...);
2321         remove downloadRss method in podcastChannel; move DownloadHistory and
2322         Playbackhistory to libgpodder; new load_channels() and save_channels()
2323         functions to save/load the channel list to an OPML file
2324         * src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
2325         and gPodderChannelReader (this is now in libpodcasts as simple
2326         functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
2327         * src/gpodder/gui.py: Use new functions for channel list
2328         loading/saving; only update treemodel for treeAvailable when it's
2329         really necessary
2330         * src/gpodder/liblocaldb.py: Remove unnecessary functions that have
2331         not been used for a while (treemodel-related); use load_channels()
2332         instead of gPodderChannelReader
2335 Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
2336         * ChangeLog: Older changes can be found on the gPodder website at
2337         http://gpodder.berlios.de/releases/0.9.5/ChangeLog