Commit Graph

3319 Commits

Author SHA1 Message Date
auouymous e1fc290ef2 Remove all timer deadlocks by using idle_add priority for them.
Add util.idle_timeout_add() to register timers with the same priority as
idle_add(). Change the IdleTimeout to also use the idle_add() priority.
This eliminates the chance of a timer blocking any idle_add from
running.

Change most timeout_add's to idle_timeout_add. Change the timer in
DownloadStatusModel::get_next() back to an idle_add.
2023-01-03 06:01:15 -07:00
auouymous d2f34d0d87 Disable background operations while progress dialogs are open.
Changing task state causes UI to hang while DownloadQueueManager spawns
threads and updates progress tab. And the update_downloads_list() timer
can hang UI for several seconds at a time when thousands of tasks are
queued.

Disabling both of these while a progress dialog is open allows tasks to
be queued faster and the dialog closed sooner.
2023-01-03 06:01:15 -07:00
auouymous 36dbad9c53 Refactor ProgressIndicator.
Add on_ticks() and max_ticks to simplify code using progress indicators.
And support final ticks to set progress to 100% before a final long
operation.

Change interval from 100ms to 250ms, to allow more time to be spent on
the operation.
2023-01-03 05:58:42 -07:00
Teemu Ikonen f00eef5e5c Merge branch 'master' into dev-adaptive 2022-12-19 23:02:01 +02:00
auouymous d9f05e666a Only update downloads list when no tasks were queued.
Avoids a double update when there are queued tasks.
2022-12-17 01:54:03 -07:00
auouymous 58e678b33f Use length of tasks, not episodes, for download progress indicator. 2022-12-16 18:17:09 -07:00
auouymous 9babf0eb44 Set download list state only once after batch queueing tasks.
Queueing thousands of tasks happens faster when update_download_list()
is not called for each one.
2022-12-16 16:04:33 -07:00
auouymous e05ba2e929 Don't show episodes without URLs in "new episodes available" when
subscribing.
2022-12-15 06:34:00 -07:00
auouymous 6e38e1b527 Set error icon for episodes with invalid URLs. 2022-12-15 06:08:47 -07:00
auouymous 2e7b1678d4 Don't discard episodes with invalid urls and links. 2022-12-15 05:50:27 -07:00
auouymous 6e29aa12ce Add setting to disable trimming episode title prefix. 2022-12-15 03:41:01 -07:00
auouymous 526c335662 Rename showEpisodeDescription's internal names to match other items. 2022-12-15 03:34:24 -07:00
auouymous b842e86101 Organize View menu.
And move all-episodes and sections settings from preferences to View
menu.
2022-12-15 02:46:18 -07:00
auouymous d2253d4acd Cache episode list config values.
Decreases episode list update time by 5% for new episodes.
2022-12-15 00:44:37 -07:00
auouymous f967fa9bda Change include_description parameter to required.
Nothing made use of the optional parameter, and it should always be set
from the config value.
2022-12-14 06:29:54 -07:00
auouymous 3203a0ef81 Remove gPodderSettings_LegacySupport. 2022-12-08 15:59:17 -07:00
auouymous 7aa649e6d1 episode_list_columns -> ui.gtk.episode_list.columns 2022-12-08 15:57:46 -07:00
auouymous 2daa5e9550 podcast_list_hide_boring -> ui.gtk.podcast_list.hide_empty 2022-12-08 15:56:26 -07:00
auouymous f62e4294e0 podcast_list_view_mode -> ui.gtk.podcast_list.view_mode 2022-12-08 15:55:08 -07:00
auouymous fcfb9efe1a episode_list_view_mode -> ui.gtk.episode_list.view_mode 2022-12-08 15:54:24 -07:00
auouymous fe969e8c15 podcast_list_sections -> ui.gtk.podcast_list.sections 2022-12-08 15:52:23 -07:00
auouymous 8ca292e5a5 podcast_list_view_all -> ui.gtk.podcast_list.all_episodes 2022-12-08 15:50:56 -07:00
auouymous ff2c19e186 auto_cleanup_downloads -> ui.gtk.download_list.remove_finished 2022-12-08 15:48:16 -07:00
auouymous bcf84cbdf7 auto_update_feeds -> auto.update.enabled 2022-12-08 15:47:33 -07:00
auouymous f19632c426 auto_update_frequency -> auto.update.frequency 2022-12-08 15:46:11 -07:00
auouymous 599682f4f2 auto_download -> ui.gtk.new_episodes 2022-12-08 15:43:51 -07:00
auouymous 816b5c15f3 show_toolbar -> ui.gtk.toolbar 2022-12-08 15:39:34 -07:00
auouymous b39edcfe83 max_episodes_per_feed -> limit.episodes 2022-12-08 15:37:36 -07:00
auouymous dd269d7b88 auto_remove_unplayed_episodes -> auto.cleanup.unplayed 2022-12-08 15:35:08 -07:00
auouymous b812c62775 auto_remove_unfinished_episodes -> auto.cleanup.unfinished 2022-12-08 15:33:35 -07:00
auouymous 0bcfd29d76 auto_remove_played_episodes -> auto.cleanup.played 2022-12-08 15:32:05 -07:00
auouymous c6695f5b69 episode_old_age -> auto.cleanup.days 2022-12-08 15:25:26 -07:00
auouymous 84c35c76fd max_downloads -> limit.downloads.concurrent 2022-12-08 14:49:33 -07:00
auouymous 04cb6583da max_downloads_enabled -> limit.downloads.enabled 2022-12-08 14:47:03 -07:00
auouymous 8eb60b8ccf limit_rate -> limit.bandwidth.enabled 2022-12-08 14:45:24 -07:00
auouymous 39f0376c81 limit_rate_value -> limit.bandwidth.kbps 2022-12-08 14:41:32 -07:00
auouymous 47aa09199d Get rid of custom icons for each type of audio and video file.
The episode list takes 24% more time to render with this feature. It is
also known to produce incorrect icons for some file types.

