The proxy model was causing issues with item dragging.
The model would reset after each swapped item. This meant that items
could only be swapped one position at a time.
This would happen when the current track is changed to "no track".
Signals from the backend KMediaSession would still trigger duration()
calls which would try to dereference the pointer to the current track
entry.
The current list of things to sort on (ascending and descending), includes:
- unplayed episodes
- new episodes
- favorite episodes
- title (alphabetical)
For the first three categories, the value of the sort quantity will be shown
in the upper right corner of the delegate.
BUG: 471012
CCBUG: 459885
Replace the custom FullScreenImage component (which was a copy of a
component used in other apps) with the new AlbumMaximizeComponent from
kirigami-addons.
Instead of using the MD5 hash of the enclosure download URL, we
create a filename which follows `feedname/entry_title.hash.ext`, where
feedname is a uniquefied feed title (stored in the DB), a truncated version
of the entry title, a shortened hash based on the download URL, and the
original file extension extracted from the download URL.
BUG: 457848
SolidExtras will still be used for the Qt5 version for the time being.
This refactoring makes it trivial to rip out SolidExtras once the jump
to Qt6-only will be made.
Stop spamming the DBus with positionChanged signals if playback is
progressing at the nominal playback rate. This brings the
implementation in line with the MPRIS2 player spec. The previous
implementation was causing android battery drain issues with KDEConnect
constantly updating the position (and player details) on the notification
widget.
This implementation will still send the current playback position every
10 seconds to ensure that clients that don't implement the standard
properly or did not receive previous messages, will still get regularly
updated.
This also fixes correct signaling of playback rate changes over DBus.
Make seek times adjustable. Expose seek time under Playback Settings.
Set min time allowed in seconds to 1 and max time in seconds to 300.
FEATURE: 468686
Up to now, RadioButton and CheckButton were added to Menus explicitly
because MenuItem would not use the correct delegate (i.e. CheckButton
instead of RadioButton for a selection group). Since this has been
fixed in qqc2-desktop-style, we can use the proper component again.
If an empty URL was entered (i.e. only whitespace) then that would be
accepted and added to the database as temporary entry to be loaded and
checked later. However, sqlite will convert this to a NULL entry. This
would lead to Kasts not being able to retrieve that feed from the DB,
and hence not being able to create a proper object. This would then
lead to a nullptr dereference down the line.
Note that this is a corner case: other invalid URLs are spotted
correctly and do not cause the application to crash.
BUG: 467394
Before the introduction of streaming, the "status" would be removed when
an episode was downloaded or marked as played, which made sense. With
the introduction of streaming it makes sense to also remove the "new"
status when (streaming) playback starts. At that point in time the
episode should indeed no longer considered to be "new".
Using WAL mode avoids having to lock the database for certain
transactions. Therefore, deadlocks between read/writes from different
threads should not happen anymore. These were rare, but happened
sometimes on slower hardware or slow storage devices.
BUG: 465110
Flatpaks have a problem with FolderDialog from labs: it never returns a
path. Therefore Kasts was - up to now - using FileDialog from QtQuick1.
However, this was causing problems on Android and Windows. Now we only
use QtQuick1 FileDialog for flatpak and FolderDialog everywhere else.
CCBUG: 458331
libVLC has a hardcoded maximum number of redirects. Several podcasts
need more than this number. Therefore we resolve the final url through
QNetworkReply and send the final url to the audio player.