Commit Graph

605 Commits

Author SHA1 Message Date
Bart De Vries 3f0dadd901 Fix minor bugs related to selection/context menus 2021-09-20 09:53:17 +02:00
Bart De Vries 4b2da3533c Enable multi-selection and context menus on all lists of entries
This commit adds keyboard navigation to entry lists.
Selection of items can be done through keyboard (shift+up/down), mouse
(left, left+shift, left+ctrl) or touch (long press).
When items are selected, contextual actions will show up on
the page (useful for touch screens), or, alternatively, a context menu
with the same actions can be opened through right mouse click (useful
for desktop).
If a single entry is selected, then only the relevant actions will be
shown (e.g. only "Mark as Played" if the entry has not been played yet).

Additionally, (database) transactions for the actions have been
optimized.  This was necessary to make sure that actions on large
selections of entries finish within an acceptable time.  E.g. actions on
a list of 1000 items should finish within a few seconds (on all but
underpowered hardware).

BUG: 441764
2021-09-19 21:37:10 +02:00
Bart De Vries 6121f6622f Remove deprecated usages of devicePixelRatio 2021-09-18 21:35:52 +02:00
Bart De Vries 91e43c4013 Add tools-report-bug icon for android
This icon is automatically added to the AboutPage, but is missing on
android if not added explicitly.
2021-09-18 19:46:21 +02:00
Bart De Vries 86d1476687 Implement Filter actions in GUI 2021-09-18 19:07:15 +02:00
Bart De Vries 531c6a2483 Implement EpisodeProxyModel to filter based on status 2021-09-18 19:07:15 +02:00
Bart De Vries 6d5831a715 Add roles to EpisodeModel in preparation for filtering 2021-09-18 19:07:15 +02:00
Bart De Vries bb8cd2807c Refactor EpisodeModel and DownloadModel to make them more performant 2021-09-18 19:07:15 +02:00
Bart De Vries 117f314d0d Move models to dedicated directory 2021-09-18 19:07:15 +02:00
Bart De Vries 59c4894639 Remove EpisodeSwipePage; only showing all episodes for now
The "New Episodes" tab is to be replaced by a filter view button and
dialog to be able to filter several episode statuses.  I.e. new,
played / not played, etc.
2021-09-18 19:07:15 +02:00
Bart De Vries c7676d51a4 Revert "Fix overflow-menu icon color on FeedListDelegate"
This reverts commit 5c8a6ea6a4.
It turns out that the issue is caused by qqc2-desktop-style and
qqc2-breeze-style.  The problem should be solved upstream.  And, anyway,
this workaround didn't completely solve the issue either.
2021-09-18 19:05:12 +02:00
Bart De Vries 5c8a6ea6a4 Fix overflow-menu icon color on FeedListDelegate 2021-09-16 12:01:54 +02:00
Devin Lin a567be01be Move mobile handles to header 2021-09-11 16:19:31 +00:00
Bart De Vries 938a517f09 Fix subtle problem with pushing EntryPages and EntryListPages to pageStack 2021-09-09 11:25:49 +02:00
Bart De Vries 2e6bd7bdcc Change titles of Kirigami pages such that toolbar icons don't move around
CCBUG: 441764
2021-09-09 11:11:40 +02:00
Bart De Vries 6413085c12 Small fix: start custom roles from Qt::UserRole in podcastsearchmodel.h 2021-09-08 20:31:17 +02:00
Bart De Vries 0b33c62a10 Select first enclosure if entry has multiple enclosure entries
Kasts can currently only handle one enclosure per entry.  In case an
entry/item has multiple enclosures, it's probably safe to assume that the
first one is the one that's preferred by the author.

CCBUG: 440389
2021-07-30 14:20:51 +02:00
Bart De Vries 6eb13167f2 Fix bug with feeds with multiple enclosures per entry
BUG: 440389
2021-07-30 08:44:43 +02:00
Yuri Chornoivan 9384f3c073 Fix minor typo 2021-07-27 12:53:21 +03:00
Bart De Vries a15e2dbe5d Make storage path configurable
This adds a new setting to the Settings page.
Existing enclosures and images will be moved to the new location
(first copied, then deleted in the original location).  If any of
the copy actions fail, the operation is aborted and the original
path is restored.
The StorageMoveJob is set up in such a way that it's easy to add other
files or subfolders in the future.

