Commit Graph

884 Commits

Author SHA1 Message Date
Bart De Vries e5e046e412 Implement episode search functionality
Add search capabilities to the main window toolbar and the episode lists.

BUG: 459983
2023-02-17 21:14:57 +00:00
Bart De Vries 780e63c2f2 [KMediaSession] Allow app and desktop entry name to be set in constructor 2023-02-16 13:32:52 +01:00
Bart De Vries 71eb79979a Fix user-agent
There was a semicolon in the user agent string which seems to cause
problems on certain servers.

Closes #37
2023-02-15 14:49:54 +01:00
Bart De Vries 0ecb7a3ec0 Add back separator in between episode delegates 2023-02-14 13:34:39 +01:00
Bart De Vries 49bec856b4 Add streaming action to entry context menus 2023-02-11 21:03:12 +01:00
Bart De Vries 40c3a5138c Ensure that currentPage is set on first run 2023-02-10 22:19:49 +01:00
Volker Krause c0410506d1 Replace QSystemTrayIcon with a empty stub on Android
Should hopefully fix the Android builds on binary factory.
2023-02-10 17:21:25 +00:00
Bart De Vries 3f1859e14b Rename main window id to kastsMainWindow instead of root 2023-02-10 15:28:53 +01:00
Bart De Vries 04f44bc078 Simplify saving the current Page 2023-02-10 15:17:36 +01:00
Bart De Vries 97062cad24 Port away from DelegateRecycler 2023-02-09 22:03:07 +01:00
Bart De Vries 082e3d4ce3 Implement systray icon, menu and settings.
BUG: 462470
2023-02-03 21:48:22 +01:00
Bart De Vries bbc8562100 Implement custom playback rate selection
Also refactor playbackrate dialog and store values in settings

Solves #12
2023-02-03 21:30:46 +01:00
Bart De Vries 8ad0365a4a Use vertical volume slider on mobile
This is possible by removing the hack that was causing trouble with the
vertical orientation.
2023-02-02 16:09:04 +01:00
Bart De Vries bc4dc313b7 Display high DPI art when using scaling 2023-02-02 11:30:22 +01:00
Bart De Vries fa8e2da414 Port from deprecated iconName to icon.name 2023-02-01 22:53:44 +01:00
Bart De Vries 72646f5075 Put fullscreen image viewer in Loader 2023-02-01 11:30:36 +01:00
Heiko Becker a973ce547d cmake: Add an option for the gstreamer audio backend
Otherwise it'll become a so-called automagic dependency with no control
over including support for it or not, other than having it installed on
the system or not.
For LIBVLC CMAKE_DISABLE_FIND_PACKAGE can be used, but for
pkg_check_modules no such things exits and we need an explicit option.
2023-01-30 22:26:55 +01:00
Bart De Vries a753b6918a Fix showing chapters on mobile playercontrols 2023-01-25 18:16:04 +01:00
Bart De Vries a014f28ead Also add clickable timestamps to mobile player controls 2023-01-25 10:52:17 +01:00
Bart De Vries cdec053375 Make timestamps in entry contents clickable, like chapter marks
BUG: 446358
2023-01-24 15:22:40 +01:00
Bart De Vries 5678fc0490 Make things clickable (showing a PointingHandCursor) 2023-01-24 10:56:38 +01:00
Bart De Vries 9963132d60 Only set QT_ENABLE_GLYPH_CACHE_WORKAROUND on arm
BUG: 463383
2023-01-24 10:16:20 +01:00
Bart De Vries 48c1cffd4e [KMediaSession] Put compilation of example player behind switch 2023-01-23 20:55:57 +01:00
Bart De Vries d869358ff5 Header bar redesign
New scalable header bar design which should scale nicely with height
and width changes by collapsing several elements (putting them into
popups and overflow menus).  The height scaling of the header is
similar to Elisa, where it will use the regular background color when
fully collapsed.
Titles are clickable and will open the relevant pages.  Images are also
clickable and that will open a fullscreen view.
This new design also exposes volume controls both for desktop and mobile
layout.