Fixes #872.
2022-12-08 04:46:06 -07:00
auouymous e8af8603a0
Merge pull request #1435 from auouymous/optimize-episode-list
Optimize episode list
2022-12-08 04:39:57 -07:00
auouymous d64c06fa92
Merge pull request #1434 from auouymous/resync-on-file-size-change
Check for size mismatch when syncing and send to device again.
2022-11-18 10:50:25 +00:00
auouymous 0e27494361
Merge pull request #1433 from auouymous/remove-localdepends.py
Remove localdepends.py.
2022-11-18 10:44:45 +00:00
auouymous 25991ef8bb Throw exception if youtube channelId is empty.
And try to find it in entries. This prevents description and cover art
from being removed when youtube feed is broken.
2022-11-18 03:09:53 -07:00
Teemu Ikonen d87ac85506 Fix 'W504 line break after binary operator' flake8 warnings
Fixed by running

autopep8 -i -r --select=W504 .

and some hand tuning.
2022-11-14 18:32:09 +02:00
Teemu Ikonen 6bd0bb0530 Remove unused imports and pass statements
Fixes flake8 error F401.
Most errors were fixed by running

autoflake -i -r --remove-all-unused-imports .

which also removes unnecessary 'pass' statements, some by hand-editing.
2022-11-14 18:32:09 +02:00
auouymous 1b9ed37064
Merge pull request #1382 from tpikonen/ytdl-rename
Fix yt-dlp output file name
2022-11-14 04:08:49 +00:00
auouymous 9bdc9d966e
Merge pull request #1303 from auouymous/setting-to-disable-find-as-you-type
Add setting to disable find-as-you-type.
2022-11-09 03:42:05 +00:00
auouymous 3f614a1497 Update episode list in 500ms intervals instead 20ms.
The UI is still responsive while performing more work per interval and
updating the list in 90% of the time.
2022-11-08 02:10:21 -07:00
auouymous 57d6f6305c Optimize get_update_fields() tooltip branching.
This can decrease episode list update time by 0.2%.
2022-11-08 02:10:20 -07:00
auouymous f1357ea149 Don't wrap episode fields in tuples, only to immediately unwrap them.
And concatenate episode fields instead of iterating over them.

