Commit Graph

717 Commits

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