diff options
author | Paul Frazee <pfrazee@gmail.com> | 2023-03-17 18:38:16 -0500 |
---|---|---|
committer | Paul Frazee <pfrazee@gmail.com> | 2023-03-17 18:38:16 -0500 |
commit | 808affc78b9f1e0ed07c8cfdc8787f6f1c84d497 (patch) | |
tree | 5ed2db763c579111382a8c19eda2196825bfe539 /src | |
parent | 8364e1a081affa2f51efb216688650410a3122b3 (diff) | |
download | voidsky-808affc78b9f1e0ed07c8cfdc8787f6f1c84d497.tar.zst |
Switch to the off-spec goodstuff route
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/constants.ts | 10 | ||||
-rw-r--r-- | src/state/models/feed-view.ts | 60 |
2 files changed, 51 insertions, 19 deletions
diff --git a/src/lib/constants.ts b/src/lib/constants.ts index ffc1aaed5..0cde9b014 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -161,16 +161,6 @@ export function SUGGESTED_FOLLOWS(serviceUrl: string) { } } -export function GOOD_STUFF(serviceUrl: string) { - if (serviceUrl.includes('localhost')) { - return 'alice.test' - } else if (serviceUrl.includes('staging')) { - return 'paul.staging.bsky.dev' - } else { - return 'jay.bsky.social' - } -} - export const POST_IMG_MAX_WIDTH = 2000 export const POST_IMG_MAX_HEIGHT = 2000 export const POST_IMG_MAX_SIZE = 1000000 diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts index 3d7680fbc..cff9680ff 100644 --- a/src/state/models/feed-view.ts +++ b/src/state/models/feed-view.ts @@ -16,7 +16,7 @@ import {RootStoreModel} from './root-store' import * as apilib from 'lib/api/index' import {cleanError} from 'lib/strings/errors' import {RichText} from 'lib/strings/rich-text' -import {SUGGESTED_FOLLOWS, GOOD_STUFF} from 'lib/constants' +import {SUGGESTED_FOLLOWS} from 'lib/constants' import { getCombinedCursors, getMultipleAuthorsPosts, @@ -399,6 +399,7 @@ export class FeedModel { params: this.params, e, }) + this.hasMore = false } } finally { this.lock.release() @@ -641,14 +642,13 @@ export class FeedModel { params as GetTimeline.QueryParams, ) } else if (this.feedType === 'goodstuff') { - const res = await this.rootStore.api.app.bsky.feed.getAuthorFeed({ - ...params, - author: GOOD_STUFF(String(this.rootStore.agent.service)), - } as GetAuthorFeed.QueryParams) - res.data.feed = mergePosts([res], {repostsOnly: true}) - res.data.feed.forEach(item => { - delete item.reason - }) + const res = await getGoodStuff( + this.rootStore.session.currentSession?.accessJwt || '', + params as GetTimeline.QueryParams, + ) + res.data.feed = res.data.feed.filter( + item => !item.post.author.viewer?.muted, + ) return res } else { return this.rootStore.api.app.bsky.feed.getAuthorFeed( @@ -657,3 +657,45 @@ export class FeedModel { } } } + +// HACK +// temporary off-spec route to get the good stuff +// -prf +async function getGoodStuff( + accessJwt: string, + params: GetTimeline.QueryParams, +): Promise<GetTimeline.Response> { + const controller = new AbortController() + const to = setTimeout(() => controller.abort(), 15e3) + + const uri = new URL('https://bsky.social/xrpc/app.bsky.unspecced.getPopular') + let k: keyof GetTimeline.QueryParams + for (k in params) { + if (typeof params[k] !== 'undefined') { + uri.searchParams.set(k, String(params[k])) + } + } + + const res = await fetch(String(uri), { + method: 'get', + headers: { + accept: 'application/json', + authorization: `Bearer ${accessJwt}`, + }, + signal: controller.signal, + }) + + const resHeaders: Record<string, string> = {} + res.headers.forEach((value: string, key: string) => { + resHeaders[key] = value + }) + let resBody = await res.json() + + clearTimeout(to) + + return { + success: res.status === 200, + headers: resHeaders, + data: resBody, + } +} |