Simplifies the expression and can decrease episode list update time by
0.2%.
2022-11-08 02:10:19 -07:00
auouymous f9afa2ccaa Only query time and filesize once, instead of three times per episode.
This can decrease episode list update time by 1.5%.
2022-11-08 02:10:17 -07:00
auouymous fa27760a3c Join description while formatting it.
This can decrease episode list update time by 0.2%.
2022-11-08 02:10:16 -07:00
auouymous 980ad522a9 Get default icon theme once, instead of for each call.
This can decrease episode list update time by 1.7%.
2022-11-08 02:10:12 -07:00
auouymous 5c277639de Check for size mismatch when syncing and send to device again.
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.
2022-11-08 01:05:05 -07:00
auouymous c90c58013d Remove localdepends.py.
As of https://github.com/gpodder/gpodder.github.io/pull/42, it is now
recommended to use pip to install tools/requirements.txt.
2022-11-07 22:51:07 -07:00
auouymous 98208d4444
Merge pull request #1374 from tpikonen/channel-buttons
channel editor: Add buttons next to cover, feed URL, etc.
2022-11-08 04:46:23 +00:00
Teemu Ikonen 44befb77f1 Add can_preview to play_or_download() output
Use it to decide if 'Preview' is shown in episode contect menu.
2022-11-07 15:28:54 +02:00
Teemu Ikonen 9690b13a3a Get preview file name from CustomDownload.partial_filename
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().
2022-11-07 15:28:54 +02:00
Teemu Ikonen 7b051d245b Add 'partial_filename' property to DefaultDownload
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.
2022-11-07 15:28:54 +02:00
Teemu Ikonen 236a4c9966 Replace is_on_mobile_screen() with have_touchscreen() 2022-11-03 15:03:52 +02:00
Teemu Ikonen 46dbc80d8b Merge branch 'master' into dev-adaptive 2022-10-28 21:59:50 +03:00
Teemu Ikonen 9130f39e8c Do not hide Progress tab resume infobar on page switch 2022-10-24 11:41:58 +03:00
Teemu Ikonen 70c97522e6 Replace SimpleMessageArea with GtkInfoBar when resuming
Remove unused SimpleMessageArea code.
2022-10-24 11:41:51 +03:00
Eric Le Lay c41ca22e5d
Merge pull request #1404 from auouymous/use-symbolic-toolbar-icons
Use symbolic toolbar icons.
2022-10-09 12:18:17 +02:00
auouymous fbcc72a906 Disable progress spinbuttons if unchecked at startup.
They correctly enable/disable when the checkbox is clicked, but have
always defaulted to enabled at startup, even when the checkbox is
unchecked.
2022-10-01 05:39:40 -06:00
auouymous 557229c08c Update progress widgets when their values are modified via edit config. 2022-09-29 21:20:42 -06:00
auouymous 9a4d5e34cd Add method to clamp a config value between minimum and maximum values. 2022-09-29 21:19:01 -06:00
auouymous a75a2e411b
Merge pull request #1398 from auouymous/fix-format-time
Fix the format_time() function to display times greater than 24 hours.
2022-09-26 01:20:22 +00:00
Eric Le Lay 5825f51183
Merge pull request #1401 from auouymous/catch-sync-device-open-exceptions
Catch unknown sync exceptions when opening device and show error.
2022-09-24 19:20:52 +02:00
Eric Le Lay 1ecdbed0df
Merge pull request #1400 from auouymous/log-unwritable-sync-messages
Write to log when sync directory is not writable.
2022-09-24 19:19:43 +02:00
Eric Le Lay cb59e1e051
Merge pull request #1402 from auouymous/open-logs-folder
Add menu item to open logs folder.
2022-09-24 19:17:27 +02:00
auouymous 26ca4e7649 Use symbolic toolbar icons.
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.
2022-09-23 03:40:07 -06:00
B Horn 4e5168d1ba
Quoting file URIs moved by drag and drop
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>
2022-09-21 14:18:29 +02:00
auouymous b907183b22 Add menu item to open logs folder. 2022-09-19 23:37:31 -06:00
auouymous 37ad7cac89 Catch unknown sync exceptions when opening device and show error.
Some devices lack writable info and gpodder assumes they are writable.
This can lead to an exception being thrown when not writable.
2022-09-19 22:51:53 -06:00
auouymous e59a25e233 Write to log when sync directory is not writable.
The error message told user to check logs but nothing had been written.
2022-09-19 22:10:31 -06:00
auouymous 2659333380 Fix the format_time() function to display times greater than 24 hours.
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.
2022-09-17 19:29:24 -06:00
auouymous b8bbcfa088 Don't use idle_add() for progress dialogs that don't need it.
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.
2022-09-17 00:46:57 -06:00
auouymous fe83a92286 Remove redundant timeout removal when creating progress dialog.
It is somehow possible for source_id to be zero, causing a
g_source_remove assertion warning.
2022-09-16 05:28:14 -06:00
auouymous 5c01b6b036 Fix crash on older versions of python.
Older versions of python do not treat None as False. This causes
set_sensitive() to crash when None is returned from can_pause().

