mix some recent events into the for you feed
This commit is contained in:
parent
0716fb4752
commit
e746109f5c
@ -1,4 +1,4 @@
|
||||
import { TaggedNostrEvent } from "@snort/system";
|
||||
import {EventKind, TaggedNostrEvent} from "@snort/system";
|
||||
import { memo, useEffect, useMemo, useState } from "react";
|
||||
import { FormattedMessage } from "react-intl";
|
||||
import { Link } from "react-router-dom";
|
||||
@ -10,6 +10,7 @@ import { getForYouFeed } from "@/Db/getForYouFeed";
|
||||
import useLogin from "@/Hooks/useLogin";
|
||||
import messages from "@/Pages/messages";
|
||||
import { System } from "@/system";
|
||||
import useTimelineFeed, {TimelineFeedOptions, TimelineSubject} from "@/Feed/TimelineFeed";
|
||||
|
||||
const FollowsHint = () => {
|
||||
const { publicKey: pubKey, follows } = useLogin();
|
||||
@ -44,6 +45,24 @@ export const ForYouTab = memo(function ForYouTab() {
|
||||
const [displayAs, setDisplayAs] = useState<DisplayAs>(displayAsInitial);
|
||||
const { publicKey } = useLogin();
|
||||
|
||||
const login = useLogin();
|
||||
const subject = useMemo(
|
||||
() =>
|
||||
({
|
||||
type: "pubkey",
|
||||
items: login.follows.item,
|
||||
discriminator: login.publicKey?.slice(0, 12),
|
||||
extra: rb => {
|
||||
if (login.tags.item.length > 0) {
|
||||
rb.withFilter().kinds([EventKind.TextNote]).tag("t", login.tags.item);
|
||||
}
|
||||
},
|
||||
}) as TimelineSubject,
|
||||
[login.follows.item, login.tags.item],
|
||||
);
|
||||
// also get "follows" feed so data is loaded
|
||||
const latestFeed = useTimelineFeed(subject, { method: "TIME_RANGE" } as TimelineFeedOptions);
|
||||
|
||||
const getFeed = () => {
|
||||
if (!publicKey) {
|
||||
return [];
|
||||
@ -78,10 +97,37 @@ export const ForYouTab = memo(function ForYouTab() {
|
||||
}
|
||||
}, []);
|
||||
|
||||
const combinedFeed = useMemo(() => {
|
||||
// combine feeds: intermittently pick from both feeds
|
||||
const seen = new Set<string>();
|
||||
const combined = [];
|
||||
let i = 0;
|
||||
let j = 0;
|
||||
while (i < notes.length || j < latestFeed.main?.length) {
|
||||
if (i < notes.length) {
|
||||
const ev = notes[i];
|
||||
if (!seen.has(ev.id)) {
|
||||
seen.add(ev.id);
|
||||
combined.push(ev);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (j < latestFeed.main?.length) {
|
||||
const ev = latestFeed.main[j];
|
||||
if (!seen.has(ev.id) && !ev.tags?.some((tag: string[]) => tag[0] === "e")) {
|
||||
seen.add(ev.id);
|
||||
combined.push(ev);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
return combined;
|
||||
}, [notes, latestFeed.main]);
|
||||
|
||||
const frags = useMemo(() => {
|
||||
return [
|
||||
{
|
||||
events: notes,
|
||||
events: combinedFeed,
|
||||
refTime: Date.now(),
|
||||
},
|
||||
];
|
||||
|
Loading…
x
Reference in New Issue
Block a user