|
1 | | -use crate::{qb, rsync, settings}; |
| 1 | +use crate::{ntfy, qb, rsync, settings}; |
2 | 2 | use regex::Regex; |
3 | 3 | use reqwest::Client; |
4 | 4 | use serde_json::Value; |
@@ -181,21 +181,42 @@ pub fn spawn_worker( |
181 | 181 | }; |
182 | 182 |
|
183 | 183 | match entry.status { |
184 | | - settings::Status::Copying(_) | settings::Status::Completed => continue, |
| 184 | + settings::Status::Copying(_) => continue, |
| 185 | + |
| 186 | + settings::Status::Completed => { |
| 187 | + let config_cloned = config.clone(); |
| 188 | + let name_clone = entry.name.clone(); |
| 189 | + let entry_clone = entry.rsync.clone(); |
| 190 | + tokio::spawn(async move { |
| 191 | + let _ = ntfy::send( |
| 192 | + &config_cloned, "RuTorrent: Transfer Complete", |
| 193 | + format!("{} has been transferred to {}", name_clone, entry_clone.unwrap().host).as_str() |
| 194 | + ).await; |
| 195 | + }); |
| 196 | + db.remove(&hash); |
| 197 | + } |
185 | 198 |
|
186 | 199 | settings::Status::Downloading(_) => { |
187 | 200 | entry.status = settings::Status::Downloading(progress); |
188 | 201 |
|
189 | 202 | if progress >= 1.0 { |
190 | 203 | if let Some(target) = entry.rsync.clone() { |
| 204 | + let config_cloned = config.clone(); |
| 205 | + let name_clone = entry.name.clone(); |
| 206 | + tokio::spawn(async move { |
| 207 | + let _ = ntfy::send( |
| 208 | + &config_cloned, "RuTorrent: Download Complete", |
| 209 | + format!("{} has been downloaded", name_clone).as_str() |
| 210 | + ).await; |
| 211 | + }); |
| 212 | + |
191 | 213 | log::info!("Download complete → rsync: {}", entry.name); |
192 | 214 |
|
193 | 215 | entry.status = settings::Status::Copying(0.0); |
194 | 216 |
|
195 | 217 | let state_clone = state.clone(); |
196 | 218 | let hash_clone = hash.clone(); |
197 | 219 | let name_clone = entry.name.clone(); |
198 | | - |
199 | 220 | tokio::spawn(async move { |
200 | 221 | rsync::run( |
201 | 222 | state_clone, |
@@ -230,16 +251,18 @@ pub fn spawn_worker( |
230 | 251 | /// |
231 | 252 | /// Returns the resolved env var or a default string. |
232 | 253 | pub fn get_env_var(key: &str, default: Option<&str>) -> String { |
233 | | - let lower = std::env::var(key.to_lowercase()); |
234 | | - let upper = std::env::var(key.to_uppercase()); |
235 | | - let default = default.unwrap_or_default(); |
236 | | - lower |
237 | | - .unwrap_or(upper.unwrap_or(default.to_string())) |
238 | | - .to_string() |
| 254 | + if let Ok(upper) = std::env::var(key.to_uppercase()) { |
| 255 | + return upper; |
| 256 | + } |
| 257 | + if let Ok(lower) = std::env::var(key.to_lowercase()) { |
| 258 | + return lower; |
| 259 | + } |
| 260 | + default.unwrap_or_default().to_string() |
239 | 261 | } |
240 | 262 |
|
241 | 263 | /// Load dotenv file using the env var `env_file` or `ENV_FILE` |
242 | 264 | pub fn load_env_file() { |
| 265 | + // TODO: dotenv does not load env vars with $ sign |
243 | 266 | let env_file = get_env_var("env_file", Some(".env")); |
244 | 267 | let env_file_path = std::env::current_dir().unwrap_or_default().join(env_file); |
245 | 268 | let _ = dotenv::from_path(env_file_path.as_path()); |
|
0 commit comments