Compare commits

...

3 Commits

Author SHA1 Message Date
Clément Renault
90d96ee415 Make clippy happy 2025-06-05 18:21:55 +02:00
Clément Renault
38b317857d Improve the wording again 2025-06-05 18:19:19 +02:00
Tamo
765e76857f store the email file in the global config directory instead of the local data.ms so it's shared between all instances 2025-06-05 16:01:30 +02:00
2 changed files with 20 additions and 12 deletions

View File

@@ -45,7 +45,7 @@ macro_rules! empty_analytics {
/// `~/.config/Meilisearch` on *NIX or *BSD.
/// `~/Library/ApplicationSupport` on macOS.
/// `%APPDATA` (= `C:\Users%USERNAME%\AppData\Roaming`) on windows.
static MEILISEARCH_CONFIG_PATH: Lazy<Option<PathBuf>> =
pub static MEILISEARCH_CONFIG_PATH: Lazy<Option<PathBuf>> =
Lazy::new(|| AppDirs::new(Some("Meilisearch"), false).map(|appdir| appdir.config_dir));
fn config_user_id_path(db_path: &Path) -> Option<PathBuf> {

View File

@@ -12,7 +12,7 @@ use actix_web::web::Data;
use actix_web::HttpServer;
use index_scheduler::IndexScheduler;
use is_terminal::IsTerminal;
use meilisearch::analytics::Analytics;
use meilisearch::analytics::{Analytics, MEILISEARCH_CONFIG_PATH};
use meilisearch::option::LogMode;
use meilisearch::search_queue::SearchQueue;
use meilisearch::{
@@ -132,12 +132,13 @@ async fn try_main() -> anyhow::Result<()> {
let (index_scheduler, auth_controller) = setup_meilisearch(&opt)?;
// We ask users their emails just after the data.ms is created
let skip_email_path = opt.db_path.join(SKIP_EMAIL_FILENAME);
let skip_email_path =
MEILISEARCH_CONFIG_PATH.as_ref().map(|conf| conf.join(SKIP_EMAIL_FILENAME));
// If the config path does not exist, it means the user don't have a home directory
let skip_email = skip_email_path.as_ref().is_none_or(|path| path.exists());
opt.contact_email = match opt.contact_email.as_ref().map(|email| email.as_deref()) {
Some(Some("false")) | None if !skip_email_path.exists() => {
prompt_for_contact_email().await.map(Some)?
}
Some(Some(email)) if !skip_email_path.exists() => Some(Some(email.to_string())),
Some(Some("false")) | None if !skip_email => prompt_for_contact_email().await.map(Some)?,
Some(Some(email)) if !skip_email => Some(Some(email.to_string())),
_otherwise => None,
};
@@ -145,14 +146,21 @@ async fn try_main() -> anyhow::Result<()> {
let email = email.clone();
// We spawn a task to register the email and create the skip email
// file to avoid blocking the Meilisearch launch further.
let _ = tokio::spawn(async move {
if let Err(e) = tokio::fs::File::create_new(skip_email_path).await {
eprintln!("Failed to create skip email file: {e}");
let handle = tokio::spawn(async move {
if let Some(skip_email_path) = skip_email_path {
// If the analytics are disabled the directory might not exist at all
if let Err(e) = tokio::fs::create_dir_all(skip_email_path.parent().unwrap()).await {
eprintln!("Failed to create skip email file: {e}");
}
if let Err(e) = tokio::fs::File::create_new(skip_email_path).await {
eprintln!("Failed to create skip email file: {e}");
}
}
if let Err(err) = register_contact_email(&email).await {
eprintln!("Failed to register email: {}", err);
}
});
drop(handle);
}
let analytics =
@@ -179,8 +187,8 @@ async fn prompt_for_contact_email() -> anyhow::Result<Option<String>> {
return Ok(None);
}
println!("Stay up to date! Get monthly updates about new features and tips to get the most out of Meilisearch.");
println!("You can use the `--contact-email` parameter to disable this prompt.");
println!("Get monthly updates about new features and tips to get the most out of Meilisearch.");
println!("Use the --contact-email option to disable this prompt.");
print!("Enter your email or leave blank to skip> ");
std::io::stdout().flush()?;