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
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.
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
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
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
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
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
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
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.
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.