about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2023-05-17 14:55:04 -0500
committerPaul Frazee <pfrazee@gmail.com>2023-05-17 14:55:04 -0500
commit2fd3b4ca04622836ad2a65ec8992fd429ecd9fed (patch)
treee7e7aa1b8f16e0e35fb52df6a3f907d443efc123 /src
parent9c02fbb925290b9f147e1622f4f41f5a956dce5c (diff)
downloadvoidsky-2fd3b4ca04622836ad2a65ec8992fd429ecd9fed.tar.zst
Clean up the custom-feed model
Diffstat (limited to 'src')
-rw-r--r--src/state/models/feeds/custom-feed.ts115
-rw-r--r--src/state/models/ui/saved-feeds.ts14
-rw-r--r--src/view/com/util/UserAvatar.tsx2
-rw-r--r--src/view/com/util/post-embeds/index.tsx1
-rw-r--r--src/view/screens/Home.tsx2
5 files changed, 45 insertions, 89 deletions
diff --git a/src/state/models/feeds/custom-feed.ts b/src/state/models/feeds/custom-feed.ts
index e60ac2740..5e550ec69 100644
--- a/src/state/models/feeds/custom-feed.ts
+++ b/src/state/models/feeds/custom-feed.ts
@@ -1,5 +1,5 @@
-import {AppBskyFeedDefs, AtUri} from '@atproto/api'
-import {makeAutoObservable} from 'mobx'
+import {AppBskyFeedDefs} from '@atproto/api'
+import {makeAutoObservable, runInAction} from 'mobx'
 import {RootStoreModel} from 'state/models/root-store'
 import {sanitizeDisplayName} from 'lib/strings/display-names'
 