Solves #15
2021-07-24 20:43:11 +02:00
Bart De Vries 85798ebd8c Run clang-format 2021-07-21 21:25:13 +02:00
Swapnil Tripathi d0dbdad7fa Error handling for PodcastSearchModel 2021-07-21 07:14:06 +00:00
Bart De Vries df07359c07 Change subscription page icon to bookmarks 2021-07-15 13:46:46 +02:00
Bart De Vries b9b82d783f Also add title argument to Error elsewhere 2021-07-14 22:32:14 +02:00
Bart De Vries a5b021cffd Add extra optional title argument to Error constructor 2021-07-14 20:31:02 +02:00
Bart De Vries 35cfb14e1f Also show left duration on EntryDelegates if it's been set in the player 2021-07-14 20:31:02 +02:00
Bart De Vries 9621919310 Use correct version number in user agent header 2021-07-13 16:27:27 +02:00
Bart De Vries 041b1edd11 Switch to ImageWithFallback to fix android not showing image as icon
Also fix one minor whitespace issue.
2021-07-12 19:09:42 +02:00
Swapnil Tripathi 17f235f535 Keyboard Navigation 2021-07-11 11:01:46 +00:00
Bart De Vries 7358960ac7 Fix i18n() and inconsistent buttons 2021-07-11 10:27:31 +02:00
Swapnil Tripathi 77b1656bf7 Added ToolTips. 2021-07-11 08:25:49 +00:00
Bart De Vries bdfa9f0733 Small adaptation to make FeedDetailsPage more generic 2021-07-08 15:30:44 +02:00
Bart De Vries 4b2f4afd37 Remove setting to remove items from queue after being marked as played
This action will be done by default.
2021-07-07 13:39:56 +02:00
Swapnil Tripathi 5f25a8607b Reusing FeedDetailsPage to show metadata for podcasts discovery 2021-07-07 12:57:45 +02:00
Swapnil Tripathi 95ee97aefe Expanded the model with more roles and designed frontend. 2021-07-07 12:57:45 +02:00
Tobias Fella fa1c308c2d Add model for searching for podcasts 2021-07-07 12:57:45 +02:00
Swapnil Tripathi 653f41c94e Remove icon from the PlaybackRateDialog. 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 02523e2feb Remove bold text tags. 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 09df795e05 License fix. 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 15e46de814 Minor typo 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 74879a0a58 Fix highlighting of the playbackRate corresponding to the current rate. 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 77715f94b9 Rename Playback.qml -> PlaybackRateDialog.qml 2021-07-06 20:52:18 +00:00
Tobias Fella 2aeb06b5c4 Apply 1 suggestion(s) to 1 file(s) 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 37a7ec6992 Enable clipping 2021-07-06 20:52:18 +00:00
Swapnil Tripathi 32260be05e Remove ScrollView 2021-07-06 20:52:18 +00:00
Swapnil Tripathi fa65447874 Added slowing of playback rate and using OverlaySheet(desktop) and OverlayDrawer(mobile). 2021-07-06 20:52:18 +00:00
Bart De Vries 8cd1237540 Mark another TODO as solved: make a setting for removing played episodes from queue 2021-07-06 22:36:51 +02:00
Bart De Vries 30f694ba09 Add some more settings regarding marking episodes as played 2021-07-06 22:34:26 +02:00
Bart De Vries fe2a977a6b Add setting to automatically delete episodes when they're marked as played
The 3 possibilities are:
0 = Disabled      = Do not delete episodes
1 = Immediately   = Delete immediately
2 = OnNextStartup = Delete on next startup (default)

Fixes #14
2021-07-06 22:34:26 +02:00
Bart De Vries 143ff3a2ed Fix AddFeedSheet battling for focus on startup 2021-07-06 20:33:25 +02:00
Bart De Vries 73b2cf565c Fix recursive loop when last track finishes playing 2021-07-06 19:21:57 +02:00
Bart De Vries f9287e94f8 Fix Accessible onPressed actions 2021-07-06 18:29:26 +02:00
Bart De Vries a5a24fb08c Use transactions to do database migration
This was already implemented for 2 -> 3.
Now also for 1 -> 2.

