Commit Graph

761 Commits

Author SHA1 Message Date
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