Add menu item that links to gPodder's new bug tracker
[gpodder.git] / ChangeLog
blob57dceb7f6944bed1f8d589073ecaddcd7ceea966
1 Mon, 14 Jan 2008 20:23:02 +0100 <thp@perli.net>
2 Add menu item that links to gPodder's new bug tracker
4         * data/gpodder.glade: Add bug tracker item to help menu
5         * src/gpodder/gui.py: Add code to open a webbrowser with the bug
6         tracker when the bug tracker icon is clicked
8 Mon, 14 Jan 2008 20:04:25 +0100 <thp@perli.net>
9 Add a checkbox to keep episodes when removing channels
11         * src/gpodder/gui.py: Add a checkbox to the confirmation dialog when
12         removing a podcast channel, so the user has the option to remove the
13         podcast feed from gPodder's subscription list, but still keep the
14         downloaded files on the harddisk (via a checkbox in the dialog)
15         (Closes: http://gpodder.thegithouse.com/show_bug.cgi?id=1)
17 Thu, 10 Jan 2008 08:44:00 +0100 <thp@perli.net>
18 Updated Russian translation by Hex
20         * data/po/ru.po: Updated Russian translation by
21         Hex <justin.forest@gmail.com>
23 Wed, 09 Jan 2008 23:43:56 +0100 <thp@perli.net>
24 Merge tray icon and notification patch by Jérôme Chabod
26         * data/gpodder.glade: UI support for tray icon settings and
27         configuration options for auto update feeds (auto update based on a
28         patch by Nick (nikosapi.org)
29         * src/gpodder/config.py: Add configuration options that support the
30         tray icon, notification bubble and automatic update/close functions
31         * src/gpodder/gui.py: Support the tray icon in the GUI; link the
32         configuration options with the preferences dialog; re-work the channel
33         update dialog to be more slipstreamed
34         * src/gpodder/trayicon.py: Added new tray icon module by
35         Jérôme Chabod <jerome.chabod@ifrance.com>; initial idea from old
36         gPodder TODO list by Holger Bauer
38 Wed, 09 Jan 2008 23:09:54 +0100 <thp@perli.net>
39 Updated Swedish translation by Anders Kvist
41         * data/po/sv.po: Swedish translation updated by
42         Anders Kvist <kvistkvist@telia.com>
44 Wed, 09 Jan 2008 11:52:23 +0100 <thp@perli.net>
45 Use os.rename to make channel list saving atomic
47         * src/gpodder/opml.py: Make the saving of the channel list atomic by
48         first saving it to a temporary file and then using os.rename to really
49         move the file in place (this should make the channel list saving very
50         stable and protect against certain bad system conditions where the
51         channel list is emptied); thanks to Jens Thiele <karme@berlios.de> for
52         the suggestion and pointers to improve the channel saving code
54 Sat, 05 Jan 2008 15:34:23 +0100 <thp@perli.net>
55 Make logging in libpodcasts less verbose
57         * src/gpodder/libpodcasts.py: Remove some verbose logging code
59 Wed, 02 Jan 2008 15:39:04 +0100 <thp@perli.net>
60 Migrate from channels.xml (from 0.9.4) to channels.opml if needed
62         * src/gpodder/libgpodder.py: Add code to check if channels.xml exists
63         but channels.opml doesn't and if so, try to convert from channels.xml
64         to channels.opml, so users upgrading from 0.9.4 directly will have
65         their channel list automatically converted;
66         thanks to Tim Michelsen for the bug report and helpful Ubuntu info
68 Tue, 01 Jan 2008 23:32:50 +0100 <thp@perli.net>
69 Add download completion notification support
71         * src/gpodder/download.py: Notify the download status manager when a
72         download has been completed successfully
73         * src/gpodder/services.py: Add download-complete signal to list of
74         possible signals and download_completed() method to be used by
75         downloads to notify the status manager of a successful download
77 Sat, 29 Dec 2007 14:21:51 +0100 <thp@perli.net>
78 Patch the feedparser module to correctly process democracynow.org
80         * src/gpodder/cache.py: Add a patch_feedparser() method that checks of
81         the feedparser module correctly maps the "plain" content-type to the
82         correct "text/plain" content-type and if not, replace the
83         mapContentType method with a fixed one; this should make the audio
84         podcast on democracynow.org working (thanks to Clark Burbidge for the
85         bug report)
87 Sun, 23 Dec 2007 12:20:25 +0100 <thp@perli.net>
88 Better username/password extraction from URLs
90         * src/gpodder/util.py: Improve username and password extraction for
91         authentication URLs; thanks to Nick <me@nikosapi.org> and Shane
92         Donohoe <priestoftime@googlemail.com> for reporting this bug and
93         sending in a patch; this should allow for e-mail address usernames
95 Sat, 22 Dec 2007 11:44:41 +0100 <thp@perli.net>
96 Also delete old episodes that have disappeared from the feed
98         * src/gpodder/gui.py: When deleting old episodes automatically, also
99         delete episodes that have disappeared from the RSS feed and are only
100         available locally; thanks to Pieter De Decker <pdedecker@gmail.com>
101         for the very detailed and helpful bug report :)
103 Thu, 20 Dec 2007 01:33:15 +0100 <thp@perli.net>
104 Stability updates: Feed cache update, old PyCairo versions
106         * src/gpodder/draw.py: Add a workaround for pycairo versions less than
107         1.1.6. Thanks to Chris Arnold for reporting this bug on the
108         gpodder-devel mailing list and taking the time to test the patch and
109         report back and provide useful information for debugging this error
110         * src/gpodder/gui.py: Close the feed cache update dialog even when the
111         user clicks on "cancel" (would have stayed there otherwise)
113 Tue, 18 Dec 2007 10:13:44 +0100 <thp@perli.net>
114 Merge "delete episode after sync" patch from Jérôme Chabod
116         * data/gpodder.glade: Add GUI elements in preferences dialog to select
117         what to do after episode sync (nothing, delete or mark played)
118         * src/gpodder/config.py: Add "on_sync_delete" configuration option
119         * src/gpodder/gui.py: Glue "on_sync_delete" config and GUI together
120         * src/gpodder/libipodsync.py: If the configuration option
121         on_sync_delete is set, remove the episode after successfully copying
122         it to the iPod or MP3 player (the whole patch has been initially done
123         by Jérôme Chabod <jerome.chabod@france.com> with some modifications)
124         * src/gpodder/libpodcasts.py: Make delete_from_disk() a bit more
125         robust, so it doesn't disturb libipodsync's functionality
127 Mon, 17 Dec 2007 16:26:43 +0100 <thp@perli.net>
128 Remove invalid channel cover images when loading fails
130         * src/gpodder/libpodcasts.py: Remove the cover_file of a channel when
131         it cannot be loaded (assume something went wrong when downloading the
132         cover file); re-downloading the cover manually can solve the problem
134 Mon, 17 Dec 2007 15:00:17 +0100 <thp@perli.net>
135 Fix typo in last commit
137         * src/gpodder/libipodsync.py: Fix typo in last commit
139 Mon, 17 Dec 2007 11:21:10 +0100 <thp@perli.net>
140 Modify played handling in iPod sync when "on sync mark played" is active
142         * src/gpodder/libipodsync.py: Don't copy played state from PC to iPod
143         if the on_sync_mark_played option is set
145 Sat, 15 Dec 2007 15:58:23 +0100 <thp@perli.net>
146 Merge patch from Leonid Ponomarev to gdfs
148         * doc/dev/gdfs/gdfs-init.py: Merge patch from Leonid Ponomarev to add
149         support for the system's native encoding, based on the $LANG
150         environment variable. This should add support for episodes and
151         channels with international characters as titles
153 Sat, 15 Dec 2007 15:11:46 +0100 <thp@perli.net>
154 Updated Dutch translation by Pieter De Decker
156         * bin/gpodder: We're in development again: "+svn"
157         * data/po/nl.po: Updated Dutch translation from Pieter De Decker
159 Thu, 13 Dec 2007 08:32:54 +0100 <thp@perli.net>
160 gPodder 0.10.3 "A Stop at Willoughby" released
162         * bin/gpodder: gPodder 0.10.3 released :)
163         * README: gPodder 0.10.3 released :)
164         * doc/man/gpodder.1: gPodder 0.10.3 released :)
165         * data/messages.pot: Updated from source
166         * data/po/de.po: Updated German translation
167         * data/po/*.po: Updated from messages.pot
169 Thu, 13 Dec 2007 08:02:29 +0100 <thp@perli.net>
170 Link the gPodder Documentation Wiki from the help pages
172         * data/gpodder.glade: Help menu: gPodder Homepage (instead of website)
173         and Documentation Wiki (instead of Mailing list)
174         * src/gpodder/gui.py: Open gPodder Wiki instead of mailing list page
176 Wed, 12 Dec 2007 21:39:03 +0100 <thp@perli.net>
177 Remove TODO file from MANIFEST.in
179         * MANIFEST.in: Of course we have to remove non-existing files from the
180         MANIFEST.in file, too.. so TODO is now finally gone :)
182 Wed, 12 Dec 2007 21:30:00 +0100 <thp@perli.net>
183 Manage TODO list on the gPodder Wiki
185         * TODO: Removed; new location: http://gpodderwiki.jottit.com/todo
187 Wed, 12 Dec 2007 20:55:00 +0100 <thp@perli.net>
188 Configuration for "old" episodes; automatically remove old episodes
190         * src/gpodder/config.py: New boolean auto_remove_old_episodes
191         configuration option that defaults to False (remove on startup)
192         * src/gpodder/gui.py: Add code to automatically remove old, unplayed
193         episodes on startup if the specific configuration options have been
194         set; connect config manager to GUI items for the preferences dialog
195         * data/gpodder.glade: Add checkbox for automatically removing old,
196         unplayed episodes from gPodder on startup and a spinbutton to set the
197         amount of days after which an episode is considered "old"
199 Wed, 12 Dec 2007 19:44:15 +0100 <thp@perli.net>
200 Merged episode locking patch from Paul Rudkin
202         * src/gpodder/gui.py: Merged "lock episodes" patch to mark episodes as
203         locked, patch by Paul Rudkin <paul@thegithouse.com>
204         * data/gpodder.glade: Add menu item for toggle locked status
205         * src/gpodder/libgpodder.py: Add "locked" history
206         * src/gpodder/libpodcasts.py: When requesting a status icon, also draw
207         the "Locked" status; is_locked() in podcastItem
208         * src/gpodder/util.py: Added code for drawing a padlock icon on top of
209         another (file type) icon; this is used for the "lock episodes" feature
211 Tue, 11 Dec 2007 22:10:03 +0100 <thp@perli.net>
212 Updated TODO list
214         * TODO: Updated TODO list
216 Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
217 Move observer code out of DownloadStatusManager into ObservableService
219         * src/gpodder/services.py: Move out all observer-related code like
220         registration, unregistration and notification to a new
221         ObservableService class; subclass ObservableService in
222         DownloadStatusManager; this makes the observer code in
223         DownloadStatusManager re-usable (will be needed for new sync code)
225 Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
226 Selective iPod episode clean-up; "delete older than X days"
228         * src/gpodder/config.py: Add episode_old_age configuration variable;
229         is an integer, defaults to 7. This is the number of days after which
230         an episode will be considered "old"
231         * src/gpodder/gui.py: iPod cleanup is now done selectively using the
232         episode selector dialog; the code has been split, because we do not
233         yet have an episode selector dialog for FS-based sync; add "Downloaded
234         x days ago" column to "Delete old episodes" dialog and a corresponding
235         button; call the callback even when no episodes are selected in
236         gPodderEpisodeSelector
237         * src/gpodder/libipodsync.py: Class variables of gPodder_iPodSync
238         moved to __init__ to be instance variables (this should fix a bug that
239         crops up now that we can selectively delete episodes); remove_tracks()
240         and clean_playlist() have been modified/added to support new episode
241         selector deletion code
242         * src/gpodder/libpodcasts.py: Move is_played() to podcastItem from
243         podcastChannel (it really belongs to the item; this makes code more
244         readable in other parts of the codebase); add age_in_days(), is_old(),
245         get_age_string() and age_prop to podcastItem
246         * src/gpodder/util.py: New function: file_modification_datetime();
247         returns a datetime.datetime instance of the MTIME (modification
248         timestamp) of the filename given as parameter or None if the filename
249         cannot be determined; this is used for the "old episodes" feature
251 Sun, 09 Dec 2007 16:45:11 +0100 <thp@perli.net>
252 Make has_converter() a bit more intelligent in detecting extensions
254         * src/gpodder/libconverter.py: Convert given extension to lowercase
255         and strip a leading "." from the extension, so calling code can also
256         give the second value of the os.path.splitext() result directly to
257         has_converter()
259 Sun, 09 Dec 2007 13:20:49 +0100 <thp@perli.net>
260 Fix pre-setting code for filechooser buttons; Patch by Paul Rudkin
262         * src/gpodder/config.py: Fix pre-setting code for filechooser-related
263         code; use set_current_folder() instead of set_filename()
264         * src/gpodder/gui.py: Fix pre-setting code for filechooser-related
265         code; thanks to Paul Rudkin <paul@thegithouse.com> for the patch
267 Thu, 06 Dec 2007 09:37:57 +0100 <thp@perli.net>
268 Support for itms:// links (direct links to the Apple iTunes Music Store)
270         * src/gpodder/util.py: Support direct itms:// links by splitting out
271         the iTunes Podcast links parsing routines. This should put us in for
272         some nice iTunes podcast link support that will automagically
273         translate iTunes podcast links to the correct RSS feed URL
275 Thu, 06 Dec 2007 09:29:09 +0100 <thp@perli.net>
276 Support for iTunes Podcast links (http://phobos.apple.com/...)
278         * src/gpodder/util.py: Add support for subscribing to iTunes Podcast
279         links (those with phobos.apple.com); new functions:
280         parse_itunes_xml(), http_get_and_gunzip() and itunes_dicover_rss()
282 Thu, 06 Dec 2007 09:15:57 +0100 <thp@perli.net>
283 Added Galician translation from Teo Ramirez
285         * data/gpodder.desktop: Added Spanish and Galician translations;
286         thanks to Teo Ramirez <teoramirez@gmail.com>
287         * data/messages.pot: Updated from source
288         * data/po/de.po: Updated
289         * data/po/gl.po: Added NEW Galician (gl) translation by Teo Ramirez
290         * data/po/*.po: Updated from source
291         * setup.py: Added Galician (gl) translation by Teo Ramirez
293 Thu, 06 Dec 2007 08:35:12 +0100 <thp@perli.net>
294 Sort channel list (finally ;)
296         * src/gpodder/libpodcasts.py: Sort channels by lowercase title before
297         returning the channel list in load_channels(); this automagically
298         makes gPodder's channel list always sorted :)
299         Thanks to FriedBunny <friedbunny@kulturny.com> for suggesting this and
300         sending in an intial patch that led to this patch =)
301         * TODO: Remove implemented item: Sort channel list
303 Tue, 04 Dec 2007 23:28:27 +0100 <thp@perli.net>
304 Do grayscale "pill" instead of theme-based colors (for bad themes)
306         * src/gpodder/draw.py: Always draw the "pill" in semi-transparent
307         black/grey shades so it will work for all GTK themes (even Ubuntu's)
309 Mon, 03 Dec 2007 21:35:56 +0100 <thp@perli.net>
310 Update channel navigator when iPod/MP3 player sync has finished
312         * src/gpodder/gui.py: Update channel navigator when iPod sync has
313         finished, so we can update the "played" status in the channel
314         navigator when this status has changed after we've synced ("on sync
315         mark played" option)
317 Mon, 03 Dec 2007 21:24:17 +0100 <thp@perli.net>
318 Add option to mark episodes as played after transfer to device
320         * data/gpodder.glade: Option added to preferences dialog
321         * src/gpodder/config.py: Add option "on_sync_mark_played"; will mark
322         an episode as played when it gets transferred to a device
323         * src/gpodder/gui.py: Glue code for GUI + gpodder.config
324         * src/gpodder/libipodsync.py: On sync, mark episode as played if the
325         user has selected the "on_sync_mark_played" option
326         * TODO: Remove implemented/integrated items
328 Sat, 01 Dec 2007 15:19:29 +0100 <thp@perli.net>
329 Fix a fatal bug with first-run that prevents channel list saving
331         * src/gpodder/util.py: Always use a file's parent directory to get the
332         free disk space and return zero free disk space when the parent
333         directory does not exist
335 Thu, 29 Nov 2007 08:53:36 +0100 <thp@perli.net>
336 Support for itpc:// URLs
338         * src/gpodder/util.py: Add support for adding "itpc://" URLs (these
339         are simply http:// URLs with a different schema, for iTunes)
341 Tue, 27 Nov 2007 22:59:26 +0100 <thp@perli.net>
342 Draw channel stats (unplayed, downloaded) on channel navigator
344         * bin/gpodder: We're in development again, so add "+svn"
345         * src/gpodder/draw.py: Added
346         * src/gpodder/gui.py: Fix import of renamed "channels_to_model";
347         re-assign new column numbers for treeChannels' data model; add
348         cell renderer for pill pixbuf and remove cell renderer for status text
349         * src/gpodder/libpodcasts.py: Add episode_is_new() function to
350         podcastChannel to check if an episode can be considered "new"; use the
351         episode_is_new function in get_new_episodes; add get_episode_stats()
352         after an idea from Paul Rudkin <paul@thegithouse.com>; re-factor
353         channels_to_model and clean out old, unused code and columns
355 Mon, 26 Nov 2007 08:57:04 +0100 <thp@perli.net>
356 gPodder 0.10.2 "Ein schweineschnauzen Sandwich, bitte!" released
358         * bin/gpodder: gPodder 0.10.2 released :)
359         * doc/man/gpodder.1: gPodder 0.10.2 released :)
360         * README: gPodder 0.10.2 released :)
362 Mon, 26 Nov 2007 08:52:49 +0100 <thp@perli.net>
363 Translation updates
365         * data/messages.pot: Refreshed from source
366         * data/po/*.po: Refreshed from messages.pot
367         * data/po/de.po: Updated German translation
369 Sun, 25 Nov 2007 11:50:46 +0100 <thp@perli.net>
370 Make sure there is enough free disk space when saving OPML channel list
372         * src/gpodder/gui.py: Notify user that there's some problem saving the
373         current channel list when save_channels() return False
374         * src/gpodder/libpodcasts.py: Pass-through the return value of
375         gpodder.opml.Exporter.write so calling code knows if saving the
376         channel list was successful or not
377         * src/gpodder/opml.py: Check free disk space before saving OPML
378         channels in Exporter.write; thanks to Jens Thiele <karme@berlios.de>
379         for reporting this bug on the Debian BTS (Closes: Debian Bug #452490)
381 Thu, 22 Nov 2007 21:52:35 +0100 <thp@perli.net>
382 Don't send Referer header when downloading episodes
384         * src/gpodder/download.py: Some podcasts now implement an
385         "anti-bandwidth-theft" code that should provide other websites from
386         not linking to the episodes; as we have sent a Referer header
387         containing the RSS feed URL, this causes problems; Referer header
388         sending is therefore disabled now
390 Sun, 18 Nov 2007 15:33:50 +0100 <thp@perli.net>
391 TODO items from Katy G. B.
393         * TODO: Updated TODO list
395 Sat, 17 Nov 2007 18:38:36 +0100 <thp@perli.net>
396 Backwards-compatibility for PyGTK less than 2.12 (for GtkTooltip)
398         * src/gpodder/gui.py: Do not hook up tooltip handlers when we are
399         using PyGTK less than 2.12 (which introduced the gtk.Tooltip API)
401 Thu, 15 Nov 2007 11:07:42 +0100 <thp@perli.net>
402 Check free disk space before copying files to iPod
404         * src/gpodder/libipodsync.py: Check if the iPod's filesystem has
405         enough free disk space before copying files over to it, as to not
406         corrupt the iTunesDB in certain situations and fail when disk is full;
407         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
408         * src/gpodder/util.py: Add get_free_disk_space() function that
409         calculates the free (user-available) disk space on a given path
411 Wed, 14 Nov 2007 21:55:18 +0100 <thp@perli.net>
412 Add informative tooltips to channel navigator
414         * src/gpodder/gui.py: Add tooltips to channel navigator that show a
415         bigger cover image, the title, description, url and used disk space
416         * src/gpodder/libpodcasts.py: Add save_dir_size property to
417         podcastChannel that contains the disk usage of the channel's save_dir;
418         this can be manually updated by calling update_save_dir_size() and
419         will automatically be updated when the GUI code hooks into the
420         channel; also add get_cover_pixbuf() that returns a pixbuf of the
421         cover for a given size or None if there is no valid cover file
423 Wed, 14 Nov 2007 19:19:11 +0100 <thp@perli.net>
424 Slipstream code (enumerate instead of simple position tracking)
425         * src/gpodder/libipodsync.py: Use enumerate() to iterate over a list
426         of episodes instead of keeping track of the position "by hand"
428 Wed, 14 Nov 2007 19:17:51 +0100 <thp@perli.net>
429 Ignore initial window events from GtkWindow in Config
431         * src/gpodder/config.py: Add a flag to config manager to ignore window
432         events until the window has been realized; then, start taking position
433         and size updates
435 Mon, 12 Nov 2007 20:25:39 +0100 <thp@perli.net>
436 Improve caching for HTTP redirects and minor errors; cache clean-up
438         * src/gpodder/cache.py: Cache content when it comes from a HTTP
439         redirect (301, 302, 307); cache feeds even with parsing errors, so we
440         can "fill" our cache and not download on every startup
441         * src/gpodder/libpodcasts.py: Add cache clean-up code after loading
442         channels; this should keep the feedcache.db file smaller for users
443         that like to try out new channels (or have used gPodder for a while)
445 Sun, 11 Nov 2007 14:24:17 +0100 <thp@perli.net>
446 Better file extension guessing for URLs
448         * src/gpodder/util.py: Improve file_extension_from_url() by adding
449         additional checks for known good extensions and recurse into the query
450         string if it looks like an URL; this should fix compatibility problems
451         for feeds with strange URLs; should provide more reliable guessing;
452         thanks to Nicolas Quienot <niqooo@gmail.com> for the bug report
454 Fri, 09 Nov 2007 10:05:36 +0100 <thp@perli.net>
455 Fix format_filesize() usage in episodes selector and podcastItem
457         * src/gpodder/gui.py: Use the correct (config-using) format_filesize()
458         function to generate the total size string in the episode selector
459         * src/gpodder/libpodcasts.py: Use the correct (config-usig
460         format_filesize() function to generate the total size string in
461         podcastItem; thanks to Pieter De Decker <pdedecker@gmail.com> for
462         pointing that out
463         * data/gpodder.glade: Use "Preferences" instead of "Preferences..."
464         which feels a bit better in the GUI
466 Thu, 08 Nov 2007 21:25:19 +0100 <thp@perli.net>
467 Add "gPodder download folder synchronizer" scripts to repository
469         * doc/dev/gdfs/gdfs-check.py: Added
470         * doc/dev/gdfs/gdfs-init.py: Added
471         * doc/dev/gdfs/README: Added
473 Thu, 08 Nov 2007 20:01:13 +0100 <thp@perli.net>
474 The mighty episode selector dialog and some menu re-arrangements
476         * src/gpodder/gui.py: Move the "center_on_widget" keyword-based window
477         positioning code to GladeWidget to be universally usable; update
478         "Device" menu item on startup; new functions: delete_episode_list()
479         and download_episode_list() that both operate on lists of episodes;
480         add code for invoking gPodderEpisodeSelector for deleting old
481         episodes; re-work on_itemDownloadAllNew_activate to use the episode
482         selector instead of hand-crafting a message dialog text; add
483         update_item_device() function that will handle the hiding, showing and
484         renaming of the "Device" menu in the menubar; clean-up
485         gPodderProperties with callback_finished setting (now kwarg-based);
486         new, might, fancy, customizable and uber-sexy gPodderEpisodeSelector
487         that will prove to be useful in some places in our codebase: it
488         basically allows the user to select a subset of episodes from a given
489         list in a quite sophisticated way; new "delete old episodes" menu item
490         added for cleaning up gPodder's downloads
491         * src/gpodder/libpodcasts.py: Add delete_from_disk() convenience
492         method to podcastItem; other convenience properties and functions
493         needed for the new episode selector dialog: pubdate_prop,
494         get_filesize_string(), filesize_prop, get_channel_title(),
495         channel_prop, get_played_string(), played_prop
496         * data/gpodder.glade: new gPodderEpisode dialog; re-structuring of
497         gPodder's main menu to be more usable and more compact; also added the
498         Ctrl+K "Remove old episodes" menu item; also use the correct
499         "multimedia-player" icon name of a not really representative icon
501 Thu, 08 Nov 2007 12:07:30 +0100 <thp@perli.net>
502 Support syncing to FS-based MP3 players without subfolders
504         * data/gpodder.glade: Add checkbox "Create a subfolder for each
505         channel" to preferences dialog and rename some widgets
506         * src/gpodder/config.py: Add boolean "fssync_channel_subfolders"
507         option that defaults to True (create subfolder for each channel)
508         * src/gpodder/gui.py: Hook up config option fssync_channel_subfolders
509         to preferences dialog; do more intelligent widget hiding for the
510         "Player" tab in the preferences dialog (only show relevant widgets)
511         * src/gpodder/libipodsync.py: Only append channel name as subfolder to
512         destination folder name when the "fssync_channel_subfolders" option is
513         True; suggested by Paul Elliot <omahns.home@gmail.com>
515 Thu, 08 Nov 2007 11:28:17 +0100 <thp@perli.net>
516 Fix offline cache behaviour when time is not set
518         * src/gpodder/cache.py: Return cached_content in offline mode when
519         cached_content "is not None" (instead of cached_time "is not None")
521 Tue, 06 Nov 2007 12:37:41 +0100 <thp@perli.net>
522 Process events before connecting Config to gtk windows
524         * data/gpodder.glade: Remove default size for main gPodder window, as
525         this is now handled by the config manager
526         * src/gpodder/config.py: Process GTK events in the event queue before
527         connecting to the "configure-event" signal, so we won't get two
528         configure events for the window for the initial size change
530 Mon, 05 Nov 2007 13:51:26 +0100 <thp@perli.net>
531 Add error reporting when download fails because of an I/O error
533         * src/gpodder/download.py: Catch and handle I/O errors in
534         DownloadThread and format and pass on messages to GUI code when
535         required; thanks to Florian Richter <Florian_Richter@gmx.de> for
536         suggesting this feature after having a full disk
537         * src/gpodder/gui.py: Update tree view when adding a new episode;
538         add new notification() method and pass this method through to
539         DownloadThread, so it can present messages to the user (i.e. errors)
541 Mon, 05 Nov 2007 12:54:35 +0100 <thp@perli.net>
542 Use util.find_command in more places (mplayer detection, ...)
544         * src/gpodder/libgpodder.py: Use util.find_command to detect the
545         existence of the "gnome-btdownload" command and spit out a warning log
546         message when the command is not available
547         * src/gpodder/libipodsync.py: Use util.find_command to check for an
548         installed mplayer binary (instead of relying on os.system("which...")
550 Mon, 05 Nov 2007 01:12:15 +0100 <thp@perli.net>
551 Better command detection for the converter library
553         * src/gpodder/libconverter.py: Detect existence of commands before
554         invoking them for converting files; based on a patch by
555         Nick (nikosapi.org); ConverterCollection is now a dict itself :)
556         * src/gpodder/util.py: Add new find_command() function that will
557         search the system's PATH for a specific executable command
559 Mon, 05 Nov 2007 00:21:39 +0100 <thp@perli.net>
560 Remove extracted cover art when deleting episode files
562         * src/gpodder/util.py: Apply modified version of a patch from
563         Nick (nikosapi.org) that is better suited for deleting cover art that
564         has been extracted with the new eyeD3 cover art extraction code
566 Mon, 05 Nov 2007 00:17:12 +0100 <thp@perli.net>
567 Patch from Nick (nikosapi) to support eyeD3 cover art extraction
569         * src/gpodder/libipodsync.py: Apply modified version of a patch from
570         Nick (nikosapi.org) to utilize eyeD3 for cover art extraction in iPod
571         sync code; remove dependency on PyID3
572         * README: PyID3 is not a dependency anymore, as we can now use eyeD3
573         for the same purpose (cover art extraction)
575 Sat, 03 Nov 2007 14:14:09 +0100 <thp@perli.net>
576 Fix format_filesize() function to be standards-conformant (unit prefixes)
578         * src/gpodder/config.py: Add "use_si_units" configuration option; if
579         True, the user will see SI units (MB, kB, ...); if False (the
580         default); the user will see binary-prefix units (MiB, KiB, ..)
581         * src/gpodder/libgpodder.py: Add pass-through function
582         "format_filesize()" to gPodderLib that combines the
583         util.format_filesize function with the gPodder-specific config option
584         * src/gpodder/util.py: Apply a modified patch from Gerrit Sangel
585         <z0idberg@gmx.de> to add support for SI units and binary prefixes to
586         format_filesize(); this makes the function standards-compliant
587         * src/gpodder/download.py: Updated to use new format_filesize
588         * src/gpodder/gui.py: Updated to use new format_filesize
589         * src/gpodder/libpodcasts.py: Updated to use new format_filesize
591 Fri, 02 Nov 2007 17:28:05 +0100 <thp@perli.net>
592 New Configuration/Settings Manager; massive code clean-ups
594         * src/gpodder/config.py: Added new Configuration Manager that
595         automatically keeps track of saving changed values and is also able to
596         watch GTK widgets for changes; this should simplify our settings
597         management and give us a single place for maintaining settings
598         * src/gpodder/download.py: Access settings from new config manager
599         * src/gpodder/gui.py: Make use of new config manager to connect
600         widgets and settings from the GUI directly to the config manager;
601         remove manual loading and saving of settings; auto-connect as much as
602         possible in the gPodderProperties dialog to get real-time automatic
603         configuration saving; fix the other code to use new config manager
604         * src/gpodder/libgpodder.py: MASSIVE code clean-up; removed lots of
605         old cruft and dead code that has been lying around in libgpodder for
606         some time now; remove configuration code; utilize config manager;
607         unify DownloadHistory+PlaybackHistory in new HistoryStore class;
608         reduce number of import statements
609         * src/gpodder/libipodsync.py: Access settings from new config manager
610         * src/gpodder/libplayers.py: Removed dotdesktop_command()
611         * src/gpodder/libpodcasts.py: Move locking functionality into this
612         module, as locking is only used here; access config from new manager
613         * src/gpodder/services.py: Use config manager to get settings
614         * src/gpodder/util.py: Add format_desktop_command() function, based on
615         the dotdesktop_command() function from libplayers
617 Fri, 02 Nov 2007 07:49:38 +0100 <thp@perli.net>
618 Add ability to open download folder from channel's context menu
620         * src/gpodder/gui.py: Add "Open download folder" menu item to channel
621         navigator context menu
622         * src/gpodder/libgpodder.py: Add open_folder() method that will open
623         the DE's default folder browser via "xdg-open"
625 Thu, 01 Nov 2007 15:29:00 +0100 <thp@perli.net>
626 Limit filename on FS-based sync to 50 characters
628         * src/gpodder/libipodsync.py: Do not allow extremely long file names
629         that could theoretically be generated by using data from RSS feeds;
630         this is needed to make FAT-based drives work with files that would
631         otherwise have file names that are too long
633 Wed, 31 Oct 2007 15:22:32 +0100 <thp@perli.net>
634 Escape RSS-provided strings in Pango markup
636         * src/gpodder/gui.py: Escape strings in Pango markup
637         * bin/gpodder: we're in development again, so "+svn"
639 Sun, 28 Oct 2007 16:27:14 +0100 <thp@perli.net>
640 gPodder 0.10.1 "Nukular, das Wort heißt Nukular" released
642         * bin/gpodder: gPodder 0.10.1 released :)
643         * doc/man/gpodder.1: gPodder 0.10.1 released :)
644         * README: gPodder 0.10.1 released :)
645         * data/messages.pot: Refreshed template from source files
646         * data/po/de.po: Updated German translation for the 0.10.1 release
647         * data/po/*.po: Refreshed translation files from template
649 Sun, 28 Oct 2007 15:25:56 +0100 <thp@perli.net>
650 Add "Save episode to file" handling to episode list context menu
652         * data/gpodder.glade: Use a stock "Save As" button for the "Copy
653         episode to file" button
654         * src/gpodder/gui.py: Add new show_copy_dialog() method to GladeWidget
655         that shows a copy dialog where a user can copy a file to a selected
656         destination (this is used for "Save episode to file"); use
657         show_copy_dialog in "Save As" in gPodderEpisode; add "Save episode to
658         folder" menu item in episode list context menu and use
659         show_copy_dialog to carry out the user interaction
661 Sun, 28 Oct 2007 13:30:40 +0100 <thp@perli.net>
662 Allow "https://" URLs for episode URLs, as we can handle these, too
664         * src/gpodder/util.py: Allow "https://" as a valid URL scheme, as we
665         can handle https URLs, thanks to Aravind Seshadri
666         <aravind@aravind.name> who initially reported this bug
668 Thu, 25 Oct 2007 14:00:01 +0200 <thp@perli.net>
669 Sync videos to the "Video Podcasts" playlist instead of the "Video" menu
671         * src/gpodder/libipodsync.py: Merged patch from Nicolas Quienot
672         <niqooo@gmail.com> to sync videos to the "Video Podcasts" menu instead
673         of the "Videos" menu, as documented on http://ipodlinux.org/ITunesDB
675 Tue, 23 Oct 2007 09:24:52 +0200 <thp@perli.net>a
676 sync_filename in podcastItem; cleanup; hide extra progressbar on transfer
678         * src/gpodder/gui.py: Use podcastItem's sync_filename(); hide the
679         unnecessary second progressbar when only syncing one channel (i.e.
680         when clicking on the "transfer" button in the main window
681         * src/gpodder/libgpodder.py: Remove unneeded lexists import and
682         warning; clean-up
683         * src/gpodder/libipodsync.py: Use podcastItem's sync_filename()
684         * src/gpodder/libpodcasts.py: Add sync_filename() to podcastItem,
685         returns the custom_sync_name or the title of the episode, based on the
686         user's configuration settings for FS-based MP3 player sync
688 Sun, 07 Oct 2007 14:38:31 +0200 <thp@perli.net>
689 Add wishlist items to TODO list from Paul and Wilfred
691         * TODO: New wishlist items, ideas and suggestions
693 Sat, 06 Oct 2007 12:39:57 +0200 <thp@perli.net>
694 Limit download progress status updates to reduce CPU load
696         * src/gpodder/download.py: Limit the amount of status updates the
697         download threads send to the DownloadStatusManager to one per second;
698         this should make gPodder less CPU-intensive with many parallel
699         downloads; thanks to Wilfred van Rooijen for reporting and testing
701 Tue, 02 Oct 2007 17:59:29 +0200 <thp@perli.net>
702 Update channel models (icons) after iPod synchronization
704         * src/gpodder/gui.py: Call update_model() on each channel after an
705         iPod sync, so we can update the played state on the available episodes
706         lists when played state was changed by the iPod sync
708 Sat, 29 Sep 2007 14:12:15 +0200 <thp@perli.net>
709 Fix loading of channel metadata (load auth data and settings)
711         * src/gpodder/libpodcasts.py: Load channel metadata when loading a
712         podcastChannel object from OPML/LocalDB. This fixes a problem with
713         authentication data being not loaded and also fixes a bug when the
714         custom-set channel title was not correctly used throughout the GUI.
715         Thanks to Nick (nikosapi) for reporting and providing a patch
717 Tue, 25 Sep 2007 22:02:19 +0200 <thp@perli.net>
718 Finally remove Desktop symlink code; several compatibility fixes
720         * src/gpodder/download.py: Prevent divide-by-zero errors when
721         calculating download speed
722         * src/gpodder/gui.py: Prevent divide-by-zero errors when calculating
723         percentage done in code for moving the downloaded items folder
724         * src/gpodder/libgpodder.py: Remove the "Symlink on Desktop" code,
725         because it's not GUI-accessible anymore and we didn't use it anyway
726         * src/gpodder/opml.py: Better local filename detection by using
727         os.path.exists() instead of .startswith('/'); this is also good for
728         cross-platform compatibility where parts don't usually start with a
729         forward slash (i.e. Win32)
731 Mon, 24 Sep 2007 00:09:44 +0200 <thp@perli.net>
732 Channel list selection bug fixes
734         * src/gpodder/gui.py: Fix some channel list-related problems and
735         annoyances, based on a patch by Nick (nikosapi)
736         * bin/gpodder: We're in development again, so "+svn"
738 Fri, 21 Sep 2007 02:07:43 +0200 <thp@perli.net>
739 gPodder 0.10.0 "Hier spricht Frank Drebin" released
741         * bin/gpodder: gPodder 0.10.0 released :)
742         * doc/man/gpodder.1: gPodder 0.10.0 released :)
743         * README: gPodder 0.10.0 released :) (and: updated dependencies)
744         * TODO: Updated TODO list (some items are done for 0.10.0 :)
746 Fri, 21 Sep 2007 02:05:10 +0200 <thp@perli.net>
747 Updated translations from Rosetta (Launchpad.net)
749         * data/po/es.po: Spanish translation by Julio Acuña
750         * data/po/pt.po: Portuguese translation by Joel Calado (completed :)
752 Fri, 21 Sep 2007 01:46:38 +0200 <thp@perli.net>
753 Fix problems with path selection in treeChannels
755         * src/gpodder/gui.py: Simple bugfix
757 Fri, 21 Sep 2007 00:32:51 +0200 <thp@perli.net>
758 Center gPodderEpisode on treeAvailable for less mouse hopping
760         * src/gpodder/gui.py: If possible, center the gPodderEpisode dialog
761         window on the treeAvailable, because that makes the position of the
762         opened dialog more predictable and easier to use (as if the
763         gPodderEpisode dialog was "inside" the treeView from which it opened)
765 Fri, 21 Sep 2007 00:07:49 +0200 <thp@perli.net>
766 Don't translate feed format string examples
768         * src/gpodder/gui.py: Don't mark format string examples as
769         translatable
771 Wed, 19 Sep 2007 17:21:09 +0200 <thp@perli.net>
772 Small bugfix for updating treeChannels when its model changes
774         * src/gpodder/gui.py: Bugfix
776 Wed, 19 Sep 2007 16:57:41 +0200 <thp@perli.net>
777 Removed channel combobox, drag'n'drop improvements + new channel cover editor
779         * data/gpodder.glade: Remove comboAvailable in gPodder (main window);
780         add download+clear button in gPodderChannel, rename some items that
781         are now used in code; make the channel navigator non-shrinkable (so
782         it is always visible, because we don't have comboAvailable anymore)
783         * src/gpodder/gui.py: Remove support for the channel combo box,
784         also known as comboAvailable; clean-up DND code and make treeChannels
785         the only DND target in the main window; remove some unnecessary
786         updating of the channel list (calls to updateComboBox);
787         Changes for the gPodderChannel dialog: Don't automatically download
788         channel cover when dialog pops up; add "Download" and "Clear" buttons
789         to the cover editor; add DND support for dropping local files or
790         images from the web browser to the cover editor (for setting custom
791         covers on channels with bad or no cover)
792         * src/gpodder/libgpodder.py: Don't abort get_image_from_url() if the
793         URL is invalid, but the image has already been downloaded (because we
794         read the downloaded image in the code when it exists, without URL)
796 Wed, 19 Sep 2007 14:23:40 +0200 <thp@perli.net>
797 Center feed update dialog on main window; scroll reset in chan.navigator
798         * src/gpodder/gui.py: Reset the current scroll position of the channel
799         navigator when re-loading the channel list; this fixes an annoyance
800         that Alistair Sutton <alistair.sutton@gmail.com> reported when dealing
801         with a HUGE channel list (more than 50 channels); also removed the
802         scroll position reset code from treeAvailable, as we already managed
803         to only edit the model instead of re-loading it every time; added code
804         to really center the feed update dialog on gPodder's main window
806 Tue, 18 Sep 2007 20:15:56 +0200 <thp@perli.net>
807 Replace wget with new gpodder.download module; User-agent support
809         * bin/gpodder: Set "gpodder.user_agent" field on startup; remove check
810         for wget, as this is not needed anymore
811         * src/gpodder/cache.py: Clean-up; remove old logging code; add support
812         for gpodder.user_agent; log info when there is an error in parsing the
813         feed, so the user knows why this feed is not cached
814         * src/gpodder/console.py: Remove DownloadPool, Use new
815         gpodder.download module for carrying out downloads, remove
816         wget_version() tester, as this is not needed anymore =)
817         * src/gpodder/download.py: Added new downloader module that uses
818         urllib and some custom classes and functions to provide the equivalent
819         functionality of the obsolete "libwget", but without the wget
820         dependency and with better accuracy (progress reporting, etc..)
821         * src/gpodder/gui.py: Utilize new gpodder.download module instead of
822         libwget
823         * src/gpodder/__init__.py: Add "user_agent" variable to the gpodder
824         module that holds the value of the "User-agent" header to send to web
825         servers when requesting OPMLs, Feeds or download data
826         * src/gpodder/opml.py: Add support for sending the User-agent header
827         * src/gpodder/services.py: Make the progress column a float column to
828         have smoother progress indicuation; add the "acquired" keyword
829         argument to s_release(); default 'speed' to a translated "Queued"
830         * src/gpodder/libwget.py: Removed
831         * doc/dev/redhat-wget-output.txt: Removed
833 Tue, 18 Sep 2007 02:30:04 +0200 <thp@perli.net>
834 Refreshed pot files and po templates; updated German translation
836         * data/messages.pot: Refreshed from current source
837         * data/po/de.po: Refreshed and updated translation
838         * data/po/*.po: Refreshed from new .pot file
840 Tue, 18 Sep 2007 02:19:19 +0200 <thp@perli.net>
841 Imported updated translations from Rosetta (Launchpad.net)
843         * data/po/it.po: Italian translation updated by FFranci72
844         * data/po/nl.po: Dutch translation updated by Roel Groeneveld
845         * data/po/pt.po: Portuguese translation updated by Joel Calado
847 Tue, 18 Sep 2007 02:14:19 +0200 <thp@perli.net>
848 Offline support for feedcache, faster startup, code simplification
850         * src/gpodder/cache.py: Add support for "offline" keyword argument
851         * src/gpodder/gui.py: Make intelligent use of "offline" keyword
852         argument when passed to load_channels(); simplify code for selecting
853         the active channel in updateComboBox()
854         * src/gpodder/libpodcasts.py: Pass-through of "offline" keyword
855         argument in all relevant function calls
857 Sat, 15 Sep 2007 16:22:28 +0200 <thp@perli.net>
858 New LocalDB using DOM (removes python-xml dependency); channel context menu
860         * bin/gpodder: Don't check for xml.sax package and modules anymore, as
861         the dependency on python-xml has been removed with this release
862         * data/gpodder.glade: Remove the "info" button for the current channel
863         * src/gpodder/gui.py: Remove localdb-related code and adopt code for
864         new LocalDB code; add context menu to channel navigator (edit/delete)
865         * src/gpodder/libipodsync.py: Don't import "liblocaldb" module
866         * src/gpodder/liblocaldb.py: Removed
867         * src/gpodder/liblocdbreader.py: Removed
868         * src/gpodder/liblocdbwriter.py: Removed
869         * src/gpodder/liblogger.py: Add "traceback" keyword argument to the
870         log() function; if "True" and in debugging mode, print traceback
871         * src/gpodder/libpodcasts.py: Merge code from old liblocaldb and
872         liblocdbreader/liblocdbwriter to this module as LocalDBWriter and
873         LocalDBReader; customize podcastChannel to new LocalDB code
874         * src/gpodder/libwget.py: Remove localdb-specific code (now obsolete)
876 Wed, 12 Sep 2007 23:07:23 +0200 <thp@perli.net>
877 Fix a bug when traversing directories with loop symlinks
879         * src/gpodder/util.py: Don't dive into subdirectories that are
880         symbolic links, this is to avoid a situation where looping symlinks
881         result in the function dead-locking in a endless recursive loop,
882         thanks to Bjørn Rasmussen <bjoernr@sensewave.com> for pointing that
883         out and providing the necessary bug report to fix this issue
885 Sun, 09 Sep 2007 18:47:20 +0200 <thp@perli.net>
886 Mark episodes as downloaded/deleted when deleting episodes
888         * src/gpodder/gui.py: Rename "Mark [...] as downloaded" to "Mark [...]
889         as deleted" and mark episodes as downloaded when removing selected
890         episodes that have not been downloaded yet, as suggested by Holger
891         Leskien <holger leskien.com>
892         * src/gpodder/libpodcasts.py: Fix problem when trying to delete
893         episodes that have not been downloaded
895 Sat, 08 Sep 2007 16:45:21 +0200 <thp@perli.net>
896 Support for customized file names in MP3 player sync code
898         * src/gpodder/gui.py: Add supporting code for reading/setting
899         configuration options for the preferences dialog and a help display
900         code that displays a guide on how to write custom sync name strings
901         * src/gpodder/libgpodder.py: New configuration options:
902         custom_sync_name (holds format string) and
903         custom_sync_name_enabled (boolean, if the above string should be used)
904         * src/gpodder/libipodsync.py: Use custom sync name format string and
905         util's object_string_formatter() function to obtain a file name for
906         the synchronized episode (or default to episode.title if disabled)
907         * src/gpodder/libpodcasts.py: Add new property methods to podcastItem:
908         basename (returns the basename of the URL, without extension) and
909         published (returns the pubDate of the episode in YYYYMMDD format)
910         * src/gpodder/util.py: New object_string_formatter() method that
911         replaces {OBJECTNAME.ATTRNAME} substrings in a string with the
912         corresponding values of passed-in keyword argument objects
913         * data/gpodder.glade: Added preferences GUI elements
915 Wed, 05 Sep 2007 10:14:09 +0200 <thp@perli.net>
916 Check for installed python-xml package on startup (hard dependency)
918         * bin/gpodder: Add dependency check for PyXML
920 Sun, 02 Sep 2007 15:01:48 +0200 <thp@perli.net>
921 Fix bug with default window title in gPodder window
923         * src/gpodder/gui.py: Always set gPodder's default_title attribute
925 Sun, 02 Sep 2007 14:33:21 +0200 <thp@perli.net>
926 Updated Russian translation from Vladimir Zemlyakov
928         * data/po/ru.po: Updated
930 Sun, 02 Sep 2007 14:23:17 +0200 <thp@perli.net>
931 More sanitizing hacks for ugly feeds we don't really like
933         * src/gpodder/libpodcasts.py: Negotiate which enclosure to select from
934         multiple enclosures, if there are more than one available; skip
935         episodes with a buggy download URL (i.e. no supported URL scheme)
936         * src/gpodder/util.py: Return "(unknown)" if file size cannot be
937         determined from the string passed to format_filesize(); return "None"
938         in file_type_by_extension() if the extension is an empty string
940 Fri, 31 Aug 2007 23:38:01 +0200 <thp@perli.net>
941 Handle enclosures (or lack thereof) better if fields are missing
943         * src/gpodder/gui.py: Remove refetch_channel_list() function, as this
944         is not called anywhere from the code (uh, how did i miss that?)
945         * src/gpodder/libpodcasts.py: Be more liberal to enclosure tags
946         without length or mime type; ignore episodes without enclosures (it's
947         not len(enclosures) == 0, but the enclosures attribute doesn't even
948         exist on entries without enclosures, so make sure to check for that
950 Fri, 31 Aug 2007 20:03:03 +0200 <thp@perli.net>
951 Use Python's webbrowser module for URL opening; channel dialog clean-up
953         * bin/gpodder: Set version to 0.9.5+svn (this is where we are now)
954         * data/gpodder.glade: Remove "cancel" button from gPodderChannel
955         * src/gpodder/gui.py: Use "webbrowser" module for URL opening instead
956         of relying on "gnome-open" to be available; remove event handler for
957         gPodderChannel's "cancel" button
959 Thu, 30 Aug 2007 21:06:28 +0200 <thp@perli.net>
960 Dependency check for python-feedparser in bin/gpodder
962         * bin/gpodder: Add dependency check and warning (with exit) if
963         python-feedparser is not installed, as python-feedparser now is a
964         dependency of gPodder
966 Thu, 30 Aug 2007 20:51:46 +0200 <thp@perli.net>
967 Support for modifying DownloadHistory and PlaybackHistory in GUI
969         * data/gpodder.glade: Added menu items in gPodder main window
970         * src/gpodder/gui.py: Add menu items to treeAvailable's context menu
971         to toggle/set downloaded and played status on selected episodes
972         * src/gpodder/libgpodder.py: Add del_item() function to
973         DownloadHistory to support removing items from the history list;
974         enhance history_mark_{played,downloaded}() functions for add/delete
976 Thu, 30 Aug 2007 20:46:48 +0200 <thp@perli.net>
977 Improved pubDate parsing; episode delete bugfix
979         * src/gpodder/libpodcasts.py: Let feedparser parse the pubDate field
980         of episodes and use new function in gpodder.util to convert the parsed
981         pubDate to a string; bugfix for remove downloaded episode by URL
982         * src/gpodder/util.py: Add updated_parsed_to_rfc2822() function that
983         converts the "updated_parsed" field from feedparser to a RFC2822
984         string
986 Thu, 30 Aug 2007 12:03:24 +0200 <thp@perli.net>
987 Remove obsolete documentation in doc/dev; cosmetic changes
989         * data/po/Makefile: Upgrade to GPLv3
990         * data/po/README: Mention i18n page on gPodder's website
991         * doc/dev/build-deps-breezy.txt: Removed
992         * doc/dev/debian.txt: Removed
993         * doc/dev/i18n.txt: Removed
994         * doc/dev/porting.txt: Removed
995         * doc/dev/svncl.sed: Upgrade to GPLv3; modify look added and removed
996         files
998 Wed, 29 Aug 2007 20:26:50 +0200 <thp@perli.net>
999 Upgrade to the GNU General Public License, Version 3
1001         * bin/gpodder: Upgrade to GPLv3
1002         * COPYING: Upgrade to GPLv3
1003         * doc/dev/copyright_notice: Upgrade to GPLv3
1004         * Makefile: Upgrade to GPLv3
1005         * README: Upgrade to GPLv3
1006         * setup.py: Upgrade to GPLv3
1007         * src/gpodder/*.py: Upgrade to GPLv3 (except for SimpleGladeApp and
1008         cache, as these are LGPL or other and do not originate from gPodder)
1010 Wed, 29 Aug 2007 19:32:22 +0200 <thp@perli.net>
1011 Integration changes, commit and ChangeLog migration
1013         * doc/dev/svncl.sed: Use tabs instead of 8 spaces for ChangeLog edit
1014         * Makefile: Make $EDITOR edit "ChangeLog" directly
1016 Wed, 29 Aug 2007 19:17:36 +0200 <thp@perli.net>
1017 Last batch of experimental change merges (up to svn r398)
1019         * doc/dev/tepache-howto.txt: Removed
1020         * doc/dev/tepache: Removed
1021         * src/gpodder/gui.py.orig: Removed
1022         * src/gpodder/libwget.py: Send progress = 0.0 on inital status update
1023         * src/gpodder/libpodcasts.py: Try to get episode metadata from several
1024         different properties of the corresponding feedparser entries; warn
1025         user when we couldn't get the episode title and try to get the episode
1026         title from the filename of the URL if we still have not found an
1027         episode title
1028         * src/gpodder/libgpodder.py: Add get_device_name() that returns a
1029         "nice" representative string of the currently selected device that can
1030         be used to represent the device in the GUI
1031         * src/gpodder/util.py: Return "(unknown)" string when bytesize in
1032         format_filesize() when the size has a negative value; make
1033         get_tree_icon() catch errors and be more corrent with icon creation;
1034         add get_first_line() function that extracts the first line of a string
1035         * src/gpodder/libipodsync.py: Add "divx" to list of video extensions
1036         * src/gpodder/services.py: DownloadStatusManager has a new observer
1037         notification: "progress-detail"; add unregister() functionality for
1038         observers; add request_progress_detail() function that can be used to
1039         force a "progress-detail" notification to be sent out to all relevant
1040         observers; remove get_url_by_iter() function as it is not needed
1041         anymore
1042         * src/gpodder/gui.py: Clean-up after tepache dependency removal; new
1043         GladeWidget base class that subclasses SimpleGladeApp and simplifies
1044         class creation for our gPodder windows; add context menu to
1045         treeAvailable; re-work play_or_download() and make it return a list of
1046         boolean indicators on which actions can be performed on the selected
1047         items; move show_message() and show_confirmation() to GladeWidget;
1048         disable editing of the URL in the channel info dialog, this simplifies
1049         code and editing the URL doesn't make so much sense anyway (adding the
1050         new url and removing the old does the same and is easier, code-wise);
1051         add support for cancelling downloads in the available podcasts view;
1052         support live status view and download cancelling in the gPodderEpisode
1053         dialog window by hooking up to DownloadStatusManager as observer
1054         * src/gpodder/SimpleGladeApp.py: Customize for gPodder (remove usage
1055         of weakref for keyword arguments -> properties of new object)
1056         * bin/gpodder: We're using a experimental development version now
1057         * data/gpodder.glade: Add progress bar and associated buttons to
1058         gPodderEpisode dialog
1059         * MANIFEST.in: Removed gpodder.py.orig inclusion
1060         * Makefile: Removed support for tepache
1062 Wed, 29 Aug 2007 19:05:57 +0200 <thp@perli.net>
1063 More changes from the experimental branch (up to svn r382)
1065         * src/gpodder/liblocdbreader.py: Clean-up
1066         * src/gpodder/libwget.py: Use "gpodder.services" instead of accepting
1067         a generic download status manager as constructor parameter; remove
1068         downloadStatusManager class (moved to gpodder.services)
1069         * src/gpodder/console.py: More clean-ups; use get_new_episodes()
1070         instead of duplicating code here; simplify the code for wget version
1071         detection
1072         * src/gpodder/libpodcasts.py: Improve channel/episode generation from
1073         feedparser objects (with error handling); utilize download status
1074         manager from "gpodder.services" instead of accepting a download status
1075         manager as parameter; clean up unneeded functions and rename some
1076         functions to make the code more readable; use util.get_tree_icon() for
1077         compositing a nice icon; remove the "played" column from the
1078         treemodel; add local_filename to treemodel
1079         * src/gpodder/liblocdbwriter.py: Clean-up
1080         * src/gpodder/libgpodder.py: Clean-up
1081         * src/gpodder/util.py: Add torrent_filename() function that tries to 
1082         extract the filename of the file a .torrent file contains; add
1083         file_extension_from_url() function that returns the file extension in
1084         a URL; add file_type_by_extension() that returns the type of a file
1085         based on its extension; add get_tree_icon() that loads a named icon
1086         and optionally adds a bullet to it (unplayed status indicator)
1087         * src/gpodder/libipodsync.py: Clean-up
1088         * src/gpodder/services.py: New module that currently contains the
1089         improved DownloadStatusManager and a single object that servces as
1090         download status manager for all parts of gpodder
1091         * src/gpodder/gui.py: Only one column for status/played; use
1092         "gpodder.services" for the download status manager; clean-up
1093         * src/gpodder/liblocaldb.py: Clean-up
1094         * bin/gpodder: Clean-up
1095         * data/gpodder.glade: Clean-up; removed "show played column"
1096         preference in gPodderProperties dialog
1098 Wed, 29 Aug 2007 18:49:37 +0200 <thp@perli.net>
1099 First import from experimental branch (up to svn r375)
1101         * src/gpodder/librssreader.py: Removed in favor of python-feedparser
1102         * src/gpodder/libwget.py: Percentage is now a float, don't set to 0
1103         when there has been an error
1104         * src/gpodder/console.py: Use {load,save}_channels methods; code
1105         cleanup and simplification
1106         * src/gpodder/cache.py: Add python-feedcache module from Doug Hellman
1107         * src/gpodder/libpodcasts.py: Use opml and feedcache for channel list
1108         and RSS reading; use shelve for new ChannelSettings class; clean-up
1109         podcastChannel and podcastItem; better TreeModel generator for
1110         podcastChannel (try to cache the model, only updates icons, etc...);
1111         remove downloadRss method in podcastChannel; move DownloadHistory and
1112         Playbackhistory to libgpodder; new load_channels() and save_channels()
1113         functions to save/load the channel list to an OPML file
1114         * src/gpodder/libgpodder.py: BIG clean-up; remove gPodderChannelWriter
1115         and gPodderChannelReader (this is now in libpodcasts as simple
1116         functions); add DownloadHistory and PlaybackHistory from libpodcasts; 
1117         * src/gpodder/gui.py: Use new functions for channel list
1118         loading/saving; only update treemodel for treeAvailable when it's
1119         really necessary
1120         * src/gpodder/liblocaldb.py: Remove unnecessary functions that have
1121         not been used for a while (treemodel-related); use load_channels()
1122         instead of gPodderChannelReader
1125 Wed, 29 Aug 2007 18:31:16 +0200 <thp@perli.net>
1126         * ChangeLog: Older changes can be found on the gPodder website at
1127         http://gpodder.berlios.de/releases/0.9.5/ChangeLog