Sat, 14 Jun 2008 15:16:09 +0200 <thp@perli.net>
[gpodder.git] / ChangeLog
blob910fdd91bf04c7383b30fc1225850399543046f2
1 Sat, 14 Jun 2008 15:16:09 +0200 <thp@perli.net>
2 Detect HTML and OPML content when adding a podcast subscription
4         * src/gpodder/gui.py: Detect HTML and OPML content when adding a
5         podcast feed that is not parseable by feedparser; when the content
6         suggests the file is an OPML file, open the OPML dialog, when it looks
7         like an HTML file, ask the user if she wants to browse the content
8         with the web browser and look for a suitable XML/feed URL
9         (This fixes the first suggestion in the May 2008 Usability Evaluation)
11 Fri, 13 Jun 2008 21:32:57 +0200 <thp@perli.net>
12 Automatically download channel cover file; improve channel cover handling
14         * data/gpodder.glade: Simplify and clean-up the podcast editor dialog,
15         especially with respect to the cover art stuff
16         * src/gpodder/config.py: Add configuration option
17         "podcast_list_icon_size" that determines the pixel size of the cover
18         art displayed in the podcast list
19         * src/gpodder/gui.py: Add cover cache, register with the cover
20         downloader service in the main window, handle messages from the cover
21         downloader (removed and download finished); request covers for
22         channels when refreshing the channel list; make sure drag'n'drop of
23         image files to the channel list works directly and sets the
24         corresponding channel cover; Rework cover download handling and add an
25         open dialog as suggested by the May 2008 Usability Evaluation
26         * src/gpodder/libgpodder.py: Remove old, attic image downloading code
27         from gPodderLib, because it now has its own service class
28         * src/gpodder/libpodcasts.py: Remove unneeded get_cover_pixbuf helper
29         function for podcastChannel; improve channels_to_model to take
30         advantage of the new cover downloader service
31         * src/gpodder/services.py: Add CoverDownloader service that acts as a
32         central hub for all downloading and modifying of channel cover art,
33         including notification of observers (through ObservableService)
34         * src/gpodder/util.py: Add resize_pixbuf_keep_ratio helper function to
35         resize a gtk pixbuf while keeping the aspect radio (with optional
36         caching support through a dictionary parameter)
37         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=88)
39 Fri, 13 Jun 2008 20:10:13 +0200 <thp@perli.net>
40 Fix a bug in the experimental file naming support
42         * src/gpodder/util.py: Fix bug that stopped the experimental file
43         naming patch from working; thanks to Shane Donohoe for reporting
45 Fri, 13 Jun 2008 16:08:16 +0200 <thp@perli.net>
46 Merge patch to add experimental support for "normal" file naming
48         * src/gpodder/config.py: New option "experimental_file_naming" that
49         defaults to False and enables the new (but experimental!) normal file
50         naming mode in which the downloaded podcast episodes get their name
51         not from the md5sum of the download URL, but from the basename of the
52         download URL, which makes filenames more human-readable
53         * src/gpodder/libpodcasts.py: Change local_filename() in podcastItem
54         to decide if we use md5sums or the "new" file naming mode for creating
55         the local file name of an episode
56         * src/gpodder/sync.py: Change usage of the "encoding" detection in
57         gpodder.util (from detect_os_encoding() to simply encoding)
58         * src/gpodder/util.py: Only detect the filename encoding once (at
59         program start) and then make it accessible via a global "encoding"
60         variable in the gpodder.util module; add improvements to
61         file_extension_from_url() to be able to return the complete filename
62         and to support more creative URL schemes as implemented by podcast
63         feed authors (this hopefully makes more feeds work in a proper way)
64         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=57)
66 Fri, 13 Jun 2008 14:27:30 +0200 <thp@perli.net>
67 Merge patch from Justin Forest to speed up pubDate detection
69         * src/gpodder/gui.py: Add Justin Forest to the list of contributors
70         and make sure we clear the pubDate cache in the channel when changing
71         episode downloaded status manually
72         * src/gpodder/libpodcasts.py: Merge patch from Justin Forest to speed
73         up the newest_pubdate_downloaded() function by caching its value
74         instead of re-calculating it on every call
75         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=124)
77 Fri, 13 Jun 2008 09:37:45 +0200 <thp@perli.net>
78 Merge patch from Nick to add support for deleting played files on sync
80         * data/gpodder.glade: Add check button for "Delete episodes on device
81         that have been marked played in gPodder"
82         * src/gpodder/config.py: Add two new config options:
83         "mp3_player_delete_played" and "mp3_player_max_filename_length"
84         * src/gpodder/gui.py: 
85         * src/gpodder/libpodcasts.py: Add "is_deleted()" convenience function
86         for a podcast episode
87         * src/gpodder/sync.py: Clean-up and simplify parts of the code to make
88         it better-structured and avoid code duplication; use the configuration
89         variable for the MAX_FILENAME_LENGTH instead of hard-coding it to 100
90         * src/gpodder/util.py: Split sanitize_filename() into two functions,
91         detect_os_encoding() and sanitize_filename() for better code re-use
92         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=56; code written by
93         Nick (nikosapi) and initial idea by Shane Donohoe, see the bug page)
95 Sun, 08 Jun 2008 20:08:58 +0200 <thp@perli.net>
96 Patch from Jérôme Chabod to fix "minimize on start" bug (#123)
98         * src/gpodder/gui.py: Patch from Jérôme Chabod to fix "minimize on
99         start" bug by moving the minimizing code after the "show window" code
100         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=123)
102 Sun, 08 Jun 2008 20:06:51 +0200 <thp@perli.net>
103 Updated Portuguese translation by João Paulo Pinto Trindade
105         * data/po/pt.po: Updated PT translation by João Paulo Pinto Trindade
107 Thu, 05 Jun 2008 18:16:05 +0200 <thp@perli.net>
108 Improve/fix podcast list tooltips as suggested by the Usability Test
110         * src/gpodder/gui.py: Restructure and redesign the podcast list
111         according to the suggestions in the Usability Test
112         * src/gpodder/libpodcasts.py: Add helping code for the new tooltips
114 Thu, 05 Jun 2008 18:12:20 +0200 <thp@perli.net>
115 New (optional) dependency: PIL (for Rockbox Cover Art)
117         * README: Mention PIL as dependency for Rockbox Cover Art
119 Thu, 05 Jun 2008 18:10:11 +0200 <thp@perli.net>
120 Merge Support for Rockbox Cover Art patch (by David Spreen and Nick)
121         * src/gpodder/config.py: Add configuration options for rockbox cover
122         art, thanks to Nick for providing the patch and integration
123         * src/gpodder/gui.py: Add David Spreen to the list of contributors
124         * src/gpodder/sync.py: Merge patch from David Spreen and Nick to
125         support Rockbox cover art synchronization
127 Sun, 01 Jun 2008 10:17:32 +0200 <thp@perli.net>
128 Merge back changes from the 0.11.3 release branch into trunk
130         * bin/gpodder: Updated for 0.11.3+svn
131         * data/messages.pot: Merged from 0.11.3 release branch
132         * data/po/*.po: Merged from 0.11.3 release branch
133         * doc/man/gpodder.1: Merged from 0.11.3 release branch
134         * README: Merged from 0.11.3 release branch
136 Sun, 25 May 2008 17:17:10 +0200 <thp@perli.net>
137 Fix problem with BitTorrent preferences
139         * src/gpodder/gui.py: Merge bugfix patch by Nick (nikosapi) to make
140         the BitTorrent preferences work correctly
142 Sun, 25 May 2008 17:10:36 +0200 <thp@perli.net>
143 Updated Spanish and Swedish translations
145         * data/po/es.po: Updated Spanish translation by Marcos Hernández
146         * data/po/sv.po: Updated Swedish translation by Anders Kvist
147         * src/gpodder/gui.py: Add Marcos Hernández to list of contributors,
148         because he did the updated Spanish translation
150 Fri, 23 May 2008 21:39:32 +0200 <thp@perli.net>
151 Updated French translation by Jérôme Chabod
153         * data/po/fr.po: Updated French translation by Jérôme Chabod
155 Mon, 19 May 2008 15:12:41 +0200 <thp@perli.net>
156 Updated translations before the release stabilization phase
158         * data/messages.pot: Updated from source
159         * data/po/*.po: Updated from messages.pot
161 Fri, 16 May 2008 10:02:23 +0200 <thp@perli.net>
162 Add option to not hide channel cover and pill when the sidebar gets smaller
164         * src/gpodder/config.py: Add "podcast_sidebar_save_space" option
165         * src/gpodder/gui.py: Don't hide the channel cover and pill in the
166         podcast list when the sidebar gets smaller; idea by Shane Donohoe
168 Wed, 14 May 2008 15:34:25 +0200 <thp@perli.net>
169 Download start performance improvements; fix podcast list handling
171         * data/gpodder.glade: Convert the gPodderAddPodcastDialog from a
172         GtkWindow to a real GtkDialog to make Escape key work and set the URL
173         entry box to activate the "Add" button when Enter is pressed in it
174         * src/gpodder/gui.py: Fix podcast selection in updateComboBox, so the
175         currect podcast is selected when removing/adding podcasts; allow to
176         pass a URL which should be selected after the update; use
177         DownloadStatusManager's new batch mode to speed up starting many
178         downloads at once (very visible speed improvement); adding podcasts
179         has also been improved a bit with the new code
180         * src/gpodder/services.py: Support batch mode (i.e. only notify after
181         all episodes have been added to th download list); this speeds up the
182         UI when multiple episodes are downloaded at once
184 Wed, 14 May 2008 11:59:20 +0200 <thp@perli.net>
185 Updated Russian translation by Vladimir Zemlyakov
187         * data/po/ru.po: Updated Russian translation by Vladimir Zemlyakov
189 Mon, 12 May 2008 11:38:55 +0200 <thp@perli.net>
190 Fix a crasher with ExpatError when trying to parse an invalid itms:// URL
192         * src/gpodder/gui.py: Give an error message when adding a channel that
193         doesn't result in a valid URL being returned
194         * src/gpodder/util.py: Improve handling of itms:// URLs that are not
195         valid iTunes Podcast links, so they don't crash; thanks to Ralph on
196         Launchpad for reporting this bug
197         (Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/214113)
199 Mon, 12 May 2008 11:26:43 +0200 <thp@perli.net>
200 Fix race condition in is_download_in_progress()
202         * src/gpodder/services.py: Make sure we behave correctly when items in
203         the download list disappear while we are iterating over the list of
204         downloads when trying to find out if a download is already in progress
205         * src/gpodder/gui.py: Add SPGoetze to list of bug reporters
206         (Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/208964)
208 Mon, 12 May 2008 11:04:53 +0200 <thp@perli.net>
209 Fix bugs in the calculate_size utility function
211         * src/gpodder/util.py: Fix problem when accessing files or folders is
212         not possible in calculate_size(); thanks to Scott Wegner for reporting
213         this bug on Launchpad
214         * src/gpodder/gui.py: Add Scott Wegner to list of bug reporters
215         (Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/201276)
217 Sun, 11 May 2008 15:00:07 +0200 <thp@perli.net>
218 Update German translation, refresh translations
220         * data/messages.pot: Refreshed from source code
221         * data/po/*.po: Refreshed from messages.pot
222         * data/po/de.po: Refreshed and updated
224 Sat, 10 May 2008 16:45:36 +0200 <thp@perli.net>
225 Make gPodder respect the user's GNOME toolbar style settings
227         * src/gpodder/gui.py: Add Stefan Lohmaier to list of bug reporters
228         * data/gpodder.glade: Remove the preset toolbar style (use user's
229         configured toolbar style) and set the episode-related toolbar buttons
230         to be "important" (so the text is displayed in the mixed mode); thanks
231         to Stefan Lohmaier on gPodder Bugzilla for reporting this bug
232         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=105)
234 Sat, 10 May 2008 13:38:34 +0200 <thp@perli.net>
235 Improve feed cache update speed, thanks to the users at ITT
237         * src/gpodder/cache.py: fetch() now returns an (updated, feed) tuple,
238         where "updated" is a boolean value telling if the feed has been
239         updated since the last run and "feed" is the feedparser feed data; fix
240         a bug where the etag and the last-modified time were never used in a
241         conditional download of not-changed feeds (my fault ;)
242         * src/gpodder/console.py: Sync the feed cache to disk after adding a
243         new podcast to the subscription list
244         * src/gpodder/gui.py: Pass the list of old channels to the
245         load_channels() function call, so we can save some CPU cycles when the
246         feed has not changed and we are allowed to re-use the old, parsed one
247         * src/gpodder/libpodcasts.py: Don't auto-sync the feed cache when
248         getting the podcastChannel for a feed; add podcastChannel.sync_cache()
249         function that saves the feed cache to disk; make it possible to pass a
250         list of old channels to load_channels() and use the old channel
251         objects in case the new one hasn't changed since the last run
252         (see http://www.internettablettalk.com/forums/showpost.php?p=179261&postcount=62)
254 Sat, 10 May 2008 13:33:49 +0200 <thp@perli.net>
255 Fix problem on Maemo when window open sound occurs twice on start
257         * data/gpodder.glade: Don't show gPodder main window initially
258         * src/gpodder/gui.py: Show gPodder main window only after the UI
259         elements have been set up (on Desktop) and don't destroy old main
260         window after re-parenting the vbox to the hildonized window (on Maemo)
262 Sat, 10 May 2008 13:24:19 +0200 <thp@perli.net>
263 Don't change the menu item text for subscription remove and edit
265         * src/gpodder/gui.py: Don't change the text of the subscription menu
266         items when changing the active channel
268 Sat, 10 May 2008 12:37:06 +0200 <thp@perli.net>
269 Show correct icon on Maemo for gPodder
271         * data/maemo/gpodder.desktop: Add Portuguese translation to Maemo's
272         .desktop file; add StartupWMClass=gpodder to the .desktop file for
273         Maemo, so the window manager on Maemo shows the correct icon when
274         gPodder is running instead of the "generic" application icon
276 Mon, 05 May 2008 15:55:02 +0200 <thp@perli.net>
277 Add bug reporter for previous bug to list of contributors
279         * src/gpodder/gui.py: Add Jerry Moss to list of bug reporters
281 Mon, 05 May 2008 15:52:49 +0200 <thp@perli.net>
282 Make sure we have a valid channel on which to call get_new_episodes()
284         * src/gpodder/gui.py: Refactor on_btnDownloadNewer_clicked into the
285         single calling code and remove the callback; this should really fix
286         the problem described in LP bug 217113
287         (Closes: https://bugs.launchpad.net/ubuntu/+source/gpodder/+bug/217113)
289 Fri, 02 May 2008 17:42:54 +0200 <thp@perli.net>
290 Maemo-related changes; allow custom player on Maemo (optional)
292         * data/gpodder.glade: gPodder maemo preferences window should be
293         modal; Add "Ask before closing gPodder" checkbox to Maemo preferences
294         * src/gpodder/config.py: Add option "maemo_allow_custom_player" that
295         allows setting the "player" and "videoplayer" variables to a command
296         that will be called, like on the Desktop version (instead of always
297         opening Nokia's Media Player with all files)
298         * src/gpodder/gui.py: Maemo-specific UI tweaks
299         * src/gpodder/libgpodder.py: Only call Nokia's Mediaplayer when we are
300         on Maemo and when "maemo_allow_custom_player" is set to False
302 Fri, 02 May 2008 17:28:22 +0200 <thp@perli.net>
303 Change "Channel" to "Podcast"; new main menu; URL entry updated; +niceties
305         * data/gpodder.glade: Change "Channel" to "Podcast"; re-structure main
306         menu in gPodder window
307         * src/gpodder/config.py: Add "show_podcast_url_entry" configuration
308         option that controls whether the podcast url entry box is shown in the
309         main window or not; add observer functionality to the configuration
310         manager, so UI elements can "watch" the configuration manager for
311         changes of UI-related configuration options
312         * src/gpodder/console.py: Change "Channel" to "Podcast"
313         * src/gpodder/gui.py: Hildon-specific file open/save dialogs; default
314         "Enter podcast URL..." test for the URL entry box; size-dependent
315         showing and hiding of podcast icon and downloaded count pixmap also
316         for the Desktop version; change "Channel" to "Podcast"; offer
317         first-time users to see a list of example podcasts to subscribe to;
318         dynamic main menu; code supporting the main menu changes; add code for
319         sending the subscription list via e-mail; import from OPML file in
320         addition to import from OPML URL; remove unneeded callbacks (wishlist,
321         select all, ...); optionally set title and hide url entry in the
322         gPodderOpmlLister (OPML import GUI); Add Frank Harper to list of
323         contributors (initial reporter of bug #82)
324         * src/gpodder/libgpodder.py: Add "send_subscriptions" function that
325         sends the user's channels.opml file via E-Mail (using xdg-email);
326         rename "Channel" to "Podcast"
327         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=82)
328         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=103)
330 Fri, 02 May 2008 15:52:31 +0200 <thp@perli.net>
331 Updated Portuguese translation by João Trindade
333         * data/gpodder.desktop: Updated Portuguese translation
334         * data/po/pt.po: Updated Portuguese translation
335         * src/gpodder/gui.py: Add João Trindade to list of contributors
337 Thu, 01 May 2008 11:20:28 +0200 <thp@perli.net>
338 Fix a spelling mistake in the French translation
340         * data/po/fr.po: Fixed French translation from Jérôme Chabod; thanks
341         to drust for pointing out the spelling mistake
342         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=101)
344 Tue, 29 Apr 2008 20:21:45 +0200 <thp@perli.net>
345 Fix problems with resizing the treeview on Maemo
347         * src/gpodder/gui.py: Fix problems with treeview resizing and remove
348         printing the percentage
349         * bin/gpodder: We're in development again, so "+svn"
351 Sat, 26 Apr 2008 08:34:37 +0200 <thp@perli.net>
352 Merge gPodder 0.11.2 release stuff and German translation update
354         * bin/gpodder: Updated version and release date
355         * data/po/de.po: Updated German translation
356         * data/messages.pot: Updated from source code
357         * data/po/*.po: Updated from messages.pot
358         * doc/man/gpodder.1: Updated manpage for release
359         * README: Updated README for release
361 Thu, 24 Apr 2008 19:40:55 +0200 <thp@perli.net>
362 Maemo-specific dialogs and UI improvements
364         * data/gpodder.glade: Maemo-specific "Add Podcast" dialog and
365         Maemo-specific, stripped-down "Preferences" dialog added
366         * src/gpodder/gui.py: Hide channel add UI from main window; make label
367         for update button even shorter; hide cover and pill cells in the
368         channel list if it gets too small; Maemo-specific dialogs for both
369         adding channels and editing preferences
371 Thu, 24 Apr 2008 18:19:02 +0200 <thp@perli.net>
372 Maemo finger-friendly updates; minor UI changes
374         * data/gpodder.glade: Ellipsize the feed update progressbar in the
375         middle instead of the end (to show progress)
376         * src/gpodder/gui.py: Add support for finger-friendly widget (buttons,
377         scroll areas, popup menus, etc..); text is "Loading [...]" when
378         loading feed cache and "Updating [...]" when updating feeds; on Maemo,
379         don't set the tab title to the current episode title; hide the heading
380         in gPodderEpisodeSelector on Maemo (to save screen space); add
381         finger_friendly_widgets class attribute to several gPodder windows;
382         make the tabs in the main window a bit taller, but remove the border
383         around the main window to gain some space on the screen
385 Thu, 24 Apr 2008 15:48:58 +0200 <thp@perli.net>
386 Updated Swedish translation by Anders Kvist
388         * data/po/sv.po: Updated Swedish translation by Anders Kvist
390 Wed, 23 Apr 2008 22:31:42 +0200 <thp@perli.net>
391 Merge patch from Junio C Hamano to fix problems with zero-length in feeds
393         * src/gpodder/gui.py: Update list of contributors/patch writers
394         * src/gpodder/services.py: Patch from Junio C Hamano to fix a problem
395         when a feed has zero length, which would otherwise result in a
396         divide-by-zero error
398 Tue, 22 Apr 2008 21:57:31 +0200 <thp@perli.net>
399 Typo from previous commit
401         * src/gpodder/libpodcasts.py: Fix typo
403 Tue, 22 Apr 2008 21:54:01 +0200 <thp@perli.net>
404 Diverse changes, code clean-ups and other small annoyances
406         * src/gpodder/config.py: Make sure we can load a default set of
407         configuration options, even if we are in CLI mode
408         * src/gpodder/download.py: Don't display a traceback when logging a
409         cancelled download
410         * src/gpodder/gui.py: Add Doug Hellmann to contributors/coders list in
411         the about dialog (Doug Hellmann has done the feed cache code); do not
412         center the gPodderEpisode dialog on the treeAvailable widget (this
413         looks ugly ;)
414         * src/gpodder/libpodcasts.py: Clean up import statements; Make sure we
415         always have icon names, even in CLI mode; Remove "is_music_channel"
416         property of podcastChannel (not needed anymore); 
418 Tue, 22 Apr 2008 21:15:40 +0200 <thp@perli.net>
419 Python code fixup: Compare "None" with "is not" instead of "!="
421         * src/gpodder/config.py: "!= None" => "is not None"
422         * src/gpodder/download.py: "!= None" => "is not None"
423         * src/gpodder/gui.py: "!= None" => "is not None"
424         * src/gpodder/libconverter.py: "!= None" => "is not None"
425         * src/gpodder/libgpodder.py: "!= None" => "is not None"
426         * src/gpodder/libpodcasts.py: "!= None" => "is not None"
427         * src/gpodder/services.py: "!= None" => "is not None"
428         * src/gpodder/util.py: "!= None" => "is not None"
430 Tue, 22 Apr 2008 20:30:28 +0200 <thp@perli.net>
431 Non-modal feed cache updates
433         * data/gpodder.glade: Feed cache update UI changes
434         * src/gpodder/gui.py: Fix problem with maemo window showing all
435         widgets on start; feed cache update changes; update list of
436         contributor (bug reporter for the cancel/skip button feature request
437         * src/gpodder/libpodcasts.py: Support cancelling a running feed cache
438         update by switching to offline mode when the cancel button is pressed
439         in load_channels(); idea by Paul Elliot, Pieter De Decker, Jürgen
440         Schinker and others, see the bug report page for more information
441         (Partly fixes: http://bugs.gpodder.org/show_bug.cgi?id=16)
443 Sat, 19 Apr 2008 20:16:11 +0200 <thp@perli.net>
444 Better tray icon menu item on Maemo-based platforms
446         * src/gpodder/trayicon.py: Better tray icon integration (show/hide
447         gPodder via tray icon) on Maemo
449 Sat, 19 Apr 2008 18:46:30 +0200 <thp@perli.net>
450 Additional fields for the device remove episodes dialog; refactoring
452         * src/gpodder/gui.py: Add "Podcast" and "Released" columns to the
453         episode selector; hide all columns in our "delete from device" episode
454         selector that have all rows set to "None"; make the first text column
455         of the gPodderEpisodeSelector bigger, so the episode selector is
456         easier to read when there are many columns
457         * src/gpodder/libpodcasts.py: Use util.format_date() for
458         cute_pubdate() in podcastItem
459         * src/gpodder/sync.py: Document SyncTrack a bit better, add
460         needed/possible keyword arguments that are used in the UI; default
461         some values to None in case they are not provided; get "released" date
462         from iPod's iTunesDB and get podcast name from MP3 player's sync
463         folder (if this feature has been activated)
464         * src/gpodder/util.py: Add format_date() function that converts a Unix
465         timestamp to a good representation for a date (either Today,
466         Yesterday, a weekday or the locale's appropriate representation); the
467         code has been re-factored from podcastItem's cute_pubdate() function
468         in gpodder.libpodcasts and is now used from there
470 Thu, 17 Apr 2008 17:54:48 +0200 <thp@perli.net>
471 Calculate total percentage based on byte size instead of percentage
473         * src/gpodder/download.py: Make sure we save the right size of a
474         currently in-progress download of an episode
475         * src/gpodder/services.py: Calculate the total percentage for all
476         episodes based on their file size instead of their percentage done;
477         this is especially important when downloading small files mixed with
478         large files; this makes the estimated download time more reliable;
479         thanks to Jérôme Chabod, who has done this patch
480         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=46)
482 Thu, 17 Apr 2008 17:42:31 +0200 <thp@perli.net>
483 Clean up preferences dialog + Move download settings to downloads tab
485         * data/gpodder.glade: UI-related changes to the preferences dialog
486         clean-up and the moving of the download settings to the downloads tab;
487         thanks to Paul Rudking for the download settings to downloads tab
488         patch
489         * src/gpodder/download.py: Better rate limiting, implemented by Paul
490         Rudkin
491         * src/gpodder/gui.py: UI-related changes to the preferences dialog
492         clean-up; the download settings changes are by Paul Rudkin
493         * src/gpodder/services.py: Improve the waiting/locking for the maximum
494         number of simultaneous downloads using a threading.Event
495         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=69)
496         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=83)
498 Tue, 15 Apr 2008 21:01:19 +0200 <thp@perli.net>
499 Updated French translation by Jérôme Chabod
501         * data/po/fr.po: Updated French translation by Jérôme Chabod
503 Tue, 15 Apr 2008 20:57:51 +0200 <thp@perli.net>
504 Merge patch from Jérôme Chabod to really pimp the tray icon tooltip :)
506         * src/gpodder/gui.py: Add some error reporting and change the code a
507         bit to support the new tooltips; thanks to Jérôme Chabod
508         * src/gpodder/trayicon.py: Add support for more elaborate tray icon
509         tooltips; patch by Jérôme Chabod
510         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=97)
512 Mon, 14 Apr 2008 13:51:23 +0200 <thp@perli.net>
513 Add bug reporter to list of contributors
515         * src/gpodder/gui.py: Bug #95 was reported by Tomas Matheson, so add
516         him to the list of contributors
518 Mon, 14 Apr 2008 13:45:34 +0200 <thp@perli.net>
519 Set Close and cancel buttons to the default on most dialogs
521         * data/gpodder.glade: Apply patch from Jerome Chabod that sets the
522         close and cancel buttons on most dialogs of gPodder to the default and
523         give them focus; this makes keyboard navigation possible and should
524         make it easier for keyboard fans to use gPodder UI :) This partially
525         fixes bug #95, but there are still some things to do for this bug.
527 Mon, 14 Apr 2008 13:40:32 +0200 <thp@perli.net>
528 Merge patch from Jerome Chabod to fix Remove podcasts for MP3 players
530         * src/gpodder/gui.py: Add warning message when we can't find a needed
531         attribute; add "Philippe Gouaillier" to list of contributors (bug
532         reporter for this bug)
533         * src/gpodder/sync.py: Add playcount attribute to MP3 player sync code
534         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=96)
536 Mon, 14 Apr 2008 13:37:03 +0200 <thp@perli.net>
537 Updated Russian translation by Leonid Ponomarev
539         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
541 Mon, 14 Apr 2008 13:33:44 +0200 <thp@perli.net>
542 Merge patch from Jerome Chabod to fix tray icon freeze (bug #55)
544         * src/gpodder/trayicon.py: Merge patch from Jerome Chabod to fix the
545         problem with the tray icon actions reported in bug #55; this is
546         basically attachment #33 with some cosmetic fixes
547         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)
549 Sun, 13 Apr 2008 22:27:28 +0200 <thp@perli.net>
550 Updating message files from source code for 0.11.2 freeze
552         * data/messages.pot: Updated from source code
553         * data/po/*.po: Updated from messages.pot
555 Fri, 11 Apr 2008 10:26:50 +0200 <thp@perli.net>
556 Correct "Close" and "Quit" behaviour
558         * data/gpodder.glade: Add a "Close" menu item to the podcasts menu and
559         rename the quit item to "Quit" (from "Close) to make the interface
560         more consistent and to support both Ctrl+W and Ctrl+Q
561         * src/gpodder/gui.py: Correct "Close" and "Quit" behaviour and make
562         Close be the "minimize to tray" function when the tray icon is
563         enabled; when not enabled, "Close" acts the same way as "Quit" (but is
564         left visible, so the Ctrl+W shortcut also works to close gPodder);
565         thanks to Harley Laue for the suggestion and initial patch
566         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=89)
568 Fri, 11 Apr 2008 10:11:33 +0200 <thp@perli.net>
569 Make RSS .torrent feeds from different Torrent sites work
571         * src/gpodder/libpodcasts.py: If an episode doesn't have an enclosure,
572         but its link looks like it's a media/torrent file, we are going do
573         interpret that as the enclosure URL; this makes feeds from different
574         torrent sites work with gPodder; thanks to Josh Gardner
575         <mellowcellofellow@gmail.com> for reporting this bug on Bugzilla
576         (http://bugs.gpodder.org/show_bug.cgi?id=74)
578 Tue, 08 Apr 2008 10:54:01 +0200 <thp@perli.net>
579 Updated Spanish translation
581         * data/po/es.po: Updated Spanish translation from Julio Acuña
583 Mon, 07 Apr 2008 23:06:53 +0200 <thp@perli.net>
584 Makre sure we can re-set the locale after changing it
586         * src/gpodder/util.py: Make sure we can re-set the locale after
587         changing it, and if we cannot, only print a warning, but don't throw
588         the exception outside of the function
590 Mon, 07 Apr 2008 23:05:05 +0200 <thp@perli.net>
591 Add 64x64 icon for Maemo's main menu and install it
593         * data/icons/64/gpodder.png: Added
594         * setup.py: Install the 64x64 icon in share/icons/hicolor
596 Mon, 07 Apr 2008 11:47:12 +0200 <thp@perli.net>
597 Install "pixmaps" icon on Maemo, too
599         * setup.py: Make sure we also install the "/usr/share/pixmaps/"
600         version of the gPodder icon on Maemo (for the task navigator)
602 Mon, 07 Apr 2008 11:24:54 +0200 <thp@perli.net>
603 Fix problems with the tray icon emblems
605         * src/gpodder/trayicon.py: Fix emblem drawing code for non-square
606         icons; use the "refresh" icon for feed updates and "multimedia-player"
607         icon for the iPod/MP3 player sync status emblem
609 Sun, 06 Apr 2008 17:22:11 +0200 <thp@perli.net>
610 Fix install Makefile bug; add donator; fix treeview header height
612         * Makefile: Add "generators" dependency for the "install" target
613         * src/gpodder/gui.py: Add Mark Alford (donator) to contributors list;
614         remove the hard-coded header height offset for the treeview, because
615         we don't need it anymore, because we hide the header (this is a good
616         thing, because we don't need to rely on a theme-specific header
617         height compared to what we did previously - one FIXME less :)
619 Sun, 06 Apr 2008 02:05:34 +0200 <thp@perli.net>
620 Initial upstream support for the Maemo platform (Nokia Internet Tablets)
622         * bin/gpodder: Add "--maemo/-m" option to enable running as a Maemo
623         application (this is only useful on Nokia Internet Tablets or in the
624         Maemo SDK environment); determine interface type and set the correct
625         variables on startup (gpodder.interface)
626         * data/gpodder.glade: Increase the default size of some widgets to
627         better fit the screens on Maemo (it won't do any harm on the "big"
628         Desktop screen
629         * data/icons/26/gpodder.png: Added
630         * data/icons/40/gpodder.png: Added
631         * data/maemo/gpodder.desktop: Added
632         * Makefile: Help2man variable; new "make mtest" target that runs
633         gPodder in Maemo scratchbox (probably useless for all other things);
634         update the command descriptions; don't run the "generators" target
635         from the "install" target; don't run "gen_graphics" from the
636         "generators" target, but make it depend on the 24-pixel logo, which
637         itself depends on the 22-pixel logo; this way, all should work out
638         well when trying to install on systems without ImageMagick installed;
639         remove *.pyo files on "make clean"
640         * setup.py: Support for build targets; use "TARGET=maemo" to enable
641         Maemo-specific installation options and files
642         * src/gpodder/config.py: Increase the WRITE_TO_DISK_TIMEOUT to 60
643         seconds, so we don't unnecessarily stress memory cards (on ITs);
644         modify default path variables on Maemo (/media/mmc2)
645         * src/gpodder/gui.py: Maemo-specific changes; clean-up the main window
646         a bit and make message and confirmation dialogs Hildon-compatible
647         * src/gpodder/__init__.py: Add enums for interface types: CLI, GUI and
648         MAEMO; remove the "interface_is_gui" variable and replace with
649         "interface", which is now used to determine where we are running
650         * src/gpodder/libgpodder.py: Use /media/mmc2/gpodder/ as configuration
651         folder on Maemo; use Nokia's Media player to playback files on Maemo
652         * src/gpodder/libpodcasts.py: Icon name changes (Maemo-specific)
653         * src/gpodder/trayicon.py: Maemo support; swap popup menu on Maemo;
654         Add support for hildon banners instead of pynotify on Maemo
655         * src/gpodder/util.py: Icon name changes (Maemo-specific); use new
656         gpodder.interface variable in idle_add
658 Sat, 05 Apr 2008 21:06:14 +0200 <thp@perli.net>
659 Make i18n help text work in the console help (gpodder --help)
661         * bin/gpodder: Fix a bug that would make the localized help string of
662         the CLI break; thanks to Pavel Mlcoch <pavkamlc@centrum.cz> for
663         reporting this bug on the gPodder bug tracker
664         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=53)
666 Fri, 04 Apr 2008 09:50:35 +0200 <thp@perli.net>
667 Use the correct multimedia-player icon for the transfer main menu item
669         * data/gpodder.glade: Use the multimedia-player icon for the transfer
670         to device menu item (was still gtk-network, forgot to change)
672 Fri, 04 Apr 2008 09:48:25 +0200 <thp@perli.net>
673 Fix gPodder freeze with open notifications on quit
675         * src/gpodder/trayicon.py: Fix a bug when gPodder would freeze when
676         a notification bubble was still open while closing the main
677         application; thanks to Jérôme Chabod for reporting this issue
678         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=55)
680 Fri, 04 Apr 2008 09:46:23 +0200 <thp@perli.net>
681 Increase filename size limitation from 50 to 100 chars in MP3 player sync
683         * src/gpodder/sync.py: Increase the number at which file names are cut
684         down in length to 100 characters and also cut folder names to that
685         length; thanks to Bernd Schlapsi for reporting this bug on the list
687 Sun, 30 Mar 2008 10:48:41 +0200 <thp@perli.net>
688 Make the Quit buttons actually quit when using the tray icon
690         * src/gpodder/gui.py: Patch from Nick L. to make the function of all
691         "Quit" buttons really quit gPodder and only make the window's "X"
692         button act as "minimize to tray" button; Also, update the credits name
694 Sat, 29 Mar 2008 17:13:26 +0100 <thp@perli.net>
695 Project management updates (authors, contributors and copyright)
697         * AUTHORS: Removed (was outdated); content now in gui.py (AboutDialog)
698         * bin/gpodder, data/po/Makefile, doc/dev/copyright_notice, 
699           doc/dev/win32/setup-win32.py, INSTALL, Makefile, README,
700           setup.py: Updated Copyright and old website URL to include 2008, the
701           gPodder team and www.gpodder.org
702         * src/gpodder/*.py: Updated Copyright years
703         * src/gpodder/gui.py: Add list of contributors from AUTHORS file and
704         from the content on the website's news page (please mail me if I
705         forgot to mention you as a contributor, I surely have missed a few);
706         make the AboutDialog's application name "gPodder" (from gpodder) and
707         add an URL hook function to the AboutDialog, so the website is opened
708         in the user's default web browser
710 Sat, 29 Mar 2008 16:30:02 +0100 <thp@perli.net>
711 Report errors in parsing/loading an already-added channel in the navigator
713         * src/gpodder/gui.py: Show the error from feedparser in the channel's
714         tooltip if there has been an error loading the channel
715         * src/gpodder/libpodcasts.py: Make sure we can load a default title
716         when using get_by_url(); save the parse_error variable for each
717         channel (it defaults to None if there is no error); mark the
718         description text for the channel navigator in red color if there has
719         been a parser error and add the parse_error variable to the liststore
720         model
721         * src/gpodder/util.py: Strip whitespace before and after the string in
722         remove_html_tags()
724 Sat, 29 Mar 2008 16:18:59 +0100 <thp@perli.net>
725 Add support for Rockbox' AudioScrobbler logfile to update played status
727         * src/gpodder/config.py: Add "mp3_player_use_scrobbler_log"
728         configuration option (defaulting to False) which controls if we are
729         going to try and find a ".scrobbler.log" file that contains
730         information on which tracks have been played; for this to work, you
731         also have to enable the "Updated tags after download" option
732         * src/gpodder/sync.py: Support for finding the .scrobbler.log file and
733         updating the played status of episodes in the MP3 player sync code
734         * src/gpodder/util.py: Add "find_mount_point()" function that tries to
735         determine the mount point on which the given directory (or file) lies
736         and returns the mount point or "/" if the directory/file resides on
737         the root filesystem.
739         This whole patch has been contributed by Nick <nikosapi.org> - thanks!
741 Sat, 29 Mar 2008 16:16:06 +0100 <thp@perli.net>
742 Merge sv.po translation from 0.11.1 release tarball
744         * data/po/sv.po: It seems like I somehow messed up the translations
745         merge, so here's the correct sv.po translation file, merged from the
746         0.11.1 tarball; thanks to Anders Kvist <kvistkvist@telia.com> for
747         pointing that out :)
749 Sat, 29 Mar 2008 01:20:46 +0100 <thp@perli.net>
750 Make sure we ignore the updated_parsed of a channel if it's None
752         * src/gpodder/libpodcasts.py: Only try to convert the "updated_parsed"
753         field if it's not "None"
754         * src/gpodder/util.py: Make sure we receive a valid 9-tuple when
755         converting dates from updated_parsed; if we receive a None value or
756         some value that isn't "9" in length, return None
757         Thanks to Chris Arnold <carnold@electrichendrix.com> for reporting
758         this bug on the gpodder-devel mailing list
760 Thu, 27 Mar 2008 13:10:58 +0100 <thp@perli.net>
761 This is trunk, so set version to 0.11.1+svn
763         * bin/gpodder: Set version to 0.11.1+svn
765 Thu, 27 Mar 2008 12:57:56 +0100 <thp@perli.net>
766 gPodder 0.11.1 "Attacked by Killer Tomatoes" released
768         * bin/gpodder: gPodder 0.11.1 released :)
769         * README: gPodder 0.11.1 released :)
770         * doc/man/gpodder.1: gPodder 0.11.1 released :)
771         * data/icons/24/gpodder.png: Updated from the dataset
772         * data/messages.pot: Updated from source
773         * data/po/*.po: Updated from messages.pot
774         * data/po/de.po: Updated German translation
776 Thu, 27 Mar 2008 11:52:35 +0100 <thp@perli.net>
777 Use cPickle for dumbshelve - it's compatible and faster
779         * src/gpodder/dumbshelve.py: Improve saving of channel cache and
780         metadata (and basically all that currently depends on dumbshelve) by
781         using cPickle as a drop-in replacement for pickle
783 Thu, 27 Mar 2008 11:28:31 +0100 <thp@perli.net>
784 Fix problem with pickle when there is a feed parsing exception
786         * src/gpodder/cache.py: When the feedparser returns an exception, this
787         will be stored as object in bozo_exception. Convert this to a string,
788         so the pickle module doesn't complain; thanks to VladDrac in #python
789         on FreeNode for pointing me to the right direction to fix this bug
791 Mon, 24 Mar 2008 10:42:19 +0100 <thp@perli.net>
792 Add "3gp" to the list of video file extensions, so we detect these files
794         * src/gpodder/util.py: Add the .3gp video file extension to the list
795         of known video file extensions, so we can detect that these are video
796         files and act accordingly (in the UI and on sync); thanks to Atte
797         André Jensen for reporting this bug on the gpodder-devel mailing list
799 Sun, 23 Mar 2008 10:39:24 +0100 <thp@perli.net>
800 Fix a bug when loading invalid image data (delete cover file then)
802         * src/gpodder/libgpodder.py: Fix a bug when gPodder is unable to load
803         an invalid cover image (i.e. when dragging a linked image from the
804         browser to the gPodder window, the link is sent, not the image)
806 Sat, 22 Mar 2008 21:08:06 +0100 <thp@perli.net>
807 Make bluetooth device discover a bit nicer
809         * src/gpodder/gui.py: Improve bluetooth device discovery button by not
810         destroying its design when it has been clicked and the label is
811         modified
813 Sat, 22 Mar 2008 20:45:27 +0100 <thp@perli.net>
814 Revert previous insanity (where I selected an awful "Transfer" toolbar icon)
816         * data/gpodder.glade: I wonder why I selected "gtk-network" as the
817         icon for the "Transfer" button on gPodder's toolbar. It surely is
818         irritating and illogical as hell.. Hmm. Anyway - now, there is a nice
819         "multimedia-player" icon which probably depicts an iPod-like device
820         if you use a good icon set. This makes much more sense. Go usability!
822 Sat, 22 Mar 2008 20:41:54 +0100 <thp@perli.net>
823 Add "Visit website" menu items to channel and episode list; simple chan menu
825         * src/gpodder/gui.py: Add "Visit website" menu items to the context
826         menu of both the episode list and the channel navigator; also, make
827         the channel context menu easier to use by replacing the old
828         "Edit [Channelname]" and "Remove [Channelname]" items with stock items
830 Sat, 22 Mar 2008 18:41:30 +0100 <thp@perli.net>
831 Fix "Podcasts not being marked as new when synced to iPod" (#70)
833         * src/gpodder/sync.py: Fix bug when podcasts were not marked as new
834         when synced to iPod and "on_sync_mark_played" was enabled;
835         Bug URL: http://bugs.gpodder.org/show_bug.cgi?id=70
836         Thanks to defrex (defrex0 gmail com) for report this bug in Bugzilla
838 Thu, 20 Mar 2008 11:21:06 +0100 <thp@perli.net>
839 Delay loading of UserAppsReader and improve libplayers
841         * src/gpodder/gui.py: Only load UserAppsReader's database three
842         seconds after gPodder start (because we only need it when the user
843         opens the preferences dialog, and if she opens it before these three
844         seconds, the UserAppsReader data is loaded on demand); because we load
845         the database (and generate the model) before we display the
846         preferences dialog, the preferences dialog usually comes up faster
847         than before (except for the situation where it is opened right after
848         gPodder startup); have only one UserAppsReader for audio/video and not
849         both (would duplicate the amount of work needed to read desktop
850         files); cleanup some UserAppsReader-related code in the prefs dialog
851         * src/gpodder/libplayers.py: Improve the reading code and make it
852         possible to support multiple mime types per-UserAppsReader (i.e. both
853         audio and video types are read by a single UAR instance); clean up the
854         imports for this module and do other related changes to make the code
855         nicer to read and understand
857 Thu, 20 Mar 2008 11:18:51 +0100 <thp@perli.net>
858 Add option to limit the maximum number of episodes per feed
860         * src/gpodder/config.py: Add "max_episodes_per_feed" configuration
861         option (int, defaults to 200) that determines the maximum number of
862         episodes that are parsed per channel/feed; if there are more episodes,
863         they are ignored. This value can be adjusted via the extended
864         configuration editor if you need more episodes
865         * src/gpodder/libpodcasts.py: Add support for the
866         max_episodes_per_feed configuration option above
868 Thu, 20 Mar 2008 11:13:16 +0100 <thp@perli.net>
869 Fix bug with unneeded download directory being created
871         * src/gpodder/libpodcasts.py: Fix bug when an unneeded download
872         directory would be created on every gPodder startup
874 Thu, 20 Mar 2008 11:11:18 +0100 <thp@perli.net>
875 Only serialize DumbShelve to disk when we have changed/deleted items in it
877         * src/gpodder/dumbshelve.py: Add a "__dirty" flag to DumbShelve to
878         know if we have to write the DumbShelve to the disk or if nothing has
879         changed since the last write (and therefore no need to run the
880         time-consuming serialization code again); this speeds up initial
881         loading time and probably also speeds up other parts of the code
883 Thu, 20 Mar 2008 11:09:27 +0100 <thp@perli.net>
884 Timestamp and benchmark functions for logger
886         * src/gpodder/liblogger.py: Add support for timestamping and benchmark
887         functions to liblogger, so we see the microtime since gPodder startup
888         and can also use the logging module to benchmark the speed of certain
889         code parts; this is helpful for our performance patches :)
891 Thu, 20 Mar 2008 11:07:48 +0100 <thp@perli.net>
892 Performance-improving patch from Nick (nikosapi) to html entity replacement
894         * src/gpodder/util.py: Merge patch from Nick (nikosapi.org) to really
895         improve performance of the HTML tag stripper/entity replacement code
896         by using regular expressions and some more intelligent code for
897         converting numeric entities to Unicode characters
899 Thu, 20 Mar 2008 11:06:32 +0100 <thp@perli.net>
900 Add demo code for displaying a splash screen
902         * doc/dev/splash-logo.py: Added testing code that would display a
903         splash screen (transparent if compositing is enabled); we currently
904         don't plan to use this code for reasons described on gpodder-devel
906 Thu, 20 Mar 2008 10:04:14 +0100 <thp@perli.net>
907 Filter "None" filenames from GtkFileChooser widgets
909         * src/gpodder/config.py: Make sure we don't receive a "None" filename
910         from GtkFileChooser widgets when connecting to the config manager
912 Wed, 19 Mar 2008 18:06:58 +0100 <thp@perli.net>
913 Change the context menu of the episode list popup menu
915         * src/gpodder/gui.py: Simplify, re-structure and improve the context
916         menu of the episode list popup menu (right-click menu); thanks to hex
917         (justin.forest gmail.com) for suggesting this change and giving
918         valuable input on gpodder-devel
920 Wed, 19 Mar 2008 15:45:15 +0100 <thp@perli.net>
921 Patch from Nikosapi to fix MP3 player sync progress
923         * src/gpodder/sync.py: Patch from Nick (nikosapi.org) to fix MP3
924         player sync problems: "Instead of displaying the proper percentage of
925         the copied file in the FS-based sync dialog, gPodder would initially
926         report 100% and near the end of the copy it would report percentages
927         >100%."
929 Wed, 19 Mar 2008 15:02:10 +0100 <thp@perli.net>
930 Various Bluetooth-related fixes
932         * data/gpodder.glade: Use the "bluetooth" icon instead of the (old?)
933         "stock_bluetooth" icon; in Gnome 2.22, the "bluetooth" icon is nicer,
934         i.e. more Tango-ish than the "stock_bluetooth" icon
935         * src/gpodder/gui.py: Fix a logging error; Only show "Send to [...]
936         via bluetooth"/"Send to bluetooth device" when we have already
937         downloaded the episodes (won't obviously work otherwise..)
938         * src/gpodder/util.py: Fix bluetooth_send_file to work with both
939         bluetooth-sendto and gnome-obex-send (different command line argument
940         format for both)
942 Sun, 16 Mar 2008 12:55:49 +0100 <thp@perli.net>
943 Python-feedparser is a dependency, so mention it in the README
945         * README: Mention python-feedparser as a dependency in the README
946         file; thanks to Alain Tauch for pointing this out on the mailing list
948 Wed, 12 Mar 2008 12:38:19 +0100 <thp@perli.net>
949 Updated translations for 0.11.1 stabilization period
951         * data/messages.pot: Updated from source
952         * data/po/*.po: Updated from messages.pot
954 Tue, 11 Mar 2008 18:53:25 +0100 <thp@perli.net>
955 Add option to write gtkpod extended database on sync
957         * data/gpodder.glade: Add a check box for the new config option
958         * src/gpodder/config.py: Add ipod_write_gtkpod_extended boolean
959         configuration variable that controls if we want to write iTunesDB.ext
960         after synchronization (defaults to False)
961         * src/gpodder/gui.py: Glue code for UI<->Config manager
962         * src/gpodder/sync.py: Use libgpod's "gtkpod" module to write the
963         extended gtkpod database (iTunesDB.ext) to the iPod after sync - this
964         has to be enabled via an option
966 Tue, 11 Mar 2008 18:44:19 +0100 <thp@perli.net>
967 Fix problem with old PyGTK versions when importing gpodder.trayicon
969         * src/gpodder/gui.py: Apply patch from Bill Barnard
970         <bill@barnard-engineering.com>, based on a patch from Jérôme Chabod
971         <jerome.chabod@ifrance.com> that makes sure we can import the tray
972         icon module. If not, we disable the tray icon functionality
974 Mon, 10 Mar 2008 16:37:38 +0100 <thp@perli.net>
975 Add support for creating M3U playlist files in download folders
977         * src/gpodder/config.py: Add "create_m3u_playlists" boolean
978         configuration option (default False) that controls if we want to
979         generate per-channel M3U playlists in our download folders
980         * src/gpodder/gui.py: Add context menu entry for manually updating an
981         M3U playlist for the channel navigator (only visible when updating m3u
982         playlists is enabled
983         * src/gpodder/libpodcasts.py: Add update_m3u_playlist() function to
984         podcastChannel and call it when removing and adding downloaded
985         episodes
986         * src/gpodder/util.py: Add sanitize_filename() function that tries to
987         encode a file name in the system's encoding, stripping all chars that
988         are invalid on FAT32 and other systems (e.g. slash, etc..)
990 Thu, 06 Mar 2008 17:46:21 +0100 <thp@perli.net>
991 Be less verbose, consider episodes with length<=100 to have invalid length
993         * src/gpodder/libpodcasts.py: Remove verbose logging for episode
994         metadata (seems to work now); consider episodes with a small length
995         value to have invalid length, i.e. try to find the length of the
996         episode by looking at the HTTP header; thanks to Bernd
997         <schlaber@gmail.com> for sending in the feed URL with which this bug
998         happens (length was 1) during the gPodder workflow survey :)
1000 Tue, 04 Mar 2008 12:15:53 +0100 <thp@perli.net>
1001 Fix KeyError bug in custom_selection_button_clicked (from LP)
1003         * src/gpodder/gui.py: Fix problem with localized strings on the custom
1004         selection buttons, i.e. pass the label to the function directly
1005         instead of relying on the gtk.Button to have the label in the correct
1006         encoding (LP: #192918); thanks to Pavel Mlčoch for reporting this bug
1007         on Launchpad
1009 Tue, 04 Mar 2008 12:05:23 +0100 <thp@perli.net>
1010 Fix AttributeError bug in updateTreeView (from LP)
1012         * src/gpodder/gui.py: Make sure that we have a valid "active_channel"
1013         when updating the tree view (LP: #183667); thanks to red26wings for
1014         reporting this bug on Launchpad
1016 Mon, 03 Mar 2008 23:06:30 +0100 <thp@perli.net>
1017 Add support for changing the URL of a subscribed channel (bug #42)
1019         * data/gpodder.glade: Make the URL entry in the channel dialog
1020         editable
1021         * src/gpodder/gui.py: Add support for changing the URL of a subscribed
1022         channel (i.e. move from the "latest" RSS feed to the "complete" RSS
1023         feed, as is the case with Chaosradio podcasts, for example); ask user
1024         if she really wants to move; handle case where the new URL is wrong
1025         by reverting to old URL; Improve code for moving the download
1026         directory; thanks to Steve Garcia <sgarcia@bak.rr.com> for the bug
1027         report
1029 Mon, 03 Mar 2008 21:14:55 +0100 <thp@perli.net>
1030 Small fix for moving downloads progress bar
1032         * src/gpodder/gui.py: Make sure the value for set_fraction of the
1033         progress bar is in 0.0..1.0
1035 Mon, 03 Mar 2008 20:53:15 +0100 <thp@perli.net>
1036 Add "Go to website" buttons to episode and channel (bug #43)
1038         * data/gpodder.glade: Add "Go to website" buttons to episode and
1039         channel info dialogs
1040         * src/gpodder/gui.py: Add code to open website URL or hide the "Go to
1041         website" button when there is no valid website link for an episode or
1042         channel
1044 Mon, 03 Mar 2008 20:37:02 +0100 <thp@perli.net>
1045 Move webbrowser code to util.open_website; fix URLs to gpodder.org
1047         * src/gpodder/gui.py: Use new gpodder.org URLs; use
1048         util.open_website() instead of directly interfacing with threads and
1049         the "webbrowser" module
1050         * src/gpodder/util.py: New function open_website() that takes care of
1051         opening the system's default web browser and opening the specified URL
1053 Sun, 02 Mar 2008 14:20:56 +0100 <thp@perli.net>
1054 Make "gl" a global-accessible object in libgpodder
1056         * doc/dev/gdfs/gdfs-check.py: Adapt to new structure of gPodderLib
1057         * src/gpodder/*.py: Use "gl" instead of all incarnations of
1058         "gPodderLib()" or "libgpodder.gPodderLib()", and weed out all "gl =
1059         gPodderLib() lines, because it makes the code look unnecessarily
1060         bloated ;)
1061         * src/gpodder/libgpodder.py: Make "gl" a global instance of the
1062         gPodderLib() object, and rename gPodderLibClass to gPodderLib and do
1063         some more cleaning-up
1065 Sun, 02 Mar 2008 14:03:40 +0100 <thp@perli.net>
1066 Move gPodderLib().open_folder to util.gui_open
1068         * src/gpodder/gui.py: Use util.gui_open instead of gl.open_folder
1069         * src/gpodder/libgpodder.py: Remove open_folder (move to gpodder.util)
1070         * src/gpodder/util.py: Add gui_open function that uses xdg_open to
1071         open files and folders with their default application in the GUI
1073 Sun, 02 Mar 2008 13:52:42 +0100 <thp@perli.net>
1074 Pickle-based storage method (dumbshelve); HTTP HEAD requests; buggy feed fixes
1076         * src/gpodder/dumbshelve.py: Added (replacement for "shelve" using
1077         pickle)
1078         * src/gpodder/libgpodder.py: Rename *.db files to *.pickle.db, so we
1079         don't clash with old-style shelve .db files
1080         * src/gpodder/libpodcasts.py: Use dumbshelve as a replacement for
1081         shelve; add EpisodeURLMetainfo that keeps track of metainfo downloaded
1082         via HTTP HEAD requests; make getting episode length and pubDate a bit
1083         more intelligent by trying to find correct values via HTTP HEAD;
1084         improve episode sorting by falling back to episode titles when no
1085         pubDate has been found (or pubDate is equal); 
1086         * src/gpodder/util.py: Add get_episode_info_from_url() function that
1087         tries to find out the length and pubDate of an episode by looking at
1088         the data from the HTTP HEAD; also support HTTP proxys via an optional
1089         "proxy" keyword argument
1091 Wed, 27 Feb 2008 10:44:48 +0100 <thp@perli.net>
1092 Notify user about no new episodes when updating from tray icon
1094         * src/gpodder/gui.py: Patch from Jérôme Chabod
1095         <jerome.chabod@ifrance.com> to notify the user about "no new episodes"
1096         when updating the feed cache manually via the tray icon
1097         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=3)
1098         * src/gpodder/trayicon.py: See above
1100 Wed, 27 Feb 2008 09:52:14 +0100 <thp@perli.net>
1101 Use xdg-open for files that we don't know the file type of
1103         * src/gpodder/libgpodder.py: If the file we want to open/play is not
1104         an audio or video file, we use "xdg-open" to open the file (this is
1105         used for things like PDF files and the like, e.g. in Chaos TV)
1107 Wed, 27 Feb 2008 09:46:55 +0100 <thp@perli.net>
1108 Add Flash Video (flv) and Windows Media Video (wmv) to file detection
1110         * src/gpodder/util.py: Detect *.flv and *.wmv files as video files
1112 Wed, 27 Feb 2008 09:39:42 +0100 <thp@perli.net>
1113 When sending via Bluetooth, always rename/copy the file
1115         * src/gpodder/gui.py: When sending files via Bluetooth, and the file
1116         converter script is not enabled, we are simply copying the file to the
1117         sync_filename of the episode, therefore creating a nice name. We have
1118         to copy the file, because neither gnome-obex-send nor bluetooth-sendto
1119         let us specify the destination filename when sending the file, these
1120         utilities always take the input filename (thanks to Chris
1121         <gpodder@noreply.org.uk> for the bug report)
1122         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=49)
1124 Tue, 26 Feb 2008 16:49:06 +0100 <thp@perli.net>
1125 Python code fixup: Compare "None" with "is" instead of "=="
1127         * doc/dev/daap2rss.py: "== None" => "is None"
1128         * src/gpodder/config.py: "== None" => "is None"
1129         * src/gpodder/gui.py: "== None" => "is None"
1130         * src/gpodder/libgpodder.py: "== None" => "is None"
1131         * src/gpodder/libpodcasts.py: "== None" => "is None"
1133 Tue, 26 Feb 2008 16:30:56 +0100 <thp@perli.net>
1134 Add support for new "bluetooth-sendto" utility
1136         * README: Ask for either "gnome-obex-send" or "bluetooth-sendto",
1137         which are needed for the Bluetooth file transfer
1138         * src/gpodder/util.py: Add support for "bluetooth-sendto" as an
1139         alternative to "gnome-obex-send"; initial bug report and patch by
1140         Leonid Ponomarev (this probably adds bluez-gnome as an optional
1141         dependency if you want bluetooth send support)
1143 Mon, 25 Feb 2008 15:51:16 +0100 <thp@perli.net>
1144 Show more description text in episode list
1146         * src/gpodder/libpodcasts.py: Join all lines and strip unnecessary
1147         data for the episode description that is displayed in the episode list
1148         when descriptions are enabled (suggested by Jérôme Chabod)
1150 Mon, 25 Feb 2008 14:39:15 +0100 <thp@perli.net>
1151 Merge changes from 0.11.0 release after release
1153         * bin/gpodder: Merge changes from 0.11.0
1154         * README: Merge changes from 0.11.0
1156 Sun, 24 Feb 2008 14:52:04 +0100 <thp@perli.net>
1157 Cosmetic changes to the makefile
1159         * Makefile: Cosmetic changes
1161 Sun, 24 Feb 2008 13:55:42 +0100 <thp@perli.net>
1162 Cairo-based progress bar on system tray icon
1164         * src/gpodder/draw.py: Add Cairo-based drawing code for generating a
1165         nice, transparent progress bar icon
1166         * src/gpodder/services.py: Fix a problem with the wrong download done
1167         percentage (i.e. when cancelling downloads instead of finishing them)
1168         * src/gpodder/trayicon.py: Add code to draw the progress bar on the
1169         tray icon; initial idea and most parts of this patch by Jérôme Chabod
1171 Sat, 23 Feb 2008 14:18:53 +0100 <thp@perli.net>
1172 Set the xterm title when running "make test"
1174         * Makefile: Set the xterm title when running "make test"
1176 Wed, 20 Feb 2008 13:38:58 +0100 <thp@perli.net>
1177 Estimated time left and synchronization support for tray icon by Jérôme Chabod
1179         * src/gpodder/gui.py: Send update status information to the tray icon
1180         on update; add glue code for synchronization device and tray icon
1181         * src/gpodder/trayicon.py: Add status and tooltip during device
1182         synchronization; add estimated download time to tooltip during
1183         download; set the correct caption for the synchronization menu item in
1184         the tray icon (and don't add a synchronize menu item when not needed);
1185         some small code-cleanups and fixes
1186         * src/gpodder/util.py: Add format_seconds_to_hour_min_sec() function
1187         that converts a numeric amount of seconds into a human-readable string
1189 Tue, 19 Feb 2008 07:46:28 +0100 <thp@perli.net>
1190 Fix bug with MP3 player synchronization file name encodings
1192         * src/gpodder/sync.py: Apply patch to fix problems with native
1193         language encodings on MP3 player synchronization; thanks to Bernd
1194         Schlapsi for reporting the problem in Bugzilla
1195         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=34)
1197 Mon, 18 Feb 2008 21:17:48 +0100 <thp@perli.net>
1198 Updated French translation for 0.11.0
1200         * data/po/fr.po: Updated French translation by Jérôme Chabod
1202 Sun, 17 Feb 2008 13:50:09 +0100 <thp@perli.net>
1203 Fix calculation of average percentage done
1205         * src/gpodder/services.py: Fix calculation of average percentage done
1206         for downloads, thanks to Jérôme Chabod <jerome.chabod@ifrance.com> for
1207         the patch
1209 Sun, 17 Feb 2008 13:33:38 +0100 <thp@perli.net>
1210 Updated translations for 0.11.0
1212         * data/messages.pot: Refreshed messages.pot from source code
1213         * data/po/de.po: Updated German translation
1214         * data/po/nl.po: Updated Dutch translation by Pieter De Decker
1215         * data/po/ru.po: Updated Russian translation by Leonid Ponomarev
1216         * data/po/cs.po: Updated Czech translation by Ondrej Vesely
1217         * data/po/sv.po: Updated Swedish translation by Anders Kvist
1219 Thu, 07 Feb 2008 22:15:40 +0100 <thp@perli.net>
1220 Hello, new "expert" configuration editor (about:config-like)
1222         * data/gpodder.glade: Add gPodderConfigEditor window and add an
1223         "Advanced..." button to the preferences dialog
1224         * src/gpodder/config.py: Add a gtk.ListStore tree model to the
1225         configuration manager and update it when configuration variables
1226         change; add toggle_flag() and update_field() methods for easy updating
1227         of fields from the new config editor
1228         * src/gpodder/gui.py: Add glue code for opening the advanced
1229         configuration editor from the preferences dialog; add code for the
1230         gPodder configuration editor (including filtering and field updating);
1231         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=10)
1233 Thu, 07 Feb 2008 20:22:08 +0100 <thp@perli.net>
1234 Support buggy OPML feeds, notify user on OPML import
1236         * src/gpodder/gui.py: Notify user when no items were found when trying
1237         to import OPML feeds
1238         * src/gpodder/opml.py: Make the OPML importer a bit more relaxed, and
1239         make it accept "url" instead of "xmlUrl", too (for buggy OPML feeds)
1241 Wed, 06 Feb 2008 17:34:56 +0100 <thp@perli.net>
1242 Fix the track length detection
1244         * src/gpodder/sync.py: Fix the iPod sync track length detection code,
1245         reported by Paul Rudkin <paul@thegithouse.com> and tested by
1246         FriedBunny <friedbunny@kulturny.com>; make default length 3 hours
1247         Closes: http://bugs.gpodder.org/show_bug.cgi?id=29
1249 Wed, 06 Feb 2008 10:59:25 +0100 <thp@perli.net>
1250 NLS encoding support for MP3 player synchronization (from gdfs)
1252         * src/gpodder/sync.py: Add NLS encoding support from Leonid Ponomarev
1253         <leonid.phoenix@gmail.com>; patch modified a bit to better fit the
1254         code and be more verbose, so the user knows how we encode the names
1256 Wed, 06 Feb 2008 10:43:47 +0100 <thp@perli.net>
1257 Hide to systray on exit during download
1259         * src/gpodder/gui.py: Apply patch from Jérôme Chabod
1260         <jerome.chabod@ifrance.com> to fix a bug: When closing gPodder during
1261         a download, and "on_quit_hide" is on, gPodder asks for a confirmation
1262         It should hide gPodder without asking. This patch fix that.
1264 Wed, 06 Feb 2008 10:18:30 +0100 <thp@perli.net>
1265 Usability GUI update (after Rafael Proença's proposal)
1267         * data/gpodder.glade: Add "Ctrl+L" hotkey to Add new channel; add
1268         "View" menu with show/hide Toolbar (Ctrl+T) and show/hide episode
1269         descriptions (Ctrl+D); remove "Update Feeds" button from toolbar and
1270         add Check for updates button below channel navigator; move the add
1271         episodes entry and buttons above the channel navigator; thanks to the
1272         following people who shared their opinions on the mailing list: Rafael
1273         Proença, Paul Rudkin, Ondrej Vesely, Leonid Ponomarev, Shane Donohoe,
1274         Jérôme Chabod, Nick (nikosapi); the GUI mockups and the initial idea
1275         were posted by Rafael Proença
1276         * src/gpodder/config.py: Add "episode_list_descriptions" and
1277         "show_toolbar" configuration options that modify the look of the main
1278         window (both default to "True")
1279         * src/gpodder/gui.py: Show feed description in seperate line (this
1280         feature was suggested by narf@inode.at); make the episode list
1281         treeview widget use the space more efficient; show/hide toolbar and
1282         show/hide episode description GUI glue code
1283         * src/gpodder/libgpodder.py: Add "digits" keyword argument to
1284         format_filesize() (defaults to 2), this is a pass-thru function for
1285         gpodder.util.format_filesize() (see below)
1286         * src/gpodder/libpodcasts.py: Support for small- and large-sized
1287         icons,modify liststore creation code to add description to the title
1288         column
1289         * src/gpodder/util.py: Add "digits" keyword argument to
1290         format_filesize() (defaults to 2), this is used to define the format
1291         of the filesize; add "icon_size" keyword argument (defaults to 32) to
1292         get_tree_icon() and modify the function so that it dynamically
1293         generates the correct icon with the correct sizes
1295 Mon, 04 Feb 2008 11:26:14 +0100 <thp@perli.net>
1296 Apply patchset from Jérôme Chabod to fix tray icon behaviour
1298         * data/gpodder.glade: Change behaviour of the "display tray icon"
1299         checkbox, rename and retitle some configuration options
1300         * src/gpodder/config.py: Rename "download_after_update" to
1301         "auto_download_when_minimized" and rename "disable_notifications" to
1302         "enable_notifications".
1303         * src/gpodder/gui.py: Add glue code for config and GUI, change
1304         behaviour as described in http://bugs.gpodder.org/show_bug.cgi?id=3
1305         * src/gpodder/trayicon.py: Clean-up and fix behaviour as described in
1306         our Bugzilla Bug #3 (see above); thanks to Jérôme Chabod for
1307         implementing all these changes and the patch
1309 Mon, 04 Feb 2008 09:32:56 +0100 <thp@perli.net>
1310 Output pretty-printed OPML when saving channels list
1312         * src/gpodder/opml.py: Patch from Nick (nikosapi.org) to output the
1313         channels.opml file pretty-printed, so it's easier to read and easier
1314         to edit when working on the file outside of gPodder
1316 Sun, 03 Feb 2008 23:02:47 +0100 <thp@perli.net>
1317 Don't code late at night, it breaks the sync code ;)
1319         * src/gpodder/sync.py: Add brackets because I wrote bad code in the
1320         first place (fix video sync for iPods); thanks to Dave Perdue
1321         <dave@minusvince.com> for reporting this in our bug tracker
1322         (Closes: http://bugs.gpodder.org/show_bug.cgi?id=28)
1324 Sat, 02 Feb 2008 11:36:35 +0100 <thp@perli.net>
1325 Make feed update display "Loading" titles, only run auto update when minimized
1327         * src/gpodder/gui.py: Usability patch from NIkosapi <nikosapi.org>:
1328         Make the feed update dialog display "Loading feeds" instead of
1329         "Downloading feeds" when its loading the feeds from the local cache;
1330         only run the automatic, periodic update when gPodder is minimized,
1331         because it would pop up a dialog while gPodder is in use otherwise
1333 Sat, 02 Feb 2008 11:33:48 +0100 <thp@perli.net>
1334 Pressing Enter in the add channel entry adds the channel
1336         * data/gpodder.glade: Usability patch from Nikosapi <nikosapi.org>:
1337         Add an action handler to the gladefile, so the user can simply press
1338         Enter in the gtk.Entry instead of having to tab to or click on the
1339         button for adding a channel
1341 Wed, 30 Jan 2008 09:47:21 +0100 <thp@perli.net>
1342 Fix another bug in file_modification_datetime
1344         * src/gpodder/util.py: Another problem that happens with special
1345         iTunesDB settings, thanks to FriedBunny <friedbunny@kulturny.com>
1347 Wed, 30 Jan 2008 09:23:19 +0100 <thp@perli.net>
1348 Fix a bug in the file size calculation
1350         * src/gpodder/util.py: calculate_filesize should deal with "None"
1351         passed as filename (now returns zero-size);
1352         Fixes: Bug #23 (http://gpodder.thegithouse.com/show_bug.cgi?id=23)
1353         Thanks to FriedBunny <friedbunny@kulturny.com> for reporting this
1354         issue in our bug tracker
1356 Mon, 28 Jan 2008 12:33:13 +0100 <thp@perli.net>
1357 Merge new sync code from thp's private branch
1359         * bin/gpodder: Add "--sync"/"-s" command-line option to start the
1360         device synchronization process from the CLI interface - syncing can
1361         now be scripted, baby :) (you still have to configure the sync device
1362         via the GUI first, though)
1363         * data/gpodder.glade: Simplify gPodderSync dialog and remove some
1364         obsolete options from the channel dialog
1365         * src/gpodder/console.py: Add code for command-line sync support
1366         * src/gpodder/gui.py: Remove obsolete code for libipodsync and import
1367         the new "sync" module; simplify Sync<->GUI interface; clean-up
1368         gPodderSync dialog code to interface with new sync code; remove some
1369         config glue code for the channel properties dialog
1370         * src/gpodder/libconverter.py: Make libconverter work even if the
1371         percentage callback would fail in certain conditions (try..except)
1372         * src/gpodder/libipodsync.py: Removed
1373         * src/gpodder/libpodcasts.py: Refactor age_in_days() and
1374         get_age_string() to simple calls to utility functions and move the
1375         code to gpodder.util
1376         * src/gpodder/sync.py: Added new sync module :) Very modular, yesaya!
1377         * src/gpodder/util.py: Add file_age_in_days() and file_age_to_string()
1378         helper functions that use code from libpodcasts and return the age of
1379         a file in the filesystem
1381 Thu, 24 Jan 2008 14:51:48 +0100 <thp@perli.net>
1382 Fix a bug for show_message and tray_icon/minimized
1384         * src/gpodder/gui.py: Fix a bug when messages are shown for
1385         non-gPodderMainWindow windows (that don't have tray_icon)
1387 Wed, 23 Jan 2008 11:55:35 +0100 <thp@perli.net>
1388 Make gpodder.desktop pass desktop-file-validate tests
1390         * data/gpodder.desktop: Update "Categories" and remove "Encoding",
1391         following the freedesktop.org Desktop Entry specification
1393 Wed, 23 Jan 2008 09:06:32 +0100 <thp@perli.net>
1394 Do not show notifications when gPodder is minimized
1396         * src/gpodder/gui.py: Merge patch from Jérôme Chabod to fix problems
1397         with the gPodder window re-appearing after having been minimized;
1398         use the notification icon when possible; initially reported by Shane
1399         Donohoe
1401 Tue, 22 Jan 2008 10:19:46 +0100 <thp@perli.net>
1402 Add "releasetest" target to Makefile (automated testing)
1404         * Makefile: Add "releasetest" target that can be used to do some
1405         automatic testing before releases; thanks to Götz Waschk for giving
1406         some hint on "desktop-entry-validate" :)
1408 Tue, 22 Jan 2008 10:09:16 +0100 <thp@perli.net>
1409 Use Episode Selector for per-channel new episodes
1411         * src/gpodder/gui.py: Reorganize code to use the episode selector for
1412         both all-channels and per-channel new episodes
1413         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=14)
1415 Tue, 22 Jan 2008 09:42:01 +0100 <thp@perli.net>
1416 Fix problem in gpodder.desktop file
1418         * bin/gpodder: We're in development again (+svn)
1419         * data/gpodder.desktop: Fix problem in .desktop file (Thanks to Götz
1420         Waschk for reporting this bug, detected via desktop-entry-validate)
1422 Tue, 22 Jan 2008 08:20:33 +0100 <thp@perli.net>
1423 gPodder 0.10.4 "Faster Pussycats Kill" released
1425         * bin/gpodder: gpodder 0.10.4 released :)
1426         * README: gPodder 0.10.4 released :)
1427         * doc/man/gpodder.1: gPodder 0.10.4 released :)
1428         * data/po/de.po: Updated German translation
1429         * data/messages.pot: Updated from source
1430         * data/po/*.po: Updated from messages.pot
1432 Tue, 22 Jan 2008 08:13:42 +0100 <thp@perli.net>
1433 Create Bittorrent download directory on startup
1435         * src/gpodder/libgpodder.py: Create Bittorrent download directory on
1436         startup, so the first time gPodder preferences are shown, the download
1437         folder will exist and now throw an error
1439 Mon, 21 Jan 2008 21:41:59 +0100 <thp@perli.net>
1440 Updated French translation file with correct encoding
1442         * data/po/fr.po: Updated French translation with correct encoding by
1443         Jérôme Chabod - thanks!
1445 Mon, 21 Jan 2008 10:47:49 +0100 <thp@perli.net>
1446 Add support for sending files via Bluetooth
1448         * data/gpodder.glade: Add "Bluetooth" configuration page to
1449         preferences dialog
1450         * src/gpodder/config.py: Add Bluetooth-related configuration options
1451         * src/gpodder/gui.py: Add support for sending (and converting) files
1452         for bluetooth file transfer; add glue code for preferences dialog and
1453         configuration manager
1454         * src/gpodder/libgpodder.py: Add "tempdir" variable to gPodderLibClass
1455         that specifies a temporary directory to be used (currently only for
1456         converting files for bluetooth transfer, might be migrated to a
1457         configuration option later)
1458         * src/gpodder/util.py: Add discover_bluetooth_devices() function that
1459         searches for nearby devices (either via python-bluez or via hcitool,
1460         so one of them has to be installed as a dependency); add
1461         bluetooth_send_file() convenience function that starts a file transfer
1462         via Bluetooth OBEX - uses gnome-obex-send, which has to be installed
1463         for Bluetooth file transfer to work
1465 Mon, 21 Jan 2008 09:52:09 +0100 <thp@perli.net>
1466 Support for different audio/video player selection
1468         * data/gpodder.glade: Add video selection to preferences dialog
1469         * src/gpodder/config.py: Add "videoplayer" configuration option
1470         * src/gpodder/gui.py: Add glue code for configuration and preferences
1471         dialog (audio/video player selector)
1472         * src/gpodder/libgpodder.py: Add code to migrate from older gPodder
1473         configurations (videoplayer is set to "unspecified") to the same value
1474         as the currently selected audio player; when "playing" a file,
1475         determine the file type and start the right player application
1476         * src/gpodder/libplayers.py: Parameterize the UserAppsReader class to
1477         accept a mime type (e.g. "video" or "audio") after which to filter
1479 Mon, 21 Jan 2008 07:30:38 +0100 <thp@perli.net>
1480 Czech translation update: gpodder.desktop
1482         * data/gpodder.desktop: Ondrej Vesely <xorwen@gmai.com> added the
1483         Czech translation strings to the gpodder.desktop file - thanks
1485 Sun, 20 Jan 2008 22:50:13 +0100 <thp@perli.net>
1486 Added Czech translation by Ondrej Vesely
1488         * data/po/cs.po: Added (partial) Czech translation by Ondrej Vesely
1489         <xorwen@gmail.com>; the completed translation will be updated when
1490         it's done
1491         * setup.py: Add "cs" (Czech) to list of translations
1493 Sat, 19 Jan 2008 18:39:54 +0100 <thp@perli.net>
1494 Updated Swedish translation from Anders Kvist
1496         * data/po/sv.po: Thanks to Anders Kvist, the Swedish translation is
1497         now up-to-date again
1499 Sat, 19 Jan 2008 13:28:12 +0100 <thp@perli.net>
1500 Updated French translation from Jérôme Chabod
1502         * data/po/fr.po: Thanks to Jérôme Chabod, the French translation is
1503         now up-to-date again
1505 Thu, 17 Jan 2008 22:46:21 +0100 <thp@perli.net>
1506 Updated Dutch translation from Pieter De Decker
1508         * data/po/nl.po: Thanks to Pieter De Decker, the Dutch translation is
1509         now up-to-date again
1511 Thu, 17 Jan 2008 14:21:49 +0100 <thp@perli.net>
1512 Update translation template and translations from source
1514         * data/messages.pot: Updated potfile from source code
1515         * data/po/*.po: Updated translation templates from potfile
1517 Wed, 16 Jan 2008 08:36:12 +0100 <thp@perli.net>
1518 Remove the "Ignore" button in tray icon notifications
1520         * src/gpodder/trayicon.py: Remove the "ignore" action and button when
1521         a download has finished; the "ignore" button is redundant, as the same
1522         functionality can be achieved by clicking on the "x" of the bubble
1524 Tue, 15 Jan 2008 14:50:13 +0100 <thp@perli.net>
1525 Modularize calls to gobject.idle_add (for non-GTK support)
1527         * bin/gpodder: Set interface_is_gui to True when running the GUI
1528         * src/gpodder/*.py: Use util.idle_add instead of gobject.idle_add
1529         * src/gpodder/gui.py: Simplify some idle_add calls, code clean-up
1530         * src/gpodder/__init__.py: Add "interface_is_gui" boolean variable
1531         that tells us if we are running in GUI or CLI mode (this is needed for
1532         util.idle_add to determine if it's going to use the gobject module or
1533         not)
1534         * src/gpodder/util.py: Add new function idle_add() that acts as a
1535         wrapper to gobject.idle_add(); this will only use gobject.idle_add if
1536         we are in GUI mode, and will call the callback directly when we are in
1537         command-line mode (because we don't have to watch out for threading
1538         race conditions there, compared to what GTK+ gives us)
1540 Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
1541 Add menu item that links to gPodder's new bug tracker
1543         * data/gpodder.glade: Add bug tracker item to help menu
1544         * src/gpodder/gui.py: Add code to open a webbrowser with the bug
1545         tracker when the bug tracker icon is clicked
1547 Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
1548 Add a checkbox to keep episodes when removing channels
1550         * src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
1551         removing a podcast channel, so the user has the option to remove the
1552         podcast feed from gPodder's subscription list, but still keep the
1553         downloaded files on the harddisk (via a checkbox in the dialog)
1554         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)
1556 Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
1557 Updated Russian translation by Hex
1559         * data/po/ru.po: Updated Russian translation by
1560         Hex <justin.forest@gmail.com>
1562 Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
1563 Merge tray icon and notification patch by Jérôme Chabod
1565         * data/gpodder.glade: UI support for tray icon settings and
1566         configuration options for auto update feeds (auto update based on a
1567         patch by Nick (nikosapi.org)
1568         * src/gpodder/config.py: Add configuration options that support the
1569         tray icon, notification bubble and automatic update/close functions
1570         * src/gpodder/gui.py: Support the tray icon in the GUI; link the
1571         configuration options with the preferences dialog; re-work the channel
1572         update dialog to be more slipstreamed
1573         * src/gpodder/trayicon.py: Added new tray icon module by
1574         Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
1575         gPodder TODO list by Holger Bauer
1577 Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
1578 Updated Swedish translation by Anders Kvist
1580         * data/po/sv.po: Swedish translation updated by
1581         Anders Kvist <kvistkvist@telia.com>
1583 Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
1584 Use os.rename to make channel list saving atomic
1586         * src/gpodder/opml.py: Make the saving of the channel list atomic by
1587         first saving it to a temporary file and then using os.rename to really
1588         move the file in place (this should make the channel list saving very
1589         stable and protect against certain bad system conditions where the
1590         channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
1591         the suggestion and pointers to improve the channel saving code
1593 Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
1594 Make logging in libpodcasts less verbose
1596         * src/gpodder/libpodcasts.py: Remove some verbose logging code
1598 Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
1599 Migrate from channels.xml (from 0.9.4) to channels.opml if needed
1601         * src/gpodder/libgpodder.py: Add code to check if channels.xml exists
1602         but channels.opml doesn't and if so, try to convert from channels.xml
1603         to channels.opml, so users upgrading from 0.9.4 directly will have
1604         their channel list automatically converted;
1605         thanks to Tim Michelsen for the bug report and helpful Ubuntu info
1607 Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
1608 Add download completion notification support
1610         * src/gpodder/download.py: Notify the download status manager when a
1611         download has been completed successfully
1612         * src/gpodder/services.py: Add download-complete signal to list of
1613         possible signals and download_completed() method to be used by
1614         downloads to notify the status manager of a successful download
1616 Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
1617 Patch the feedparser module to correctly process democracynow.org
1619         * src/gpodder/cache.py: Add a patch_feedparser() method that checks of
1620         the feedparser module correctly maps the "plain" content-type to the
1621         correct "text/plain" content-type and if not, replace the
1622         mapContentType method with a fixed one; this should make the audio
1623         podcast on democracynow.org working (thanks to Clark Burbidge for the
1624         bug report)
1626 Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
1627 Better username/password extraction from URLs
1629         * src/gpodder/util.py: Improve username and password extraction for
1630         authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
1631         Donohoe <priestoftime@googlemail.com> for reporting this bug and
1632         sending in a patch; this should allow for e-mail address usernames
1634 Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
1635 Also delete old episodes that have disappeared from the feed
1637         * src/gpodder/gui.py: When deleting old episodes automatically, also
1638         delete episodes that have disappeared from the RSS feed and are only
1639         available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
1640         for the very detailed and helpful bug report :)
1642 Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
1643 Stability updates: Feed cache update, old PyCairo versions
1645         * src/gpodder/draw.py: Add a workaround for pycairo versions less than
1646         1.1.6. Thanks to Chris Arnold for reporting this bug on the
1647         gpodder-devel mailing list and taking the time to test the patch and
1648         report back and provide useful information for debugging this error
1649         * src/gpodder/gui.py: Close the feed cache update dialog even when the
1650         user clicks on "cancel" (would have stayed there otherwise)
1652 Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
1653 Merge "delete episode after sync" patch from Jérôme Chabod
1655         * data/gpodder.glade: Add GUI elements in preferences dialog to select
1656         what to do after episode sync (nothing, delete or mark played)
1657         * src/gpodder/config.py: Add "on_sync_delete" configuration option
1658         * src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
1659         * src/gpodder/libipodsync.py: If the configuration option
1660         on_sync_delete is set, remove the episode after successfully copying
1661         it to the iPod or MP3 player (the whole patch has been initially done
1662         by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
1663         * src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
1664         robust, so it doesn't disturb libipodsync's functionality
1666 Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
1667 Remove invalid channel cover images when loading fails
1669         * src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
1670         it cannot be loaded (assume something went wrong when downloading the
1671         cover file); re-downloading the cover manually can solve the problem
1673 Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
1674 Fix typo in last commit
1676         * src/gpodder/libipodsync.py: Fix typo in last commit
1678 Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
1679 Modify played handling in iPod sync when "on sync mark played" is active
1681         * src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
1682         if the on_sync_mark_played option is set
1684 Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
1685 Merge patch from Leonid Ponomarev to gdfs
1687         * doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
1688         support for the system's native encoding, based on the $LANG
1689         environment variable. This should add support for episodes and
1690         channels with international characters as titles
1692 Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
1693 Updated Dutch translation by Pieter De Decker
1695         * bin/gpodder: We're in development again: "+svn"
1696         * data/po/nl.po: Updated Dutch translation from Pieter De Decker
1698 Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
1699 gPodder 0.10.3 "A Stop at Willoughby" released
1701         * bin/gpodder: gPodder 0.10.3 released :)
1702         * README: gPodder 0.10.3 released :)
1703         * doc/man/gpodder.1: gPodder 0.10.3 released :)
1704         * data/messages.pot: Updated from source
1705         * data/po/de.po: Updated German translation
1706         * data/po/*.po: Updated from messages.pot
1708 Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
1709 Link the gPodder Documentation Wiki from the help pages
1711         * data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
1712         and Documentation Wiki (instead of Mailing list)
1713         * src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page
1715 Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
1716 Remove TODO file from MANIFEST.in
1718         * MANIFEST.in: Of course we have to remove non-existing files from the
1719         MANIFEST.in file, too.. so TODO is now finally gone :)
1721 Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
1722 Manage TODO list on the gPodder Wiki
1724         * TODO: Removed; new location: http://gpodderwiki.jottit.com/todo
1726 Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
1727 Configuration for "old" episodes; automatically remove old episodes
1729         * src/gpodder/config.py: New boolean auto_remove_old_episodes
1730         configuration option that defaults to False (remove on startup)
1731         * src/gpodder/gui.py: Add code to automatically remove old, unplayed
1732         episodes on startup if the specific configuration options have been
1733         set; connect config manager to GUI items for the preferences dialog
1734         * data/gpodder.glade: Add checkbox for automatically removing old,
1735         unplayed episodes from gPodder on startup and a spinbutton to set the
1736         amount of days after which an episode is considered "old"
1738 Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
1739 Merged episode locking patch from Paul Rudkin
1741         * src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
1742         locked, patch by Paul Rudkin <paul@thegithouse.com>
1743         * data/gpodder.glade: Add menu item for toggle locked status
1744         * src/gpodder/libgpodder.py: Add "locked" history
1745         * src/gpodder/libpodcasts.py: When requesting a status icon, also draw
1746         the "Locked" status; is_locked() in podcastItem
1747         * src/gpodder/util.py: Added code for drawing a padlock icon on top of
1748         another (file type) icon; this is used for the "lock episodes" feature
1750 Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
1751 Updated TODO list
1753         * TODO: Updated TODO list
1755 Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
1756 Move observer code out of DownloadStatusManager into ObservableService
1758         * src/gpodder/services.py: Move out all observer-related code like
1759         registration, unregistration and notification to a new
1760         ObservableService class; subclass ObservableService in
1761         DownloadStatusManager; this makes the observer code in
1762         DownloadStatusManager re-usable (will be needed for new sync code)
1764 Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
1765 Selective iPod episode clean-up; "delete older than X days"
1767         * src/gpodder/config.py: Add episode_old_age configuration variable;
1768         is an integer, defaults to 7. This is the number of days after which
1769         an episode will be considered "old"
1770         * src/gpodder/gui.py: iPod cleanup is now done selectively using the
1771         episode selector dialog; the code has been split, because we do not
1772         yet have an episode selector dialog for FS-based sync; add "Downloaded
1773         x days ago" column to "Delete old episodes" dialog and a corresponding
1774         button; call the callback even when no episodes are selected in
1775         gPodderEpisodeSelector
1776         * src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
1777         moved to __init__ to be instance variables (this should fix a bug that
1778         crops up now that we can selectively delete episodes); remove_tracks()
1779         and clean_playlist() have been modified/added to support new episode
1780         selector deletion code
1781         * src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
1782         podcastChannel (it really belongs to the item; this makes code more
1783         readable in other parts of the codebase); add age_in_days(), is_old(),
1784         get_age_string() and age_prop to podcastItem
1785         * src/gpodder/util.py: New function: file_modification_datetime();
1786         returns a datetime.datetime instance of the MTIME (modification
1787         timestamp) of the filename given as parameter or None if the filename
1788         cannot be determined; this is used for the "old episodes" feature
1790 Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
1791 Make has_converter() a bit more intelligent in detecting extensions
1793         * src/gpodder/libconverter.py: Convert given extension to lowercase
1794         and strip a leading "." from the extension, so calling code can also
1795         give the second value of the os.path.splitext() result directly to
1796         has_converter()
1798 Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
1799 Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin
1801         * src/gpodder/config.py: Fix pre-setting code for filechooser-related
1802         code; use set_current_folder() instead of set_filename()
1803         * src/gpodder/gui.py: Fix pre-setting code for filechooser-related
1804         code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch
1806 Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
1807 Support for itms:// links (direct links to the Apple iTunes Music Store)
1809         * src/gpodder/util.py: Support direct itms:// links by splitting out
1810         the iTunes Podcast links parsing routines. This should put us in for
1811         some nice iTunes podcast link support that will automagically
1812         translate iTunes podcast links to the correct RSS feed URL
1814 Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
1815 Support for iTunes Podcast links (http://phobos.apple.com/...)
1817         * src/gpodder/util.py: Add support for subscribing to iTunes Podcast
1818         links (those with phobos.apple.com); new functions:
1819         parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()
1821 Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
1822 Added Galician translation from Teo Ramirez
1824         * data/gpodder.desktop: Added Spanish and Galician translations;
1825         thanks to Teo Ramirez <teoramirez@gmail.com>
1826         * data/messages.pot: Updated from source
1827         * data/po/de.po: Updated
1828         * data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
1829         * data/po/*.po: Updated from source
1830         * setup.py: Added Galician (gl) translation by Teo Ramirez
1832 Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
1833 Sort channel list (finally ;)
1835         * src/gpodder/libpodcasts.py: Sort channels by lowercase title before
1836         returning the channel list in load_channels(); this automagically
1837         makes gPodder's channel list always sorted :)
1838         Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
1839         sending in an intial patch that led to this patch =)
1840         * TODO: Remove implemented item: Sort channel list
1842 Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
1843 Do grayscale "pill" instead of theme-based colors (for bad themes)
1845         * src/gpodder/draw.py: Always draw the "pill" in semi-transparent
1846         black/grey shades so it will work for all GTK themes (even Ubuntu's)
1848 Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
1849 Update channel navigator when iPod/MP3 player sync has finished
1851         * src/gpodder/gui.py: Update channel navigator when iPod sync has
1852         finished, so we can update the "played" status in the channel
1853         navigator when this status has changed after we've synced ("on sync
1854         mark played" option)
1856 Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
1857 Add option to mark episodes as played after transfer to device
1859         * data/gpodder.glade: Option added to preferences dialog
1860         * src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
1861         an episode as played when it gets transferred to a device
1862         * src/gpodder/gui.py: Glue code for GUI + gpodder.config
1863         * src/gpodder/libipodsync.py: On sync, mark episode as played if the
1864         user has selected the "on_sync_mark_played" option
1865         * TODO: Remove implemented/integrated items
1867 Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
1868 Fix a fatal bug with first-run that prevents channel list saving
1870         * src/gpodder/util.py: Always use a file's parent directory to get the
1871         free disk space and return zero free disk space when the parent
1872         directory does not exist
1874 Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
1875 Support for itpc:// URLs
1877         * src/gpodder/util.py: Add support for adding "itpc://" URLs (these
1878         are simply http:// URLs with a different schema, for iTunes)
1880 Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
1881 Draw channel stats (unplayed, downloaded) on channel navigator
1883         * bin/gpodder: We're in development again, so add "+svn"
1884         * src/gpodder/draw.py: Added
1885         * src/gpodder/gui.py: Fix import of renamed "channels_to_model";
1886         re-assign new column numbers for treeChannels' data model; add
1887         cell renderer for pill pixbuf and remove cell renderer for status text
1888         * src/gpodder/libpodcasts.py: Add episode_is_new() function to
1889         podcastChannel to check if an episode can be considered "new"; use the
1890         episode_is_new function in get_new_episodes; add get_episode_stats()
1891         after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
1892         channels_to_model and clean out old, unused code and columns
1894 Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
1895 gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released
1897         * bin/gpodder: gPodder 0.10.2 released :)
1898         * doc/man/gpodder.1: gPodder 0.10.2 released :)
1899         * README: gPodder 0.10.2 released :)
1901 Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
1902 Translation updates
1904         * data/messages.pot: Refreshed from source
1905         * data/po/*.po: Refreshed from messages.pot
1906         * data/po/de.po: Updated German translation
1908 Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
1909 Make sure there is enough free disk space when saving OPML channel list
1911         * src/gpodder/gui.py: Notify user that there's some problem saving the
1912         current channel list when save_channels() return False
1913         * src/gpodder/libpodcasts.py: Pass-through the return value of
1914         gpodder.opml.Exporter.write so calling code knows if saving the
1915         channel list was successful or not
1916         * src/gpodder/opml.py: Check free disk space before saving OPML
1917         channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
1918         for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)
1920 Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
1921 Don't send Referer header when downloading episodes
1923         * src/gpodder/download.py: Some podcasts now implement an
1924         "anti-bandwidth-theft" code that should provide other websites from
1925         not linking to the episodes; as we have sent a Referer header
1926         containing the RSS feed URL, this causes problems; Referer header
1927         sending is therefore disabled now
1929 Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
1930 TODO items from Katy G. B.
1932         * TODO: Updated TODO list
1934 Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
1935 Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)
1937         * src/gpodder/gui.py: Do not hook up tooltip handlers when we are
1938         using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)
1940 Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
1941 Check free disk space before copying files to iPod
1943         * src/gpodder/libipodsync.py: Check if the iPod's filesystem has
1944         enough free disk space before copying files over to it, as to not
1945         corrupt the iTunesDB in certain situations and fail when disk is full;
1946         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1947         * src/gpodder/util.py: Add get_free_disk_space() function that
1948         calculates the free (user-available) disk space on a given path
1950 Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
1951 Add informative tooltips to channel navigator
1953         * src/gpodder/gui.py: Add tooltips to channel navigator that show a
1954         bigger cover image, the title, description, url and used disk space
1955         * src/gpodder/libpodcasts.py: Add save_dir_size property to
1956         podcastChannel that contains the disk usage of the channel's save_dir;
1957         this can be manually updated by calling update_save_dir_size() and
1958         will automatically be updated when the GUI code hooks into the
1959         channel; also add get_cover_pixbuf() that returns a pixbuf of the
1960         cover for a given size or None if there is no valid cover file
1962 Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
1963 Slipstream code (enumerate instead of simple position tracking)
1964         * src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
1965         of episodes instead of keeping track of the position "by hand"
1967 Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
1968 Ignore initial window events from GtkWindow in Config
1970         * src/gpodder/config.py: Add a flag to config manager to ignore window
1971         events until the window has been realized; then, start taking position
1972         and size updates
1974 Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
1975 Improve caching for HTTP redirects and minor errors; cache clean-up
1977         * src/gpodder/cache.py: Cache content when it comes from a HTTP
1978         redirect (301, 302, 307); cache feeds even with parsing errors, so we
1979         can "fill" our cache and not download on every startup
1980         * src/gpodder/libpodcasts.py: Add cache clean-up code after loading
1981         channels; this should keep the feedcache.db file smaller for users
1982         that like to try out new channels (or have used gPodder for a while)
1984 Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
1985 Better file extension guessing for URLs
1987         * src/gpodder/util.py: Improve file_extension_from_url() by adding
1988         additional checks for known good extensions and recurse into the query
1989         string if it looks like an URL; this should fix compatibility problems
1990         for feeds with strange URLs; should provide more reliable guessing;
1991         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
1993 Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
1994 Fix format_filesize() usage in episodes selector and podcastItem
1996         * src/gpodder/gui.py: Use the correct (config-using) format_filesize()
1997         function to generate the total size string in the episode selector
1998         * src/gpodder/libpodcasts.py: Use the correct (config-usig
1999         format_filesize() function to generate the total size string in
2000         podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
2001         pointing that out
2002         * data/gpodder.glade: Use "Preferences" instead of "Preferences..."
2003         which feels a bit better in the GUI
2005 Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
2006 Add "gPodder download folder synchronizer" scripts to repository
2008         * doc/dev/gdfs/gdfs-check.py: Added
2009         * doc/dev/gdfs/gdfs-init.py: Added
2010         * doc/dev/gdfs/README: Added
2012 Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
2013 The mighty episode selector dialog and some menu re-arrangements
2015         * src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
2016         positioning code to GladeWidget to be universally usable; update
2017         "Device" menu item on startup; new functions: delete_episode_list()
2018         and download_episode_list() that both operate on lists of episodes;
2019         add code for invoking gPodderEpisodeSelector for deleting old
2020         episodes; re-work on_itemDownloadAllNew_activate to use the episode
2021         selector instead of hand-crafting a message dialog text; add
2022         update_item_device() function that will handle the hiding, showing and
2023         renaming of the "Device" menu in the menubar; clean-up
2024         gPodderProperties with callback_finished setting (now kwarg-based);
2025         new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
2026         that will prove to be useful in some places in our codebase: it
2027         basically allows the user to select a subset of episodes from a given
2028         list in a quite sophisticated way; new "delete old episodes" menu item
2029         added for cleaning up gPodder's downloads
2030         * src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
2031         method to podcastItem; other convenience properties and functions
2032         needed for the new episode selector dialog: pubdate_prop,
2033         get_filesize_string(), filesize_prop, get_channel_title(),
2034         channel_prop, get_played_string(), played_prop
2035         * data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
2036         gPodder's main menu to be more usable and more compact; also added the
2037         Ctrl+K "Remove old episodes" menu item; also use the correct
2038         "multimedia-player" icon name of a not really representative icon
2040 Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
2041 Support syncing to FS-based MP3 players without subfolders
2043         * data/gpodder.glade: Add checkbox "Create a subfolder for each
2044         channel" to preferences dialog and rename some widgets
2045         * src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
2046         option that defaults to True (create subfolder for each channel)
2047         * src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
2048         to preferences dialog; do more intelligent widget hiding for the
2049         "Player" tab in the preferences dialog (only show relevant widgets)
2050         * src/gpodder/libipodsync.py: Only append channel name as subfolder to
2051         destination folder name when the "fssync_channel_subfolders" option is
2052         True; suggested by Paul Elliot <omahns.home@gmail.com>
2054 Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
2055 Fix offline cache behaviour when time is not set
2057         * src/gpodder/cache.py: Return cached_content in offline mode when
2058         cached_content "is not None" (instead of cached_time "is not None")
2060 Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
2061 Process events before connecting Config to gtk windows
2063         * data/gpodder.glade: Remove default size for main gPodder window, as
2064         this is now handled by the config manager
2065         * src/gpodder/config.py: Process GTK events in the event queue before
2066         connecting to the "configure-event" signal, so we won't get two
2067         configure events for the window for the initial size change
2069 Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
2070 Add error reporting when download fails because of an I/O error
2072         * src/gpodder/download.py: Catch and handle I/O errors in
2073         DownloadThread and format and pass on messages to GUI code when
2074         required; thanks to Florian Richter <Florian_Richter@gmx.de> for
2075         suggesting this feature after having a full disk
2076         * src/gpodder/gui.py: Update tree view when adding a new episode;
2077         add new notification() method and pass this method through to
2078         DownloadThread, so it can present messages to the user (i.e. errors)
2080 Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
2081 Use util.find_command in more places (mplayer detection, ...)
2083         * src/gpodder/libgpodder.py: Use util.find_command to detect the
2084         existence of the "gnome-btdownload" command and spit out a warning log
2085         message when the command is not available
2086         * src/gpodder/libipodsync.py: Use util.find_command to check for an
2087         installed mplayer binary (instead of relying on os.system("which...")
2089 Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
2090 Better command detection for the converter library
2092         * src/gpodder/libconverter.py: Detect existence of commands before
2093         invoking them for converting files; based on a patch by
2094         Nick (nikosapi.org); ConverterCollection is now a dict itself :)
2095         * src/gpodder/util.py: Add new find_command() function that will
2096         search the system's PATH for a specific executable command
2098 Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
2099 Remove extracted cover art when deleting episode files
2101         * src/gpodder/util.py: Apply modified version of a patch from
2102         Nick (nikosapi.org) that is better suited for deleting cover art that
2103         has been extracted with the new eyeD3 cover art extraction code
2105 Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
2106 Patch from Nick (nikosapi) to support eyeD3 cover art extraction
2108         * src/gpodder/libipodsync.py: Apply modified version of a patch from
2109         Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
2110         sync code; remove dependency on PyID3
2111         * README: PyID3 is not a dependency anymore, as we can now use eyeD3
2112         for the same purpose (cover art extraction)
2114 Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
2115 Fix format_filesize() function to be standards-conformant (unit prefixes)
2117         * src/gpodder/config.py: Add "use_si_units" configuration option; if
2118         True, the user will see SI units (MB, kB, ...); if False (the
2119         default); the user will see binary-prefix units (MiB, KiB, ..)
2120         * src/gpodder/libgpodder.py: Add pass-through function
2121         "format_filesize()" to gPodderLib that combines the
2122         util.format_filesize function with the gPodder-specific config option
2123         * src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
2124         <z0idberg@gmx.de> to add support for SI units and binary prefixes to
2125         format_filesize(); this makes the function standards-compliant
2126         * src/gpodder/download.py: Updated to use new format_filesize
2127         * src/gpodder/gui.py: Updated to use new format_filesize
2128         * src/gpodder/libpodcasts.py: Updated to use new format_filesize
2130 Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
2131 New Configuration/Settings Manager; massive code clean-ups
2133         * src/gpodder/config.py: Added new Configuration Manager that
2134         automatically keeps track of saving changed values and is also able to
2135         watch GTK widgets for changes; this should simplify our settings
2136         management and give us a single place for maintaining settings
2137         * src/gpodder/download.py: Access settings from new config manager
2138         * src/gpodder/gui.py: Make use of new config manager to connect
2139         widgets and settings from the GUI directly to the config manager;
2140         remove manual loading and saving of settings; auto-connect as much as
2141         possible in the gPodderProperties dialog to get real-time automatic
2142         configuration saving; fix the other code to use new config manager
2143         * src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
2144         old cruft and dead code that has been lying around in libgpodder for
2145         some time now; remove configuration code; utilize config manager;
2146         unify DownloadHistory+PlaybackHistory in new HistoryStore class;
2147         reduce number of import statements
2148         * src/gpodder/libipodsync.py: Access settings from new config manager
2149         * src/gpodder/libplayers.py: Removed dotdesktop_command()
2150         * src/gpodder/libpodcasts.py: Move locking functionality into this
2151         module, as locking is only used here; access config from new manager
2152         * src/gpodder/services.py: Use config manager to get settings
2153         * src/gpodder/util.py: Add format_desktop_command() function, based on
2154         the dotdesktop_command() function from libplayers
2156 Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
2157 Add ability to open download folder from channel's context menu
2159         * src/gpodder/gui.py: Add "Open download folder" menu item to channel
2160         navigator context menu
2161         * src/gpodder/libgpodder.py: Add open_folder() method that will open
2162         the DE's default folder browser via "xdg-open"
2164 Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
2165 Limit filename on FS-based sync to 50 characters
2167         * src/gpodder/libipodsync.py: Do not allow extremely long file names
2168         that could theoretically be generated by using data from RSS feeds;
2169         this is needed to make FAT-based drives work with files that would
2170         otherwise have file names that are too long
2172 Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
2173 Escape RSS-provided strings in Pango markup
2175         * src/gpodder/gui.py: Escape strings in Pango markup
2176         * bin/gpodder: we're in development again, so "+svn"
2178 Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
2179 gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released
2181         * bin/gpodder: gPodder 0.10.1 released :)
2182         * doc/man/gpodder.1: gPodder 0.10.1 released :)
2183         * README: gPodder 0.10.1 released :)
2184         * data/messages.pot: Refreshed template from source files
2185         * data/po/de.po: Updated German translation for the 0.10.1 release
2186         * data/po/*.po: Refreshed translation files from template
2188 Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
2189 Add "Save episode to file" handling to episode list context menu
2191         * data/gpodder.glade: Use a stock "Save As" button for the "Copy
2192         episode to file" button
2193         * src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
2194         that shows a copy dialog where a user can copy a file to a selected
2195         destination (this is used for "Save episode to file"); use
2196         show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
2197         folder" menu item in episode list context menu and use
2198         show_copy_dialog to carry out the user interaction
2200 Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
2201 Allow "https://" URLs for episode URLs, as we can handle these, too
2203         * src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
2204         can handle https URLs, thanks to Aravind Seshadri
2205         <aravind@aravind.name> who initially reported this bug
2207 Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
2208 Sync videos to the "Video Podcasts" playlist instead of the "Video" menu
2210         * src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
2211         <niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
2212         of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB
2214 Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
2215 sync_filename in podcastItem; cleanup; hide extra progressbar on transfer
2217         * src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
2218         unnecessary second progressbar when only syncing one channel (i.e.
2219         when clicking on the "transfer" button in the main window
2220         * src/gpodder/libgpodder.py: Remove unneeded lexists import and
2221         warning; clean-up
2222         * src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
2223         * src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
2224         returns the custom_sync_name or the title of the episode, based on the
2225         user's configuration settings for FS-based MP3 player sync
2227 Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
2228 Add wishlist items to TODO list from Paul and Wilfred
2230         * TODO: New wishlist items, ideas and suggestions
2232 Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
2233 Limit download progress status updates to reduce CPU load
2235         * src/gpodder/download.py: Limit the amount of status updates the
2236         download threads send to the DownloadStatusManager to one per second;
2237         this should make gPodder less CPU-intensive with many parallel
2238         downloads; thanks to Wilfred van Rooijen for reporting and testing
2240 Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
2241 Update channel models (icons) after iPod synchronization
2243         * src/gpodder/gui.py: Call update_model() on each channel after an
2244         iPod sync, so we can update the played state on the available episodes
2245         lists when played state was changed by the iPod sync
2247 Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
2248 Fix loading of channel metadata (load auth data and settings)
2250         * src/gpodder/libpodcasts.py: Load channel metadata when loading a
2251         podcastChannel object from OPML/LocalDB. This fixes a problem with
2252         authentication data being not loaded and also fixes a bug when the
2253         custom-set channel title was not correctly used throughout the GUI.
2254         Thanks to Nick (nikosapi) for reporting and providing a patch
2256 Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
2257 Finally remove Desktop symlink code; several compatibility fixes
2259         * src/gpodder/download.py: Prevent divide-by-zero errors when
2260         calculating download speed
2261         * src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
2262         percentage done in code for moving the downloaded items folder
2263         * src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
2264         because it's not GUI-accessible anymore and we didn't use it anyway
2265         * src/gpodder/opml.py: Better local filename detection by using
2266         os.path.exists() instead of .startswith('/'); this is also good for
2267         cross-platform compatibility where parts don't usually start with a
2268         forward slash (i.e. Win32)
2270 Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
2271 Channel list selection bug fixes
2273         * src/gpodder/gui.py: Fix some channel list-related problems and
2274         annoyances, based on a patch by Nick (nikosapi)
2275         * bin/gpodder: We're in development again, so "+svn"
2277 Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
2278 gPodder 0.10.0 "Hier spricht Frank Drebin" released
2280         * bin/gpodder: gPodder 0.10.0 released :)
2281         * doc/man/gpodder.1: gPodder 0.10.0 released :)
2282         * README: gPodder 0.10.0 released :) (and: updated dependencies)
2283         * TODO: Updated TODO list (some items are done for 0.10.0 :)
2285 Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
2286 Updated translations from Rosetta (Launchpad.net)
2288         * data/po/es.po: Spanish translation by Julio Acuña
2289         * data/po/pt.po: Portuguese translation by Joel Calado (completed :)
2291 Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
2292 Fix problems with path selection in treeChannels
2294         * src/gpodder/gui.py: Simple bugfix
2296 Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
2297 Center gPodderEpisode on treeAvailable for less mouse hopping
2299         * src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
2300         window on the treeAvailable, because that makes the position of the
2301         opened dialog more predictable and easier to use (as if the
2302         gPodderEpisode dialog was "inside" the treeView from which it opened)
2304 Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
2305 Don't translate feed format string examples
2307         * src/gpodder/gui.py: Don't mark format string examples as
2308         translatable
2310 Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
2311 Small bugfix for updating treeChannels when its model changes
2313         * src/gpodder/gui.py: Bugfix
2315 Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
2316 Removed channel combobox, drag'n'drop improvements + new channel cover editor
2318         * data/gpodder.glade: Remove comboAvailable in gPodder (main window);
2319         add download+clear button in gPodderChannel, rename some items that
2320         are now used in code; make the channel navigator non-shrinkable (so
2321         it is always visible, because we don't have comboAvailable anymore)
2322         * src/gpodder/gui.py: Remove support for the channel combo box,
2323         also known as comboAvailable; clean-up DND code and make treeChannels
2324         the only DND target in the main window; remove some unnecessary
2325         updating of the channel list (calls to updateComboBox);
2326         Changes for the gPodderChannel dialog: Don't automatically download
2327         channel cover when dialog pops up; add "Download" and "Clear" buttons
2328         to the cover editor; add DND support for dropping local files or
2329         images from the web browser to the cover editor (for setting custom
2330         covers on channels with bad or no cover)
2331         * src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
2332         URL is invalid, but the image has already been downloaded (because we
2333         read the downloaded image in the code when it exists, without URL)
2335 Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
2336 Center feed update dialog on main window; scroll reset in chan.navigator
2337         * src/gpodder/gui.py: Reset the current scroll position of the channel
2338         navigator when re-loading the channel list; this fixes an annoyance
2339         that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
2340         with a HUGE channel list (more than 50 channels); also removed the
2341         scroll position reset code from treeAvailable, as we already managed
2342         to only edit the model instead of re-loading it every time; added code
2343         to really center the feed update dialog on gPodder's main window
2345 Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
2346 Replace wget with new gpodder.download module; User-agent support
2348         * bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
2349         for wget, as this is not needed anymore
2350         * src/gpodder/cache.py: Clean-up; remove old logging code; add support
2351         for gpodder.user_agent; log info when there is an error in parsing the
2352         feed, so the user knows why this feed is not cached
2353         * src/gpodder/console.py: Remove DownloadPool, Use new
2354         gpodder.download module for carrying out downloads, remove
2355         wget_version() tester, as this is not needed anymore =)
2356         * src/gpodder/download.py: Added new downloader module that uses
2357         urllib and some custom classes and functions to provide the equivalent
2358         functionality of the obsolete "libwget", but without the wget
2359         dependency and with better accuracy (progress reporting, etc..)
2360         * src/gpodder/gui.py: Utilize new gpodder.download module instead of
2361         libwget
2362         * src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
2363         module that holds the value of the "User-agent" header to send to web
2364         servers when requesting OPMLs, Feeds or download data
2365         * src/gpodder/opml.py: Add support for sending the User-agent header
2366         * src/gpodder/services.py: Make the progress column a float column to
2367         have smoother progress indicuation; add the "acquired" keyword
2368         argument to s_release(); default 'speed' to a translated "Queued"
2369         * src/gpodder/libwget.py: Removed
2370         * doc/dev/redhat-wget-output.txt: Removed
2372 Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
2373 Refreshed pot files and po templates; updated German translation
2375         * data/messages.pot: Refreshed from current source
2376         * data/po/de.po: Refreshed and updated translation
2377         * data/po/*.po: Refreshed from new .pot file
2379 Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
2380 Imported updated translations from Rosetta (Launchpad.net)
2382         * data/po/it.po: Italian translation updated by FFranci72
2383         * data/po/nl.po: Dutch translation updated by Roel Groeneveld
2384         * data/po/pt.po: Portuguese translation updated by Joel Calado
2386 Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
2387 Offline support for feedcache, faster startup, code simplification
2389         * src/gpodder/cache.py: Add support for "offline" keyword argument
2390         * src/gpodder/gui.py: Make intelligent use of "offline" keyword
2391         argument when passed to load_channels(); simplify code for selecting
2392         the active channel in updateComboBox()
2393         * src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
2394         argument in all relevant function calls
2396 Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
2397 New LocalDB using DOM (removes python-xml dependency); channel context menu
2399         * bin/gpodder: Don't check for xml.sax package and modules anymore, as
2400         the dependency on python-xml has been removed with this release
2401         * data/gpodder.glade: Remove the "info" button for the current channel
2402         * src/gpodder/gui.py: Remove localdb-related code and adopt code for
2403         new LocalDB code; add context menu to channel navigator (edit/delete)
2404         * src/gpodder/libipodsync.py: Don't import "liblocaldb" module
2405         * src/gpodder/liblocaldb.py: Removed
2406         * src/gpodder/liblocdbreader.py: Removed
2407         * src/gpodder/liblocdbwriter.py: Removed
2408         * src/gpodder/liblogger.py: Add "traceback" keyword argument to the
2409         log() function; if "True" and in debugging mode, print traceback
2410         * src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
2411         liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
2412         LocalDBReader; customize podcastChannel to new LocalDB code
2413         * src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)
2415 Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
2416 Fix a bug when traversing directories with loop symlinks
2418         * src/gpodder/util.py: Don't dive into subdirectories that are
2419         symbolic links, this is to avoid a situation where looping symlinks
2420         result in the function dead-locking in a endless recursive loop,
2421         thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
2422         out and providing the necessary bug report to fix this issue
2424 Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
2425 Mark episodes as downloaded/deleted when deleting episodes
2427         * src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
2428         as deleted" and mark episodes as downloaded when removing selected
2429         episodes that have not been downloaded yet, as suggested by Holger
2430         Leskien <holger leskien.com>
2431         * src/gpodder/libpodcasts.py: Fix problem when trying to delete
2432         episodes that have not been downloaded
2434 Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
2435 Support for customized file names in MP3 player sync code
2437         * src/gpodder/gui.py: Add supporting code for reading/setting
2438         configuration options for the preferences dialog and a help display
2439         code that displays a guide on how to write custom sync name strings
2440         * src/gpodder/libgpodder.py: New configuration options:
2441         custom_sync_name (holds format string) and
2442         custom_sync_name_enabled (boolean, if the above string should be used)
2443         * src/gpodder/libipodsync.py: Use custom sync name format string and
2444         util's object_string_formatter() function to obtain a file name for
2445         the synchronized episode (or default to episode.title if disabled)
2446         * src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
2447         basename (returns the basename of the URL, without extension) and
2448         published (returns the pubDate of the episode in YYYYMMDD format)
2449         * src/gpodder/util.py: New object_string_formatter() method that
2450         replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
2451         corresponding values of passed-in keyword argument objects
2452         * data/gpodder.glade: Added preferences GUI elements
2454 Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
2455 Check for installed python-xml package on startup (hard dependency)
2457         * bin/gpodder: Add dependency check for PyXML
2459 Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
2460 Fix bug with default window title in gPodder window
2462         * src/gpodder/gui.py: Always set gPodder's default_title attribute
2464 Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
2465 Updated Russian translation from Vladimir Zemlyakov
2467         * data/po/ru.po: Updated
2469 Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
2470 More sanitizing hacks for ugly feeds we don't really like
2472         * src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
2473         multiple enclosures, if there are more than one available; skip
2474         episodes with a buggy download URL (i.e. no supported URL scheme)
2475         * src/gpodder/util.py: Return "(unknown)" if file size cannot be
2476         determined from the string passed to format_filesize(); return "None"
2477         in file_type_by_extension() if the extension is an empty string
2479 Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
2480 Handle enclosures (or lack thereof) better if fields are missing
2482         * src/gpodder/gui.py: Remove refetch_channel_list() function, as this
2483         is not called anywhere from the code (uh, how did i miss that?)
2484         * src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
2485         without length or mime type; ignore episodes without enclosures (it's
2486         not len(enclosures) == 0, but the enclosures attribute doesn't even
2487         exist on entries without enclosures, so make sure to check for that
2489 Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
2490 Use Python's webbrowser module for URL opening; channel dialog clean-up
2492         * bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
2493         * data/gpodder.glade: Remove "cancel" button from gPodderChannel
2494         * src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
2495         of relying on "gnome-open" to be available; remove event handler for
2496         gPodderChannel's "cancel" button
2498 Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
2499 Dependency check for python-feedparser in bin/gpodder
2501         * bin/gpodder: Add dependency check and warning (with exit) if
2502         python-feedparser is not installed, as python-feedparser now is a
2503         dependency of gPodder
2505 Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
2506 Support for modifying DownloadHistory and PlaybackHistory in GUI
2508         * data/gpodder.glade: Added menu items in gPodder main window
2509         * src/gpodder/gui.py: Add menu items to treeAvailable's context menu
2510         to toggle/set downloaded and played status on selected episodes
2511         * src/gpodder/libgpodder.py: Add del_item() function to
2512         DownloadHistory to support removing items from the history list;
2513         enhance history_mark_{played,downloaded}() functions for add/delete
2515 Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
2516 Improved pubDate parsing; episode delete bugfix
2518         * src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
2519         of episodes and use new function in gpodder.util to convert the parsed
2520         pubDate to a string; bugfix for remove downloaded episode by URL
2521         * src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
2522         converts the "updated_parsed" field from feedparser to a RFC2822
2523         string
2525 Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
2526 Remove obsolete documentation in doc/dev; cosmetic changes
2528         * data/po/Makefile: Upgrade to GPLv3
2529         * data/po/README: Mention i18n page on gPodder's website
2530         * doc/dev/build-deps-breezy.txt: Removed
2531         * doc/dev/debian.txt: Removed
2532         * doc/dev/i18n.txt: Removed
2533         * doc/dev/porting.txt: Removed
2534         * doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
2535         files
2537 Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
2538 Upgrade to the GNU General Public License, Version 3
2540         * bin/gpodder: Upgrade to GPLv3
2541         * COPYING: Upgrade to GPLv3
2542         * doc/dev/copyright_notice: Upgrade to GPLv3
2543         * Makefile: Upgrade to GPLv3
2544         * README: Upgrade to GPLv3
2545         * setup.py: Upgrade to GPLv3
2546         * src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
2547         cache, as these are LGPL or other and do not originate from gPodder)
2549 Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
2550 Integration changes, commit and ChangeLog migration
2552         * doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
2553         * Makefile: Make $EDITOR edit "ChangeLog" directly
2555 Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
2556 Last batch of experimental change merges (up to svn r398)
2558         * doc/dev/tepache-howto.txt: Removed
2559         * doc/dev/tepache: Removed
2560         * src/gpodder/gui.py.orig: Removed
2561         * src/gpodder/libwget.py: Send progress = 0.0 on inital status update
2562         * src/gpodder/libpodcasts.py: Try to get episode metadata from several
2563         different properties of the corresponding feedparser entries; warn
2564         user when we couldn't get the episode title and try to get the episode
2565         title from the filename of the URL if we still have not found an
2566         episode title
2567         * src/gpodder/libgpodder.py: Add get_device_name() that returns a
2568         "nice" representative string of the currently selected device that can
2569         be used to represent the device in the GUI
2570         * src/gpodder/util.py: Return "(unknown)" string when bytesize in
2571         format_filesize() when the size has a negative value; make
2572         get_tree_icon() catch errors and be more corrent with icon creation;
2573         add get_first_line() function that extracts the first line of a string
2574         * src/gpodder/libipodsync.py: Add "divx" to list of video extensions
2575         * src/gpodder/services.py: DownloadStatusManager has a new observer
2576         notification: "progress-detail"; add unregister() functionality for
2577         observers; add request_progress_detail() function that can be used to
2578         force a "progress-detail" notification to be sent out to all relevant
2579         observers; remove get_url_by_iter() function as it is not needed
2580         anymore
2581         * src/gpodder/gui.py: Clean-up after tepache dependency removal; new
2582         GladeWidget base class that subclasses SimpleGladeApp and simplifies
2583         class creation for our gPodder windows; add context menu to
2584         treeAvailable; re-work play_or_download() and make it return a list of
2585         boolean indicators on which actions can be performed on the selected
2586         items; move show_message() and show_confirmation() to GladeWidget;
2587         disable editing of the URL in the channel info dialog, this simplifies
2588         code and editing the URL doesn't make so much sense anyway (adding the
2589         new url and removing the old does the same and is easier, code-wise);
2590         add support for cancelling downloads in the available podcasts view;
2591         support live status view and download cancelling in the gPodderEpisode
2592         dialog window by hooking up to DownloadStatusManager as observer
2593         * src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
2594         of weakref for keyword arguments -> properties of new object)
2595         * bin/gpodder: We're using a experimental development version now
2596         * data/gpodder.glade: Add progress bar and associated buttons to
2597         gPodderEpisode dialog
2598         * MANIFEST.in: Removed gpodder.py.orig inclusion
2599         * Makefile: Removed support for tepache
2601 Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
2602 More changes from the experimental branch (up to svn r382)
2604         * src/gpodder/liblocdbreader.py: Clean-up
2605         * src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
2606         a generic download status manager as constructor parameter; remove
2607         downloadStatusManager class (moved to gpodder.services)
2608         * src/gpodder/console.py: More clean-ups; use get_new_episodes()
2609         instead of duplicating code here; simplify the code for wget version
2610         detection
2611         * src/gpodder/libpodcasts.py: Improve channel/episode generation from
2612         feedparser objects (with error handling); utilize download status
2613         manager from "gpodder.services" instead of accepting a download status
2614         manager as parameter; clean up unneeded functions and rename some
2615         functions to make the code more readable; use util.get_tree_icon() for
2616         compositing a nice icon; remove the "played" column from the
2617         treemodel; add local_filename to treemodel
2618         * src/gpodder/liblocdbwriter.py: Clean-up
2619         * src/gpodder/libgpodder.py: Clean-up
2620         * src/gpodder/util.py: Add torrent_filename() function that tries to 
2621         extract the filename of the file a .torrent file contains; add
2622         file_extension_from_url() function that returns the file extension in
2623         a URL; add file_type_by_extension() that returns the type of a file
2624         based on its extension; add get_tree_icon() that loads a named icon
2625         and optionally adds a bullet to it (unplayed status indicator)
2626         * src/gpodder/libipodsync.py: Clean-up
2627         * src/gpodder/services.py: New module that currently contains the
2628         improved DownloadStatusManager and a single object that servces as
2629         download status manager for all parts of gpodder
2630         * src/gpodder/gui.py: Only one column for status/played; use
2631         "gpodder.services" for the download status manager; clean-up
2632         * src/gpodder/liblocaldb.py: Clean-up
2633         * bin/gpodder: Clean-up
2634         * data/gpodder.glade: Clean-up; removed "show played column"
2635         preference in gPodderProperties dialog
2637 Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
2638 First import from experimental branch (up to svn r375)
2640         * src/gpodder/librssreader.py: Removed in favor of python-feedparser
2641         * src/gpodder/libwget.py: Percentage is now a float, don't set to 0
2642         when there has been an error
2643         * src/gpodder/console.py: Use {load,save}_channels methods; code
2644         cleanup and simplification
2645         * src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
2646         * src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
2647         and RSS reading; use shelve for new ChannelSettings class; clean-up
2648         podcastChannel and podcastItem; better TreeModel generator for
2649         podcastChannel (try to cache the model, only updates icons, etc...);
2650         remove downloadRss method in podcastChannel; move DownloadHistory and
2651         Playbackhistory to libgpodder; new load_channels() and save_channels()
2652         functions to save/load the channel list to an OPML file
2653         * src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
2654         and gPodderChannelReader (this is now in libpodcasts as simple
2655         functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
2656         * src/gpodder/gui.py: Use new functions for channel list
2657         loading/saving; only update treemodel for treeAvailable when it's
2658         really necessary
2659         * src/gpodder/liblocaldb.py: Remove unnecessary functions that have
2660         not been used for a while (treemodel-related); use load_channels()
2661         instead of gPodderChannelReader
2664 Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
2665         * ChangeLog: Older changes can be found on the gPodder website at
2666         http://gpodder.berlios.de/releases/0.9.5/ChangeLog