BUG: 457846
CCBUG: 458331
2023-01-23 13:29:21 +01:00
Bart De Vries db41655c5f Solve issue of filter InlineMessages not showing up 2023-01-20 16:56:28 +01:00
Bart De Vries 9ead23ff59 Port c++ to qt6 2023-01-20 14:23:30 +00:00
Bart De Vries acd1a55aae Fix minor issue with network connect check in AudioManager
AudioManager was reporting no connectivity in case the networkstatus was
reported as being "Unknown".  We might as well attempt to stream in that
case.  If there is no connectivity, it will fail anyway with another
useful error message.
2023-01-19 20:43:27 +01:00
Bart De Vries b7c68996eb Revert disabling video on gstreamer
This was causing audio-only tracks to make gstreamer hang indefinitely.
2023-01-18 21:23:41 +01:00
Bart De Vries 50e88a11c2 Limit feed description to two lines until the "show more" button is pressed
BUG: 461216
2023-01-17 14:08:33 +01:00
Bart De Vries 285d3e2c62 Fix playback speed mobile dialog 2023-01-17 11:50:09 +01:00
Bart De Vries e06a90743e [KMediaSession] disable video output for now 2023-01-16 16:29:09 +01:00
Bart De Vries eb07e67f70 [KMediaSession] Implement dynamic audio backend framework
KMediaSession is an audio player library that has an API which is close
to QMediaPlayer and which allows to use --- and dynamically switch
between --- different audio backends. At this moment there is
implementation for libVLC, gstreamer and QtMultimedia. Only QtMultimedia
is a hard dependency in order to at least have one functional backend on
all platforms; all other dependencies are optional.

KMediaSession has out-of-the-box, built-in MPRIS2 support, sleep inhibit,
and basic metadata support.

BUG: 462358

Closes #35
2023-01-16 15:36:54 +01:00
Bart De Vries 09bae67fbd [Android] Fix gradle plugin version issue with qt >= 5.15.8 2023-01-16 14:13:58 +01:00
Bart De Vries 787b373339 Use pragma once everywhere 2023-01-04 10:27:22 +01:00
Bart De Vries 402f8b565e Workaround for exact slider handle positioning 2023-01-01 15:10:19 +01:00
Bart De Vries b0b0550ce2 Add missing icon to CMakeLists.txt for inclusion in android 2022-12-27 19:00:29 +01:00
Devin Lin 93cdffd68c Use drawer height 2022-12-18 20:37:30 +01:00
Devin Lin d08dddd163 Use higher sidebar listview threshold 2022-12-18 20:37:30 +01:00
Devin Lin 2131186cb6 Fix footer and use list view for small heights 2022-12-18 20:37:30 +01:00
Devin Lin c035bcad92 Use display property 2022-12-18 20:37:30 +01:00
Devin Lin 7afc43f833 NavigationTabButton based sidebar 2022-12-18 20:37:30 +01:00
Devin Lin c30bfbb5a5 Use pageStack.popHiddenPages
This uses a new property in Kirigami to simplify the code.
2022-12-18 10:24:15 +00:00
Bart De Vries 44c54b664a Pass null as entry to chaptermodel if there is no current track
It previously passed undefined, but that will not be interpreted as
nullptr by the underlying C++ model.
2022-12-14 16:51:55 +01:00
Bart De Vries 906730c516 Fix missing checkbox state
The checkbox state for alwaysShowFeedTitles was not set based on the
current settings.
2022-12-14 14:55:32 +01:00
Bart De Vries 624e0b147f Prefer portrait orientation when using square window
BUG: 460859
2022-12-13 16:48:49 +01:00
Bart De Vries 19a6e382db Disable subscribe button when feed has been added
This disables the subscribe button once a feed has been added, i.e. when
the button has been clicked.
Additionally, when clicking on an already subscribed feed on the
discover page will now open the full details including the episode list.

