1use serde::Serialize;
2
3use crate::{Qbit, Result, ext::*};
4
5impl Qbit {
6 pub async fn add_folder<T: AsRef<str> + Send + Sync>(&self, path: T) -> Result<()> {
8 #[derive(Serialize)]
9 struct Arg<'a> {
10 path: &'a str,
11 }
12
13 self.post_with(
14 "rss/addFolder",
15 &Arg {
16 path: path.as_ref(),
17 },
18 )
19 .await?
20 .end()
21 }
22
23 pub async fn add_feed<T: AsRef<str> + Send + Sync>(
25 &self,
26 url: T,
27 path: Option<T>,
28 ) -> Result<()> {
29 #[derive(Serialize)]
30 struct Arg<'a> {
31 url: &'a str,
32 path: Option<&'a str>,
33 }
34
35 self.post_with(
36 "rss/addFeed",
37 &Arg {
38 url: url.as_ref(),
39 path: path.as_ref().map(AsRef::as_ref),
40 },
41 )
42 .await?
43 .end()
44 }
45
46 pub async fn remove_item<T: AsRef<str> + Send + Sync>(&self, path: T) -> Result<()> {
48 #[derive(Serialize)]
49 struct Arg<'a> {
50 path: &'a str,
51 }
52
53 self.post_with(
54 "rss/removeItem",
55 &Arg {
56 path: path.as_ref(),
57 },
58 )
59 .await?
60 .end()
61 }
62
63 pub async fn move_item<T: AsRef<str> + Send + Sync>(
65 &self,
66 item_path: T,
67 dest_path: T,
68 ) -> Result<()> {
69 #[derive(Serialize)]
70 #[serde(rename_all = "camelCase")]
71 struct Arg<'a> {
72 item_path: &'a str,
73 dest_path: &'a str,
74 }
75
76 self.post_with(
77 "rss/moveItem",
78 &Arg {
79 item_path: item_path.as_ref(),
80 dest_path: dest_path.as_ref(),
81 },
82 )
83 .await?
84 .end()
85 }
86
87 pub async fn mark_as_read<T: AsRef<str> + Send + Sync>(
89 &self,
90 item_path: T,
91 article_id: Option<T>,
92 ) -> Result<()> {
93 #[derive(Serialize)]
94 #[serde(rename_all = "camelCase")]
95 struct Arg<'a> {
96 item_path: &'a str,
97 article_id: Option<&'a str>,
98 }
99
100 self.post_with(
101 "rss/markAsRead",
102 &Arg {
103 item_path: item_path.as_ref(),
104 article_id: article_id.as_ref().map(AsRef::as_ref),
105 },
106 )
107 .await?
108 .end()
109 }
110
111 pub async fn refresh_item<T: AsRef<str> + Send + Sync>(&self, item_path: T) -> Result<()> {
113 #[derive(Serialize)]
114 #[serde(rename_all = "camelCase")]
115 struct Arg<'a> {
116 item_path: &'a str,
117 }
118
119 self.post_with(
120 "rss/refreshItem",
121 &Arg {
122 item_path: item_path.as_ref(),
123 },
124 )
125 .await?
126 .end()
127 }
128
129 pub async fn rename_rule<T: AsRef<str> + Send + Sync>(
131 &self,
132 rule_name: T,
133 new_rule_name: T,
134 ) -> Result<()> {
135 #[derive(Serialize)]
136 #[serde(rename_all = "camelCase")]
137 struct Arg<'a> {
138 rule_name: &'a str,
139 new_rule_name: &'a str,
140 }
141
142 self.post_with(
143 "rss/renameRule",
144 &Arg {
145 rule_name: rule_name.as_ref(),
146 new_rule_name: new_rule_name.as_ref(),
147 },
148 )
149 .await?
150 .end()
151 }
152
153 pub async fn remove_rule<T: AsRef<str> + Send + Sync>(&self, rule_name: T) -> Result<()> {
155 #[derive(Serialize)]
156 #[serde(rename_all = "camelCase")]
157 struct Arg<'a> {
158 rule_name: &'a str,
159 }
160
161 self.post_with(
162 "rss/removeRule",
163 &Arg {
164 rule_name: rule_name.as_ref(),
165 },
166 )
167 .await?
168 .end()
169 }
170}