about summary refs log tree commit diff
path: root/src/state/models/feeds/algo
diff options
context:
space:
mode:
Diffstat (limited to 'src/state/models/feeds/algo')
-rw-r--r--src/state/models/feeds/algo/saved.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/state/models/feeds/algo/saved.ts b/src/state/models/feeds/algo/saved.ts
index bc36aaed8..5d2f854dc 100644
--- a/src/state/models/feeds/algo/saved.ts
+++ b/src/state/models/feeds/algo/saved.ts
@@ -89,6 +89,36 @@ export class SavedFeedsModel {
     }
   })
 
+  removeFeed(uri: string) {
+    this.feeds = this.feeds.filter(f => f.data.uri !== uri)
+  }
+
+  addFeed(algoItem: AlgoItemModel) {
+    this.feeds.push(new AlgoItemModel(this.rootStore, algoItem.data))
+  }
+
+  async save(algoItem: AlgoItemModel) {
+    try {
+      await this.rootStore.agent.app.bsky.feed.saveFeed({
+        feed: algoItem.getUri,
+      })
+      this.addFeed(algoItem)
+    } catch (e: any) {
+      this.rootStore.log.error('Failed to save feed', e)
+    }
+  }
+
+  async unsave(uri: string) {
+    try {
+      await this.rootStore.agent.app.bsky.feed.unsaveFeed({
+        feed: uri,
+      })
+      this.removeFeed(uri)
+    } catch (e: any) {
+      this.rootStore.log.error('Failed to unsanve feed', e)
+    }
+  }
+
   // state transitions
   // =