Track which posts have already been seen and only display latest content
This commit is contained in:
parent
98adb8dbff
commit
45f9d63f44
|
@ -9,39 +9,6 @@ import AsyncStorage from "@react-native-async-storage/async-storage";
|
||||||
|
|
||||||
import * as requests from "src/requests";
|
import * as requests from "src/requests";
|
||||||
|
|
||||||
const TEST_IMAGE = "https://cache.desktopnexus.com/thumbseg/2255/2255124-bigthumbnail.jpg";
|
|
||||||
|
|
||||||
const TEST_POSTS = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
avatar: TEST_IMAGE,
|
|
||||||
username: "njms",
|
|
||||||
replies_count: 3,
|
|
||||||
favourited: false,
|
|
||||||
reblogged: false,
|
|
||||||
content: "Also learning Claire de Lune feels a lot like reading the communist manifesto",
|
|
||||||
timestamp: 1596745156000,
|
|
||||||
media_attachments: [
|
|
||||||
{url: TEST_IMAGE}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
avatar: TEST_IMAGE,
|
|
||||||
username: "njms",
|
|
||||||
favourited: false,
|
|
||||||
reblogged: false,
|
|
||||||
replies_count: 0,
|
|
||||||
content: "Also learning Claire de Lune feels a lot like reading the communist manifesto",
|
|
||||||
timestamp: 1596745156000,
|
|
||||||
media_attachments: [
|
|
||||||
{ url: "https://college.mayo.edu/media/mccms/content-assets/campus-amp-community/arizona/mayo-clinic-phoenix-arizona-is453080663-hero-mobile.jpg" },
|
|
||||||
{ url: TEST_IMAGE },
|
|
||||||
{ url: TEST_IMAGE }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
const FeedJsx = (props) => {
|
const FeedJsx = (props) => {
|
||||||
const checkmark = require("assets/eva-icons/checkmark-circle-large.png");
|
const checkmark = require("assets/eva-icons/checkmark-circle-large.png");
|
||||||
const [state, setState] = useState({
|
const [state, setState] = useState({
|
||||||
|
@ -49,24 +16,45 @@ const FeedJsx = (props) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
let accessToken;
|
let accessToken, instance, posts;
|
||||||
let instance;
|
|
||||||
|
|
||||||
AsyncStorage
|
AsyncStorage
|
||||||
.multiGet([
|
.multiGet([
|
||||||
"@user_token",
|
"@user_token",
|
||||||
"@user_instance",
|
"@user_instance",
|
||||||
|
"@user_latestPostId",
|
||||||
])
|
])
|
||||||
.then(([tokenPair, instancePair]) => {
|
.then(([tokenPair, instancePair, latestPair]) => {
|
||||||
accessToken = JSON.parse(tokenPair[1]).access_token;
|
accessToken = JSON.parse(tokenPair[1]).access_token;
|
||||||
instance = instancePair[1];
|
instance = instancePair[1];
|
||||||
|
// NOTE: This is just a number, but the Pixelfed API will not
|
||||||
|
// accept query params like ?min_id="123" so it must be parsed
|
||||||
|
const latest = JSON.parse(latestPair[1]);
|
||||||
|
const params = { limit: 20 };
|
||||||
|
|
||||||
|
if (latest) {
|
||||||
|
// @user_latestPostId will be null the first time the feed
|
||||||
|
// is opened, so there's no need to specify it here.
|
||||||
|
params["min_id"] = latest;
|
||||||
|
}
|
||||||
|
|
||||||
return requests.fetchHomeTimeline(
|
return requests.fetchHomeTimeline(
|
||||||
instance,
|
instance,
|
||||||
accessToken
|
accessToken,
|
||||||
|
params
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
.then(posts =>
|
.then(retrievedPosts => {
|
||||||
|
posts = retrievedPosts;
|
||||||
|
if(posts.length > 0) {
|
||||||
|
const latestId = posts[0].id;
|
||||||
|
return AsyncStorage.setItem(
|
||||||
|
"@user_latestPostId",
|
||||||
|
JSON.stringify(latestId)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(() =>
|
||||||
setState({...state,
|
setState({...state,
|
||||||
posts: posts,
|
posts: posts,
|
||||||
loaded: true,
|
loaded: true,
|
||||||
|
|
Loading…
Reference in New Issue