BUG: 458560
2022-12-13 14:21:30 +01:00
Bart De Vries 16178b6441 Make chapter dialog larger 2022-12-13 13:04:51 +01:00
Bart De Vries 6217dbcc86 Add and use Chapter class 2022-12-12 20:16:12 +00:00
Tobias Fella 6a6962e2d3 Load chapter images from tags and show in user interface 2022-12-12 20:16:12 +00:00
Tobias Fella b273d5ffa9 Improve ChapterModel's gammarayability 2022-12-12 20:16:12 +00:00
Bart De Vries a07deae71d Fix RTL layout bugs
BUG: 461230
2022-12-12 19:54:09 +00:00
Bart De Vries 3898471f08 Move Error log from dialog overlay to dedicated settings page 2022-12-12 20:50:21 +01:00
Devin Lin 8e1b278539 Use more appropriate info icon 2022-12-12 10:31:12 +01:00
Devin Lin eda19fa0f8 Fix bracket 2022-11-30 10:38:17 -05:00
Bart De Vries 67040530fd Save settings to file whenever any setting changes 2022-11-30 15:49:50 +01:00
Bart De Vries 06ea1b36ea Fix typo in sync settings form 2022-11-30 14:34:08 +01:00
Devin Lin e98c6dfdef Fix separator behaviour 2022-11-30 14:34:08 +01:00
Devin Lin ee10727f6a Port synchronization settings page 2022-11-30 14:34:08 +01:00
Devin Lin 4db4664db3 Use trailing components in form 2022-11-30 14:34:08 +01:00
Devin Lin 6c8d0fa404 Port settings to MobileForm components 2022-11-30 14:34:08 +01:00
Bart De Vries 0e6cac16c9 Enable chapters also when streaming 2022-11-29 22:09:37 +01:00
Tobias Fella 5ec65d1b72 Cleanup aboutdata registration 2022-11-27 00:44:08 +01:00
Devin Lin cbd203272e Fix text in sleep dialog disregarding theming 2022-11-26 01:14:17 -05:00
Bart De Vries eb8856e45d Improve i18n messages on Queue page
BUG: 461024
2022-11-16 10:40:22 +01:00
Bart De Vries 8660ef46ea Fix appearance of streaming button on delegates and pages 2022-11-15 22:50:49 +01:00
Bart De Vries d192784e12 Improve check for existing podcasts
The feedExists method will now also take query parameters into account.

BUG: 461877
2022-11-15 19:13:24 +01:00
Bart De Vries 562c76c799 Implement streaming support
This implements support for streaming episodes rather than downloading them
first.
This introduces a new setting: prioritizeStreaming. If it's set to false
(default) then a streaming play button is only added to the EntryPage.  If
it is set to true, then the streaming play button will also appear on the
Entry delegates instead of the download button.
There is a separate setting to decide if streaming is also allowed on
metered connections.

FEATURE: 438864
2022-10-19 14:49:56 +02:00
Bart De Vries db802b6b17 Look for, and link to, Kirigami and QtSvg on all platforms
I don't know why they were historically only included for Android.  But
this fixes qt6 porting.
2022-10-06 19:07:55 +02:00
Ahmad Samir de42473d4e Use KDE_INSTALL_TARGETS_DEFAULT_ARGS
The KF_* variant is for KF repos

GIT_SILENT
2022-09-17 00:50:42 +02:00
Bart De Vries d6f60e037e Add missing icon to CMakeLists.txt 2022-09-09 10:34:58 +02:00
Devin Lin 3a6446dea5 Move page actions to bar, and consolidate podcast list and info pages 2022-09-07 19:03:07 +00:00
Devin Lin 9860c8b9e5 Only show single page at any time, and pop pages that aren't visible 2022-09-07 20:44:40 +02:00
Bart De Vries fdeb4c501a Set smaller default window size and save geometry on exit 2022-09-07 20:35:42 +02:00
Bart De Vries 5405a9d3d8 Fix for pages overlapping scrollbars in desktop view 2022-09-07 20:33:54 +02:00
Bart De Vries cbd57a6ef8 Fix pages overlapping miniplayer in mobile view with qqc2-breeze-style 2022-09-06 21:48:19 +02:00
Bart De Vries 64afd7b544 Remove collapse button from globaldrawer 2022-08-16 20:58:37 +02:00
Bart De Vries 9b97613898 Fix fallback when no image is available in id3 tag 2022-08-09 10:58:16 +02:00
Jose Flores 58032dd560 Doesn't add width to an html img without a width defined
This attempts to fix the issue described here: https://invent.kde.org/plasma-mobile/kasts/-/issues/20

There seemed to be a loop that occurs when setting an img width which causes the view to re-render which causes the window to grow which goes back to setting an img width causing an loop that keeps growing the img width and eventually crashing.