Additionally, remove unnecessary whitespace in debug statement
2021-07-06 18:29:22 +02:00
Bart De Vries 104cafbd41 Focus text field when adding new podcast + make return key work 2021-07-06 18:29:05 +02:00
Bart De Vries 374a7ef116 Set default page in case lastOpenedPage/getPage cannot be found 2021-07-06 17:04:03 +02:00
Bart De Vries 9731795e62 Solve deadlock in startup between ErrorLogModel and AudioManager 2021-07-06 17:03:25 +02:00
Bart De Vries d2cee8a066 Add error overlay for Invalid Media
This implements a TODO mentioned in the sources.
2021-07-04 16:52:05 +02:00
Bart De Vries 1b3df48ce8 Solve TODO: unload entry from audio player when it's removed from the queue 2021-07-04 16:51:47 +02:00
Bart De Vries d0bc5b2b26 Add capability to check whether network connection is metered
For now this only works with NetworkManager.  The related settings are
greyed out on systems not using NetworkManager.

Some details of the implementation:
- Implement settings in the settings menu to enable/disable feed
  updates, episode downloads and/ or image downloads on metered
  connections.  If the option(s) is disabled, an overlay dialog is shown
  with options to "not allow", "allow once", or "allow always".
- If the network is down, no attempt is made to download images and the
  fallback image will be used until the network is up again.
  This also solves an issue where the application hangs when the network
  is down and feed images have not been cached yet.
- Next to this, part of the cachedImage implementation in Entry and Feed
  has been refactored to re-use code as part of the image() method in
  Fetcher.
- In case something unexpected happens, an error will be logged.
2021-07-03 20:20:27 +02:00
Bart De Vries acef37fa58 Fix database migration by avoiding DROP COLUMN AND ADD COLUMN 2021-06-29 20:52:40 +02:00
Bart De Vries 3a24ea6f65 Avoid RENAME COLUMN to make db migration more robust
RENAME COLUMN was only introduced in sqlite 3.25.  So it's probably
better to avoid it for the time being to increase compatibility with
older versions.
2021-06-28 08:04:41 +02:00
Bart De Vries e0154355aa Fix drawer handle positioning for settings and about Pages 2021-06-27 10:44:43 +02:00
Swapnil Tripathi 17e8e75993 Highlighting the current menu item in the GlobalDrawer. 2021-06-27 03:57:49 +05:30
Bart De Vries 265b3109cb Make EntryPage close when that entry is deleted from the DownloadListPage 2021-06-24 17:13:04 +02:00
Bart De Vries bcafb26c8c Add filesize units to download progress
This adds the currently downloaded size and the total enclosure size to
the entry delegate.
2021-06-24 17:12:07 +02:00
Bart De Vries d7debaaf30 Rework Download list page
This page now has section headers, and show Downloading, Partially
Downloaded and Downloaded enclosures with relevant actions for each.
2021-06-24 11:49:24 +02:00
Bart De Vries f197e6ab02 Implement Enclosure::PartiallyDownloaded status
Still to be done:
- Update Download Page to show partial downloads.
- Connect signals to Download Page to update whenever an enclosure
  changes status.  This is broken by this commit because
  downloadCountChanged has been removed.
2021-06-23 23:04:18 +02:00
Bart De Vries 03081edc66 Improve estimate of enclosure download size, also when resuming 2021-06-23 22:29:15 +02:00
Bart De Vries 69a87b1afc Add icons needed for OverlaySheet on android 2021-06-23 17:17:28 +02:00
Bart De Vries e86111ed55 Move error list to settings page (as overlaysheet) 2021-06-22 16:26:43 +02:00
Bart De Vries a331366d41 Replace Audio prepare hack by nicer, asynchronous solution
The main bits of this implementation are:
- Start a new track in paused state.  We don't care about the actual
  media state or player state that QMediaPlayer is reporting.  We will
  deal with that when the audio actually starts playing.
- If a player position needs to be restored, we set d->m_pendingSeek to
  the position that needs to be seeked.  We don't actually seek because
  we have no idea what state the player is in yet.
- On the positionChanged signal of QMP, and if the media is buffered, we
  check if there is pendingSeek value set which is set to a different
  value than the current player position.  If so, we call
  d->m_player.setPosition().  If we have arrived at the correct
  position, then we reset d->m_pendingSeek to -1.
