diff --git a/src/state/models/feeds/custom-feed.ts b/src/state/models/feeds/custom-feed.ts
index e60ac274..5e550ec6 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
- }
- }
-
- private decrementLike() {
- if (this.data.likeCount) {
- this.data.likeCount -= 1
- } else {
- this.data.likeCount = 0
- }
- }
-
- private rewriteData(data: AppBskyFeedDefs.GeneratorView) {
- this.data = data
- }
-
// public apis
// =
+
+ 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
+ })
+ }
+
+ 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
+ })
+ }
+
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 85e77cae..dca079b7 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 10a605b2..1e3690fb 100644
--- a/src/view/com/util/UserAvatar.tsx
+++ b/src/view/com/util/UserAvatar.tsx
@@ -188,7 +188,7 @@ export function UserAvatar({
accessibilityRole="image"
/>
) : (
-
+
)}
)