@@ -2,7 +2,7 @@ use nostrss_grpc::grpc::{
22 self , AddFeedRequest , AddFeedResponse , DeleteFeedRequest , DeleteFeedResponse , FeedInfoRequest ,
33 FeedInfoResponse , FeedItem , FeedsListRequest , FeedsListResponse ,
44} ;
5- use std:: { ops :: Index , sync:: Arc } ;
5+ use std:: sync:: Arc ;
66use tokio:: sync:: { Mutex , MutexGuard } ;
77use tonic:: { Code , Request , Response , Status } ;
88
@@ -25,6 +25,40 @@ impl FeedRequestHandler {
2525 Ok ( Response :: new ( grpc:: FeedsListResponse { feeds } ) )
2626 }
2727
28+ pub async fn feed_info (
29+ app : MutexGuard < ' _ , App > ,
30+ request : Request < FeedInfoRequest > ,
31+ ) -> Result < Response < FeedInfoResponse > , Status > {
32+ let id = & request. into_inner ( ) . id ;
33+ match app. rss . feeds . clone ( ) . into_iter ( ) . find ( |f| & f. id == id) {
34+ Some ( feed) => Ok ( Response :: new ( FeedInfoResponse {
35+ feed : FeedItem :: from ( feed) ,
36+ } ) ) ,
37+ None => {
38+ return Err ( Status :: new ( Code :: NotFound , "Feed not found" ) ) ;
39+ }
40+ }
41+ }
42+
43+ pub async fn add_feed (
44+ mut app : MutexGuard < ' _ , App > ,
45+ request : Request < AddFeedRequest > ,
46+ ) -> Result < Response < AddFeedResponse > , Status > {
47+ let data = request. into_inner ( ) ;
48+ let feed = Feed :: from ( data) ;
49+ let map = Arc :: new ( Mutex :: new ( app. feeds_map . clone ( ) ) ) ;
50+ let clients = Arc :: new ( Mutex :: new ( app. clients . clone ( ) ) ) ;
51+
52+ app. rss . feeds . push ( feed. clone ( ) ) ;
53+
54+ let job = schedule ( feed. schedule . clone ( ) . as_str ( ) , feed. clone ( ) , map, clients) . await ;
55+
56+ _ = app. rss . feeds_jobs . insert ( feed. id . clone ( ) , job. guid ( ) ) ;
57+ _ = app. rss . scheduler . add ( job) . await ;
58+
59+ Ok ( Response :: new ( AddFeedResponse { } ) )
60+ }
61+
2862 // Interface to delete a feed on instance
2963 pub async fn delete_feed (
3064 mut app : MutexGuard < ' _ , App > ,
@@ -56,40 +90,6 @@ impl FeedRequestHandler {
5690 _ = app. scheduler . remove ( job_uuid. unwrap ( ) ) . await ;
5791 Ok ( Response :: new ( grpc:: DeleteFeedResponse { } ) )
5892 }
59-
60- pub async fn add_feed (
61- mut app : MutexGuard < ' _ , App > ,
62- request : Request < AddFeedRequest > ,
63- ) -> Result < Response < AddFeedResponse > , Status > {
64- let data = request. into_inner ( ) ;
65- let feed = Feed :: from ( data) ;
66- let map = Arc :: new ( Mutex :: new ( app. feeds_map . clone ( ) ) ) ;
67- let clients = Arc :: new ( Mutex :: new ( app. clients . clone ( ) ) ) ;
68-
69- app. rss . feeds . push ( feed. clone ( ) ) ;
70-
71- let job = schedule ( feed. schedule . clone ( ) . as_str ( ) , feed. clone ( ) , map, clients) . await ;
72-
73- _ = app. rss . feeds_jobs . insert ( feed. id . clone ( ) , job. guid ( ) ) ;
74- _ = app. rss . scheduler . add ( job) . await ;
75-
76- Ok ( Response :: new ( AddFeedResponse { } ) )
77- }
78-
79- pub async fn feed_info (
80- app : MutexGuard < ' _ , App > ,
81- request : Request < FeedInfoRequest > ,
82- ) -> Result < Response < FeedInfoResponse > , Status > {
83- let id = & request. into_inner ( ) . id ;
84- match app. rss . feeds . clone ( ) . into_iter ( ) . find ( |f| & f. id == id) {
85- Some ( feed) => Ok ( Response :: new ( FeedInfoResponse {
86- feed : FeedItem :: from ( feed) ,
87- } ) ) ,
88- None => {
89- return Err ( Status :: new ( Code :: NotFound , "Feed not found" ) ) ;
90- }
91- }
92- }
9393}
9494
9595#[ cfg( test) ]
0 commit comments