feat: improved cli

This commit is contained in:
Michel de Graaf
2025-11-11 23:38:59 +01:00
parent 3d6cc9f7cd
commit 98a8f53094
7 changed files with 1434 additions and 36 deletions
-4
View File
@@ -14,7 +14,3 @@ name = "soulseek_rs"
path = "src/lib.rs"
[dependencies]
# Add your dependencies here as needed
# For example:
# tokio = { version = "1", features = ["full"] }
# serde = { version = "1", features = ["derive"] }
+22 -4
View File
@@ -5,7 +5,7 @@ use crate::utils::logger;
use crate::{
actor::{peer_registry::PeerRegistry, ActorSystem},
error::{Result, SoulseekRs},
peer::{ConnectionType, DownloadPeer, NewPeer, Peer},
peer::{listen::Listen, ConnectionType, DownloadPeer, NewPeer, Peer},
types::{Download, FileSearchResult},
utils::{md5, thread_pool::ThreadPool},
Transfer,
@@ -24,7 +24,7 @@ use std::{
time::{Duration, Instant},
};
use crate::{debug, error, info, trace};
use crate::{debug, error, info, trace, warn};
const DEFALT_LISTEN_PORT: u32 = 2234;
#[derive(Debug, Clone)]
@@ -58,7 +58,7 @@ impl Default for ClientSettings {
"server.slsknet.org".to_string(),
2416,
),
enable_listen: false,
enable_listen: true,
listen_port: DEFALT_LISTEN_PORT,
}
}
@@ -161,6 +161,8 @@ impl Client {
PeerRegistry::new(ctx.actor_system.clone(), sender.clone());
ctx.peer_registry = Some(peer_registry);
let listen_sender = sender.clone();
let server_actor = ServerActor::new(
self.address.clone(),
sender,
@@ -175,6 +177,22 @@ impl Client {
},
));
if self.enable_listen {
let listen_port = self.listen_port;
let client_sender = listen_sender;
let context = self.context.clone();
let own_username = self.username.clone();
thread::spawn(move || {
Listen::start(
listen_port,
client_sender,
context,
own_username,
);
});
}
Self::listen_to_client_operations(
message_reader,
self.context.clone(),
@@ -366,7 +384,7 @@ impl Client {
}
}
if let Some(error) = error {
error!(
warn!(
"[client] Peer {} disconnected with error: {:?}",
username, error
);
+35 -2
View File
@@ -1,5 +1,8 @@
use std::env;
use std::sync::Once;
use std::sync::{
atomic::{AtomicBool, Ordering},
Mutex, Once,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)]
pub enum LogLevel {
@@ -13,6 +16,9 @@ pub enum LogLevel {
static INIT: Once = Once::new();
static mut LOG_LEVEL: LogLevel = LogLevel::Warn;
static BUFFER: Mutex<Vec<String>> = Mutex::new(Vec::new());
static BUFFERING: AtomicBool = AtomicBool::new(false);
pub fn init() {
INIT.call_once(|| {
let level = env::var("LOG_LEVEL")
@@ -97,7 +103,7 @@ pub fn log(level: LogLevel, message: &str) {
let minutes = (seconds_in_day % 3600) / 60;
let seconds = seconds_in_day % 60;
eprintln!(
let formatted_message = format!(
"[{:04}-{:02}-{:02} {:02}:{:02}:{:02}.{:03}] [{}] {}",
year,
month,
@@ -109,10 +115,37 @@ pub fn log(level: LogLevel, message: &str) {
level_str,
message
);
if BUFFERING.load(Ordering::Relaxed) {
if let Ok(mut buffer) = BUFFER.lock() {
buffer.push(formatted_message);
}
} else {
eprintln!("{}", formatted_message);
}
}
}
}
pub fn enable_buffering() {
BUFFERING.store(true, Ordering::Relaxed);
}
pub fn disable_buffering() {
BUFFERING.store(false, Ordering::Relaxed);
}
pub fn flush_buffered_logs() {
disable_buffering();
if let Ok(mut buffer) = BUFFER.lock() {
for message in buffer.iter() {
eprintln!("{}", message);
}
buffer.clear();
}
}
#[macro_export]
macro_rules! error {
($($arg:tt)*) => {