When we used the AppBar widget we did not specify the "centerTitle"
property, so that the title was aligned within the default of the
platform. This means on iOS and macOS the title was centered, but on
Android, Windows and Linux the title was aligned on the left side.
This wasn't intended and we want to have the same style on all
Platforms, so that the title is now centered on all Platforms like it
was already done on iOS and macOS.
As reported in #25 the list of sources in a column can not be scrolled
vertically when there are a lot of sources which can not all be
displayed within the existing space.
This problem only occures when a user has no touch device or trackpad,
e.g. on Linux, Windows or the Web.
To fix this we changed the scroll behaviour in the app to allow
scrolling via drag gestures. For the reported case this means the list
of sources can be dragged to the right or left side to view all the
other sources which are hidden.
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.
Instead of downloading the Flatpak files from GitHub in the
"app.feeddeck.feeddeck.yml" file, we are now adding the files to the
archive we create during the release process.
When a user scrolls through a list of items and loads more items via the
"Load More" button and then clicks on the mark all items as read button,
it could happen that the request fails, because Supabase can not handle
the update filter with a large list of item ids.
To avoid this error we are splitting the list of item ids provided in
the "updateReadStates" into chunks of 25 items for the in clause in the
update filter.
For the item ingestion logic we are now also looking at the published
date for all entries in a RSS feed. If the published date is older then
the last update date of a source the item will be skipped. This way we
should reduce the number of duplicated items, where an entry was updated
in the RSS feed, so that it had a new id and was written again to the
database and not only updated.
In the "isYoutubeUrl" function we are checking if the provided url is
related to YouTube. For that we checked if the url starts with
"https://www.youtube.com/" or "https://m.youtube.com/", but we also have
to check if the url starts with "https://youtube.com/" which is used
when a users shares a link to a channel via the YouTube app.
In this commit we add the missing "https://youtube.com/" option to the
"isYoutubeUrl" function.
It is now possible to use a custom Nitter instances. This means a user
must not rely on our Nitter instance and can instead use his own
instance. To use a custom Nitter instance a user must provide the full
RSS feed url for the instance.
If a RSS feed entry did not contain a "published" field, we skipped the
entry and didn't added it to the database. Now it is also possible to
use feeds without a "published" field. If a feed entry does not contain
the field it must contain a "updated" field, which we then use for the
"publishedAt" field in the database. If a feed entry doesn't contain one
of the two fields the entry is still skipped.
This commit improves the parsing of the RSS feeds for a podcast, because
some podcasts were not working as expected:
- The "https://gotime.fm/rss" podcast uses the "itunes:image" field for
the podcast icon instead of "image", so that we now looking at both
fields to add the podcast icon.
- The "https://itsallwidgets.com/podcast/feed" podcast didn't contain a
link in the entries, so that all entries were skipped. For that a
podcast must not contain a link anymore to be parsed, but most contain
a media file which can be played within the app.
This commit adds a "Get Started" guide for the mobile and desktop
version of FeedDeck. The guide describes the basic concepts and settings
of the app to make it easier to get started with the FeedDeck.
This is also used for the review process in the different app stores to
make it easier to get the app approved.
This commit adds two issue templates and a pull request template. A user
can now select between reporting a bug or requesting a new feature when
opening an issue. The pull request template provides some guidance on
naming the pull request and on the required description.
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.
This commit adds a continuous delivery pipeline for the landing page,
which is published as GitHub page.
This commit also fixes some typings and links within the landing page.
This commit fixes the continuous delivery GitHub Action to only run once
on a new release for all workflows and to add the required permissions
to upload artifacts to the GitHub release.
This commit adds the continuous delivery pipeline for Supabase, to
automatically push all database migrations and to deploy all Supabase
functions.
When a PR is merged to the "main" branch the pipeline is run for the
STAGE project. If a new tag is created the pipeline is run for the PROD
project.
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.
Improve the media handling within the app. We do not save the media
files for items to the Supabase storage anymore. The source icons are
now only saved in the Supabase storage, the usage of an url as source
icon is not possible anymore.
The media files for items are directly retrieved from the corresponding
url or for the web version from the "image-proxy-v1" Supabase function.
If the image is retireved from the Supabase function we cache the image
in the browser via the cache control headers. If the image is directly
retrieved from it's url it's cached by the "CachedNetworkImage" widget.
Add a new GitHub Action to publish the web version of FeedDeck to
Cloudflare Pages. The action will build and publish the web version to
the stage project on every commit to the main branch and to the prod
project when a new tag is created.
Add a continuous delivery and release workflow. The continuous delivery
workflow is used to build the Docker image for FeedDeck and the release
workflow is used to generate the changelog.
Instead of rendering the images for a Nitter item within the description
in the details view, we are now rendering the images via the
"ItemMediaGallery" widget. To not render the images twice, we also added
the "disableImages" paramter to the "ItemDescription" widget, to not
render the images in the widget.
It is now possible to use a Nitter instance, where the RSS endpoints are
protected via basic authentication. For that a new
"FEEDDECK_SOURCE_NITTER_BASIC_AUTH" environment variable was added,
which can be used to set the value for the authentication header.