Skip to main content

egs_api/api/
presence.rs

1use crate::api::error::EpicAPIError;
2use crate::api::types::presence::PresenceUpdate;
3use crate::api::EpicAPI;
4
5impl EpicAPI {
6    /// Update user presence status.
7    pub async fn update_presence(
8        &self,
9        session_id: &str,
10        body: &PresenceUpdate,
11    ) -> Result<(), EpicAPIError> {
12        let url = match &self.user_data.account_id {
13            Some(id) => format!(
14                "https://presence-public-service-prod.ol.epicgames.com/presence/api/v1/_/{}/presence/{}",
15                id, session_id
16            ),
17            None => return Err(EpicAPIError::InvalidCredentials),
18        };
19        let parsed_url = url::Url::parse(&url).map_err(|_| EpicAPIError::InvalidParams)?;
20        let response = self
21            .set_authorization_header(self.client.patch(parsed_url))
22            .json(body)
23            .send()
24            .await
25            .map_err(|e| {
26                log::error!("{:?}", e);
27                EpicAPIError::NetworkError(e)
28            })?;
29        if response.status() == reqwest::StatusCode::OK
30            || response.status() == reqwest::StatusCode::NO_CONTENT
31        {
32            Ok(())
33        } else {
34            let status = response.status();
35            let body = response.text().await.unwrap_or_default();
36            log::warn!("{} result: {}", status, body);
37            Err(EpicAPIError::HttpError { status, body })
38        }
39    }
40}