Crop episode list tooltips to a maximum of 400 characters.
Only show tooltips in main window when hovering over the
first column (podcast cover in the podcast list, and the
status icon in the episode list).
This should make the tooltips less annoying.
Thanks to Andrew Bennett and Steve McCarthy for reporting.
Hide the main window before starting vacuuming the
database, so it looks like shutdown is blazingly fast
while still allowing for optimizations to complete.
For the main window and the episode selector dialog, save the
window position, window size and the (boolean) maximized state
and restore this information when the window is re-created.
Thanks to Sebastian Krause for reporting this bug.
You can now use {podcast.title} to insert the title of
the podcast an episode is in for your custom_sync_name.
The old "{channel.title}" syntax is deprecated and
should be converted to the new syntax automatically.
Thanks to Gilles Lehoux for reporting this bug.
Missing are those episodes that are marked as downloaded
but don't exist as files. They have a small alert indicator.
Previously it was only possible to mark them as new, now
you can delete them forever or re-download.
With the configuration option "enable_streaming" enabled,
gPodder will now allow you to stream podcasts from the
server instead of downloading it locally first.
Streamed episodes will look as if they have been
downloaded and afterwards deleted. "Played" status is now
display on deleted episodes, too for this reason.
When writing podcast playlists to a filesystem-based
MP3 player, add "#EXTM3U" in the first line, so some
MP3 players can correctly detect this M3U file as a playlist.
Thanks to Ville-Pekka Vainio for reporting this on Bugzilla.
Let the Desktop Environment / the default BitTorrent
client handle torrent downloads. We just use the default
handler for .torrent files to "open" a torrent file after
download has completed.
Discussed on the mailing list in the following thread:
https://lists.berlios.de/pipermail/gpodder-devel/2008-November/002256.html
Make sure that the user gets notified while we are
downloading feed data, so that the UI does not lock
up or look broken/slow when adding many feeds (e.g.
on initial OPML import).
Also add a GTK Mainloop iteration when blocking the
main thread for adding podcasts to not make the UI
freeze, but update it in every loop iteration.
In addition to selecting audio and video players, we
now support "default" as a way of having a good default
that we can pass to a utility function that can later
be made cross-platform more easily.
Also cleaned up some UI issues with the video player,
so the label of the custom command is shown and the
combo box has the correct size.
We should only allow saving episodes as files from the
episode list - or provide a more advanced UI that can
also do Bluetooth sending and other things. Having the
"Save as" button there as the single "advanced" action
makes the dialog look strange.
Add a "Never download" action button to the new episodes
selector, so users can remove the "new" status of episodes
directly from the episode selector.
In addition, this also fixes a bug where "Mark as new" was
not displayed in certain situations in the context menu.
When no episodes are selected, the action of the Cancel
button is closing the dialog (no action to be cancelled).
When episodes are selected, the action of the button is
really cancelling the selection (and closing the dialog).
This should (hopefully) make the UI more easy to use :)
Remove the URL entry box and make the "Subscribe" menu
item and the "Ctrl+L" keystroke always pop up a dialog.
Add an advanced option for users that want to have
the URL entry box back (for now). We might decide
that we will completely remove this feature in the future.
Add a graphical way to manage M3U playlists on MP3
player devices. This can be enabled in the advanced
configuration editor. Depending on your MP3 player,
you might want to enable Windows-style path separators
and switch between absolute or relative file paths.
GPodder don't respect option 'Sync only not played episodes'
so when you click sync button it says something like 'You
need 1.5 GB of free space on your device' because it counts
size of all episodes, not only new ones.
This patch fixes this problem by counting only episodes that
are going to be copied to the MP3 player.
In the main window, when focusing the URL entry box in
the first tab, make sure that we are on the first page,
or else the user will be confused where to enter the URL.
Thanks to Steve for spotting this bug.
When using the "Save to disk" context menu item to save
multiple episodes to disk, remember the last selected
folder, so if one wants to save all episodes into the
same folder, navigation to that folder has only to be
done once.
cache.py: Make the fetch function aware of 401 errors as well as a channel's
username and password attributes. The function will create the
appropriate url if it needs to.
gui.py: Add a new dialog to handle username and password input.
Modify add_new_channel to be aware of 401 errors generated by a
podcastChannel's load() function. This means that the user no longer
needs to enter a funky-looking url to get password-protected feeds to
work. If a feed requires authentication, the user will be prompted.
Fix a bug where the "add podcast url" entry wasn't reset after adding
a feed that looked like a web page.
libpodcasts.py: Make podcastChannel.load() throw a HTTPAuthError exception
if a 401 error occurs when downloadind the feed.
Add a Dependency Manager window and class to handle optional
dependencies and make it possible to register special features
with their description and optional dependencies.
This fixes the problem with "malformed special characters"
in show notes. The HTML passed to the gtkhtml widget was
incomplete and gtkhtml was unable to detect the right
charset (if it even tries to do that at all).
Support the gtkhtml2 module in the episode description
dialog to display HTML markup for the episode description
and allow links and HTML lists, etc.. in the dialog.
New episodes coming from feedparser no longer overwrite
the ones that are already in the database, but update
them properly, keeping states and file size.
Changes to the database are only commited after a channel is added,
updated or when all downloads are finished, but not during episode
related operations. The threaded feed updater benefits the most
from this change.
libpodcasts.py: Moved a bunch of code from channels_to_model to
update_channel_model_by_iter, a new method which allows updating of
individual iters in a model.
gui.py: Added only_selected_channel option to updateComboBox which makes it
only update the selected channel's iter. This saves a bit of time when doing
simple tasks like marking an episode as played. So far only playback_episode
and for_each_selected_episode_url take advantage of this option.
Updated README, version info in bin/gpodder and manpage.
Removed icon conversion in Makefile.
Refresh messages.pot and all translation files.
Don't resize gPodder icon in the about dialog.
Enjoy this new feature-packed release of gPodder :)
gui.py: Add "block" keyword argument to add_new_channel which essentially
makes the channel adder behave like the old, non-threaded version. Without
this, when adding channels from the OPML lister the new episodes window
shows that there is nothing to download.
Allow switching the notebook tabs in the main window by
pressing Ctrl + Page Up and Ctrl + Page Down.
Thanks to Justin Forest for suggesting this feature on
the gpodder-devel mailing list.
With the new threaded feed cache updater, we only want to
set the color in our ListStore of channels when the model
is available already. This isn't the case on startup.
Thanks to Bernd Schlapsi for reporting this bug on Bugzilla.
Reword the confirmation dialog when deleting episodes from
iPods and MP3 players, so the user knows that the episodes
are only going to be removed from the device, and not from
the gPodder library.
This change has been suggested in the May 2008 User Test.
When exporting the subscription list to an OPML file,
show a success message with the number of podcasts exported,
so the user knows that everything went well.
This change has been suggested in the May 2008 User Test.
This changeset is based on gPodder-r777-threaded-feed-updater.patch, plus:
config.py: Add new config option 'max_simulaneous_feeds_updating'. By default
it's set to 3, otherwise on slower devices the gui might become un-responsive
during an update because of the CPU resources required by python-feedparser.
Add 'color_updating_feeds' option for users that want to manually set it.
gui.py: Make channels that are updating a different color, this gives the user
a better idea of what's going on. Populate the update progress bar with a
message and clear the previous fraction setting before starting a feed update.
Colors dict for feed updates, default color is "None", so we don't need to do
any fancy color detection (for all different GTK themes).
libpodcasts.py: Make the channel's iter available as podcastChannel.iter.
Don't use the <span foreground=...> markup tag to set the channel's text
color, use the gtk.CellRendererText 'foreground' attribute. This allows
the text color to be easily changed by modifying the channel model.
Require the colors dict to be passed to channels_to_model.
For Maemo, add "Update selected podcast" menu item to the Subscriptions menu,
because the context menu isn't easily reached at the moment (no right-click).
On Maemo, gtk.gdk.WINDOW_STATE_ICONIFIED doesn't seem to work but
gtk.gdk.WINDOW_STATE_WITHDRAWN works pretty well. With this change
if the gPodder window is minimized to the tray (hidden) then the
self.minimized flag is set to true.
(Without this, auto-update doesn't work reliably)
Add support for sort columns in the gPodderEpisodeSelector.
If a sort attribute is specified, it will create a hidden sort column.
This patch also changes each call to this episode selector.
When getting the title of the main window initially,
it has the value "None" on Maemo. Fix this by checking
for this value and using "gPodder" instead.
The FancyURLopener by default ignores HTTP errors and
downloads the HTTP error page without letting the calling
code know. We override the method and report the error
in our subclass, so we can provide feedback to the user
in the logfile and in a message dialog.
This bug has been reported by Markus Golser
When downloading an episode, and the urllib progress
callback reports a totalSize of "-1", gPodder would show
large negative values for the download progress. This is
fixed by using the size reported by the feed in this case
and also adding some sanity checks (progress between the
values 0 and 100) and spitting out warnings in case of
problems.
This bug has been reported by Heinz Erhard
The on_treeAvailable_row_activated function had some of
its parameters removed in one of the last commits, which
prevents the preferences dialog from opening when double-
clicking an episode in the available episode list.