unifi_protect/api/
fetch_cameras.rs1use crate::{UnifiProtectCamera, UnifiProtectServer};
2use reqwest::Client;
3use crate::camera::UnifiProtectCameraSimple;
4
5impl UnifiProtectServer {
6 pub async fn fetch_cameras(&mut self, require_detailed_cameras : bool) -> Result<(), String> {
7 let response = Client::builder()
8 .danger_accept_invalid_certs(true)
9 .build()
10 .unwrap()
11 .get(&(self.uri.to_string() + "/proxy/protect/api/cameras"))
12 .headers(self.headers.clone())
13 .send()
14 .await
15 .expect("Failed to make fetch cameras request");
16
17 if !response.status().is_success() {
19 println!("Failed to fetch cameras: {}", response.status());
20 return Err(String::from("Failed to make cameras request!"));
21 }
22
23 let cameras_raw_text = response.text().await;
25 if cameras_raw_text.is_err() {
26 return Err(format!("Failed to parse camera-data: {}", cameras_raw_text.err().unwrap().to_string()));
27 }
28
29 let parsed_cameras_simple_result = serde_json::from_str::<Vec<UnifiProtectCameraSimple>>(cameras_raw_text.as_ref().unwrap());
31 if parsed_cameras_simple_result.is_err() {
32 return Err(format!("Failed to parse camera-data: {}", parsed_cameras_simple_result.err().unwrap().to_string()));
33 }
34 self.cameras_simple = parsed_cameras_simple_result.unwrap();
35
36 let parsed_cameras_result = serde_json::from_str::<Vec<UnifiProtectCamera>>(cameras_raw_text.as_ref().unwrap());
38 if !parsed_cameras_result.is_err() {
39 self.cameras = parsed_cameras_result.unwrap();
40 }else if require_detailed_cameras {
41 return Err(format!("Failed to parse camera-data: {}", parsed_cameras_result.err().unwrap().to_string()));
42 }else{
43 println!("Warning: Unable to parse complete set of camera data - data formats dont match");
44 }
45
46 Ok(())
47 }
48}