There are a few ways to fix this but I believe not setting a width on an img without a width both fixes it and behaves as expected (see context section). I'm not sure if this is a solution Kasts wants to go with but at the very least it adds more details to the issue. 

## Reproducing
The gist of that issue is that a crash occurs when you visit https://feed.zugfunk-podcast.de/podcastrss.xml, episode 53 and this is reproducible. 

I was able to get to the bottom of why that particular podcast episode crashes and can be reproduced with the following content

```html
<table style=\"width:30rem;\"><tbody><tr><td style=\"width:14rem;\">Some Text On Left </td><td><img src=\"https://invent.kde.org/plasma-mobile/kasts/-/raw/master/icons/128-apps-kasts.png\"></td></tr></tbody></table>
```

*(can repro by setting this string as a QStringLiteral in Entry.cpp, line 64 when the content is first set and then clicking on any episode)

## Context
The problem seems to be with `<img`s that don't have a width set. In those cases the code tries to set the image to the width of the component. The problem with this seems to be that this assumes that these images are on their own horizontal line and that they should take the whole width. So to repro (see content I used to repro above as an example):
* put an image tag next to some element that takes some width (like a table where there's a left column with some text and a right column in the right)
* img tag without a width

What ends up happening is that the `img width` gets updated to the size of the component width but because there's another element to the left of it, it will mean that the resulting view is bigger than the component width which causes `onWidthChanged`(`EntryPage.qml::88`) to be triggered and the `adjustedContent` function to be called again where this whole process happens again (img width is updated to component width -> rendered but it's larger than width -> causing onWidthChanged -> adjustedContent runs again -> rinse/repeat).

