mirror of
				https://gitlab.com/comunic/comunicapiv3
				synced 2025-11-04 09:34:04 +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 login_success;
 | 
				
			||||||
pub mod current_user_id;
 | 
					pub mod current_user_id;
 | 
				
			||||||
pub mod user_info;
 | 
					pub mod user_info;
 | 
				
			||||||
 | 
					pub mod custom_emoji;
 | 
				
			||||||
@@ -4,10 +4,11 @@
 | 
				
			|||||||
use serde::Serialize;
 | 
					use serde::Serialize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::data::user::{User, UserPageStatus, UserID};
 | 
					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::data::error::ResultBoxError;
 | 
				
			||||||
use crate::utils::user_data_utils::user_data_url;
 | 
					use crate::utils::user_data_utils::user_data_url;
 | 
				
			||||||
use crate::data::user::AccountImageVisibility::{EVERYONE, COMUNIC_USERS};
 | 
					use crate::data::user::AccountImageVisibility::{EVERYONE, COMUNIC_USERS};
 | 
				
			||||||
 | 
					use crate::api_data::custom_emoji::CustomEmojiAPI;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#[derive(Serialize)]
 | 
					#[derive(Serialize)]
 | 
				
			||||||
#[allow(non_snake_case)]
 | 
					#[allow(non_snake_case)]
 | 
				
			||||||
@@ -19,6 +20,7 @@ pub struct APIUserInfo {
 | 
				
			|||||||
    openPage: bool,
 | 
					    openPage: bool,
 | 
				
			||||||
    virtualDirectory: String,
 | 
					    virtualDirectory: String,
 | 
				
			||||||
    accountImage: String,
 | 
					    accountImage: String,
 | 
				
			||||||
 | 
					    customEmojis: Vec<CustomEmojiAPI>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
impl APIUserInfo {
 | 
					impl APIUserInfo {
 | 
				
			||||||
@@ -33,6 +35,10 @@ impl APIUserInfo {
 | 
				
			|||||||
            openPage: info.status == UserPageStatus::OPEN,
 | 
					            openPage: info.status == UserPageStatus::OPEN,
 | 
				
			||||||
            virtualDirectory: info.virtual_directory.clone().unwrap_or(String::new()),
 | 
					            virtualDirectory: info.virtual_directory.clone().unwrap_or(String::new()),
 | 
				
			||||||
            accountImage: APIUserInfo::get_account_image_url(user_id, info)?,
 | 
					            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
 | 
					    /// Friends table
 | 
				
			||||||
    pub const FRIENDS_TABLE: &str = "amis";
 | 
					    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
 | 
					/// 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;
 | 
				
			||||||
pub mod user_token;
 | 
					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
 | 
					        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 {
 | 
					    pub fn cond_i64(mut self, key: &str, val: i64) -> QueryInfo {
 | 
				
			||||||
        self.conditions.insert(key.to_string(), val.to_string());
 | 
					        self.conditions.insert(key.to_string(), val.to_string());
 | 
				
			||||||
        self
 | 
					        self
 | 
				
			||||||
@@ -96,6 +101,12 @@ impl QueryInfo {
 | 
				
			|||||||
        self.fields.push(key.to_string());
 | 
					        self.fields.push(key.to_string());
 | 
				
			||||||
        self
 | 
					        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
 | 
					/// 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
 | 
					    /// Find an integer included in the request
 | 
				
			||||||
    pub fn get_usize(&self, name: &str) -> Result<usize, Box<dyn Error>> {
 | 
					    pub fn get_usize(&self, name: &str) -> Result<usize, Box<dyn Error>> {
 | 
				
			||||||
        let value = self.row.get_opt(self.find_col(name)?);
 | 
					        let value = self.row.get_opt(self.find_col(name)?);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,3 +4,4 @@ pub mod api_helper;
 | 
				
			|||||||
pub mod account_helper;
 | 
					pub mod account_helper;
 | 
				
			||||||
pub mod user_helper;
 | 
					pub mod user_helper;
 | 
				
			||||||
pub mod friends_helper;
 | 
					pub mod friends_helper;
 | 
				
			||||||
 | 
					pub mod custom_emojies_helper;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user