Fixes #1394.
2022-09-12 14:16:31 -06:00
Teemu Ikonen ce02cf6810 util.sanitize_filename_ext: Return an empty ext, if sanitized_ext is empty
Prevents file names with two periods before the extension.
2022-09-03 15:09:57 +03:00
auouymous b9c356f44b Set "New episodes available" tooltip for episodes with html descriptions.
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.
2022-08-30 21:04:56 -06:00
Teemu Ikonen abca020c30 Set adaptive release 3.11.0+1 version and date 2022-08-30 10:15:59 +03:00
auouymous defcc6f5f4 Display 'Queueing' on dialog instead of 'Queued' when queueing downloads. 2022-08-29 05:09:04 -06:00
auouymous 871fb2bcd4 Remove unused 'others' variable. 2022-08-29 03:23:52 -06:00
auouymous 60b3ba6093 Unwrap argument list when calling IdleTimeout function.
This prevented update_downloads_list() from cleaning up the download
list when finished, due to can_call_cleanup being set to ().
2022-08-27 04:50:48 -06:00
auouymous 26c0f8dad8
Merge pull request #1368 from auouymous/progress-dialogs
Progress dialogs
2022-08-26 03:24:55 -07:00
auouymous 839c85a43e
Merge pull request #1367 from auouymous/idle-timeout
Add util.IdleTimeout class to reduce lag when updating progress tab.
2022-08-26 00:07:09 -07:00
Teemu Ikonen 294b047901 Fix 'Invalid episode at path 0' messages on channel change 2022-08-24 11:54:34 +03:00
Teemu Ikonen 8fd6c5eba6 Add a subtitle with statistics to header bar 2022-08-24 11:54:26 +03:00
Teemu Ikonen da268d4fe2 preferences: Show flap on 'edge-overshot' from top 2022-08-24 11:54:26 +03:00
Teemu Ikonen a071a1472b preferences: Reorganize flap code 2022-08-24 11:54:26 +03:00
Teemu Ikonen 3d678927f2 Show a header (pulley) menu on channel list 'edge-overshot' 2022-08-24 11:54:26 +03:00
Teemu Ikonen b6ac9776d8 Navigate back from shownotes with 'edge-overshot' signal 2022-08-24 11:54:26 +03:00
Teemu Ikonen f5f607d309 Fix setting cover image from local file 2022-08-24 11:54:26 +03:00
Teemu Ikonen 21797b80a4 channel editor: Add buttons next to cover, feed URL, etc.
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
2022-08-24 11:54:26 +03:00
Teemu Ikonen df3a093462 Navigate back from episodes with 'edge-overshot' signal
But only do so if on mobile. Compensates for lack of swipes in
TreeViews.
2022-08-24 11:54:26 +03:00
Teemu Ikonen b685022a8c Add function is_on_mobile_screen(window) 2022-08-24 11:54:26 +03:00
Teemu Ikonen 9231e16995 Revert "preferences: Add a hack to maximize on mobile screen"
This reverts commit 6105ec55e4.
2022-08-24 11:54:26 +03:00
Teemu Ikonen dfc0ebc18d Remove set_transient_for() calls to fix Phosh non-maximization 2022-08-24 11:54:26 +03:00
Teemu Ikonen 2e57489f32 Fix Phosh non-maximization on channel editor 2022-08-24 11:54:26 +03:00
Teemu Ikonen 525ec32802 adaptive/episodeselector.py: Fix Stream button 2022-08-24 11:54:26 +03:00