There are other ways to try to solve this but the three I looked at are: 
1. After `adjustedContent` is run, it should update the actual `m_content` so that the following runs can work off the last text update (this will mean that the problematic `else` wouldn't be run constantly).
    * You can do this by setting the content at the end of the function (`setContent(ret);`)
2. Checking for some reasonable width limit (if width > 10000 then width = 10000)
3. Not resizing an image without a width because we're not sure about the intention of the author 
    * in this case these were small icons for social media that shouldn't be scaled up
    * I think we shouldn't scale any images because of the same reason but the PR is conservative and just stops it in the case of a img without a width

For the PR I went with # 3 because the others led to the icons being scaled but it messed up the look of the page.

Closes #20
2022-08-08 11:10:51 +00:00
Bart De Vries ce45074c79 Fix minor typos 2022-07-14 16:46:52 +02:00
Bart De Vries c3df8d8714 Fix "database is locked" errors caused by concurrent writes 2022-07-14 15:32:58 +02:00
Bart De Vries 01cb685d54 Add option to mark custom amount of episodes as unplayed when adding new feed
FEATURE: 454553
2022-07-01 20:03:27 +00:00
Bart De Vries 67c96fdfbc [Sync] Enable pushing all local episode states to server
CCBUG: 454553
2022-07-01 20:03:27 +00:00
Bart De Vries 1043f4a63e Add app icons for windows build
Closes #26
2022-06-30 20:23:34 +00:00
Bart De Vries 5f94b4a357 Add sleep timer
FEATURE: 443400
2022-06-30 08:21:09 +00:00
Bart De Vries c5dab8131d Fix padding and icon of sync password dialog 2022-06-20 20:59:58 +02:00
Bart De Vries a239bc922f Re-enable images in sync password dialog 2022-06-20 09:56:09 +02:00
Bart De Vries 5d8c81c6e1 Make width of error list a bit wider to better see contents 2022-06-19 21:36:24 +02:00
Bart De Vries e5cf95c8d7 Change default new podcast URL into placeholderText 2022-06-18 16:27:37 +02:00
Bart De Vries 3383b6dfad [Sync] Handle multiple entries having the same enclosure url 2022-06-13 21:37:18 +02:00
Bart De Vries 6930ff71d0 Re-arrange mobile player and add extra row for toolbuttons 2022-06-12 17:22:09 +02:00
Bart De Vries c4f12227a2 Add capability to define custom gpodder server
FEATURE: 454674
2022-06-10 21:29:42 +02:00
Bart De Vries c44abc66ba Continue update of episodes even if gpodder server is unavailable 2022-06-09 12:38:00 +02:00
Bart De Vries 8ff1992d22 Port away from deprecated mainItem on ScrollablePage 2022-06-05 18:19:46 +02:00
Tobias Fella 3ae5306e56 Improve gammarayability of EntriesModel & FeedsModel
This makes both models return a reasonable value for Qt::DisplayRole,
allowing gammaray to show something in the model explorer
2022-06-04 01:37:58 +02:00
Bart De Vries 27af0d907e Add missing icons to src/CMakeLists.txt 2022-06-02 11:22:53 +02:00
Bart De Vries e62d17f9b0 Adjust time left on episodes according to current playback rate
This new feature is implemented behind a switch in the settings (default
is off).

FEATURE: 452135
2022-06-01 21:08:27 +02:00
Bart De Vries aac899a7f0 Refactor feed update routine to allow for entry, enclosure, authors and chapter updates
This commit adds a bunch of API extensions (public and private) to the
entry, enclosure, etc classes to allow runtime updates of internal data.
Additionally, the feed update routine has been adapted to find updates
in entries, enclosures, etc and pass them on to the relevant objects.

All of this functionality is put behind a new toggle exposed in the
settings (default is on).  This is useful since a full update takes
quite a bit longer on underpowered hardware, so users should be able to
switch off this potentially non-essential overhead.

BUG: 446158
2022-05-31 16:11:50 +02:00
Bart De Vries 6fb7118e34 Add action to episode details page to go to the episode list for that subscription
Solves #28
2022-05-31 11:44:50 +02:00
Bart De Vries 633f4fd0f0 Use multithreading for feed updates (using ThreadWeaver)
This contains the following changes:
- Use separate db connections for feed updates (required for
  multithreading.
- Add ThreadWeaver dependency.
- Port update job from KJob to ThreadWeaver::Job
- This should also solve the bug where the update process would hang
  on the "processEvents" call, which was intended to keep the UI
  responsive during updates.

BUG: 452585
2022-05-29 15:22:23 +02:00
Bart De Vries 2b363b6cec Add new episodes to queue in ascending chronological order
Fixes #32
2022-05-24 22:27:20 +02:00
Bart De Vries b884ac69bf Use embedded image in id3v2tag as fallback 2022-05-23 22:14:48 +02:00
Bart De Vries c42f0f3a00 Show refresh actions also on mobile
This used to be covered by the bottom action buttons, but those have
been removed some time ago.  That only left a pull-down as trigger to
update the feeds, which is non-ideal since it's not explained anywhere.
2022-05-23 20:10:46 +02:00
Bart De Vries c5e286c17a Decrease minimum window height
This is needed to ensure that the app fits the pinephone in landscape
mode
2022-05-16 12:46:33 +02:00
Bart De Vries 2ceca4101b Update copyright date to 2022 2022-05-16 12:44:39 +02:00
Nicolas Fella 6df9188cdc Use include instead of forward decl for property types 2022-05-02 10:24:12 +00:00
Nicolas Fella b6d5aa6470 Fix KAboutData include 2022-05-02 10:24:12 +00:00
Nicolas Fella 4369127934 Adapt build system to Qt6 2022-05-02 10:24:12 +00:00
Bart De Vries cb9000faa5 Do not process "other" fields before checking if entry already exists 2022-04-28 11:14:05 +02:00
Nicolas Fella 0ccf773542 Use undeprecated install dirs
Using kde-dev-scripts/kf5/cmakelists_install_vars.pl
2022-04-21 00:48:05 +02:00
Nicolas Fella d98bb3cc96 Enable highdpi scaling
Otherwise everything is tiny on Windows
2022-04-02 14:57:57 +02:00
Bart De Vries bbded05933 Keep unreadEntryCount cached instead of getting it from DB everytime 2022-03-10 08:03:00 +01:00
Devin Lin 529a1ca878 Set QT_ENABLE_GLYPH_CACHE_WORKAROUND=1 if it is not set 2022-03-09 19:47:39 -05:00
Devin Lin 36d9a84bff Port to Kirigami.Dialog
This should simplify logic, and also handles scrolling nicely.
Appearance and UX-wise, everything should be the same as before with OverlaySheet.
2022-03-04 09:11:22 +00:00
Bart De Vries 4483046904 Re-enable icons for gpodder and nextcloud
Only this time we use the icons that are already part of breeze-icons
instead of rolling our own.  This avoids reuse license issues in kasts.
2022-01-27 21:25:34 +01:00
Bart De Vries 080669c283 Avoid overflow on slider bar on very long podcasts 2022-01-25 14:46:45 +01:00
Bart De Vries bd46d33863 Optimize placement of mobile player image and title for landscape mode 2021-12-17 16:56:17 +01:00
Bart De Vries 8e0b346d5f Optimize placement of info messages (take into account sync message) 2021-12-17 16:55:18 +01:00
Bart De Vries 6c51086749 Optimize placement of info and error messages 2021-12-17 16:00:50 +01:00
Bart De Vries 3aa45e555a Don't attempt to change globaldrawer properties if it's not loaded yet 2021-12-17 11:11:17 +01:00
Bart De Vries 91aa415908 Keep fetching episode actions until we get the current timestamp
Solves #23
2021-12-15 13:54:51 +01:00
Alexey Andreev 5380a431e2 Apply Kirigami Theme color for TextEdit explicitly
Since TextEdit is not a QQC2 component, just general Qt Quick one
2021-12-10 03:12:31 +03:00
Bart De Vries 1fb0e0fc45 Fix bug in addFeeds
addFeeds would stop if it encountered a url that we already had in the
database instead of continuing with the next one.  This bug was
introduced due to refactoring for sync.
2021-11-19 10:32:00 +01:00
Bart De Vries 23001c552a [sync] Check for existence of percent decoded AND encoded version of enclosure url to sync 2021-11-19 10:30:45 +01:00
Bart De Vries 9c2d7adf55 Add support for images from MRSS thumbnail tag 2021-11-15 14:10:46 +01:00
Bart De Vries eb13598dd4 Small fix of minimized player getting covered by 1 pixel 2021-11-05 11:51:26 +01:00
Bart De Vries 8c8a3a91d6 Fix Overlays not being visible when virtual keyboard pops up simultaneously 2021-11-05 10:25:44 +01:00
Bart De Vries ff556fd632 Fix pedantic compiler warning 2021-11-05 09:03:07 +01:00
Devin Lin aa01c04869 Fix flicking not working in mobile footer 2021-11-04 21:18:21 -04:00
Bart De Vries 214394aae7 Fix kasts icon on android
Also fix a minor compiler warning (mentioned during android build)

BUG: 444892
2021-11-04 15:38:09 +01:00
Bart De Vries e6e0563498 Fix android craft packaging 2021-11-04 10:41:11 +01:00
Bart De Vries a27fed1dc5 Fix android build (SolidExtras rename to KastsSolidExtras) 2021-11-03 23:38:28 +01:00
Tobias Fella 53249607db Also rename solidextras library 2021-11-03 20:56:26 +01:00
Bart De Vries 6d3951dcd6 Fix very weird msvc compiler issue 2021-11-03 19:51:38 +01:00
Bart De Vries d0acc10c2b Fix kasts crashing on Android 2021-11-03 16:52:35 +01:00
Bart De Vries 76b242d150 Fix setting play position when syncing 2021-11-03 09:39:06 +01:00
Yuri Chornoivan 8f5b3c0aa6 Add i18n() 2021-10-30 22:49:32 +03:00
Bart De Vries 5882781a9f Reverse subscriptions and episodes in main menu
This is probably a more useful order.  It's also consistent with the new
mobile bottom toolbar.
2021-10-30 19:46:30 +02:00
Bart De Vries ad5213176e Fix bottom margin for notifications now that floating buttons are gone 2021-10-30 19:45:53 +02:00
Devin Lin e16c40d57c Add mobile bottom navbar, use Titles toolbar on mobile, and add blurred image background to mobile player 2021-10-30 17:10:19 +00:00
Bart De Vries f861f4e802 Add podcast subscription and episode play state synchronization
This implements the gpodder API from scratch.  It turned out that
libmygpo-qt has several critical bugs, and there's no response to pull
requests upstream.  So using that library was not an option.

The implementation into kasts consists of the following:
- Can sync with gpodder.net or with a nextcloud server that has the
  nextcloud-gpodder app installed.  (This app is mostly API compatible
  with gpodder.)
- Passwords are stored using qtkeychain.  If the keychain is
  unavailable it will fallback to file.
- It syncs podcast subscriptions and episode play positions, including
  marking episodes as played. Episodes that have a non-zero play
  position will be added to the queue automatically.
- It will check for a metered connection before syncing.  This is
  coupled to the allowMeteredFeedUpdates setting.
- Full synchronization can be performed either manually (from the
  settings page) or through automatic triggers: on startup and/or on
  feed refresh.
- There is an additional possibility to trigger quick upload-only syncs
  to make sure that the local changes are immediately uploaded to the
  server (if the connection allows).  This will trigger when
  subscriptions are added or removed, when the pause/play button is
  toggled or an episode is marked as played.
- This implements a few safeguards to avoid having multiple feed URLS
  pointing to the same underlying feed (e.g. http vs https).  This
  solves part of #17

Solves #13
2021-10-29 18:47:55 +02:00
Tobias Fella 6ad1818734 Create better Settings
Use the settings components from Kirigami
2021-10-29 17:04:07 +02:00
Bart De Vries 0d37ee9f82 Make Chapter Marks accessible on desktop 2021-10-29 14:45:01 +00:00
Bart De Vries d4b5103c2b Add copy buttons for feed and episode download URLs
BUG: 443282
2021-10-29 14:42:45 +00:00
Bart De Vries c28739efeb Fix bug when downloading enclosure on "unknown" metered connection
Trying to download an enclosure on a connection with unknown metered
status would trigger the overlay sheet with actions.
2021-10-28 23:38:15 +02:00
Bart De Vries 5b15f4c7b9 Solve issue with FolderDialog
FolderDialog has issues retrieving the selected folder if that folder
has been selected through xdg-desktop-portal (i.e. flatpaks).  Reverting
to FileDialog from QtQuick.Dialogs.

BUG: 443956
2021-10-28 13:12:04 +02:00
Bart De Vries 2455e543fe Fix fetch-on-startup logic
The fetch-on-startup would only happen if the metered state was
explicitly set to "No".  Hence, when the state is "Unknown" (which will
happen in most cases) no fetching would be done on startup.

The new logic will check for the metered state not being equal to "Yes".
2021-10-27 10:20:44 +02:00
Bart De Vries 3ff1333195 Fix uninitialized member variable m_sizeOnDisk 2021-10-26 23:14:44 +02:00
Bart De Vries 4f83ac8701 Solve memory leak when fetching feeds 2021-10-26 22:32:58 +02:00
Bart De Vries 710f44d2ef Fix parsing chapter marks containing a decimal point 2021-10-25 11:50:40 +02:00
Tobias Fella 3d5a00d2d7 Rename solidextras plugin to prevent name clashes when also using
itinerary
2021-10-24 16:11:47 +02:00
Nicolas Fella dd5b79faea Fix taglib includes
FindTaglib reports <prefix>/include/taglib/ as include path, so we must
not prefix the headers with taglib/
2021-10-15 00:36:03 +02:00
Bart De Vries ca595c985c Make parsing of chapter timestamps more robust
Solves #19
2021-10-13 20:42:24 +02:00
Bart De Vries 9f9bcb639e Remove leftover canCheckNetworkStatus calls 2021-10-11 12:26:17 +02:00
Tobias Fella fc6969e018 Implement network status checking on android
Replaces the whole thing with the solidextras implementation found in
itinerary
2021-10-09 19:32:28 +00:00
Bart De Vries 52f90157ca Make sure chapter marks show up in the correct order 2021-10-07 13:28:47 +02:00
Bart De Vries b77c3b46af Don't make text selectable on mobile since it messes up scrolling 2021-10-07 12:07:14 +02:00
Bart De Vries 0afdb0d50c Add ZLIB optional dependency for Android CI 2021-10-07 11:42:56 +02:00
Tobias Fella f6a8f40d9a Try fixing CI 2021-10-07 11:42:56 +02:00
Bart De Vries de954f644a Fix issues with cached images being accessed while the download is still running 2021-10-06 19:16:06 +00:00
Tobias Fella 044dbf5f23 Implement loading chapters from mpeg files 2021-10-06 21:08:12 +02:00
Nicolas Fella 4c73f1c71c Remove broken windows header
It's not needed and breaks the build
2021-10-04 22:41:49 +02:00
Tobias Fella 67d10d32bf Link against sqlite on android
Tricks androiddeployqt into including the libraries
2021-10-04 19:12:31 +00:00
Bart De Vries 748c9e3116 Fix compiler warnings 2021-10-03 20:49:42 +02:00
Bart De Vries fdbe348f12 Make Entry and Feed details text selectable 2021-10-02 20:39:15 +02:00
Bart De Vries 157e1219bb Fix 'Allow Once' feed update after it was broken by refactoring 2021-10-02 20:32:36 +02:00
Bart De Vries c061a01c59 Wrap feed update routine in KJob and make it more efficient
The feed update routine which is now spread over several methods
in Fetcher, is now put into a self-contained KJob.  This will allow
to re-use this job later on in e.g. gpodder sync, where it's
required to update feeds before syncing episode statuses.

This also makes the feed update abortable.

Lastly, but most importantly, the feed update procedure has been
optimized to minimize database transactions, resulting in a dramatic
speed-up.  This is especially true for importing new feeds, which
will now be at least 5x faster on slow hardware.
2021-10-01 22:36:42 +02:00
Bart De Vries e4ee0f19fd Do not create feed object if it's not in the database
Also clear errors related to a feed that's being removed from the database.
2021-10-01 15:46:17 +02:00
Albert Astals Cid c0dc8cee6a Add "dummy" contexts to two i18np
gettext complained that there's another string with the same text but
not plural and that is bad, so add a dummy context to make gettext happy

xgettext: warning: msgid 'Remove Podcast' is used without plural and with plural.
             ./qml/FeedListDelegate.qml:279: Here is the occurrence without plural.
             ./qml/FeedListPage.qml:249: Here is the occurrence with plural.
          Workaround: If the msgid is a sentence, change the wording of the sentence; otherwise, use contexts for disambiguation.
xgettext: warning: msgid 'Delete Download' is used without plural and with plural.
             ./qml/GenericEntryDelegate.qml:294: Here is the occurrence without plural.
             ./qml/GenericEntryListView.qml:207: Here is the occurrence with plural.
          Workaround: If the msgid is a sentence, change the wording of the sentence; otherwise, use contexts for disambiguation.
2021-09-30 22:43:49 +02:00
Bart De Vries f0f4da8aa7 Improve contextual actions for the FeedList and EntryLists
This adds "select all", "deselect all" to the page contextual actions
and adds "show podcast info" to the OverlayPage opened by clicking on
the overflow menu button on the cards.
This also adds correct use of plurals for the actions if more than one
item has been selected.
2021-09-29 08:50:00 +02:00
Felipe Kinoshita e1c80bff3d
Don't use contextProperty to make KAboutData available on QML
Context properties always takes in a QVariant, which means that
whenever you access the property it is re-evaluated because in
between each access the property may be changed as
setContextProperty() can be used at any moment in time.
2021-09-28 17:46:01 -03:00
Bart De Vries b4d67ffeb4 Solve width binding loop and messed up height for UpdateNotification 2021-09-28 14:42:45 +02:00
Bart De Vries 4a20959522 Switch from DelegateRecycler to reuseItems (except for queue) 2021-09-27 16:48:12 +02:00
Bart De Vries 78986c5da7 Make FeedList sorting update when the feed details (e.g. title) have been updated 2021-09-25 09:58:36 +02:00
Bart De Vries 074dad647b Fix deleting multiple feeds 2021-09-24 16:10:19 +02:00
Bart De Vries 8900186990 Fix crash on multi-selection download/delete action
Solves #16
2021-09-23 13:17:53 +02:00
Bart De Vries bd1cf2c5f0 Add FeedListPage sorting
The feeds will be sorted by (1) descending number of unread/unplayed
entries and (2) alphabetically by name.  The current item and current
selection are maintained after re-sorting when the number of unread
entries has changed.
2021-09-21 22:44:12 +02:00
Bart De Vries c84d8ed47f Add selection, navigation and context menus to FeedListPage 2021-09-21 22:44:12 +02:00
Swapnil Tripathi a141cda44a Add chapter marks 2021-09-21 20:36:54 +00:00
Bart De Vries 4c2aa9e3ab Port away from deprecated Kirigami.Units.fontMetrics 2021-09-21 14:09:05 +02:00
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