An interrupted sync results in a partial file on the device and syncing
again would not finish sending the file. Ideally it could also compare
checksums but that would slow down syncing.
Fixes#1416.
Add 'custom_downloader' member var to DownloadTask. Use it in
episode.get_playback_url() to get a preview file name.
Also add episode.can_preview() method and use it in ep.can_play().
Derive abstract classes CustomDownload and CustomDownloader from ABC
from the abc module. Decorate abstract methods with @abstractmethod.
Add abstract 'partial_filename' property to CustomDownload and make it
concrete in the derived DefaultDownload class. This property holds the
full path of the temporary file where the episode is being downloaded
or None, if the downloader does not use a previewable temporary file.
The preferences-desktop icon is not available for 64x64 and larger icon
sizes, and gtk displays a missing icon instead of falling back to
smaller icons. Switching to preferences-other-symbolic would fix the
issue, but the other toolbar icons should probably be changed to
symbolic to match.
When dragging and dropping a podcast into another program, e.g VLC, some
filenames would cause issues (i.e ones with `#`).
Signed-off-by: B Horn <b@horn.uk>
Using datetime converts the seconds value into date and time components.
A value of 86400 generates a 00:00 time on the 2nd of January 1970.
The new code properly increments the hour field to 24 and beyond instead
of wrapping around to zero.
The dialog is created inside the function and can be destroyed there as
well. This prevents the idle_add from being blocked forever by a
timeout_add, and the dialog never closing.
Fixes#1311.
Episodes with an html description did not have a tooltip because the
description field is always empty for them. The new _text_description
field is computed at runtime and should be used for any code wanting a
text description.
Fixes#1350.
Remove the cover image context menu and add buttons next to various
items in the channel editor:
* Cover image: Pop-up a menu to change or refresh the cover image
* Feed URL: Copy the URL to clipboard
* Download folder: Open the download folder
Rename treeview_allow_tooltips() to allow_tooltips(). Remove the
treeview arg, and hard code it to enable or disable tooltips on channel
and episode treeviews.
Remove the cover image context menu and add buttons next to various
items in the channel editor:
* Cover image: Pop-up a menu to change or refresh the cover image
* Feed URL: Copy the URL to clipboard
* Download folder: Open the download folder
When the number of episodes causes update_downloads_list() to exceed 1.5
seconds, the idle_add callback will never be called and cause gpodder to
hang.
Fixes#1311.
It can take a while to populate the list when there are a lot of
downloads to resume. This leaves the list empty and UI, including the
`Resume All` button unresponsive. Keeping the dialog open while Gtk
populates the list prevents this from happening.
The user must currently close preferences and reopen to configure
extensions that provide a preferences UI. This is a problem when the
user does not know the extension has preferences, but the sudden
appearance of the button when an extension is enabled might catch the
user's attention.
Furthermore, removing the button when the extension is unloaded prevents
any confusion as to why it is still there.
Closing gpodder while tasks are downloading or pausing causes a hang and
must be killed from task manager or interrupted if launched from command
line. This was introduced in ed5d18e1b0
but only applicable when using python 3.10. The idle_add() callback is
no longer invoked to wake up the dequeue wait_for() condition, likely
due to the main thread terminating early, which didn't happen in older
python versions. Simply waiting for all worker threads to terminate
fixes the issue.
Fixes#1306.
PR #1094 generated an HTML description for any episode that lacked one.
That however increased the database size (almost double in worst case)
because it was storing both text and html versions of each description.
This fixes that by storing the episode thumbnail URL in the database and
generating the HTML description only when shownotes are drawn.
The text description is now cleared for episodes with an HTML
description. This further reduces database size for feeds that provide
both. It also fixes an issue for feeds that provide different text and
HTML descriptions, because the short description would show the text
description and shownotes would show the HTML description. And EQL only
searched the text descriptions, which might not match what the user sees
in the shownotes.
The new setting defaults to enabled to preserve the current behavior of
opening search fields in channel and episode lists when the user begins
typing. Disabling the feature ignores the keypresses and requires ctrl-f
or ctrl-shift-f to open or focus the search field.
Using "Start download now" creates a forced task that wasn't recycled
when it finished. This prevented it from being deleted because
can_delete() returns False for tasks in the DONE state.
* Fix#864 add undownload checkbox in delete episode confirm dialog
don't mark episodes new if we don't delete them now
when a mix of downloaded and not downloaded and old episodes
are selected
The menu item was only enabled when the selected episode could be played
or streamed. It was always enabled in the context menu but the keyboard
accelerator could not be used if the episode was not downloaded and not
streamable.
This also forces the play toolbar button to always show the 'open'
label and icon in the progress tab, instead of whatever random state it
was in before.
Non-media RSS feeds only have a textual description and can't be
subscribed to in gpodder. Some media feeds lack downloadable content and
can only be accessed from the website. In both cases, gpodder removes
the episodes without any feedback to the user as to why, making it
appear to be a problem in gpodder.
This patch adds those episodes but prevents automatic download and
displays a proper error when a manual download is attempted. The
episodes also get a web browser icon to indicate they lack downloadable
content. While not downloadable or transferable to media devices,
gpodder can be used to notify the user when new episodes are available
and they can be accessed by clicking through to the website
* Added logic to trim away leading/trailing whitespaces in user-inputted
urls. Tested against current gpodder-installe executable for correct/
desired behaviour. simplified receive_clipboard_text method of class
gPodderAddPodcast in addpodcast.py
resolves#520
* Enable word wrap in labels
* Replace GtkGrid with two vertical GtkBoxes
* Add bottom margins to checkbuttons as label wrapping space
* preferences.py: Ellipsize device button label, replace deprecated
set_alignment() with set_xalign()
* preferences: Use GtkStack instead of GtkNotebook
* Add Separator and ScrolledWindow to StackSwitcher
* Add ScrolledWindow to preferences Stack
Remove ScrolledWindow from Extensions page.