diff --git a/src/lib/api/feed-manip.ts b/src/lib/api/feed-manip.ts index 472289b4..60b0f264 100644 --- a/src/lib/api/feed-manip.ts +++ b/src/lib/api/feed-manip.ts @@ -105,6 +105,7 @@ export class FeedTuner { tune( feed: FeedViewPost[], tunerFns: FeedTunerFn[] = [], + {dryRun}: {dryRun: boolean} = {dryRun: false}, ): FeedViewPostsSlice[] { let slices: FeedViewPostsSlice[] = [] @@ -156,9 +157,11 @@ export class FeedTuner { } } - for (const slice of slices) { - for (const item of slice.items) { - this.seenUris.add(item.post.uri) + if (!dryRun) { + for (const slice of slices) { + for (const item of slice.items) { + this.seenUris.add(item.post.uri) + } } } diff --git a/src/state/models/feeds/posts.ts b/src/state/models/feeds/posts.ts index 15145a20..c88249c8 100644 --- a/src/state/models/feeds/posts.ts +++ b/src/state/models/feeds/posts.ts @@ -277,7 +277,9 @@ export class PostsFeedModel { } const res = await this._getFeed({limit: 1}) if (res.data.feed[0]) { - const slices = this.tuner.tune(res.data.feed, this.feedTuners) + const slices = this.tuner.tune(res.data.feed, this.feedTuners, { + dryRun: true, + }) if (slices[0]) { const sliceModel = new PostsFeedSliceModel(this.rootStore, slices[0]) if (sliceModel.moderation.content.filter) { @@ -374,6 +376,15 @@ export class PostsFeedModel { const toAppend: PostsFeedSliceModel[] = [] for (const slice of slices) { const sliceModel = new PostsFeedSliceModel(this.rootStore, slice) + const dupTest = (item: PostsFeedSliceModel) => + item._reactKey === sliceModel._reactKey + // sanity check + // if a duplicate _reactKey passes through, the UI breaks hard + if (!replace) { + if (this.slices.find(dupTest) || toAppend.find(dupTest)) { + continue + } + } toAppend.push(sliceModel) } runInAction(() => {