From b82c5177b9987efe92a642e9619dde604dda3da0 Mon Sep 17 00:00:00 2001 From: Paul Frazee Date: Mon, 11 Dec 2023 12:58:34 -0800 Subject: [PATCH] Reduce calls to getFeedGenerator and getFeed (#2166) * Reduce calls to getFeedGenerator by the mergefeed * Dont run end-of-follows mergefeed requests until actually at the end of the feed * build AWS container --------- Co-authored-by: Jake Gold --- .../workflows/build-and-push-bskyweb-aws.yaml | 2 +- src/lib/api/feed/merge.ts | 28 ++++------ src/lib/api/feed/types.ts | 2 +- src/view/com/posts/FeedItem.tsx | 13 +++-- src/view/com/util/FeedInfoText.tsx | 54 +++++++++++++++++++ 5 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 src/view/com/util/FeedInfoText.tsx diff --git a/.github/workflows/build-and-push-bskyweb-aws.yaml b/.github/workflows/build-and-push-bskyweb-aws.yaml index a7c8f458..39136fca 100644 --- a/.github/workflows/build-and-push-bskyweb-aws.yaml +++ b/.github/workflows/build-and-push-bskyweb-aws.yaml @@ -3,7 +3,7 @@ on: push: branches: - main - - jake/bskyweb-additions + - traffic-reduction env: REGISTRY: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_REGISTRY }} USERNAME: ${{ secrets.AWS_ECR_REGISTRY_USEAST2_PACKAGES_USERNAME }} diff --git a/src/lib/api/feed/merge.ts b/src/lib/api/feed/merge.ts index 381159d1..a4391afb 100644 --- a/src/lib/api/feed/merge.ts +++ b/src/lib/api/feed/merge.ts @@ -62,7 +62,7 @@ export class MergeFeedAPI implements FeedAPI { // always keep following topped up if (this.following.numReady < limit) { - promises.push(this.following.fetchNext(60)) + await this.following.fetchNext(60) } // pick the next feeds to sample from @@ -73,9 +73,13 @@ export class MergeFeedAPI implements FeedAPI { } // top up the feeds - for (const feed of feeds) { - if (feed.numReady < 5) { - promises.push(feed.fetchNext(10)) + const outOfFollows = + !this.following.hasMore && this.following.numReady < limit + if (this.params.mergeFeedEnabled || outOfFollows) { + for (const feed of feeds) { + if (feed.numReady < 5) { + promises.push(feed.fetchNext(10)) + } } } @@ -216,22 +220,10 @@ class MergeFeedSource_Custom extends MergeFeedSource { super(feedTuners) this.sourceInfo = { $type: 'reasonFeedSource', - displayName: feedUri.split('/').pop() || '', - uri: feedUriToHref(feedUri), + uri: feedUri, + href: feedUriToHref(feedUri), } this.minDate = new Date(Date.now() - POST_AGE_CUTOFF) - getAgent() - .app.bsky.feed.getFeedGenerator({ - feed: feedUri, - }) - .then( - res => { - if (this.sourceInfo) { - this.sourceInfo.displayName = res.data.view.displayName - } - }, - _err => {}, - ) } protected async _getFeed( diff --git a/src/lib/api/feed/types.ts b/src/lib/api/feed/types.ts index 5d2a90c1..abc6511b 100644 --- a/src/lib/api/feed/types.ts +++ b/src/lib/api/feed/types.ts @@ -19,7 +19,7 @@ export interface FeedAPI { export interface ReasonFeedSource { $type: 'reasonFeedSource' uri: string - displayName: string + href: string } export function isReasonFeedSource(v: unknown): v is ReasonFeedSource { diff --git a/src/view/com/posts/FeedItem.tsx b/src/view/com/posts/FeedItem.tsx index df4728a5..f054a40f 100644 --- a/src/view/com/posts/FeedItem.tsx +++ b/src/view/com/posts/FeedItem.tsx @@ -33,6 +33,7 @@ import {MAX_POST_LINES} from 'lib/constants' import {countLines} from 'lib/strings/helpers' import {useComposerControls} from '#/state/shell/composer' import {Shadow, usePostShadow, POST_TOMBSTONE} from '#/state/cache/post-shadow' +import {FeedNameText} from '../util/FeedInfoText' export function FeedItem({ post, @@ -177,22 +178,20 @@ let FeedItemInner = ({ {isReasonFeedSource(reason) ? ( - + From{' '} - diff --git a/src/view/com/util/FeedInfoText.tsx b/src/view/com/util/FeedInfoText.tsx new file mode 100644 index 00000000..54124c73 --- /dev/null +++ b/src/view/com/util/FeedInfoText.tsx @@ -0,0 +1,54 @@ +import React from 'react' +import {StyleProp, StyleSheet, TextStyle} from 'react-native' +import {TextLinkOnWebOnly} from './Link' +import {LoadingPlaceholder} from './LoadingPlaceholder' +import {TypographyVariant} from 'lib/ThemeContext' +import {sanitizeDisplayName} from 'lib/strings/display-names' +import {useFeedSourceInfoQuery} from '#/state/queries/feed' + +export function FeedNameText({ + type = 'md', + uri, + href, + lineHeight, + numberOfLines, + style, +}: { + type?: TypographyVariant + uri: string + href: string + lineHeight?: number + numberOfLines?: number + style?: StyleProp +}) { + const {data, isError} = useFeedSourceInfoQuery({uri}) + + let inner + if (data?.displayName || isError) { + const displayName = data?.displayName || uri.split('/').pop() || '' + inner = ( + + ) + } else { + inner = ( + + ) + } + + return inner +} + +const styles = StyleSheet.create({ + loadingPlaceholder: {position: 'relative', top: 1, left: 2}, +})