@@ -25,13 +25,8 @@ export class CustomFeedModel {
 
   // local actions
   // =
-  set toggleSaved(value: boolean) {
-    if (this.data.viewer) {
-      this.data.viewer.saved = value
-    }
-  }
 
-  get getUri() {
+  get uri() {
     return this.data.uri
   }
 
@@ -50,99 +45,65 @@ export class CustomFeedModel {
     return this.data.viewer?.like
   }
 
-  private toggleLiked(s?: string) {
-    if (this.data.viewer) {
-      if (this.data.viewer.like) {
-        this.data.viewer.like = undefined
-      } else {
-        this.data.viewer.like = s
-      }
-    }
-  }
-
-  private incrementLike() {
-    if (this.data.likeCount) {
-      this.data.likeCount += 1
-    } else {
-      this.data.likeCount = 1
-    }
-  }
+  // public apis
+  // =
 
-  private decrementLike() {
-    if (this.data.likeCount) {
-      this.data.likeCount -= 1
-    } else {
-      this.data.likeCount = 0
-    }
+  async save() {
+    await this.rootStore.agent.app.bsky.feed.saveFeed({
+      feed: this.uri,
+    })
+    runInAction(() => {
+      this.data.viewer = this.data.viewer || {}
+      this.data.viewer.saved = true
+    })
   }
 
-  private rewriteData(data: AppBskyFeedDefs.GeneratorView) {
-    this.data = data
+  async unsave() {
+    await this.rootStore.agent.app.bsky.feed.unsaveFeed({
+      feed: this.uri,
+    })
+    runInAction(() => {
+      this.data.viewer = this.data.viewer || {}
+      this.data.viewer.saved = false
+    })
   }
 
-  // public apis
-  // =
   async like() {
     try {
-      const res = await this.rootStore.agent.app.bsky.feed.like.create(
-        {
-          repo: this.rootStore.me.did,
-        },
-        {
-          subject: {
-            uri: this.data.uri,
-            cid: this.data.cid,
-          },
-          createdAt: new Date().toISOString(),
-        },
-      )
-      this.toggleLiked(res.uri)
-      this.incrementLike()
+      const res = await this.rootStore.agent.like(this.data.uri, this.data.cid)
+      runInAction(() => {
+        this.data.viewer = this.data.viewer || {}
+        this.data.viewer.like = res.uri
+        this.data.likeCount = (this.data.likeCount || 0) + 1
+      })
     } catch (e: any) {
       this.rootStore.log.error('Failed to like feed', e)
     }
   }
 
   async unlike() {
+    if (!this.data.viewer.like) {
+      return
+    }
     try {
-      await this.rootStore.agent.app.bsky.feed.like.delete({
-        repo: this.rootStore.me.did,
-        rkey: new AtUri(this.data.viewer?.like!).rkey,
+      await this.rootStore.agent.deleteLike(this.data.viewer.like!)
+      runInAction(() => {
+        this.data.viewer = this.data.viewer || {}
+        this.data.viewer.like = undefined
+        this.data.likeCount = (this.data.likeCount || 1) - 1
       })
-      this.toggleLiked()
-      this.decrementLike()
     } catch (e: any) {
       this.rootStore.log.error('Failed to unlike feed', e)
     }
   }
 
-  static async getView(store: RootStoreModel, uri: string) {
-    const res = await store.agent.app.bsky.feed.getFeedGenerator({
-      feed: uri,
-    })
-    const view = res.data.view
-    return view
-  }
-
-  async checkIsValid() {
-    const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({
-      feed: this.data.uri,
-    })
-    return res.data.isValid
-  }
-
-  async checkIsOnline() {
-    const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({
-      feed: this.data.uri,
-    })
-    return res.data.isOnline
-  }
-
   async reload() {
     const res = await this.rootStore.agent.app.bsky.feed.getFeedGenerator({
       feed: this.data.uri,
     })
-    this.rewriteData(res.data.view)
+    runInAction(() => {
+      this.data = res.data.view
+    })
   }
 
   serialize() {
diff --git a/src/state/models/ui/saved-feeds.ts b/src/state/models/ui/saved-feeds.ts
index 85e77cae5..dca079b72 100644
--- a/src/state/models/ui/saved-feeds.ts
+++ b/src/state/models/ui/saved-feeds.ts
@@ -184,10 +184,7 @@ export class SavedFeedsModel {
 
   async save(algoItem: CustomFeedModel) {
     try {
-      await this.rootStore.agent.app.bsky.feed.saveFeed({
-        feed: algoItem.getUri,
-      })
-      algoItem.toggleSaved = true
+      await algoItem.save()
       this.addFeed(algoItem)
     } catch (e: any) {
       this.rootStore.log.error('Failed to save feed', e)
@@ -195,16 +192,13 @@ export class SavedFeedsModel {
   }
 
   async unsave(algoItem: CustomFeedModel) {
-    const uri = algoItem.getUri
+    const uri = algoItem.uri
     try {
-      await this.rootStore.agent.app.bsky.feed.unsaveFeed({
-        feed: uri,
-      })
-      algoItem.toggleSaved = false
+      await algoItem.unsave()
       this.removeFeed(uri)
       this.removePinnedFeed(uri)
     } catch (e: any) {
-      this.rootStore.log.error('Failed to unsanve feed', e)
+      this.rootStore.log.error('Failed to unsave feed', e)
     }
   }
 
diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx
index 10a605b25..1e3690fbd 100644
--- a/src/view/com/util/UserAvatar.tsx
+++ b/src/view/com/util/UserAvatar.tsx
@@ -188,7 +188,7 @@ export function UserAvatar({
           accessibilityRole="image"
         />
       ) : (
-        <DefaultAvatar size={size} />
+        <DefaultAvatar type={type} size={size} />
       )}
       <View style={[styles.editButtonContainer, pal.btn]}>
         <FontAwesomeIcon
diff --git a/src/view/com/util/post-embeds/index.tsx b/src/view/com/util/post-embeds/index.tsx
index ed2f8feba..01d26db91 100644
--- a/src/view/com/util/post-embeds/index.tsx
+++ b/src/view/com/util/post-embeds/index.tsx
@@ -170,6 +170,7 @@ export function PostEmbeds({
     AppBskyEmbedRecord.isView(embed) &&
     AppBskyFeedDefs.isGeneratorView(embed.record)
   ) {
+    // TODO memoize this?
     return (
       <CustomFeed
         item={new CustomFeedModel(store, embed.record)}
diff --git a/src/view/screens/Home.tsx b/src/view/screens/Home.tsx
index 1457478d5..70816a306 100644
--- a/src/view/screens/Home.tsx
+++ b/src/view/screens/Home.tsx
@@ -118,7 +118,7 @@ export const HomeScreen = withAuthRequired(
               key={String(2 + index + 1)}
               testID="customFeed"
               isPageFocused={selectedPage === 2 + index}
-              feed={new PostsFeedModel(store, 'custom', {feed: f.getUri})}
+              feed={new PostsFeedModel(store, 'custom', {feed: f.uri})}
               renderEmptyState={renderFollowingEmptyState}
             />
           )