From 8cf4c44118268940f4f6eabbb4dd270312eda577 Mon Sep 17 00:00:00 2001 From: azibodusi osain Date: Fri, 26 Nov 2021 17:04:48 +0100 Subject: [PATCH 1/2] feature(facebook::Me_data): added a method to retrieve user facebook data and removed unused method --- src/graph/me/mod.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/graph/me/mod.rs b/src/graph/me/mod.rs index 0ec5c5a..0382a5c 100644 --- a/src/graph/me/mod.rs +++ b/src/graph/me/mod.rs @@ -17,12 +17,26 @@ use serde::{Deserialize, Serialize}; use crate::graph::accounts::AccountsAPI; use crate::graph::data::Data; +use crate::graph::prelude::Accounts; /// This struct contain different data gotten as a response when a user sign in #[derive(Deserialize, Serialize)] pub struct Me { name: String, - user_id: String, + id: String, + first_name:String, + picture: FacebookPictureUserPicture, + email:String, +} + +#[derive(Deserialize, Serialize)] + pub struct PictureData{ + data: FacebookPictureUserPicture +} + +#[derive(Deserialize, Serialize)] +pub struct FacebookPictureUserPicture { + url: String, } #[derive(Clone, Debug, Deserialize, Serialize)] @@ -51,9 +65,11 @@ impl MeApi { /// retrieve a User's name and ID by using: The data in the response /// will depend on the "Fields" parameters you pass along the get request /// exmaple fields=id,name,email,picture....... - pub async fn get(&self) -> seed::fetch::Result> { - log!(self.url); - let request = Request::new(&self.url).method(Method::Get); - fetch(request).await?.json::>().await + pub async fn details(&self) -> seed::fetch::Result { + let fields = "&fields=id,name,picture, email,first_name,last_name,about,birthday,gender,link"; + let base_ur = self.url.replace("EDGE", ""); + let url = base_ur + fields; + let request = Request::new(url).method(Method::Get); + fetch(request).await?.json::().await } } From 9d645e02374243663a9f66211e478b187d4e54fe Mon Sep 17 00:00:00 2001 From: azibodusi osain Date: Fri, 26 Nov 2021 17:06:58 +0100 Subject: [PATCH 2/2] feature(example): added a method to retrieve user facebook data --- examples/seed/src/lib.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/examples/seed/src/lib.rs b/examples/seed/src/lib.rs index 83ffec1..20ad84a 100644 --- a/examples/seed/src/lib.rs +++ b/examples/seed/src/lib.rs @@ -75,7 +75,8 @@ enum Msg { ConfigFetched(fetch::Result), GetAccount, GetAccountSuccess(Data), - + GetMeDetails, + GetMeDetailsSuccess(Me), AccessTokenInformation, AccessTokenInfoData(AccessTokenInformation), @@ -95,6 +96,7 @@ fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders) { Msg::ConfigFetched(Err(fetch_error)) => error!("Config fetch failed! Be sure to have config.json at the root of your project with client_id and redirect_uri", fetch_error), Msg::GetAccount => { + orders.send_msg(Msg::GetMeDetails); if let Some(user_access_tokens) = model.user_tokens.clone() { let user_tokens = user_access_tokens; let client = Client::new(user_tokens, "".to_string()); @@ -111,6 +113,26 @@ fn update(msg: Msg, model: &mut Model, orders: &mut impl Orders) { } } + Msg::GetMeDetails => { + if let Some(user_access_tokens) = model.user_tokens.clone() { + let user_tokens = user_access_tokens; + let user_token = user_tokens.long_lived_token.clone(); + let client = Client::new(user_tokens, "".to_string()); + orders.perform_cmd(async { + // we are interested in the page long live token, therefore we called the long + // live methed by passing "long_live_token" to the method + client + .me_by_short_or_long_live_token("short_live".to_string()) + .details() + .await + .map_or_else(Msg::ResponseFailed, Msg::GetMeDetailsSuccess) + }); + } + } + Msg:: GetMeDetailsSuccess(resp) => { + + } + Msg:: GetAccountSuccess(accounts) => { model.accounts = Some(accounts.clone()); model.facebook.accounts= Some(accounts.clone());