about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib/constants.ts10
-rw-r--r--src/state/models/feed-view.ts60
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,
+  }
+}