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"
85 * src/gpodder/libpodcasts.py: Add "is_deleted()" convenience function
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
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
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
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
489 * src/gpodder/download.py: Better rate limiting, implemented by Paul
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"
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
721 * src/gpodder/util.py: Strip whitespace before and after the string in
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
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
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
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
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
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
983 * src/gpodder/libpodcasts.py: Add update_m3u_playlist() function to
984 podcastChannel and call it when removing and adding downloaded
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
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
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
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
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
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
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
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
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
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
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
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
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
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>
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
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>
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
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
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
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
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
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
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
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
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
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
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
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