- In the position(), duration() and seek() methods, we return sensible
  values, even QMP is not.  So, we report the duration from the
  enclosure, the position from d->m_pendingSeek, and let seek() change
  the value of d->m_PendingSeek (if it's not -1) to the new seek
  position.
- When there's a pending seek, we set the notifyInterval to shorter
  interval to reduce the startup audio glitch as much as possible.  We
  then reset it to the default of 1000 msec.

This was tested on linux and android.
2021-06-20 19:14:07 +02:00
Bart De Vries 49977adc38 Refactor Error implementation and add Error::Type
- This refactoring also includes a cleanup of a lot of header includes to
  avoid circular dependencies.
- The error message will now be shown below the info message.
- Add database migration (for Errors)
2021-06-19 17:09:44 +02:00
Bart De Vries bd738610bc Small fixes in androidlogging.h 2021-06-19 15:35:56 +02:00
Bart De Vries 14868bf04e Apply clang-format 2021-06-19 13:29:47 +02:00
Bart De Vries 4d6d8ae940 Add basic logging capabilities on android.
This implements debug logging which can be checked through logcat.
2021-06-19 00:26:24 +02:00
Bart De Vries 0c7e5ca63b Do not try to read enclosure length on entries that don't have an enclosure 2021-06-16 09:25:52 +02:00
Bart De Vries 048f294b2b Fix inhibit suspend on Gnome
The inhibit dbus call to gnome sessionmanager expects flags as input.
Currently the flags are set to 4, which will "Inhibit the session being
marked as idle". This is insufficient to prevent the device from
suspending while playing.
We should also add 8 = "Inhibit suspending the session or computer".
Hence, the updated flags to 12.

This change was tested on phosh/phoc and it properly prevents the
system from suspending.  The flags = 12 settings is also what gnome
music players like Lollypop are using (as checked through the gnome
sessionmanager dbus interface).
2021-06-15 13:03:41 +02:00
Bart De Vries 26d3755922 Use debug categories in fetcher.cpp for partial downloads 2021-06-11 20:30:15 +02:00
Bart De Vries 1f35c0a25c Don't clean up partial downloads, such that they can be resumed 2021-06-11 16:59:03 +02:00
Bart De Vries a24fb7d731 Get correct enclosure file size as soon as possible when download starts 2021-06-11 16:59:03 +02:00
Bart De Vries d24b7ed7d0 Write downloads to disk and enable download resume
This enables the download method in Fetcher to resume in case a partial
download is already saved to disk.
For full implementation of download resumes, more changes are required,
because the current application will automatically clean up files that
don't match the expected size at startup.
2021-06-11 16:59:03 +02:00
Bart De Vries 6d57a0586b Explicitly set logo for about page to logo.sv resource file 2021-06-08 15:44:44 +02:00
Bart De Vries 0b8c1856c9 Mark episode as unread when adding to queue 2021-06-08 14:19:50 +02:00
Bart De Vries 4187e05310 Remove filter for <li> and <ul> tags in entry content 2021-06-08 13:33:09 +02:00
Tobias Fella 6a95dfe4ed Try fixing logo not visible in AboutPage on android 2021-06-08 00:48:34 +02:00
Swapnil Tripathi 20c10d9380 Small Fix. 2021-06-08 02:52:11 +05:30
Bart De Vries 2ed33aa750 Add debugging logging categories 2021-06-05 22:03:22 +02:00
Bart De Vries 8437a44a7b Remove obsolete timeString method 2021-06-05 11:59:57 +02:00
Bart De Vries e311a1d1d4 Avoid resizing or re-coloring globaldrawer on mobile 2021-06-04 14:02:28 +02:00
Bart De Vries 05859cdca0 Add missing icon for android build 2021-06-04 09:05:44 +02:00
Swapnil Tripathi 0fd2fca1f1 Updated minimum height and width 2021-06-04 01:30:28 +05:30
Tobias Fella 3f1f3045ec Port away from KDeclarative 2021-06-03 16:23:06 +02:00
Swapnil Tripathi 2145c58333 Added minimum width and height 2021-06-03 15:13:38 +05:30
Swapnil Tripathi 5dc33049de Fix heading text elide. 2021-06-02 21:28:59 +00:00
Bart De Vries a565f6eec1 Disable text wrapping in HeaderBar to avoid nasty binding loops 2021-06-02 22:21:39 +02:00
Mathis Brüchert f49ace47e3 change the sidebar to the normal page background color for contrast reasons 2021-06-02 22:13:54 +02:00
Bart De Vries 974a078e5f Set separate bottom spacing for update and error overlay messages 2021-06-02 22:05:24 +02:00
Bart De Vries 121b4b4d08 Make HeaderBar fixed height instead of a fraction of the window height 2021-06-02 22:05:24 +02:00
Swapnil Tripathi 46568fa131 Set title to a max of 2 lines. 2021-06-02 20:00:18 +00:00
Swapnil Tripathi 617a85925c Added duration labels, fixed header background color and other small fixes. 2021-06-02 20:00:18 +00:00