Commit Graph

16 Commits

Author SHA1 Message Date
Rico Berger
37cd4dff6f [core] Run "deno fmt" (#65)
Format the Deno code via "deno fmt" to use the defined code style from
the "deno.json" file.
2023-11-04 15:45:42 +01:00
Rico Berger
8e3586f315 [github] Fix Notification Links for PRs (#55)
If a notification was related to a pull request the link we added to the
item didn't work. This should now be fixed, so that when a user clicks
on the item he is redirected to the correct pull request which is
associated with the item.

This commit also removes an unnecessary "console.log" statement.
2023-10-29 13:49:06 +01:00
Rico Berger
55c6da07d9 [rss] Improve Rendering of Items (#52)
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.
2023-10-28 11:37:00 +02:00
Rico Berger
8dc83a5d5a [mastodon] Add Support for Videos (#51)
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.
2023-10-27 15:22:27 +02:00
Rico Berger
37b44da41f [podcast] Fix Duration and Play Button (#37)
This commit fixes two bugs within the Podcast player.

It could happen that the play time and remaining time was not shown
correctly in the player. This mainly occured in Safari and is now fixed
by not using a regular expression to show the time, but instead we have
added a new "_printDuration" function which handles the formatting of
the durations.

Not only, but mainly on Safari it could also happen, that once a Podcast
was started and then paused, the loading spinner was displayed and a
user could not continue with the Podcast. This is now fixed, by removing
the spinner and only show the play, pause or replay button. As loading
indication we are now only using the seek bar.

Last but not least this commit also improves the readability of the
code, for parsing the icon of a Podcast feed.
2023-10-18 19:06:49 +02:00
Rico Berger
0487dbdcde [core] Add In-App Purchases (#24)
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.
2023-10-12 19:53:11 +02:00
Rico Berger
b82b486314 [core] Use Published Date for Item Ingestion (#21)
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.
2023-10-08 20:19:15 +02:00
Rico Berger
d292cd00b7 [youtube] Add Missing URL in isYoutubeUrl Function (#20)
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.
2023-10-07 19:19:39 +02:00
Rico Berger
86db47c291 [nitter] Allow Usage of Custom Nitter Instances (#19)
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.
2023-10-03 21:51:09 +02:00
Rico Berger
181807e090 [rss] Allow RSS Feeds without "published" Field (#18)
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.
2023-10-03 21:38:30 +02:00
Rico Berger
fe24f1ea0d [podcast] Improve Parsing (#17)
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.
2023-10-02 19:59:52 +02:00
Rico Berger
4587a1c172 Prepare v1.0.0 Release (#12)
- 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.
2023-09-17 18:39:42 +02:00
ricoberger
9deba8fed5 Fix Typos 2023-09-09 00:09:36 +02:00
Rico Berger
4a8776ee31 [core] Improve Media Handling (#5)
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.
2023-09-08 22:08:43 +02:00
Rico Berger
0419f2e32d [nitter] Add Basic Authentication (#1)
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.
2023-09-05 21:07:30 +02:00
ricoberger
b4c8824134 Initial commit 2023-09-03 16:16:38 +02:00