Update the used Flutter version to 3.16.0 and all Flutter packages to
their latest version.
This commit also fixes all of the newly added analysis options and the
layout changes introduced with the new Flutter version (e.g. we have to
set the "tabAlignment" property in the "TabBar" widget).
This commit adds a custom cache manager "CustomCacheManager" which is
used in the "CachedNetworkImage" widget. The custom cache manager is
required, so that we can adjust the stale periode of cached images. By
default the package used 30 days as stale periode, but for our use case
7 days should be enough and we can reduce the storage used by the app.
Note: We also fixed the "run.sh" script to work with devices where the
name contains a space.
It is now pissible to play YouTube videos on the native desktop clients.
To achieve this we removed the "youtube_player_iframe" package which was
used before to play YouTube video, but which only supported web, iOS and
Android as target platforms.
On the web we are now using our own implementation to render an iframe
with for the YouTube video.
On all other platforms we are now using the "youtube_explode_dart"
package to fetch the video urls for a YouTube video and then we display
them within our own video player (the "ItemVideoPlayer" widget which was
added in #51). We also decided to switch the package for the iOS and
Android implementation which already worked before, because we are now
able to play YouTube videos in fullscreen and we only have to maintain
an exception for the web implementation.
The "ItemVideoPlayer" widget now also supports multiple qualities of an
video via the "qualities" paramter, which allows a user to switch
between the different video qualities which are available for a YouTube
video. Last but not least the widget now uses our primary color for the
seek bar.
The items of an RSS feed are now rendered better, to achieve this we did
the following changes:
- Remove leading and trailing whitespaces from the item description
which should be rendered.
- Check if the media file of an item is an SVG image. If this is the
case we will not add it to the "media" field in the database, because
currently the CachedNetworkImage widget can not render SVGs. If we
want to render them, we run into serious performance issue so we skip
them completly.
- Always assume that the content of an RSS feed contains HTML and render
them as plain text in the preview and as markdown in the details.
Since we also render images from the description now, we check if the
"item.media" image should be rendered. If the description contains an
image we do not render our own image. If the description doesn't
contain a image we render it.
It is now possible to play videos from toots within FeedDeck. For that
we are using the "madia_kit" package, which is already used for the
Podcast player on Windows and Linux.
The videos from a toot are saved within the "options.videos" field of an
item next to the "options.media" field. In the "ItemDetailsMastodon"
widget we are then checking if this field is present and contains a list
of video urls. These urls can then be played via the "ItemVideos"
widget.
Instead of using the "just_audio_windows" and "just_audio_mpv" packages
for Windows and Linux, we are now using "just_audio_media_kit", so that
the audio player is working reliable on these platforms.
Note: We have to adjust the Flatpak, to include the dependencies which
are required on Linux.
We have to add in-app purchases for the iOS, macOS and Android store, so
that users can also get the premium features of the app without using
Stripe for payments.
The in-app purchases are only enabled when a user uses the app with the
default Supabase environment or with the Supabase environment provided
during build time. If a user uses his own Supabase instance, he will not
be able to upgrade to the premium tier via in-app purchases.
We are using RevenueCat for in-app purchases, which automatically sends
all the events for a user to the "revenuecat-webhooks-v1" edge function.
Depending on the received event we can then upgrade / downgrade the
users profile. To be able to use RevenueCat as an additional provider to
Stripe we also had to add a new "subscriptionProvider" provider column
to the "profiles" table, which stores the information via which provider
a user upgraded his account.
During the review of the submission of the iOS and macOS versions of
FeedDeck we encountered some problems, so that the app was rejected. For
that we had to make the following changes:
- Change the foreground and background color of the "Sign in with Apple"
button. This means we are now using black as foreground and white as
background color.
- Add the "Sign in with Apple" capability to the macOS version, to
handle the sign in within the app as it is done for the iOS version.
- Add description in the "CreateDeck" widget, because it was confusing
for the review and they were thinking that they had to provide their
name.
- Adjust "Release" section in contributing guide.
- Disable "X" datasource, since it is not working after the latest API
adjustments.
- Update "version" key and "msix_config.msix_version" key in
"pubspec.yaml" file.
- Change user in "AddSourceReddit" widget help text.
- Enable macOS App Sandbox.
- Adjust logo for Windows version.
The settings page now contains an info section, which is used to show
the current app version via the "package_info_plus" package, the link to
our website, the link to our GitHub repository and the link to our X
account.
Add continuous delivery workflows for the desktop apps. While we want to
provide the desktop versions of FeedDeck though the different app stores
we still want to build them via GitHub Actions, so users can also test
the desktop apps before an official release.
This is also useful to build the binaries we can then download and
upload to the official stores, since we currently only have a macOS
system to build the apps.