mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-10-31 07:34:45 +00:00 
			
		
		
		
	Get user custom emojies
This commit is contained in:
		
							
								
								
									
										29
									
								
								src/api_data/custom_emoji.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/api_data/custom_emoji.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| //! # Custom emoji API object | ||||
| //! | ||||
| //! @author Pierre Hubert | ||||
| use serde::Serialize; | ||||
| use crate::data::custom_emoji::CustomEmoji; | ||||
| use crate::utils::user_data_utils::user_data_url; | ||||
|  | ||||
| #[derive(Serialize)] | ||||
| #[allow(non_snake_case)] | ||||
| pub struct CustomEmojiAPI { | ||||
|     id: u64, | ||||
|     userID: i64, | ||||
|     shortcut: String, | ||||
|     url: String | ||||
| } | ||||
|  | ||||
| impl CustomEmojiAPI { | ||||
|  | ||||
|     /// Create a new Custom Emoji API entry | ||||
|     pub fn new(custom_emoji: &CustomEmoji) -> CustomEmojiAPI { | ||||
|         CustomEmojiAPI { | ||||
|             id: custom_emoji.id, | ||||
|             userID: custom_emoji.user_id, | ||||
|             shortcut: custom_emoji.shortcut.to_string(), | ||||
|             url: user_data_url(&custom_emoji.path), | ||||
|         } | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -11,3 +11,4 @@ pub mod http_error; | ||||
| pub mod login_success; | ||||
| pub mod current_user_id; | ||||
| pub mod user_info; | ||||
| pub mod custom_emoji; | ||||
| @@ -4,10 +4,11 @@ | ||||
| use serde::Serialize; | ||||
|  | ||||
| use crate::data::user::{User, UserPageStatus, UserID}; | ||||
| use crate::helpers::friends_helper; | ||||
| use crate::helpers::{friends_helper, custom_emojies_helper}; | ||||
| use crate::data::error::ResultBoxError; | ||||
| use crate::utils::user_data_utils::user_data_url; | ||||
| use crate::data::user::AccountImageVisibility::{EVERYONE, COMUNIC_USERS}; | ||||
| use crate::api_data::custom_emoji::CustomEmojiAPI; | ||||
|  | ||||
| #[derive(Serialize)] | ||||
| #[allow(non_snake_case)] | ||||
| @@ -19,6 +20,7 @@ pub struct APIUserInfo { | ||||
|     openPage: bool, | ||||
|     virtualDirectory: String, | ||||
|     accountImage: String, | ||||
|     customEmojis: Vec<CustomEmojiAPI>, | ||||
| } | ||||
|  | ||||
| impl APIUserInfo { | ||||
| @@ -33,6 +35,10 @@ impl APIUserInfo { | ||||
|             openPage: info.status == UserPageStatus::OPEN, | ||||
|             virtualDirectory: info.virtual_directory.clone().unwrap_or(String::new()), | ||||
|             accountImage: APIUserInfo::get_account_image_url(user_id, info)?, | ||||
|             customEmojis: custom_emojies_helper::get_list_user(info.id)? | ||||
|                 .iter() | ||||
|                 .map(|f| CustomEmojiAPI::new(f)) | ||||
|                 .collect(), | ||||
|         }) | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,9 @@ pub mod database_tables_names { | ||||
|  | ||||
|     /// Friends table | ||||
|     pub const FRIENDS_TABLE: &str = "amis"; | ||||
|  | ||||
|     /// Custom emojis table | ||||
|     pub const EMOJIS_TABLE: &str = "comunic_custom_emojis"; | ||||
| } | ||||
|  | ||||
| /// The account image to show for user who do not have any | ||||
|   | ||||
							
								
								
									
										13
									
								
								src/data/custom_emoji.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/data/custom_emoji.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| //! User custom emoji | ||||
| //! | ||||
| //! @author Pierre Hubert | ||||
|  | ||||
| use crate::data::user::UserID; | ||||
|  | ||||
| #[derive(Debug)] | ||||
| pub struct CustomEmoji { | ||||
|     pub id: u64, | ||||
|     pub user_id: UserID, | ||||
|     pub shortcut: String, | ||||
|     pub path: String, | ||||
| } | ||||
| @@ -6,3 +6,4 @@ pub mod api_client; | ||||
|  | ||||
| pub mod user; | ||||
| pub mod user_token; | ||||
| pub mod custom_emoji; | ||||
							
								
								
									
										26
									
								
								src/helpers/custom_emojies_helper.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/helpers/custom_emojies_helper.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| //! # Custom emojies helper | ||||
| //! | ||||
| //! @author Pierre Hubert | ||||
|  | ||||
| use crate::data::user::UserID; | ||||
| use crate::data::error::ResultBoxError; | ||||
| use crate::data::custom_emoji::CustomEmoji; | ||||
| use crate::helpers::database; | ||||
| use crate::constants::database_tables_names::EMOJIS_TABLE; | ||||
|  | ||||
| /// Get the list of emojies of a user | ||||
| pub fn get_list_user(user_id: UserID) -> ResultBoxError<Vec<CustomEmoji>> { | ||||
|     database::QueryInfo::new(EMOJIS_TABLE) | ||||
|         .cond_i64("user_id", user_id) | ||||
|         .exec(db_to_custom_emoji) | ||||
| } | ||||
|  | ||||
| /// Turn a database entry into a [CustomEmoji] | ||||
| fn db_to_custom_emoji(row: &database::RowResult) -> ResultBoxError<CustomEmoji> { | ||||
|     Ok(CustomEmoji { | ||||
|         id: row.get_u64("id")?, | ||||
|         user_id: row.get_int64("user_id")?, | ||||
|         shortcut: row.get_str("shortcut")?, | ||||
|         path: row.get_str("path")? | ||||
|     }) | ||||
| } | ||||
| @@ -86,6 +86,11 @@ impl QueryInfo { | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     pub fn cond_u64(mut self, key: &str, val: u64) -> QueryInfo { | ||||
|         self.conditions.insert(key.to_string(), val.to_string()); | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     pub fn cond_i64(mut self, key: &str, val: i64) -> QueryInfo { | ||||
|         self.conditions.insert(key.to_string(), val.to_string()); | ||||
|         self | ||||
| @@ -96,6 +101,12 @@ impl QueryInfo { | ||||
|         self.fields.push(key.to_string()); | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     /// Execute query | ||||
|     pub fn exec<E, F: Fn(&RowResult) -> ProcessRowResult<E>>(self, process_function: F) | ||||
|                                                              -> Result<Vec<E>, Box<dyn Error>> { | ||||
|         query(self, process_function) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Struct used to read the result of a request | ||||
| @@ -136,6 +147,17 @@ impl<'a> RowResult<'a> { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Find an integer included in the request | ||||
|     pub fn get_u64(&self, name: &str) -> Result<u64, Box<dyn Error>> { | ||||
|         let value = self.row.get_opt(self.find_col(name)?); | ||||
|  | ||||
|         match value { | ||||
|             None => Err(ExecError::boxed_string( | ||||
|                 format!("Could not extract integer field {} !", name))), | ||||
|             Some(s) => Ok(s?) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /// Find an integer included in the request | ||||
|     pub fn get_usize(&self, name: &str) -> Result<usize, Box<dyn Error>> { | ||||
|         let value = self.row.get_opt(self.find_col(name)?); | ||||
|   | ||||
| @@ -4,3 +4,4 @@ pub mod api_helper; | ||||
| pub mod account_helper; | ||||
| pub mod user_helper; | ||||
| pub mod friends_helper; | ||||
| pub mod custom_emojies_helper; | ||||
		Reference in New Issue
	
	Block a user