1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
use crate::{ CanMakeRequests, HasBaseUrl, InternalHttpApi, PlexApiError, Result, Server, SettingsMediaContainer, SettingsMediaContainerOuter, }; use url::Url; const SETTINGS_URL: &str = ":/prefs"; impl Server { pub async fn get_settings(&self) -> Result<SettingsMediaContainer> { let response = self.get(SETTINGS_URL).await?; if response.status() == reqwest::StatusCode::OK { Ok(SettingsMediaContainer::from( response.json::<SettingsMediaContainerOuter>().await?, )) } else { Err(PlexApiError::UnexpectedApiResponse(response.text().await?)) } } pub async fn update_settings(&self, settings: &SettingsMediaContainer) -> Result<()> { let changed = settings.get_changed(); if changed.is_empty() { Err(PlexApiError::NoChangedSettingsFound) } else { let mut uri = Url::parse(&(self.get_base_url().to_owned() + SETTINGS_URL)).unwrap(); { let mut pairs = uri.query_pairs_mut(); for (key, s) in changed { pairs.append_pair(key, &s.get_value().to_string()); } } let response = self .prepare_query(uri, reqwest::Method::PUT)? .send() .await?; if response.status() == 200 { Ok(()) } else { Err(PlexApiError::UnexpectedApiResponse(response.text().await?)) } } } }