use std::ffi::CString; use std::os::raw::c_char; #[link(name = "tdjson")] extern "C" { fn td_execute(request: *const c_char) -> *const c_char; } /// Отключаем логи TDLib синхронно, до создания клиента pub fn disable_tdlib_logs() { let request = r#"{"@type":"setLogVerbosityLevel","new_verbosity_level":0}"#; let c_request = CString::new(request).unwrap(); unsafe { let _ = td_execute(c_request.as_ptr()); } // Также перенаправляем логи в никуда let request2 = r#"{"@type":"setLogStream","log_stream":{"@type":"logStreamEmpty"}}"#; let c_request2 = CString::new(request2).unwrap(); unsafe { let _ = td_execute(c_request2.as_ptr()); } } /// Форматирование timestamp в время HH:MM pub fn format_timestamp(timestamp: i32) -> String { let secs = timestamp as i64; // Конвертируем в локальное время (простой способ без chrono) // UTC + смещение для локального времени let hours = ((secs % 86400) / 3600) as u32; let minutes = ((secs % 3600) / 60) as u32; // Примерное локальное время (добавим 3 часа для MSK, можно настроить) let local_hours = (hours + 3) % 24; format!("{:02}:{:02}", local_hours, minutes) } /// Форматирование timestamp в дату для разделителя pub fn format_date(timestamp: i32) -> String { use std::time::{SystemTime, UNIX_EPOCH}; let now = SystemTime::now() .duration_since(UNIX_EPOCH) .unwrap() .as_secs() as i64; let msg_day = timestamp as i64 / 86400; let today = now / 86400; if msg_day == today { "Сегодня".to_string() } else if msg_day == today - 1 { "Вчера".to_string() } else { // Простое форматирование даты let days_since_epoch = timestamp as i64 / 86400; // Приблизительный расчёт даты (без учёта високосных годов) let year = 1970 + (days_since_epoch / 365) as i32; let day_of_year = days_since_epoch % 365; let months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; let mut month = 0; let mut day = day_of_year as i32; for (i, &m) in months.iter().enumerate() { if day < m { month = i + 1; break; } day -= m; } format!("{:02}.{:02}.{}", day + 1, month, year) } } /// Получить день из timestamp для группировки pub fn get_day(timestamp: i32) -> i64 { timestamp as i64 / 86400 }