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