about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/state/lib/api.ts42
-rw-r--r--src/state/models/feed-view.ts61
-rw-r--r--src/state/models/post-thread-view.ts61
3 files changed, 60 insertions, 104 deletions
diff --git a/src/state/lib/api.ts b/src/state/lib/api.ts
index 807f257a9..ba2fcd3bb 100644
--- a/src/state/lib/api.ts
+++ b/src/state/lib/api.ts
@@ -51,48 +51,6 @@ export async function post(
   )
 }
 
-export async function upvote(store: RootStoreModel, uri: string, cid: string) {
-  return await store.api.app.bsky.feed.vote.create(
-    {did: store.me.did || ''},
-    {
-      subject: {uri, cid},
-      direction: 'up',
-      createdAt: new Date().toISOString(),
-    },
-  )
-}
-
-export async function unupvote(store: RootStoreModel, upvoteUri: string) {
-  const urip = new AtUri(upvoteUri)
-  return await store.api.app.bsky.feed.vote.delete({
-    did: urip.hostname,
-    rkey: urip.rkey,
-  })
-}
-
-export async function downvote(
-  store: RootStoreModel,
-  uri: string,
-  cid: string,
-) {
-  return await store.api.app.bsky.feed.vote.create(
-    {did: store.me.did || ''},
-    {
-      subject: {uri, cid},
-      direction: 'down',
-      createdAt: new Date().toISOString(),
-    },
-  )
-}
-
-export async function undownvote(store: RootStoreModel, downvoteUri: string) {
-  const urip = new AtUri(downvoteUri)
-  return await store.api.app.bsky.feed.vote.delete({
-    did: urip.hostname,
-    rkey: urip.rkey,
-  })
-}
-
 export async function repost(store: RootStoreModel, uri: string, cid: string) {
   return await store.api.app.bsky.feed.repost.create(
     {did: store.me.did || ''},
diff --git a/src/state/models/feed-view.ts b/src/state/models/feed-view.ts
index 1c58a44d3..c45127ab3 100644
--- a/src/state/models/feed-view.ts
+++ b/src/state/models/feed-view.ts
@@ -72,45 +72,44 @@ export class FeedItemModel implements GetTimeline.FeedItem {
     }
   }
 
-  async _clearVotes() {
-    if (this.myState.upvote) {
-      await apilib.unupvote(this.rootStore, this.myState.upvote)
-      runInAction(() => {
-        this.upvoteCount--
-        this.myState.upvote = undefined
-      })
-    }
-    if (this.myState.downvote) {
-      await apilib.undownvote(this.rootStore, this.myState.downvote)
-      runInAction(() => {
-        this.downvoteCount--
-        this.myState.downvote = undefined
-      })
-    }
-  }
-
   async toggleUpvote() {
     const wasntUpvoted = !this.myState.upvote
-    await this._clearVotes()
-    if (wasntUpvoted) {
-      const res = await apilib.upvote(this.rootStore, this.uri, this.cid)
-      runInAction(() => {
+    const res = await this.rootStore.api.app.bsky.feed.setVote({
+      subject: {
+        uri: this.uri,
+        cid: this.cid,
+      },
+      direction: wasntUpvoted ? 'up' : 'none',
+    })
+    runInAction(() => {
+      if (wasntUpvoted) {
         this.upvoteCount++
-        this.myState.upvote = res.uri
-      })
-    }
+      } else {
+        this.upvoteCount--
+      }
+      this.myState.upvote = res.data.upvote
+      this.myState.downvote = res.data.downvote
+    })
   }
 
   async toggleDownvote() {
     const wasntDownvoted = !this.myState.downvote
-    await this._clearVotes()
-    if (wasntDownvoted) {
-      const res = await apilib.downvote(this.rootStore, this.uri, this.cid)
-      runInAction(() => {
+    const res = await this.rootStore.api.app.bsky.feed.setVote({
+      subject: {
+        uri: this.uri,
+        cid: this.cid,
+      },
+      direction: wasntDownvoted ? 'down' : 'none',
+    })
+    runInAction(() => {
+      if (wasntDownvoted) {
         this.downvoteCount++
-        this.myState.downvote = res.uri
-      })
-    }
+      } else {
+        this.downvoteCount--
+      }
+      this.myState.upvote = res.data.upvote
+      this.myState.downvote = res.data.downvote
+    })
   }
 
   async toggleRepost() {
diff --git a/src/state/models/post-thread-view.ts b/src/state/models/post-thread-view.ts
index 385aa2e8e..3d9f56ae3 100644
--- a/src/state/models/post-thread-view.ts
+++ b/src/state/models/post-thread-view.ts
@@ -112,45 +112,44 @@ export class PostThreadViewPostModel implements GetPostThread.Post {
     }
   }
 
-  async _clearVotes() {
-    if (this.myState.upvote) {
-      await apilib.unupvote(this.rootStore, this.myState.upvote)
-      runInAction(() => {
-        this.upvoteCount--
-        this.myState.upvote = undefined
-      })
-    }
-    if (this.myState.downvote) {
-      await apilib.undownvote(this.rootStore, this.myState.downvote)
-      runInAction(() => {
-        this.downvoteCount--
-        this.myState.downvote = undefined
-      })
-    }
-  }
-
   async toggleUpvote() {
     const wasntUpvoted = !this.myState.upvote
-    await this._clearVotes()
-    if (wasntUpvoted) {
-      const res = await apilib.upvote(this.rootStore, this.uri, this.cid)
-      runInAction(() => {
+    const res = await this.rootStore.api.app.bsky.feed.setVote({
+      subject: {
+        uri: this.uri,
+        cid: this.cid,
+      },
+      direction: wasntUpvoted ? 'up' : 'none',
+    })
+    runInAction(() => {
+      if (wasntUpvoted) {
         this.upvoteCount++
-        this.myState.upvote = res.uri
-      })
-    }
+      } else {
+        this.upvoteCount--
+      }
+      this.myState.upvote = res.data.upvote
+      this.myState.downvote = res.data.downvote
+    })
   }
 
   async toggleDownvote() {
     const wasntDownvoted = !this.myState.downvote
-    await this._clearVotes()
-    if (wasntDownvoted) {
-      const res = await apilib.downvote(this.rootStore, this.uri, this.cid)
-      runInAction(() => {
+    const res = await this.rootStore.api.app.bsky.feed.setVote({
+      subject: {
+        uri: this.uri,
+        cid: this.cid,
+      },
+      direction: wasntDownvoted ? 'down' : 'none',
+    })
+    runInAction(() => {
+      if (wasntDownvoted) {
         this.downvoteCount++
-        this.myState.downvote = res.uri
-      })
-    }
+      } else {
+        this.downvoteCount--
+      }
+      this.myState.upvote = res.data.upvote
+      this.myState.downvote = res.data.downvote
+    })
   }
 
   async toggleRepost() {